Software engineers are not (and should not be) technicians

2024-07-2410:256582www.haskellforall.com

Software engineers are not (and should not be) technicians I don’t actually think predictability is a goo...

I don’t actually think predictability is a good thing in software engineering. This will probably come as a surprise to some people (especially managers), but I’ll explain what I mean.

In my view, a great software engineer is one who automates repetitive/manual labor. You would think that this is a pretty low bar to clear, right? Isn’t automation of repetitive tasks … like … programming 101? Wouldn’t most software engineers be great engineers according to my criterion?

No.

I would argue that most large software engineering organizations incentivize anti-automation and it’s primarily because of their penchant for predictability, especially predictable estimates and predictable work. The reason this happens is that predictable work is work that could have been automated but was not automated.

Example

I’ll give a concrete example of predictable work from my last job. Early on we had a dedicated developer for maintaining our web API. Every time some other team added a new gRPC API endpoint to an internal service this developer was tasked with exposing that same information via an HTTP API. This was a fairly routine job but it still required time and thought on their part.

Initially managers liked the fact that this developer could estimate reliably (because the work was well-understood) and this developer liked the fact that they didn’t have to leave their comfort zone. But it wasn’t great for the business! This person frequently became a bottleneck for releasing new features because they had inserted their own manual labor as a necessary step in the development pipeline. They made the case that management should hire more such developers like themselves to handle increased demand for their work.

Our team pushed back on this because we recognized that this developer’s work was so predictable that it could be completely automated. We made the case to management that rather than hiring another person to do the same work we should be automating more and it’s a good thing we did; that developer soon left the company and instead of hiring to replace them we automated away their job instead. We wrote some code to automatically generate an HTTP API from the corresponding gRPC API1 and that generated much more value for the business than hiring a new developer.

Technicians vs Engineers

I like to use the term “technician” to describe a developer who (A) does work that is well-understood and (B) doesn’t need to leave their comfort zone very often. Obviously there is not a bright line dividing engineers from technicians, but generally speaking the more predictable and routine a developer’s job the more they tend to slide into becoming a technician. In the above example, I viewed the developer maintaining the web API as more of a technician than an engineer.

In contrast, the more someone leans into being an engineer the more unpredictable their work gets (along with their estimates). If you’re consistently automating things then all of the predictable work slowly dries up and all that’s left is unpredictable work. The nature of a software engineer’s job is that they are tackling increasingly challenging and ambitious tasks as they progressively automate more.

I believe that most tech companies should not bias towards predictability and should avoid hiring/cultivating technicians. The reason that tech companies command outsized valuations is because of automation. Leaning into predictability and well-understood work inadvertently incentivizes manual labor instead of automation. This isn’t obvious to a lot of tech companies because they assume any work involving code is necessarily automation but that’s not always the case2. Tech companies that fail to recognize this end up over-hiring and wondering why less work is getting done with more people.

Or to put it another way: I actually view it as a red flag if an engineer or team gets into a predictable “flow” because it means that there is a promising opportunity for automation they’re ignoring.


Read the original article

