All blogs / Software / engineering practice
blog.allegro.tech
Welcome to our technology blog. We use Open Source solutions on a daily basis here at Allegro. Why not work on our karma and give something in return?
Software / engineering practiceFrontend / CSS / browsersTesting / QAAI / ML
- Posts
- 266 from 1 Sep 2014 to 21 Oct 2026
- Posting
- monthly (21 in the last year)
- Kind
- company blog
- Feed
- https://blog.allegro.tech/feed.xml
- Also at
- https://allegro.tech/
2026 15
- Knowing When to Quit
- Automating Search Relevance Assessment at Scale with LLM-as-a-Judge
- Back to the data center in 2026 (just a little bit)
- How we achieved independent deployments in a micro-frontend architecture
- How AI Agents Halved the Effort of Migrating 500 Gradle Modules from Koin to Hilt
- Saying Goodbye to the Endless Excel Spreadsheets: How a Bottom-Up Drive Brought Us a New Test Management Tool
- Finding the Needle: Taming 150,000+ Backstage Entities with a Type-Safe Search and Command Palette
- Spec-Driven Development (SDD) — best practices (so far)
- GeeCON 2026 — a recap
- Two schools of TDD explained
- Thoughts on the Boiling Frogs 2026 conference
- Static code analysis in Kotlin — tools overview
- How to stub external services in integration tests
- Battle-testing Lynx at Allegro
- Starting a New Service: From Naming to Structuring the Project
2025 16
- The Seven Deadly Sins of Test Automation
- Transactions Aren’t Enough: The Need For End-To-End Thinking
- Quickstart: Run an MCP Server on JVM and Integrate with Copilot
- AI Between Progress and Responsibility - 3 Lessons from the World AI Summit
- Test-Driven Christmas — A Guide to the Advent of Code Mastery
- From complexity to simplicity: How to write integrations with external services
- Unit testing revisited
- Taming AI Chaos: A Structured Agent Workflow for Predictable Coding
- JavaZone 2025 report
- How the Garbage Collector Works in Go and How It Affects Your Programs
- Popular Gradle mistakes (and how to avoid them) - part 3
- How to call a REST API in integration tests
- Unlock faster data processing for Machine Learning: reducing pivoting time from hours to minutes
- Popular Gradle mistakes (and how to avoid them) - part 2
- How to create a synthetic annotator? The process of developing a domain-specific LLM-as-a-Judge.
- The AI dual-use dilemma using the example of China
2024 22
- How we saved over 60% of k8s resources in our frontend platform
- Automating Periodic Data Transfer from an Operational Database to a Data Warehouse
- Circuit Breaker not only for HTTP calls! (based on resilience4j)
- Popular Gradle mistakes (and how to avoid them)
- Do repeat yourself! What is responsibility in code?
- Automating Code Migrations at Scale
- Accelerate test execution in Groovy and Spock
- How to get back to programming after a more than 1.5 year gap - subjective thoughts and tips
- Migrating Selenium to Playwright in Java - evolution, not revolution
- The noisy JIT Compiler
- BPMN: The Key to Understanding Business Processes
- INP — what is the new Core Web Vitals metric and how do we work with it at Allegro.
- A Mission to Cost-Effectiveness: Reducing the cost of a single Google Cloud Dataflow Pipeline by Over 60%
- Engineering culture of Allegro & Allegro Pay: Pragmatic Engineer Score
- REST service client: design, testing, monitoring
- Unveiling bottlenecks of couchbase sub-documents operations
- Ten Years and Counting: My Affair with Microservices
- Unlocking Kafka's Potential: Tackling Tail Latency with eBPF
- Tired of repetitive tasks?! Go for RPA!
- Don’t bother: it is only a little expired
- WCAG 2.2 is here! And what about 3.0?
- Embed multicolor icons using a single DOM element
2023 13
- Clever, surprised and gray-haired
- How does B-tree make your queries fast?
- Beyond the Code - An Engineer’s Battle Against Knowledge Loss
- Online MongoDB migration
- The Acrobatics of Switching Between Management and Engineering
- From 3TB to 100GB: A Cost-Saving Journey in Database Maintenance
- Debugging hangs - piecing together why nothing happens
- Trust no one, not even your training data! Machine learning from noisy data
- Dynamic Workload Balancing in Hermes
- How neuroscience can help you as a software engineer - motivation
- Automating the Cloud — hiding the complexity of hardware provisioning
- Onion Architecture
- How we solved a mobile application performance issue with a few lines of code?
2022 19
- Transactions in MongoDB
- Vanilla JS is not dead! Microfrontends without web performance issues.
- Probabilistic Data Structures and Algorithms in NoSQL databases
- Example of modularization in Allegro Pay Android application
- How to efficiently write millions of records in the cloud and not go bankrupt — an Azure CosmosDB case study
- MBox: server-driven UI for mobile apps
- How to facilitate EventStorming workshops
- GC, hands off my data!
- Exploring GraphQL’s performance tradeoffs
- How to include refactoring into product development roadmap? Reducing technical debt inspired by real options identification
- Turn-Based Offline Reinforcement Learning
- An Agile team in its natural habitat
- Visual thinking
- Android UI testing in Allegro Pay organization
- The War in Ukraine
- Make your tests readable by example
- Why should we rewrite enzyme.js to react-testing-library and how to do that?
- How do coroutines work internally in Python?
- Shrinking the size of a monorepo
2021 25
- Evaluating performance of time series collections
- Clean Architecture Story
- Which skills to choose in order to be more valuable
- Moving towards Micronaut
- OAuth rate-limiting
- How we refactored the search form UI component
- Comparing MongoDB composite indexes
- How to ruin your Elasticsearch performance — Part II: Breaking things, one at a time
- How to ruin your Elasticsearch performance — Part I: Know your enemy
- Evolution of web performance culture
- How to turn on TypeScript strict mode in specific files
- Splitting data that does not fit on one machine using data partitioning
- CSS Architecture and Performance in Micro Frontends
- Making API calls a seamless user experience
- One task — two solutions: Apache Spark or Apache Beam?
- How to make context logging in Python less cumbersome
- Measuring Web Performance
- Domino - financial forecasting in the age of global pandemic
- My first days at Allegro
- Kotlin - a language for everyone and for everything. Even scripts.
- Digging into Allegro, or how I started my testing career
- Finite-state machines made easy
- My first days at Allegro
- Implement stateless authentication like a pro using OAuth: A 100% correct approach
- Impact of data model on MongoDB database size
2020 20
- Speeding up warm builds in Xcode
- Speeding up iOS builds with Bazel
- Big data marketing. The story of how technology behind Allegro marketing works.
- Testing React applications with Jest and Enzyme
- BigFlow — a Python framework for data processing on GCP
- Sureness, or how many tests do we need?
- Retrieving application state
- The power of kata
- Using ESLint to improve your app’s performance
- Common code approach: from rich libraries to rich environment
- Persisting application state
- Hexagonal Architecture by example - a hands-on introduction
- Migrating to Service Mesh
- Machine Learning + Agile Manifesto = ?
- The problem of immutability in Java
- Understanding accessibility
- Using dotnet new templates to streamline microservices development
- Making Webflux code readable with Kotlin coroutines
- How to manage Spring Boot services configuration on GCP
- Design for failure - multiple layers of processing to protect against failures.
2019 15
- Allegro Tech Meeting 2019 — the 12th edition
- Grouping and organizing Java classes
- Team tourism at Allegro — part 3 — more case studies
- Performance of JavaScript optional chaining
- Team tourism at Allegro — part 2 — case studies
- Share what you (don’t) know — how to accelerate your career in IT before it even started
- Team tourism at Allegro
- Page visibility and performance metrics
- A/B testing good practice – calculating the required sample size
- Migrating a microservice to Spring WebFlux
- Allegro culture — Tech Leaders’ Meeting 2019
- Hermes 1.0 released
- [April 1st] From PHP to Java and back again: a retreat from microservices
- Why Allegro Ads chose TypeScript
- Making friends with legacy code
2018 15
- Java 11 and beyond at Allegro
- It’s all about naming
- Turnilo — let’s change the way people explore Big Data
- From Simple to Fast - Custom Solr Document Collapsing
- Postmortem — why Allegro went down
- Squeezing performance out of Elasticsearch
- From Java to C# and back again
- Static linking vs dyld3
- From Java to Kotlin and Back Again
- A comedy of errors. Debugging Java memory leaks.
- Spring @WebMvcTest with Spock Framework
- Intuition Engineering at Allegro with Phobos
- Psychological needs at work
- How to approach testing in development process?
- Mesos Executor
2017 7
2016 24
- Responsible work with MongoDB
- Deep learning for frame detection in product images
- API crafted for mobile
- Self-contained UI tests for iOS applications
- Advances in Information Retrieval and Allegro use case at SIGIR 2016
- opel — asynchronous expression language
- Performance and Availability pitfalls in the Microservices Architecture — CQK Top 10
- Thread pools — CQK Top 10
- JVM Garbage Collection — CQK Top 10
- Caching — CQK Top 10
- Are code reviews worth your time?
- Allegro OpenSource — embedded-elasticsearch
- The iOS bug chase
- Kotlin null safety and its performance considerations -- part 1
- Meet Retrofit2
- Writing a very fast cache service with millions of entries in Go
- Minimum Viable Product – already a cliché or a misunderstood concept?
- Managing environment inspired by Spotify
- Professional approach pays off
- Managing Frontend in the Microservices Architecture
- Integrating Android project with Codecov
- Books you should read: The Pragmatic Programmer
- The great adventure of migrating Allegro infrastructure to new Data Center - DC5
- Microservices and macro mistakes
2015 53
- Mini rant: V for Viable
- Let your tests tell a story
- Agile Teams — where to start?
- Real-time Web Application with Websockets and Vert.x
- Mini rant: gambling at work
- There is more to logging than meets the eye
- Comparison of WebDriver-based solutions for test automation
- Scrum-ban applied
- Scaling Graphite
- Blur background under Android common UI elements
- Introducing Slinger - deep linking library for Android
- Allegrotech.youth – success story of an education program
- Spark and Kafka integration patterns
- Martin Thompson and other IT Stars at Allegro
- Testing server faults with Wiremock
- PyWaw Summit - a Python conference for everybody
- Allegro OpenSource: Camus Compressor
- Allegrotech.youth – our educational project
- Fast Data Hackathon
- WebP at Allegro
- 7 reasons why Java developer should consider learning Groovy
- Is overmocking bad? And if it is, then why?
- An introduction to thread pools in Java
- How to write JAX-RS Client fast
- Allegro OpenSource: Elasticsearch reindex tool
- Automated tests with Geb, Spock and Groovy
- Diagnosing a MongoDB issue
- Testing in production... wait, what?
- How to UX without interface
- Spring Boot Starter Handlebars
- A flight plan for deploying a Node.js application
- Allegro OpenSource: tradukisto
- To the woods we go! To work we go!
- Summarising the 2nd edition of BrainCode Mobi
- Better coding with coaching
- Frontend made simple
- Adopting Gradle at Allegro — a success story
- Playing with fire — a Scrum experiment
- Browser Fingerprinting — introduction
- Acceptance testing with JBehave and Gradle
- Digging into the system
- Inner energy — you are not a perpetual motion machine
- Search Engines at Allegro — Part I — introduction
- TDD is not dead yet — GeeCon Poznan 2015
- Evolution of our platform architecture
- High performance with low-level tools
- Using Jersey model processor for supporting edge-service features
- Content headers or how to version your API?
- Eight steps to building Minimum Viable Product with Story Mapping
- Working with legacy architecture
- We were at QCon SF 2014
- A look at Swift functions
- Post-mortem report on 23-24, October 2014 failure
2014 22
- We visited Devoxx 2014
- Aspects in Spring
- Designing RESTful API
- Big Data Spain 2014 review
- Swift Method Dispatching — a summary of my talk at Swift Warsaw
- How to migrate to Java 8
- Allegro engineers at PyWaw meetup
- Quick introduction to Swift
- We were on re:inventure (AWS conference summary)
- Testing RESTful services and their clients
- Don’t lose your user’s context when installing Android applications
- Increasing Capacity and improving Resilience with asynchronous request processing, part I
- Hadoop World 2014 New York from a developer’s point of view
- Asynchronous REST Services with JAX-RS and CompletableFuture
- Story about delivering valuable products quickly, part I
- JDD.14 dev contest solutions
- Meet Allegro engineers at JDD, October, 13-14th, Kraków
- The Memory Game
- Java Testing Toolbox
- Allegro OpenSource: axion-release-plugin
- Cassandra Modeling Kata
- j.Piknik 2014 - have a beer with Allegro engineers