Jorge Manrubia

August 11, 2023

Difficult and complex

There is complex and there is difficult, they are not the same. 

Being able to run a marathon is very difficult. But what you have to do to prepare is simple. A small sheet of paper is enough to describe the steps. You will need tremendous effort and discipline - so it’s hard - but it is simple.

Software development is different: it is also complex.

A common theme in my articles on how we do Rails at 37signals is how facing software development with rigid recipes is naive and counterproductive. A good example is services: using a service for everything is a simple idea; applying domain-driven design and object orientation is not. Another manifestation is banning techniques because they can be harmful: concerns, accessing the database from models, callbacks, globals, etc. Ironically, the alternative critics usually recommend for those is using services.

In software, you must take a Babylonian body of knowledge, combine it with your own experience, and apply the result to make countless daily decisions. And of all this for a problem you can’t understand without solving it first. Rigidity doesn’t work, and – because this is a game of intricate complexity – it yields more harm than benefit. You need to embrace nuance.

Mind the recipes you follow.

About Jorge Manrubia

A programmer who writes about software development and many other topics. I work at 37signals.

jorgemanrubia.com