Comments

  • By kjellsbells 2024-07-2412:472 reply

    A less generous take on this post is that an elite engineering team drove a perfectly competent developer out of the company by minimizing the perceived value of their contribution. I don't think that was good management, if so.

    Fred Brooks, in the Mythical Man Month, identified the value of "toolmakers" to the "surgeons" many years ago. I think that model applies here too.

    Seems to me that a better path would have been to ask the developer in question to lead the automation project, and generally push them over time to look for, and implement, improvements across the development chain that increase efficiency. The elite devs get to keep on doing what they do, but now the whole boat is lifted, and the dev gets to put some real wins on their resume.

    • By kragen 2024-07-2413:09

      i agree with all of this except for the 'perfectly competent' part. a programmer who advocates hiring someone else because they're too busy doing routine work instead of automating it is not a 'perfectly competent developer'; they're what this article terms a 'technician'

      (actual technicians, however, for example in electronics or chemistry labs, are generally not doing routine and predictable work; they spend a lot of their time debugging why things have failed, which is the opposite extreme, and they tend to automate as much of their work as they can. so i'm not convinced the choice of term is correct)

      neither toolmakers nor surgeons in brooks's model were doing routine, predictable work. (but his model also hasn't been very successful, so possibly it wasn't a good model)

      i like smaug's term 'toil'. so maybe we should say 'software engineers should not toil too much' instead of talking about what they should or shouldn't be

    • By Gabriel439 2024-07-2412:493 reply

      Author here: we didn't lay them off. They left of their own accord.

      • By rideontime 2024-07-2412:561 reply

        The parent comment didn't claim you did?

        • By Gabriel439 2024-07-2412:57

          Oh whoops, I misread. Never mind me, then

      • By swader999 2024-07-2413:081 reply

        Thanks for your article. Decent ideas in it.

      • By dogleash 2024-07-2412:571 reply

        Defending yourself by clarifying you didn't do X, when the suggestion was that you did Y, always looks more sus than not saying anything at all.

        • By giantg2 2024-07-2413:051 reply

          I agree. Firing is at least more honest (or there's a lawsuit if it isn't). Being pushed out sucks. I know because it's happening to me right now for bullshit reasons (the complaint is that my throughput is inconsistent but yet my average throughput is better than the other dev of my level on the team, and I'm involved in more above and beyond work). Being pushed out is very stressful and has negative mental and physical effects, especially if you have specific disabilities (I do).

          • By steveBK123 2024-07-2413:15

            Exactly. I usually don't stick around when a team enters that phase, but sometimes it takes a 6-12 months to exit.

            I've been on teams where management very clearly tries to do a good team/bad team split.

            This looks like hiring some space cadets to build the "strategic solution" that will magically fix every problem with the existing system (despite being managed by the same senior management).

            The existing team is told to just keep the lights on / the new thing is going to be so much better / just give it another year or five.

            There's not a lot of upside to staying around because you either end up fired at the end if the space cadets succeed, or if the space cadets fail you end up holding the bag of rescuing them in X years post strategic platform failure. And sometimes a secret third thing - the company being run this poorly ends up having to do RIFs and you end up fired randomly anyway.

  • By _benj 2024-07-2413:191 reply

    I have a story about engineer vs technician. In my very first technology job (title was web assistant, so, very much technician) we updated our online education platform and suddenly all our course were breaking.

    After some investigation we found that one line in an xml inside the course zip file needed changing. So, my manager planned how to do it. We'll divide the 40k courses into batches, different individuals would tackles certain batches and it all would be done in about 4-6 weeks...

    Well, probably my ADHD brain or just being lazy but that sounded like an awful lot of repetitive work that I didn't want to do (change file extension to .zip, decompress, go to file X, find line with XYZ and replace for ABC, save, compress, change file extension back to proprietary format), so after talking with my boss and asking permission I got a week to try to automate that.

    Back then I knew almost nothing about software development but I was aware of bash and python... so I cobbled together a janky script that would likely make me cry if I saw it now, tested it on 1 course, then on 10, then on 100... and then shared with my boss. It all worked perfectly! We still batches of about 1k courses at a time to confirm that everything was working ok, and in the end the job took about 2 days and 1 person (as opposed to 4-6 weeks and 5 people).

    I was very proud of that accomplishment and very likely marked my perception of the value of software as a tool to decrease human effort (nobody got laid off or leaved, is not like we didn't have A TON of work apart from that migration).

    Anyways, just wanted to share :-)

    • By sshine 2024-07-2413:30

      I automated my first job in a similar way.

      Re-encode video files to web-friendly formats and upload them (prior to YouTube).

      There was a guy whose full-time job was to sit and do that with a Windows GUI.

      First approximation was an AutoIt script. Second approximation was with bash and ffmpeg.

  • By sevensor 2024-07-2412:54

    I’ve worked as a non software engineer with non software technicians, and I’ve spent a lot of time thinking about the differences. Most of the work done by engineers was also quite repetitive; in our case the big difference had more to do with whether you turned a wrench during the day, which mainly resulted from differences in your degree of formal education. I was quite junior at the time, however. Where experienced engineers made a difference was in their ability to change how we used the machines, where technicians generally did not. (Sometimes they did, and jumped onto the engineer or management track as a result.)

    All of which is to say that I formulate a spectrum from technicians through engineers, to scientists. Technicians use technology, engineers devise new technologies using scientific facts about the world, and scientists discover new science. All three parties end up spending a lot of time on repetitive tasks, however.

    Perhaps what makes computer science unique here is that it’s a science of automation, and as such it actually offers us the opportunity to reduce repetitive work.

HackerNews