The Power of Feedback: Unlocking Continuous Delivery through Test-Driven Development
Software teams are rethinking testing strategies, and the traditional approach is being challenged. Ola Hast and Asgaut Mjølne Söderbom, in their QCon London talk, revealed a bold testing philosophy that might surprise many. They advocate for a shift away from comprehensive end-to-end testing, instead emphasizing the power of feedback from production.
But here's where it gets controversial: Hast and Mjølne Söderbom's team trust their unit and integration tests more than end-to-end tests. They achieve this through a meticulous separation of concerns, modularity, abstraction, and low coupling, resulting in a robust domain-driven design. This approach, combined with Test-Driven Development (TDD), pair programming, and feature toggles, forms the backbone of their continuous delivery strategy.
And this is the part most people miss: By testing in production, they argue, you get the most authentic feedback. Mjølne Söderbom explains that test environments often fall short due to long supply chains and poor data quality. In contrast, production provides the most accurate feedback, enabling them to quickly identify and fix issues.
The team has been deploying small changes frequently for years, using feature toggles to manage risk. If a problem arises, they can swiftly locate and resolve it, or roll back changes. This process, Hast reveals, has been a cornerstone of their success, allowing them to iterate and improve continuously.
Pair programming and TDD are at the heart of their workflow, fostering instant code reviews, easier refactoring, and fewer bugs. Hast and Mjølne Söderbom believe that the difficulty in testing code often indicates design flaws, and TDD helps address these issues early on. They emphasize that TDD is not just a testing technique but a powerful design tool.
The team's unique approach raises an intriguing question: Is the traditional reliance on end-to-end testing overstated? Could production feedback, when coupled with robust unit and integration tests, provide a more efficient and effective testing strategy? Share your thoughts in the comments below, and let's explore the boundaries of modern software testing together.