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 thing that things can be made better, that things can be done quicker if we all just try a bit harder.