Software engineers are not (and should not be) technicians
The article delves into the distinction between software engineers and technicians, advocating for automation in software development. It warns against prioritizing predictability over automation to foster innovation and efficiency.
Read original articleThe article discusses the distinction between software engineers and technicians, emphasizing the importance of automation in software development. The author argues that predictability in software engineering is not desirable as it often leads to anti-automation practices. A case study is presented where a developer's predictable manual tasks were automated, resulting in increased efficiency and value for the business. The author suggests that tech companies should not prioritize predictability and should avoid cultivating technicians who shy away from automation. Instead, they should encourage engineers to automate repetitive tasks, leading to more challenging and ambitious projects. The article highlights the risk of over-hiring and decreased productivity when companies focus on predictability over automation. The discussion also touches on the role of engineers in tackling unpredictable tasks and the need to avoid becoming overly reliant on manual labor.
Related
The software world is destroying itself (2018)
The software development industry faces sustainability challenges like application size growth and performance issues. Emphasizing efficient coding, it urges reevaluation of practices for quality improvement and environmental impact reduction.
DevOps: The Funeral
The article explores Devops' evolution, emphasizing reproducibility in system administration. It critiques mislabeling cloud sysadmins as Devops practitioners and questions the industry's shift towards new approaches like Platform Engineering. It warns against neglecting automation and reproducibility principles.
Why We Build Simple Software
Simplicity in software development, likened to a Toyota Corolla's reliability, is crucial. Emphasizing straightforward tools and reducing complexity enhances reliability. Prioritizing simplicity over unnecessary features offers better value and reliability.
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.
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 :-)
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.
Unlike other countries in the US you can call yourself an engineer as a job description without any restrictions, so far too many people have taken on that job description, even if it does not make any sense.
However, I think if the tech industry adopted this distinction formally, the outcome is that there would be far fewer software engineers and far more software technicians.
Which would probably actually be a good thing overall. Most solutions being built out in the world don't seem to need software engineers imo
I think it’s a good idea to have a mix of both. There is a certain amount of toil involved in large systems and automating every single task is not always worth the effort. It’s nice to have technicians around to help with that toil.
However, balancing this consistency with new adventures is where things get a bit tricky. I kind of like Jeremy Howard's approach to learning here. I don't know if it can be applied to a company or a team scale.
Spend 50% of your time on predictable tasks, those that you have mastery over and can do comfortably. Spend 50% of your time on frontier stuff things that break your comfort zone.
Over time the some of the latter tasks will get into the former category, thereby leading to automation organically.
The ratio of comfort:frontier tasks is personal and let's engineers choose their ratio. Some may want the ratio tilted in the comfort zone (greater predictability ) while some may choose to adventure into the frontier zone (lesser predictability ). An organization should have space for both. Even the same individual can alter these ratios based on their life stages, external circumstances.
Put rather simply, a good software engineer can also choose to be a good technician and vice versa. Why should these roles be mutually exclusive ?
Of course as time goes on we get better automation tools. what used to not be worth automating often is today.
Don't forget that humans tend to be good at noticing "thats funny" situations while automation will pass many of those situations because you didn't think about them and thus didn't handle that error. This is why despite being a big deliver in automated tests I still demand a large amount of time spent in manual testing everything.
That is a pure and virtuous stance.
I typically refrain from giving management ideas of this sort. It's not a given that the pros outweigh the cons - especially in large organisations.
In any case I'm currently in a project which was supposed to be for Technicians, but I need to do a lot of Engineering due to, well, bugs and tech debt.
My take is that any sufficiently long running project, even if originally simple, creeps beyond the skillset of Technicians.
The technician has to know the system well enough to respond correctly (or even proactively with preventive maintenance, etc.) to unpredictable problems that are "in the book".
The programmer by definition solves novel problems.
- - - -
edit to add: Beware folks who look down on technicians. It's a kind of "code smell" of the mind.
It's possible to do this without writing code. https://github.com/grpc-ecosystem/grpc-gateway
You can even get it to generate Open AI style documentation.
Being so special you are exempt from having to write documentation, tests, give visibility, etc.
Automation is can be partial, like series of scripts that are ran manually.
I think the article misrepresents what actual technicians do and their value.
Both extremely important to the business but sysadmins are perceived at a lower level?
Intelligent & Lazy: I make them my Commanders because they make the right thing happen, and find the easiest way to accomplish the mission.
Intelligent & Energetic: I make them my General Staff Officers because they make intelligent plans that make the right things happen.
Stupid & Lazy: There are menial tasks that require an officer to perform.. and they follow orders without causing much harm
Stupid & Energetic: These are dangerous and must be eliminated. They cause things to happen, but the wrong things, and so cause trouble."
i find this article to be overly long
Related
The software world is destroying itself (2018)
The software development industry faces sustainability challenges like application size growth and performance issues. Emphasizing efficient coding, it urges reevaluation of practices for quality improvement and environmental impact reduction.
DevOps: The Funeral
The article explores Devops' evolution, emphasizing reproducibility in system administration. It critiques mislabeling cloud sysadmins as Devops practitioners and questions the industry's shift towards new approaches like Platform Engineering. It warns against neglecting automation and reproducibility principles.
Why We Build Simple Software
Simplicity in software development, likened to a Toyota Corolla's reliability, is crucial. Emphasizing straightforward tools and reducing complexity enhances reliability. Prioritizing simplicity over unnecessary features offers better value and reliability.