I've been writing about the SOLID principles for over a decade. I built InversifyJS because of them, I wrote about implementing them with the onion architecture, and just recently I argued that they are universal design principles that appear far beyond object-oriented programming. Yet something has always felt missing, not from the principles themselves, but from the conversation around them.
SOLID tells you how to write good components. It does not tell you how to compose those components into a system whose shape can still change.
The gap
Imagine a perfectly SOLID codebase. Your UserRepository depends on an abstraction. Your EmailService has a single responsibility. Your OrderProcessor is open for extension and closed for modification. Everything is clean.
Then your CTO says: "We need to extract user management into its own microservice."






