Constructing Software

Monday 19th September 2011

The fuss in the news about lack of housing and the attempt to reduce the complexity of planning regulations led me to think (once again) about software and the usual comparisons it suffers from with other engineering disciplines. I’m sure you’ve all read the “what if Microsoft built cars” type jokes….

Although there are some superficial comparisons with engineering and we have tried very hard to shoehorn software development into engineering processes (architecture, design, build etc), it is really a very different approach and discipline. How many houses or cars do you start to build and get told half-way through that an additional 4 floors are needed, or that it needs to be a 6-seater not a sports car ? There is a completely different set of expectations when you are constructing real, solid objects rather than software “logic”.

Modern software development needs to be all about expecting change, creating a flexible environment so that change can be implemented quickly and efficiently, evolving solutions and working in collaboration with whoever needs the software. As software languages and tools become higher level, software development becomes more about effective communication, analysing business processes with a logical point of view and professional and rigorous testing and much less about nuts and bolts engineering.

Software can be buggy, perform poorly and be frustrating to use, but let’s not underestimate its achievements in keeping pace with a world of change, deploying (mostly) successfully on so many different types of hardware and usually operating completely differently to how it was initially designed. Imagine the chaos if we placed the same amount of change on buildings or cars.