Wednesday, May 30, 2012

Define, Design, Develop, Operate

Over the last five years I have met, talked too and worked with hundreds of technology entrepreneurs. Looking back I am horrified at the number of failed software projects I have encountered. From the now ex-wife, I heard about an entrepreneur who sank the family fortune into an ill-fated software project, outsourced to India. I met with the entrepreneur who had developed a web application without ever specifying it, naturally it never worked. I consulted with the astute businessman who after eight years was still nowhere near developing his software idea, due to a lack to sound technical knowledge, a lack of specification and software developers with no methodology. Moreover, I have received more calls than I can remember from disillusioned entrepreneurs who have fallen out with software developers, have systems that they want fixed or simply cannot get their vision implemented (in software).

In my view, these failed software projects are a very unproductive use of valuable resources, which, could be used for far more productive activities. Why do so many technology entrepreneurs fail ? Most of the cases above might very well have failed from a business perspective, however, most of them will never get to test their business models, as they will have failed way before they get to that stage. Why is this ?

If I were having a house built for my family, would I do so without specifying what it is I wanted ? Would I do so without sitting down with a professional and writing or drawing a specification, architecting my home ? Would I commit my money and time without seeing a viable plan and understanding the method by which the construction of my home would be created ? Would I not have a budget ? And finally, once my home is built, would I move in without making sure it is as I wanted and safe for me and my family to habitate ?

Why then do entrepreneurs, software engineers, project managers and technology developers undertake projects without following common sense practises that we see all around us in other disciplines ? This is a rhetorical question, but I would like to put down some of my thoughts on this :


  • Although software is used, it is not physical. Being an abstract thing, it is often treated that way. Abstract things are harder to imagine, harder to measure and generally harder to deal with.
  • Unlike hardware, the physical constraints imposed on software are very weak. This is especially true as speed and space become much less of an issue. 
  • The seemingly endless availability of software frameworks, libraries and technologies makes the software development eco-system a very confusing place. There is too much choice ! This choice is hard to manage. 
  • Hardware design does not change significantly as compared to software, over time. The software eco-system is moving very quickly and this adds confusion. 
In order to ground software engineering, we need to impose self-constraint. The more self-constraint we impose the easier the problem space. Contrary to what is practised in the world at the moment, we need more design discipline than for physical design, not less. If we stick to the fundamental basics of specifying what we want, designing the system, implementing the system with a consistent method and then testing and measuring what we have built, surely we can increase the rate of successful software projects ?

Please visit the OpenCTO project where we are trying to create better software development processes and methodology.

No comments:

Post a Comment

Please post your comments, I am interested in your views