Why Building Simple Systems is Hard?

Why Building Simple Systems is Hard?

Going back to my previous post about achieving architectural simplicity, I'd like to ponder the question why is it so complex to build simple systems?

We can spot two main reasons for this difficulty: it requires (1) deep technical knowledge and (2) discipline.

Deep technical knowledge is needed in order to be able to capture the essence of the problem, identify what is really necessary in order to solve it and ignore all the rest.

Discipline is important to preserve the solution simplicity against potential attempts to add “nice-to-have features” that complicate the design.

This quote by Edsger W. Dijkstra expresses it very succinctly:

“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.”


Deep technical knowledge and education for avoiding unnecessary complexity are especially important nowadays with the wide usage of cloud computing.

You're offered a huge toolbox of cloud services and tools, where you can easily add more moving parts with just in a few clicks or a simple script. Cloud service providers are constantly adding new capabilities in virtually every domain of the cyber space.

Catching up with this pace and being able to use those tools wisely is not trivial task, which explains why it gave birth to the whole eco-system of start-up companies that offer professional and onboarding services.

And indeed complexity sells better, we see it in descriptions of many solutions, where their traction is amplified by usage of buzz-words such as, "artificial intelligence" , "machine learning", "IoT" and others.



To view or add a comment, sign in

More articles by Mark Mishaev

  • Thoughts About Event-Driven Architectures

    Introduction I was recently pondering about event-driven architectures, their benefits, downsides and most common…

  • Essential Complexity in Systems Architecture

    This week we had really unique event in Checkmarx - GeekDays, in which RnD and Product folks presented live talks in a…

    2 Comments
  • Containers Security: Clair vs. KICS

    Introduction We witness containers rapidly becoming native choice for running cloud and on-premises workloads…

  • GitOps and IaC Security

    In this post, I'd like to give a brief overview of GitOps framework and how IaC security fits into GitOps concept…

  • Infrastructure Code Testing

    Introduction A lot of software design principles, such as "Keep It Simple, Stupid" (KISS), "Do-not Repeat Yourself"…

  • Decision Making in Everyday Leadership

    Many of us live in very dynamic business environments, where things happen quickly and we frequently find ourselves in…

    1 Comment
  • 10 signs to know if you're good at leading teams

    This checklist may help us to quickly assess if we're doing a good job as managers. Ask yourself these questions: Can…

    1 Comment
  • Effective One-on-One Meetings

    We can't overstate the importance of one-one-one (1-1s) meetings with our employees and team members. They are a…

    5 Comments
  • Building High-Performing Teams

    Building productive and healthy engineering teams is an art. It entails a right mix of knowledge, technical expertise…

    4 Comments
  • Comfort Zones and Local Optima Problem

    We're all challenged to get out of our comfort zones, set ambitious goals and engage in activities where we'll be…

Explore content categories