I am not a software writer, at least not only. Most of us aren't.

When dhh (David Heinemeier Hansson) established his notion of most of us being software writers in his Railsconf 2014 Keynote he did it to distinguish himself, and many others, from software engineers, who were, so he postulated, concerned with optimizing for speed and test coverage.

The hat metaphor

He also talked about hats. Us programmers are wearing different hats at different times, in order to do what we do. But most of the time we would be wearing the hat of a software writer.

I can identify with the hat metaphor, as they are many different parts to the things we do. We need to fill different roles and take often orthogonal views on the subject. But there are more than the two hats...

(non-complete) list of programming hats

  • software writer:
    Writes code that does x.
  • software engineer:
    Writes code that does x, but is optimized towards memory efficiency and speed. (That is the reason why metrics are somewhat important, take a look at dhh's Railsconf 2014 Keynote for more information on this)
  • software documenter:
    Writes documentation for software. She also specifies software.
  • software tester:
    Writes tests for software, which was documented/specified by the software documenter.
  • software artist:
    Writes code that does x, but optimizes towards elegance.
  • software maintainer:
    Tries to understand what the hell the person who wrote the code meant, fixes bugs, improves code with regard to readibility, memory efficiency and speed.


In my opinion the hats of the software writer, software engineer and software tester are generally combined in the term of programmer. Although programmer is actually a term that is considered to be pretty hard to define, most people seem the expect at least the roles of these three hats to be incorporated in a programmer.

If we however try to define ourselves, i personally think that the best one is actually (again) one that actually exists: developer.

Why? A developer is actually the incorporation of all these hats presented in the list above. A developer needs to be able to quickly switch between views and aspects. And most importantly, a developer does not necessarily have to be a (computer-) scientist. But a developer has to trade-off memory consumption with speed, should write good documentation for her software, should test it, produce elegant and readable code, and understand what someone else wrote. And isn't that the one thing we really are?

If someone asks me what general hat i am wearing, i'm telling them:

I am a web-developer.

And that is good enough for me.