- We Fail Too Much
- Definitions of Success
- The Standish Group
- Doing the Wrong Things
- Doing the Things Wrong
- Time Goes By, Things Improve
- One Reason: The Civil Engineering Analogy
- Giving Up Hope
- Ignoring Your Mother
- Bridges Are Hard, Software Is Soft
- We Swim in an Ocean of Change
- Accept Change
- Embrace Change
- Capitalize on Change
- A Better Analogy: Evolving Systems
Giving Up Hope
Of course, one reason we have not changed the way we do things is because most of us have assumed the problem is not the process, but ourselves. In other words, we have believed that the reason the waterfall process does not succeed very often is that we are not doing it right.
Software developers have often been thought of as arrogant. I disagree; I think most are very self-questioning and tend to lack confidence. This can sometimes come off as arrogance, but in general, self-assured people don't have to brag.
Lacking any defined standards, software developers have traditionally had no way to determine, for themselves, if they were really good at their jobs. Without any notion of what makes a good developer, we live and die by our latest success or failure. This lack of a set of standards is part of what has kept us from becoming the profession we should be, in my opinion.
So, because we tend to worry that the failures in our projects stem from our own faults, we do not suspect that the problem might be the methodology itself.
Einstein said it: "Insanity is doing the same thing over and over again and expecting a different result."
I think we have been a little bit nuts. Well, maybe not nuts. Maybe just hopeful.
Think back to your high school mythology class and the story of Pandora's Box. Pandora, the myth goes, opened a box and unwittingly released all the evils of the world. The last thing that emerged from the box was hope.
When I was a kid, upon hearing this tale, I thought "Awwwwww. Well, at least we have hope!"
No, no. That is not the point. Instead, the point is that hope is evil.
As long as we hope that this time we will get the requirements right, and stable, then we will keep doing things the way we always have. If we hold out the hope that this time we will be able to write code without bugs, then we'll keep writing it as we always have. The hope that this time we will be on time, be on budget, just be better will keep us from changing what we do.
We give out T-shirts at our courses with cartoons and pithy phrases on them, and by far my favorite shirt says:
"I feel so much better since I gave up hope."