Don’t call it Software Engineering anymore, call it Software Experimentation, or at least that’s what Tom DeMarco seems to be saying in this IEEE Software article: Software Engineering: An Idea Whose Time Has Come and Gone?
Software development is and always will be somewhat experimental. The actual software construction isn’t necessarily experimental, but its conception is. And this is where our focus ought to be. It’s where our focus always ought to have been.
A pretty radical thing for one of the founders of modern Software Engineering to say. I sort of agree and sort of don’t agree. It all depends on what you mean by “experimental”.
For example, it has been a rare thing in my career to be asked to create the same system over and over again. Even when I worked on five sales systems for different business units of the same company, one after the other, there were more differences between the requirements than their were similarities. I managed to use the same database structures for all five applications but the UIs and business rules were radically different. But is “experimental” really the right word to use?
I think a better word is “craftsmanship”. Let me explain:
When you think about it, the oft used metaphor of building construction for software development is really not a very good fit. How many times has a builder had to rip out the second floor of an almost complete fifteen storey building and replace it with a radically different design? Probably never, but how often near the end of a software project has the customer suddenly change or added to the requirements and you’ve had to do the equivalent of ripping out the second floor?
Software is malleable. Bricks and reinforced concrete aren’t. if we need to find a metaphor then let’s look for a profession that works with a malleable medium.
Let’s try a commissioned painter: the customer tells him that they want a family portrait, he has painted such before, but these are different people with different requirements: they want to be painted under a tree and the lighting is completely different to what the painter usually has to work with. So he puts them under the tree, plays around with the lighting and takes some photos until he gets something that works. Now he plans how he is going to paint the picture, perhaps with a sketch or two and a few posed photographs, then he gets to work with his tools – paints, brushes, etc. – and he produces the requested painting. When it is almost finished the customer wants his pet dog added to the picture, so the painter scrapes off the paint from that section and paints in the mutt. Not a perfect metaphor but better, I think, than the engineering and experimental metaphors.
So I propose we call our profession “Software Craftsmanship” and compare ourselves with painters and other skilled artists who work in a maleable medium. What do you think?