This blog post, continues the series I am writing for bring AI into the SDLC.
Some simple bits and pieces about Software Architecture. Generally, a JVM is somewhere...
Tuesday, July 28, 2026
Indicating Your Design Debt to AI Coding Tools
Please check out my blog post which discusses how to annotate design debt so AI Coding tools don't accidentally reproduce architectural anti patterns.
Compare & Contrast ArchUnit and AI Coding Tool steering .md files
Checkout out my blog post which compares ArchUnit and .md steering files.
Sunday, April 20, 2025
Book Review: Principles of Software Architecture Modernization
One of the more interesting reads in the Software Architecture space right now is Diego Pacheco's and Sam Sgro's 'Principles of Software Architecture Modernization' (published by BPB Publications December 2023).
After introducing some foundational concepts of distributed software architectures, the book dives into a particularly interesting topic: "The Distributed Monolith." This term describes an anti-pattern in architectures attempting micro-services where the functionality is neither isolated nor modular enough to realize the benefits of decomposed micro-services. The idea was popularized by Ben Christensen (author of Hystrix) in his talk, "Don't Build a Distributed Monolith." At its core, the concept highlights a common misconception: distributing a monolithic system will resolve its inherent complexity. In reality, without proper abstractions, boundaries and separation of concerns, complexity not only persists but worsens in a distributed system. Modularity cannot be magically achieved—it requires skill, whether systems are co-located or distributed. This is something I completely agree with. It's both tragic and unfortunate as it is difficult to objectively measure how modular or coupled your system is and is something that just requires a well trained eye.
Sgro and Pacheco identify three key traits of a poorly designed system:
Lack of Isolation: Is there excessive sharing of libraries?
Lack of Independence: Can components evolve independently?
Distributed Complexity: Is there a lack of stable contracts and a clear separation of concerns?
StackOverflow is a data center-hosted monolith on 9 servers and serves 2B+ monthly page views. They even removed their Redis caching layer without degradation
Uber reported 5 - 10% overhead by running Cassandra on Containers
LinkedIn migrated its REST APIs from JSON to Protocol Buffers resulting in a 60% latency reduction and an 8% improvement in resource utilisation
Sunday, March 2, 2025
Simon Brown C4
En route to Dev Nexus in Atlanta , Simon Brown was in Dublin on Thursday evening (2025-02-27) for a very interesting talk about his C4 model for Software Architecture. The first of the evening was an overview of C4 and then after the pizza break, Brown's second talk was about mechanisms to help identify components in existing code bases in order to help you reverse-engineer meaningful component diagrams. The event was hosted by the Dublin Java User's group.
I first came across C4 a few years ago as I felt the various classical approaches to software architecture, such as:
Philip Krutchen's, "4 + 1" (1995)
Software System Architecture, (Rozanki and Wood, first edition 2005)
Hofmeister’s Architectural Method (Applied Software Architecture, Christine Hofmeister, Robert Nord, and Dilip Soni, 1999)
Give the diagram a name
Give every box a terse description
Say what the technology it is: Spring Boot, J2EE app.
Components
Code