Architecture

Anti-patterns in system architecture and design that block continuous delivery.

These anti-patterns affect the structure of the software itself. They create coupling that makes independent deployment impossible, blast radii that make every change risky, and boundaries that force teams to coordinate instead of delivering independently.


Untestable Architecture

Tightly coupled code with no dependency injection or seams makes writing tests require major refactoring first.

Tightly Coupled Monolith

Changing one module breaks others. No clear boundaries. Every change is high-risk because blast radius is unpredictable.

Premature Microservices

The team adopted microservices without a problem that required them. The architecture may be correctly decomposed, but the operational cost far exceeds any benefit.

Shared Database Across Services

Multiple services read and write the same tables, making schema changes a multi-team coordination event.

Distributed Monolith

Services exist but the boundaries are wrong. Every business operation requires a synchronous chain across multiple services, and nothing can be deployed independently.