"Simple, Not Easy" is a new, in-progress series of topics focused on the problems of drastically increasing complexity in the modern software development. Instead of trying to solve the problems of too many failing, complex, and costly abstractions by adding even more complexity and bloat, let's try to move in the opposite direction.

A little background: I've been working on software development for over two decades - with various tech stacks at different levels and positions (development, system administration, architecture; small companies, big companies, my own projects). I've seen technologies come and go and too many times experienced the horrors of working on the software written by resume driven development and cargo cult programming followers.

Production software at most places today is often a huge, experimental ball of mud with ever increasing tower of duct-tape fixes upon duct-tape fixes.

To try to understand the problem, we need to dig a bit deeper into the underlying issues.

Snake-oil marketing

Two first comments in this HN thread: Will Kubernetes Collapse Under the Weight of Its Complexity? sums this issue well:

This whole image, to me, represents a big problem with software engineering today:
The industry is full of engineers who are experts in weirdly named "technologies" (which are really just products and libraries) but have no idea how the actual technologies (e.g. TCP/IP, file systems, memory hierarchy etc.) work. I don't know what to think when I meet engineers who know how to setup an ELB on AWS but don't quite understand what a socket is...

The overemphasis on products is a real problem because it makes the industry so susceptible to marketing snake-oil.
Who would trust a doctor who proclaims his expertise in terms of brand names: "I've got ten years of experience in Cipro and Amoxil. Lately I've been prescribing Zithromax too! It's exciting to write that big Z. I really like Pfizer's community, their Slack is so helpful."

Unfortunately, it's incredibly easy to sell the snake oil in our industry today and popular tech blogs are incredibly successful in that.

Short vs. long term thinking

Another aspect of the problem is the short vs long term thinking. Our industry is obsessed with getting results as quickly as possible, no matter what are the long term costs. Designing things that will survive the test of the time is not easy, it takes a lot of time and effort.

Simple vs. easy

This is directly related to the another important concept: easy vs simple thinking. People often conflate this two words, but they are very different. Complex means intertwined, braided together, the opposite of simple. A lot of things in software development these days are easy to start with, but later (when that buried complexity rears its ugly head) turn into painful and costly mess.

These problems are nothing new, but it's becoming much, much worse.

Our whole society is obsessed with making everything bigger and more complex. It's not surprising that this is also reflecting on the software development. The purpose of this series is also to inspire you to try to approach things in a different way. To quote the great Ernst F. Schumacher:

"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction."

Topic List >