Imagine if painters tried to paint the way software developers are expected to code. A committee would tell you what to paint and by when, but they may also prescribe to you which tools you must use (brushes, palette knives) and be extraordinarily detailed about the paint type and colours you may use and how much of them.
As you start to put paint to canvas, you realise that there is no sketch and maybe not even a model to paint from. You might have to paint from memory, directly to the canvas, or have a succession of different models placed before you, while you are painting. One day it’s a bowl of apples, the next it has been changed to a bowl of bananas. Greenish bananas, just like the apples were, so that’s ok.
Every fifteen minutes, a meeting would be called where you had to explain what you had painted so far, what you were intending to paint next and what’s stopping you from painting the next thing in your composition. Meanwhile, somebody would come into the room and explain to you that you had to paint an entirely different painting for a while, because “this is an emergency” and to leave your existing painting half finished. Maybe we’ll get back to it later, maybe never and maybe your painting will be given to somebody else to complete. Next time, all the things you learned about making the painting while making it might be forgotten. A different group of painters may be employed.
During your painting time, various meetings and interruptions would occur, at a moment’s notice, irrespective of what stage you were at, in your painting. You might not even get time to clean your brushes and protect your paint. You might come back to hardened paint and brushes, when you resume, or worse still, find that somebody else has been using your paint and brushes on your painting, in the meantime. Painters are considered to be interchangeable, after all. Individual skill, experience, style and ability count for very little.
The painting you are making has to fit into a larger collage of paintings, like a giant jigsaw puzzle piece, but nobody can tell you what the adjoining paintings look like. You aren’t allowed to look and have barely any time to do so, anyway. If the colours at your boundaries are slightly different to the colours at the adjoining paintings’ boundaries, that’s just how it’s going to be.
At release time, people would yank your painting off your easel, whether you have finished or not and hand it to somebody else to evaluate – usually several people. Each one has the opportunity to say what they don’t like about your painting and you have to change it, irrespective of your own artistic style or vision. Sometimes, the change requests will be contradictory and a blatant step backwards, but you have to do them anyway, to your precious masterpiece.
There’s never enough time allowed to make the changes, so you have to do these in a hurry. The delivery deadline has passed, after all. We’re late. Meanwhile, somebody is counting the cost of the hours you are spending on the painting and accounting for the paint you have “wasted”. In some cases, the only way to make the changes is to do them in your own time, using your own paint.
When the painting is done, whether or not completed, it goes out into the world with your signature on it. You can never go back to correct it. You can never disown it. Your reputation is tied up with the painting forever and you are required to start on some other arbitrary painting. You never get to say how you would have preferred to paint or what you should have been painting instead.
At the end of the process, a lot of onlookers would be able to sit in judgement of your painting and tell you how deficient and disappointing it was, not to mention late and over budget. The painters they chose were clearly incompetent and a different result would have been obtained, if only better painters had been recruited. In the unlikely event that people are satisfied with the painting, they would start working on what changes are required to the painting, or what the next painting should be. Appreciation would be short and derisory.
There is a very good reason why we don’t paint this way. The art that you get is so severely compromised, it’s barely worthy of the name “art”. The painting always sucks. It destroys the heart and soul of the artists, who end up doing their work as a form of inevitable drudgery that simply pays the bills. To protect themselves, they insulate themselves by no longer caring much about what they paint, how they paint or how the painting is received.
They begin painting like zombies who need constant guidance about what to paint and how. A bunch of overseers take up the challenge and begin attempting to spoon feed each painter, at every brush stroke. Initiative is gone. Experimentation and innovation are destroyed. Nobody cares about the result any more. It’s just a job.
Why, then, is this the method we employ to write intricate, complex, long lived software, for money?