What is software development?

Posted on Wednesday, May 19, 2010 by Alexandre Poitras

I often hear people complaining about lean flows. They say they can't be applied to software development because they were invented for production activities and therefore are not suitable for software development. But is that right?

Before answering this question, first we have to look at software development and to understand what kind of activity it truly is. People in the agile and in the software craftmanship communities argue that is a unique activity that can't be compared to any other applied sciences out there. There is a kind of "we are different" thinking in the software industry. I strongly disagree with that. I believe software development has a lot in common with engineering in general but with some specifics of course.

So what are these specifics? If you look at a classical engineering project, it is normally separated in two very distincts phases : the design phase and the construction phase. For example, let's say we want to construct a building. First the engineering team design the building plan to determine exactly how the building is going to be built, determing its shape, the heating and ventilation system, the materials to be used, ... This process is creative and iterative (oh doesn't it remind you of something?). Then once this is done all these details are passed to the construction team who actually construct the edifice. The construction is done by construction workers in a repetive and predictive way. In this kind of projects, the design phase is usually the risker : it's hard to predict how much time it's going to take. On the other hand, the construction phase is much more predictable but is much more expensive and takes a longer time so most costs come from this phase.

Now back to software development. In software development, our main goal is to create virtual artifacts called programs. Programs are designed (written) by humans but they are constructed from a set of instructions by a compiler. There is no human intervention needed and this process is usually short and free. So basically what we have there is a big design phase to write the program (yes programming is designing) and a completely free construction phase since we are dealing with a virtual world and the compiler does it for free.

So what does it mean? It means that in the end software development is just a big product development effort. And that we can apply engineering methods to software development. I know I know in the software world a lot of people hate engineering methods but I believe it mostly comes from the fact that most managers have always treated writing code as a construction phase and not as a design effort and therefore applied the wrong process. But we have to realize, writing code is not trivial, it is as hard as designing a car or a building and we should treat it as a creative design activity not as stupid repetitive task that any code monkey can accomplish. If we apply design engineering principles, we might have better results. We can't continue having this hippie hacking culture. We need more rigor, more discipline, more risk assessment and more importantly we need to stop failing so many projects :-) We are much better than that.

In my next post, I'll show how to apply lean flow to product development.

0 Responses to "What is software development?":