Physical Address
London, UK
Physical Address
London, UK
Every architecture decision is a testing decision. When architects design systems without considering testability, they don’t eliminate testing costs – they multiply them. The microservices migration that promised agility, the event-driven platform that promised scalability, the distributed monolith that nobody planned – each of these creates a testability tax that compounds silently across every sprint, every release, and every production incident until it consumes the very engineering capacity the architecture was supposed to liberate.
This tax is rarely visible on any roadmap or budget line. But in my experience, it is one of the single largest hidden costs in modern software delivery.

Here’s a thought experiment. Imagine commissioning a stunning kitchen renovation. The designer specifies handmade tiles, bespoke cabinetry, a marble island. It looks extraordinary. Then a pipe leaks. The plumber arrives, examines the layout, and delivers the news: to reach the fault, they’ll need to remove the island, lift the floor, and dismantle two walls. A thirty-minute repair becomes a three-day project costing thousands.
Nobody blamed the plumber. The problem was an architect who designed for aesthetics without considering how the system would be inspected, maintained, and repaired.
Software architecture makes precisely the same mistake, with alarming regularity.
Systems are designed for functionality, for performance, for scalability. Testability – the ease with which a system can be examined, understood, and verified – is treated as someone else’s problem. Usually the testing teams. And that team inherits an architecture that is expensive to test, slow to validate, and fragile to change.
James Bach, in his Heuristics of Software Testability, identified two foundational dimensions of testability that architects routinely overlook: controllability (how easily testers can manipulate the system into the states needed for testing) and observability (how easily the system’s behaviour and internal state can be examined). When either is compromised by design, testing becomes slower, more expensive, and less effective – regardless of how skilled the testers are or how sophisticated the tooling.
Few architectural trends illustrate the testability tax more clearly than the rush to microservices.
The promise was compelling: smaller services, independent deployment, team autonomy. And for many organisations, microservices delivered real benefits. But the testing implications were rarely costed upfront.
Research consistently shows that testing complexity in microservice architectures increases non‑linearly – often exponentially in practice – as services and integration points multiply. Each new service adds integration points, communication pathways, and failure modes that must be tested. Industry surveys indicate that more than 55% of developers find testing microservices significantly challenging, and debugging in distributed systems takes approximately 35% longer than in monolithic equivalents.
Consider the practical arithmetic. A team migrates a monolithic application into 30 microservices. Each service needs its own test environment, its own deployment pipeline, its own mocking and stubbing infrastructure. Test environments must replicate dozens of interconnected services, databases, and external dependencies. Maintaining synchronisation between these environments becomes a full-time operational burden. Teams often report that environment provisioning and maintenance can consume a significant portion of testing effort (commonly cited in the 20–30% range in practitioner reports)..
The paradox is sharp: the very attributes that make microservices attractive – independence, scalability, team autonomy – are precisely what make them exponentially harder to test. Organisations that adopted the architecture without addressing testability didn’t save money. They displaced costs from development into testing, support, and production firefighting.
That said, these outcomes are not inherent to microservices. Organisations that invest in contract testing, service virtualization, and production-grade observability often avoid much of this complexity. The challenge is that these capabilities are rarely designed in from the start – meaning the cost of testability is paid later, at scale.
Let’s put a number on this using an illustrative model to highlight the potential scale of impact.
Take a mid-sized enterprise running 40 microservices with a combined engineering team of 50 people at an average fully loaded cost of £75,000 per person. Annual engineering spend: £3.75 million.
Environment duplication and maintenance. Replicating production-like test environments for 40 services, including infrastructure, data provisioning, and synchronisation. Conservative industry estimates place this at 15–20% of cloud infrastructure costs. For a business spending £600,000 annually on cloud: £90,000–£120,000 on test environment overhead alone.
Test cycle expansion. In poorly testable architectures, integration and end-to-end testing cycles expand by 30–50% as teams wrestle with flaky tests, environment instability, and cascading service dependencies. For a team spending 30% of capacity on testing activities, that’s an additional £340,000–£560,000 in absorbed engineering time.
Defect escape costs. Reduced testability means reduced defect detection. Production incidents in distributed systems are notoriously expensive to diagnose and resolve. A single significant incident can consume 30–40 hours across engineering, support, and leadership. At four such incidents per quarter, the annual cost in diverted capacity approaches £200,000–£300,000.
Developer velocity drag. When developers cannot easily run and validate their changes locally or in a representative environment, feedback loops lengthen. Industry data suggests developers in low-testability environments spend up to 25% of their time waiting for test feedback or debugging environment issues rather than building features. Across 50 engineers: approximately £940,000 in lost productive capacity.
Total estimated testability tax: £1.57–£1.92 million per year – representing 42–51% of total engineering spend. Not because the testing team is inefficient, but because the architecture was designed without considering how it would be tested.
The Consortium for Information & Software Quality estimates the cost of poor-quality software in the US at approximately £1.9 trillion annually. The testability tax is one of the most significant – and most preventable – contributors to that figure.
| THE LEADERSHIP QUESTION “Are your architects designing for testability, or are your testers paying the testability tax forever?” Ask your architecture and testing leads together: “For our last three major architectural decisions, can you show me the testability impact assessment?” If none exists, your architecture reviews are optimising for build speed whilst ignoring the cost of verifying what you’ve built. That’s designing the kitchen without thinking about the plumbing. |
The fundamental misconception is that testability belongs to the testing team. It doesn’t. Testability is a property of the system, determined at the point of architectural design – long before a tester writes a single check.
Ash Winter and Rob Meaney, in their Team Guide to Software Testability, frame this with admirable clarity: testability enables teams to make changes rapidly and safely with clear feedback loops. It is not a testing concern – it is a delivery concern. A speed concern. A business concern.
When architects design for testability, the benefits cascade through the entire delivery chain. Controllable systems allow testers to isolate components and verify behaviour precisely. Observable systems surface their internal state, making defects visible earlier and diagnosis faster. Decomposable systems enable focused, targeted testing rather than expensive end-to-end orchestration.
The inverse is equally true. Tightly coupled architectures force broad regression testing for every change. Systems without adequate logging or tracing turn defect investigation into archaeology. Interfaces that cannot be mocked or stubbed require full environment replication for even the simplest verification.
Each of these patterns adds time, cost, and risk. None of them are testing problems. They are architecture problems that testing teams are forced to absorb.
This is not an argument against microservices, event-driven architectures, or any particular pattern. Every architecture involves trade-offs. The argument is that testability must be one of the trade-offs explicitly evaluated – not discovered after the fact by a testing team struggling with a system that resists inspection.
Organisations that manage testability well tend to share three characteristics:
Testability is a first-class concern in architecture reviews. Architects are asked: how will this be tested? How will we observe its behaviour in production? How will teams isolate components for verification? If these questions aren’t being asked before design decisions are finalised, the testability tax is already accumulating.
Testing expertise sits alongside architecture expertise. Experienced testers participate in design discussions – not to slow things down, but to identify testability constraints early, when addressing them costs hours rather than months. The most effective organisations treat this as collaboration between crafts, not a gate or a checkpoint.
Testability is measured and tracked. Deployment frequency, test cycle duration, environment provisioning time, flaky test rates, and mean time to diagnose production issues are all indicators of testability health. When these metrics deteriorate, it signals architectural decisions creating downstream drag.
When designing your architecture, ask:
Are we designing for functionality alone – or for verifiability?
Are we optimising build speed – or sustainable delivery speed?
Are we creating agility – or creating a system that resists the very feedback loops agility requires?
Because the difference between a testable architecture and an untestable one is not a testing problem. It’s a business problem – measured in engineering capacity lost, releases delayed, and customer confidence eroded. The testability tax is optional. But only if you choose to address it before the plumbing is buried behind the marble.
Bach, J. (2024). Heuristics of Software Testability, v2.9. Satisfice, Inc. https://www.satisfice.com/download/heuristics-of-software-testability
Winter, A. & Meaney, R. (2021). Team Guide to Software Testability: Better Software Through Greater Testability. Conflux Books.
Consortium for Information & Software Quality. (2022). The Cost of Poor Software Quality in the US: A 2022 Report. https://www.it-cisq.org/
Hui, M. et al. (2025). “Unveiling the Microservices Testing Methods, Challenges, Solutions, and Solution Gaps: A Systematic Mapping Study.” Journal of Systems and Software, 220, 112232.
SoftwareSeni. (2026). “The True Cost of Microservices – Quantifying Operational Complexity and Debugging Overhead.” Industry analysis.
Bach, J. & Bolton, M. Rapid Software Testing Methodology. https://www.satisfice.com/ and https://developsense.com/
Risi, C. (2024). “The Importance of Testability on Software Architecture.” https://www.craigrisi.com/