We Need a Better Term Than “Software Engineer”`
Words matter, and the two words in “Software Engineer” are both incorrect. Let's move towards something better.
I read Len Martin’s article Don’t Be a Programmer, Be a Software Engineer this morning.
It’s hard to argue with the content. Successful developers must take a holistic view of their job; simply writing code doesn’t hack it. And that surprised me a little, because when I see the words Software Engineer, I generally expect the worst.
During the 80s and 90s, when people ask me what I do, I’d say “I’m a coder.” This was simply a kind of inverse snobbery: at the time, developers had job titles such as Senior Database Analyst or Technical Project Lead.
But I’ve come to realize that what we call ourselves can change our view of what we do.
And calling ourselves Software Engineers hurts us in two ways.
It’s Not About Software
As Leon Martin points out, the goal of developers is not writing software; it’s delivering value to the users of that software.
In fact, a good developer can sometimes manage to deliver that value without actually writing a line of code. Developers occupy a unique position in most companies, sitting at the confluence of many business units and their customers. Developers often have a broader picture of how the company works and how things interact that many of the business’ managers. Many times I’ve seen a manager deliver a requirement to a team, only to have the team respond, “we can do that, but why not just…?”
So, if we’re engineering anything, it’s value, not software.
It’s Not About The Popular Interpretation of “Engineering”
This is where the fist fights break out.
The word “engineer” triggers visions of professionals who use historical information to create things. A structural engineer knows the strength of materials and joints, and knows the various rules (and rules of thumb) dictating how a result can be built. A chemical engineer knows the properties of compounds along with the ways these compounds interact. In popular use, the word engineering means responsibly and economically building from a set of known things. Britannica encapsulates it as “the application of science to the optimum conversion of the resources of nature to the uses of humankind,” which is clearly wrong: no right thinking resource convertors would ever claim what they were doing could never be improved.
A while back, Glenn Vanderburg introduced me to the book To Engineer is Human, by Henry Petrowski, which paints a far more realistic view of what real humans do. Engineers have never been infallible followers of design rule books. Instead, engineers know how things have been done in the past, and then apply creativity to try to do them more cheaply, or more safely, or just plain bigger. And along the way, they sometimes design outside the lines: structures collapse because they cut back too much, medicines have side effects, and so on. (If you want to see Glenn taking about this, here’s a great talk.)
In many ways, the values of the agile movement1 represent this kind of engineering: theory drives experimentation, and feedback decides if the result is useable.
Unfortunately, most middle management buys into the more popular (and in a way more hopeful) vision of engineering as some kind of deterministic process: you feed in a requirement and a bunch of coffee, and out pops a specification, from which comes and architecture, then a design, and then a project plan. If this was a bridge, this is the point where we’d get the laborers working. If it’s software, cue the programmers.
So, by calling ourselves “Software Engineers,” we are reinforcing two incorrect stereotypes: that what we deliver is software, and that if we were any good at it, that would be a mechanical and deterministic process.
.
Words Matter
The people who deliver value by iteratively refining software deserve to have a name for what they do. It isn’t programmer, designer, analyst, front-end developer, or software engineer. It’s bigger than that, and it’s more subtle.
And I have no idea what it should be. But I’m hoping you do.
I’d love to see your ideas in the comments.
Make it fun!
Dave
That’s me on the left…
Something more accurate IMO would be ‘optionality maximiser’, but that’s just me the strange hill I’ve chosen to die on :)
I completely concur— the term "software engineer" seems somewhat ordinary for a position that is so creative and influential in shaping the world! Perhaps titles like "digital architect" or "code innovator" better encapsulate the essence of the role. Ultimately, they do not merely write code; they are constructing the future, one line at a time!
https://glowelectric.uk/