The origin of complexity

I have spent some years, preparing for this blog post, explaining the origin of complexity in software:

I think the model can be quite helpful when you reason about software!
It has helped me a lot.

Joakim Tengstrand


I love the references to Out of the Tar Pit and Simple Made Easy.

Hello, Joakim!

Thanks for taking the time to write this, and for posting a link here. I really appreciated the tempo and clarity in which you explained as you progressed. I’ve got some questions, if you don’t mind!

  • How would you define coordination?
  • Would you give some insight into your target audience? You refer to Clojure frequently, is this written for Clojure programmers?
  • What is your relation to polylith? Do you have any experience applying the architecture?

Some of this is perhaps less sterile than the tone of your post, but I’m asking since I’d appreciate some judgement to accompany the tools you describe!


Yes, the paper is brilliant and should be mandatory reading for all developers.

Rich Hickey plays in his own league.

The number of simple solutions that he has invented and/or incorporated in Datomic and Clojure is just amazing!

1 Like

Reality doesn’t need any coordination, it only follows the laws of physics. So in the reality, we have no coordination going on at the lowest level.

The need for coordination sometimes comes in when we try to control the world and make it behave the way we want it to.

Without that will, we could just let things happen without any interference by computers or human beings.

I said in the blog post that size had an impact of the amount of coordination and if order or consistency matters, then it will introduce the need for coordination.

I think the word matters is key here, because if things don’t matter, then we don’t have the need to coordinate things!

The target audience is primarily developers and software architects, but also people that make decisions that may affect these roles, like managers.

No, the blog post is not written for Clojure developers. But it’s a simple and great language that you should consider if you want to reduce complexity in your systems. But the choice is yours.

The target audience is any kind of developer, regardless if you prefer Assembler, C, C++, C#, F#, Java, Scala, Prolog, Kotlin, OCamel, or whatever, it’s the principles of where complexity arise that are important.

My relationship to Polylith is that I’m the inventor of it! Yes, I have used it for three years in production. It decouples our services and systems with the use of components, and the result is less complexity, a more delightful development experience, a more flexible test and production environment and easier testing.

I hope my answers spread some light!


Hey, nice post! I think these insights are the most valuable things i can take out from people who is working with tech for a long time, and although it’s something we need to feel in the bones to actually understand (like trying to build something and hard failing because of complexity introduced without you even knowing) it’s nice to know where to look when things go wrong, and it’s not an IF they go wrong, i know they will, but that’s the fun part right…

Oh, btw i learned back-end programming by reading the Real World example from Polylith, i loved to use it, hope we can spread the word about it!

Hi Mathew!

Nice that you like the post and that you enjoy using Polylith!
It’s nice that you have good experience with it and that you spread the word about it!

Hope the model in this blog post can be helpful too! :slight_smile:

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.