For some time I have been preoccupied with trying to compare what the software development industry is similar to and have had some interesting discussions with colleagues. There are many articles on why it is not like engineering and why it is not a science.
Engineering has been around for thousands of years and the mechanics are well understood, albeit complex. We understand physics, motion, mechanics, structuring and have proven formulas to solve problems. Building engineering solutions are somewhat easier as the problem and solution are well understood.
If software development were a science the we would have strict processes and practices in place. We cannot seem to even agree to these practices and process, but I would agree there are many scientific principles that are applied. I would also say that software development is not a pure science, but rather an applied science.
As a industry we are in the game of manufacturing software and build a product that we ship at the end of the day. But we are unlike manufacturing as they have a proven recipe that they put on a production line to create a large volume of the same product. We are more similar to the Research and Development division of these manufacturing companies that are building and improving their first prototype and coming up with the correct recipe. But unlike the manufacturing industry, our effort to mass produce the product and give it to the consumer is much less.
In the past we have failed and looking at it in a new light
As an industry I would say we have it horribly wrong; the Standish Group’s chaos report shows 68% of projects fail or are challenged. If you were an investing person, would you put your money into a venture where there is only a 32% of it going well?
Being in the consulting game, I get to see many different projects and different companies around the world. I am shocked at how few are working well and smoothly with everyone being happy.
In the past 5 years, I have observed it getting better especially where teams have thrown out waterfall and start using some agile practice. Yet, there are still many challenges faced by many teams as the practice not mature and still evolving.
We are similar the health industry
I say the medical industry as it is more of an applied science. There are many scientific practices and patters, but there is still a lot of uncertainty and empirical practices.
Doctors and Surgeons have studied our anatomy and learnt techniques to deal with known problems. They have also learnt skills to analyse a patients problem through a process of elimination. They eventually come up with a prognosis using their best judgement.
We too have learnt software patterns, practices and technologies and apply these skills to new problems. In many cases we go through a process of elimination on what the best approach or technology is. We come up with a solution that we think will best solve the requirement.
Software Development is a practice
Many doctors rooms are called a “practice” as this is where they practice their discipline of resolving problems through elimination. More often than not they get it right the first time, but there is still a significant amount of patients that they work on a trial-an-error basis. This is an applied science going through the process of elimination.
Software development could be said to be a practice too and not dissimilar to the medical industry. We are presented with a requirement that is a bit ambiguous, similar to how a patient will describe the complaint. We would analyse the requirement and using our tools, frameworks, patterns and experience we would come up with an approach to deal with the problem. We will choose the path through a process of elimination
As with the medical industry, they don’t get it right every time and go through a process of elimination to come to a solution. Sometimes the get it wrong and complicate the problem more and then they have failures too. We too solve problems through a process of elimination. We attempt to solve the problem and also have varying degrees of success and failure.
As a software industry we have come a long way in a very short time unlike the medical industry that has been around since the beginning of mankind. As a new industry we are still trying to find our feet and establish practices.
We have had some great ideas and some rather bad ones. I think the biggest failure in the software industry is our practice of managing work. We have tried to manage software development as if it were an engineering practice or
Try run a hospital in a waterfall manner
In waterfall we need to come up with a project plan to manufacture a product. Can you imagine being asked to set up a project plan for the running of a hospital (with an emergency room) over the next year. Also to treat running the management of the hospital as if it were a production line in a manufacturing concern.
Lets complicate it with the need to know up front what patients are going to come in so you manage resources, what you are going to be doing and how much it is going to cost.
Just like a hospital, we know we are going to get requirements coming in and that we have the skill to deal with each. We also know that some are going to be easy and others are going to take significant more effort. The greater majority of requirements will be done, but there will be a bit of trial and error and possibly a few potential disasters along the way.
You never know what you’re going to get!