On software development metaphors, programmers and engineers
Tags: culture, opinion, development, discuss
Published: 2019-09-29 15:43:49


A [tweet about how engineers should not write code (Spanish)][1] made me revisit a subject I used to enjoy: metaphors of what software development is about. There are only one million articles about this, so let's add a new one.

The *software is like engineering* metaphor did more harm than good years ago. My favorite take on its problems is [this article by Martin Fowler][3]. Another great one is the [*gardening* metaphor][4] by the pragmatic programmers. Aiming for designs that make software construction predictable doesn't fly, and that is precisely what the term *software engineering* evoked back in the day.

I don't think this misconception is prevalent today, but there are still many believers in the old engineering metaphor. I saw a large government agency organize its whole development process based on this metaphor in 2013, which, not surprisingly, turned out being a very costly horror story.

A related discussion is about **titles**: programmers, developers, engineers, architects, etc. As it often happens with fuzzy terms, different people assign different meanings to each, so they become useless. For example, [Github](https://github.com) has engineers, [Basecamp](https://basecamp.com) has programmers and [Shopify](https://www.shopify.com) has developers. Do they employ disjoint groups of people? Or are they just using different terms for the same role?

If we all agreed on precise meaning for each term, they might be useful, but the thing is that we don't. I think a much saner approach is to **consider them all synonyms and focus on skills, background, and experience** as much more relevant indicators. This way, we also prevent people from using titles like badges of honor that magically separate ones from others. E.g., an *architect* makes high level technical decisions, mere *programmers* can't.

On a more constructive note, [David Heinemeier Hansson differentiated][5] between creating information systems (writing metaphor) and building the infrastructure that supports them (engineering/hard science). I loved the *writing* software metaphor, as writing things down has many similarities with coding. Also, I bet many *I-am-an-engineer-not-a-programmer* developers would find it shocking to hear Rails creator rather identify with a software writer 😂.

Finally, while I like metaphors and the insight they provide, I have come to appreciate considering [software development like... software development][6]. It highlights the unique aspect of what we do as a discipline, and it helps to avoid digging ourselves into holes for taking metaphors too far.

> Given the staggering quantity of data we have on software projects of all sizes and varieties, we can state categorically that software development is like software development. Period.

[1]: https://twitter.com/CPITIA/status/1172801299886333953
[2]: https://www.computerworld.com/article/2574010/the-roots-of-failure-in-software-development-management.html?page=3
[3]: https://www.martinfowler.com/articles/newMethodology.html#PredictiveVersusAdaptive
[4]: https://www.artima.com/intv/garden.html
[5]: https://www.youtube.com/watch?v=9LfmrkyP81M
[6]: https://www.computerworld.com/article/2574010/the-roots-of-failure-in-software-development-management.html?page=3