Complex Designs Are Easy. Simple Systems Are Hard.

March 4, 2026 | Kyle Miller

More layers. More abstractions. More services. More configuration. It feels productive. The architecture diagram looks impressive. The tech talks write themselves.

But every layer is a failure point. Every abstraction is something a new hire has to understand. Every service boundary is a network call that can timeout, fail, or behave differently under load.

Simple systems are harder to build because they require you to say no. No to “what if we need this later.” No to the clever pattern you read about last week. No to the abstraction that handles a case you don’t have yet.

Here’s a test I use. Can a new developer understand this system in a week? If the answer is no, it’s probably too complex for what it actually does. Not every product needs microservices. Not every API needs an abstraction layer. Not every database needs a caching tier.

I’ve watched teams spend months building sophisticated architectures for products that serve 200 users. The architecture could handle millions. But they didn’t need millions. They needed to ship features faster.

Sophistication is easy to add and almost impossible to remove. Start simple. Stay there as long as you possibly can.

Want more like this?

Join CTOConnect for monthly office hours, recorded sessions, and direct access to experienced technical leadership.

Start Your 30-Day Free Trial