Healthy Software at Scale: Blueprints for Adaptable Architecture
architecture microservices devops team topologies fast flow generative AI developer experienceContact me for information about consulting and training at your company.
The MEAP for Microservices Patterns 2nd edition is now available
Recently I joined Lukas Egger on SAP Signavio’s Process Transformers podcast to talk about what makes software adaptable in a world that’s only getting faster and more chaotic.
Here’s a brief summary of some key points we discussed.
Architecture is about change
Good architecture isn’t just about runtime qualities like scalability or availability.
It also shapes how easy it is to change software tomorrow based on what we build today.
Software must satisfy two constituencies: its users and its developers. The architectural decisions developers make today determine how quickly teams can learn and adapt in the future.
Feedback loops drive adaptability
Modern business operates in a volatile, uncertain, complex, and ambiguous world.
To survive, organizations need fast feedback loops—from idea to production to learning.
Architecture either accelerates or throttles those loops.
Shorter loops mean faster learning and faster adaptation.
Loose design-time coupling
A central idea is loose design-time coupling — first articulated by David Parnas in the 1970s.
When a change can be made within one team, without coordination meetings across many teams, flow improves dramatically.
Tight coupling across teams leads to endless alignment meetings and slows everything down.
The success triangle
Delivering software rapidly, reliably, and pleasantly—what I call fast flow — depends on requires the success triangle, which consists of three elements:
- Process: adopt DevOps principles and practices (as in The DevOps Handbook).
- Organization: structure around Team Topologies—loosely coupled, autonomous teams.
- Architecture: design systems that support both of the above.
Monoliths vs. microservices
A good monolith can outperform a bad microservice design.
A monolith is a single deployable unit with one deployment pipeline.
A microservice architecture decomposes functionality into independently deployable services, each with its own pipeline.
The key distinction isn’t fashion — it’s team autonomy and feedback-loop scalability.
A single pipeline works well for a few teams, but eventually becomes a bottleneck.
Microservices—with many pipelines—scale feedback loops as the organization grows.
Measuring flow
To know whether you’re on the right track, start with DORA metrics:
- Lead time – from commit to production (aim for hours, not months).
- Deployment frequency – how often each developer deploys (ideally daily).
- Change failure rate – how often a change causes issues (should be low).
- Mean time to recovery – how fast you can fix production problems.
Track developer experience metrics too: cognitive load, feedback speed, and ease of deployment all matter.
Deploy continuously, release when ready
Separate deployment (pushing code to production) from release (making it visible).
Use feature flags to deploy safely and release on your own schedule.
Amazon reportedly deploys every 0.6 seconds—proof that continuous deployment and stability can coexist.
AI won’t replace developers—it amplifies disciplined ones
AI can boost productivity but only under human supervision and architectural discipline.
Without strong fundamentals—TDD, clean design, and feedback loops—it simply produces a pile of technical debt.
AI coding is another reminder that good architecture and disciplined software development still matter.
Final thought
The world will keep getting crazier.
The best way to keep up is to build architectures, teams, and processes that shorten feedback loops—from code to customer and back again.
That’s the blueprint for healthy software at scale.
Based on my conversation with Lukas Egger on the Process Transformers podcast, Episode 31.