One of the readers of the weekly news letter asked me to explore about how software engineers can be made accountable.
His view point was while every other branch of engineering had some kind of accountability built-in cause and effect mechanisms, he was of the view that this branch of engineering got away lightly as compared to other professions.
I would have to say that was an extremely tough question for me to answer.
Recently, one of the mall in Bangalore had a few walls going down and caused non fatal injuries to some of the visitor. The malls has been closed since. The investigation is on and the engineers and their hierarchy are being questioned and few heads shall roll in the process.
I went back to the classic article of 1998 and I find the summary even applicable and relevant today.
The fact that some software must be produced by trained, accredited engineers doesn’t imply the same for all software. I can fix a broken railing on my stairs without a civil engineering degree. I can mix a gin and tonic without a chemical engineering degree. But can I build a second story on my house? No. My local government will require me to have an engineer sign the building plans. We should eventually see a similar stratification of software jobs into amateurs, skilled craftsmen, and engineers.
The Right Questions
Once we stop asking the trick question of, “Is software development engineering?” and start asking the real question of, “Should software development be engineering?” we can start answering really important questions: What is software engineering’s core body of knowledge? How should software engineers be trained? How should software engineers be certified? And, perhaps the hardest to answer, How long will it take for all this to happen?
Two decades have passed and I do not think we have answered those questions. We have not seen any kind of formal stratification.
I do not think there is any doubt that software is eating the world and the way I see it is that anyone can be a ‘Software Engineer’. Anyone who can code is a software engineer. I feel everyone should be introduced to coding at a young age, but to call everyone who can ‘code’ as a software engineer is in my view the highest possible dilution of the word ‘engineering’.
Incidentally some or most of the top forty software engineering books , goes to decades back and remains as classical as it was today. It goes to tell us something in the foundations have possibly never changed or it has changed and the changes are too fast, that we never bothered to pause and reflect.
In recent times we have seen heads rolling owing to bad software engineering and realization. In that sense failures are not being accepted, but unlike any other branch of engineering, here the tolerance level of failure seems to be high. People have no problems re-starting a phone or carrying a power bank in addition to their phone without worrying about the app that is possibly sucking the power.
Recently the Tesla incident where the tester of the self driving car died, the problem was this.
The car dashed with a heavy duty truck as the side of the truck visible to the car was completely white and the self-driving software in the car recognized it as a skyline as it has been trained that way.
Who should be blamed in this case ? A life unfortunately was gone
I checked the somewhat dated code of ethics and I cannot conclude which of the eight principles listed there could have been violated in this fatal incident.
We are building things at a pace which was not possible couple of decades back owing to advances in technology both hardware and software.
While the pace is necessary, I am afraid that we might be turning this branch of engineering into a profession, where the fundamental underlying mechanics are barely understood and somehow the message seems to be ‘Forget the mechanics’ and I can positively take a bet that the ‘technical debt’ of code written in the last ten years will be significantly more than what was written before ten years.
I do not wish to conclude this here, as this has set me thinking in some form, but I can only say this.
I do not think the questions that were asked two decades back will ever have a right answer.
I also do not have a direct answer on how to bring accountability into this rapidly changing branch of engineering, if we still wish to call it engineering, but what I can possibly explore and share thoughts on ‘How I can be a better software engineer’ and ‘How the place I work can make me a better software engineer’. I will do so in the coming weeks.
In the interim, I would love to hear your thoughts on this , as I have spent a lot of my breathing time on this planet wondering how to ‘Build World Class Products’
What do you think ?
Enjoy Maadi (Have Fun)