A Few Points to Note about Software Development
Software doesn't get better if you shout at it.
Or the people who wrote it. In frustration at your lack of success in this expensive, complex and difficult endeavour you may be tempted to shout. Shouting works as a tactic with some kinds of underlings. It works (at least I've seen it doing so in movies) on slaves and domestic servants. It sometimes works on dogs and children. Shouting doesn't really do that much to improve the performance of knowledge workers.
Software can't be shamed into existence.
″You should be ashamed of this,″
″This isn't the kind of quality we'd expect from professionals.″
″We're paying you HOW MUCH a day and you've written THIS?″
″Come on guys, you can do better than this.″
OK. Whoever you were talking to, they now feel bad. Now what? Has making these people feel bad improved the software?
The software doesn't get better once you've figured out who to blame.
Does this really need an explanation? Sigh. It probably does. Look. No matter how obvious it is that someone is to blame, it still doesn't really benefit to blame them. If it's not obvious that someone is to blame it's even more pointless and ruinous. As soon as you mention the ″b-word″ it's like shouting ″OLLY OXEN FREE″ in hide and seek. But instead you're shouting ″STOP WHATEVER YOU'RE DOING AND COVER YOUR ASS!″.
Software can't be argued into existence
″Well this bit works like this, so naturally, we assumed that this bit here would work in exactly the same way, except of course, where it's different. Isn't that obvious?″
Well, no. It isn't actually that obvious. In fact, the only thing that is obvious is that it wasn't obvious to the people who wrote the software.
Software isn't war
This is a really important one because almost everybody seems to fall into this metaphor at some time or another. Software is like war in that it is a complicated endeavour involving large numbers of people in which success is difficult to achieve. But after that, the metaphor runs out of steam. Almost no high explosives are involved. There are no infantry. Anybody in a software project who is blindly obeying orders is not doing the right thing. We don't expect there to be any casualties. Most important of all, software isn't done best with adrenaline pumping in the ears. The best software is not written under continuous bombardment. It's written in a quiet (but not silent) office, with the occasional break for a coffee and a chat.
People who write software aren't lazy and stupid (or no more so than anybody else)
Some people who write software are lazy, some people who write software are stupid. But no more so than any other group of people. What might make them appear lazy and stupid (aside from the side-effects of being blamed or shouted at) is the extremely complicated task of writing software.
Trying harder is a really poor strategy
It isn't a strategy any kind at all. But it is so often put forward as the solution to software problems. So often ″trying harder″ is actually interpreted by developers, testers and project managers as ″lower quality.″
Software is about talking, typing, thinking, communicating, testing.
Software is an extremely difficult, very often expensive, and complicated endeavour in which success is extremely difficult to achieve. It isn't a silent process. But the dynamic is very different from the kinds of things that it often gets compare to (war, playing in a rock band).
Software is invisible
This makes the people who pay for it very nervous. Curiously, you would have thought that assiduous use of the things that make software visible – demonstrations and tests would make them less nervous.
Cosi Fan Tutti
Which I think, in Italian means – ″we all do it.″ We all make these mistakes when thinking about software. When put in a tight spot, we all secretly think that things can be made better, that things can be done quicker if we all just try a bit harder. We all think that shouting at people can make it better. It can't.
8466 views and 2 responses
Aug 31 2010, 1:08 AMhjwp (Twitter) responded:So, just to play devil's advocate:
is the whole 'don't blame anyone, don't shame anyone' thing a bit too touchy-feely? i mean, ok if it's obvious to whoever f*cked up that they did so, and that everyone knows it, then there's probably no additional benefit in saying so out loud in front of everyone. but what if I don't know it's my fault that there's a screw-up? I'd rather someone played the blame game and nailed me for it, so that I have an opportunity to learn from it. and shame, not wanting to let down your peers, can be a powerful motivator.
in other news, I saw the opera 'cosi fan tutte' on saturday. the tutte ends with an e rather than an i, which makes the final word feminine in gender. so, the title basically says "that's what women are like". the plot being a demonstration that women are incapable of being faithful. so not sexist at all then. cosi fan tutti would actually mean 'everyone does it', which makes it a much better illustration of what you're talking about...
Oct 12 2010, 7:25 AMagilevangelists (Twitter) responded:I find it very useful indeed. Yes, making sure all members of the team get relevant feedback is important, but that is way different than blaming people without an strategy of improvement behind it.
Overall, It sends the right message than writing software must be a calm process with a lot of thinking behind it, rather than a rugby match...if I we have got it at all here