AI Between Progress and Responsibility - 3 Lessons from the World AI Summit
Disclaimer: Written by Human Intelligence. Human Intelligence can make mistakes, including about people, so double-check it.
Disclaimer: Written by Human Intelligence. Human Intelligence can make mistakes, including about people, so double-check it.
It’s 6:00 AM on a dark, cold December morning. For many, the only motivation is the first cup of coffee. For me, it’s the quiet, thrilling anticipation of a gift about to arrive. My screen glows in the dark, not with work emails, but with the day’s new puzzle from the Advent of Code. As a Senior Test Automation Engineer, my career is built on a foundation of structure, quality, and a healthy obsession with finding flaws before they become problems. As a Christmas enthusiast, I believe the season is about joy, tradition, and persistence. Most people would see these two worlds as separate. I discovered they are the secret ingredients to a top-10 finish in the world’s most beloved coding challenge. My 7th place finish in 2024 wasn’t a holiday miracle — it was the result of a “Test-Driven Christmas”, a methodology that fuses professional discipline with festive passion. This guide will break down that approach and show you how a tester’s mindset can help you master the daily puzzles and embrace the true spirit of the event.
Integration with external services, regardless of their type, is the backbone of modern microservices architecture. The era of huge monolithic applications with a single database is over. Today, implementing even a small business process requires cooperation with other services.
Have you ever found yourself in a situation where a small change in the code breaks tests in a completely different, seemingly unrelated part of the system? Or maybe you‘ve inherited a test suite that is slow, hard to read, and nobody wants to touch it? At Allegro, we believe that good tests are the foundation of high-quality software. In this article, we’d like to share some practices that help us write tests that are not a burden, but a real asset.
I once spent an hour debugging AI-generated code that insisted on using a method that hadn’t existed in a library for three years. Like many developers, I’ve been on a rollercoaster with AI coding assistants. One moment they generate flawless code; the next, they’re confidently hallucinating. After many trials, I’ve landed on a structured workflow that brings predictability and power back to the developer. This isn’t about finding one “perfect prompt.” It’s about creating a universal, repeatable process that uses specialized AI agents to guide collaboration. The goal is to augment your skills and let you focus on architecture, not just have the AI write code for you.
This is a summary of the JavaZone 2025 conference I attended in early September. It’s a conference focused on developers that I enjoyed and highly recommend.
Have you ever wondered what happens with the variables you define in your Golang (Go) programs? Do they exist forever, or are they recycled at some point? Where do they live in memory and how are they managed?
In the previous post - part 2, we covered more common Gradle mistakes and how to fix them. In the last part of this triplet, we will share our favorite Gradle plugins that can help you avoid some of the mistakes we discussed in the previous posts!
Have you ever struggled to identify which REST API is being tested in your integration tests? In this article, you’ll learn a clean and readable way to call REST APIs within your integration tests. The goal is to make the WHEN section of the test clearly show which API is called and in what context, while hiding all technical details.
Training Machine Learning models on big data isn’t just about fitting the model itself — it’s about efficiency at every stage of the process. While much attention is given to optimizing model training itself, the earlier phases can be just as, if not more, critical to the overall performance. In this article, we take a deep dive into what happens before we actually invoke model.fit(), focusing on the data pivoting stage. We are taking you on a journey through various pivoting solutions, exploring both pitfalls and interesting optimizations. The goal is simple: make this process highly efficient — in terms of processing time and memory usage. So, buckle up!
In the previous post - part 1, we covered common Gradle mistakes and how to fix them. After a review and feedback from the community, we decided to extend the list with more tips and best practices.
In this blogpost we want to introduce the topic of using a Large Language Model (LLM) as an evaluator — a novel approach to tackling the complexities of evaluating advanced machine learning systems, particularly in tasks like Automatic Summarization, Text Generation, and Machine Translation, where traditional metrics struggle to capture nuances like cross-lingual accuracy and bias detection.
This article discusses the dual-use dilemma of AI, focusing on China’s approach and the challenges of balancing innovation with security risks, particularly the blurred lines between civilian and military applications.
In this article, we want to share our journey of searching for optimizations in one of Allegro’s main microservices: opbox-web. You’ll read about the issues we had to deal with and how we managed to overcome them — together with a few surprises along the way and even one golden rule broken.
Many companies face the challenge of efficiently processing large datasets for analytics. Using an operational database for such purposes can lead to performance issues or, in extreme cases, system failures. This highlights the need to transfer data from operational databases to data warehouses. This approach allows heavy analytical queries without overburdening transactional systems and supports shorter retention periods in production databases.
When we think about the Circuit Breaker pattern, we instantly associate it with the HTTP client. Just make some annotation or wrapper and proceed with coding. In this article, I will encourage you to use this pattern to resolve business problems. Based on a live example from Allegro I will show you how to use the implementation of CircuitBreaker from Resilience4j library for cases other than HTTP calls.
As part of Allegro Hacktoberfest celebrations, Andamio Task Force (the team responsible for Andamio, a set of common libraries used by most JVM projects at Allegro) posted the following message on our social platform…
Did you know that in October this year, DRY principle will celebrate its 25th anniversary? It was proposed by Andrew Hunt and David Thomas in The Pragmatic Programmer book in 1999. 25th birthday is quite a good reason to celebrate, isn’t it? At least, it’s a good opportunity to bring this principle back into the spotlight and to discuss how to use it properly.
At Allegro, we continuously improve our development processes to maintain high code quality and efficiency standards. One of the significant challenges we encounter is managing code migrations at scale, especially with breaking changes in our internal libraries or workflows. Manual code migration is a severe burden, with over 2000 services (and their repositories). We need to introduce some kind of code migration management.
In one of our core services, the execution of a single unit test took approximately 30 seconds, while a single integration test ranged between 65 and 70 seconds. Running the entire test suite took circa 6 minutes.
Hi, I am Magda and I will tell you a story about coming back to work after a break of 21 months and 2 days. Everything here will be a subjective perspective about my experience.
Are you, as a test automation engineer, tired of Selenium’s flakiness? Are you seeking a better tool to automate your end-to-end tests? Have you heard of Playwright? Perhaps you’ve encountered opinions that it is only worth using within a Node.js environment. I have. And as a tester, I decided to verify if this is true. If you’re interested in the results, I encourage you to read the following article.
This article is a case study of how we improved stability in our critical application. It’s mostly a technical analysis of what happens in fresh Java based instance, how JIT Compiler toyed with us at application start and how we learned to control it.
If you have experience with Event Storming and have ever found yourself wishing there was a way to document the insights gathered during a session, or wanting to communicate the process to other team members, then I have a solution for you. This idea can be expressed in a famous saying: One picture is worth more than a thousand words.
Site performance is very important, first of all, from the perspective of users, who expect a good experience when visiting the site. The user should not wait too long for the page to load. We all know how annoying it can be when we want to press an element and it jumps to another place on the page or when we click on a button and then nothing happens for a very long time. The state of a site’s performance in these aspects is measured by Web Vitals performance metrics and most importantly by a set of three major Core Web Vitals metrics (LCP — Largest Contentful Paint, CLS — Cumulative Layout Shift, INP — Interaction to Next Paint). They are responsible for measuring the 3 things: loading time, visual stability and interactivity. These metrics are also important for the websites themselves because, in addition to the user experience, they are also taken into account in terms of the website’s positioning in search engines (SEO), which is crucial for most websites on the Internet, Allegro included.