Sunday, October 01, 2006

Professional software development

Recently I renewed my interest in photography. I read the Strobist blog with great interest, in particular his Lighting 101 series.

One of the great virtues of digital photography is that it has become very easy and very cheap to make many pictures, and that you have instant feedback about the result. But the effect on me - and on many others - is that I make more pictures than I used to, but also worse pictures than I used to. I take less time to make a picture, but as a result it takes me much more time to make good picture. Why? Because shooting 10 bad pictures doesn't make any of them a good picture, while spending the same time on carefully shooting 2 pictures does.

I see a similar effect in software development projects. The tools we (can) use to make software becomes increasingly powerful, making it easier to model requirements, designs and tests, write code and perform static and dynamic analysis on it, generate testcase from the models and analysis reports. We produce more requirements, more models, more designs, more code, more complexities, more integrations, more variability, more platforms and the projects require more people, more teams, more sites, more departments, more companies, more processes, more reporting, more feedback and more historical data,

... More, more, more... Moores law rules!


But like more photographs don't make better pictures, more software does not make better software. But also, when making software becomes easier -- to make us more productive in terms of lines-of-code -- we teach people to do without thinking or understanding. Making a photograph becomes a point-n-click, and making a software systems becomes... point-n-click.

Slowly, we lose our ability to be patient enough to think and think carefully about what we are doing and what we are making. Lighting and composing a picture is about using available ambience and organizing things (strobes, angles, positions, attitudes, etc.) to achieve a desired effect, not about installing the equipment and press the button for a split second. Similarly, making software is not about installing and configuring the tools, dragging around objects and diagrams and pushing a button to build and run the software.

It's all about thinking carefully about what you want to achieve and what the effect may be of your lighting and composition choices. It's okay to try and retry, to run (incomplete) test shots to see effects like background, lights and shadows. But ultimately, we're better off producing less results with better quality than an unmanagable volume of crap.

No comments: