I sometimes learn more from failure than success. When I succeed, it just confirms what I already know -- I'm a genius. When I fail, I have an opportunity to learn, if I can bring myself to take an objective look at what happened. This is hard, but then making the same mistakes over again is even harder. So failure can be a great opportunity to learn.
One of the greatest learning experiences in my career so far happened about 10 years ago. I was a team leader on a systems development project that turned into a multimillion-dollar debacle. It drove home some lessons I hope I never forget. Here's what happened (and what I learned from my experiences on that project.)
The project started out with great fanfare and high expectations. There were no clearly defined goals or performance objectives, but the system was basically supposed to empower the company's sales force to grow revenue by another billion dollars or so. (Be wary of wild enthusiasm and vaguely stated goals. The bandwagon effect can make otherwise sane people do goofy things.)
We spent six months investigating technology and dreaming up all sorts of ideas. Then we put together a slide show and a small demonstration of some of the technology. Senior management liked it and approved major funding into the project. (Coming up with lots of ideas and getting lots of money commits you to meeting unrealistic expectations. You should manage expectations by focusing on only a few ideas and asking for less money.)
There were four teams. Three of them created design specifications, and the fourth team did programming and put together the hardware and software selected for the system. We were all supposed to work together, so there was no single person in charge of the entire project. (Management by committee doesn't really work. Unless there is a single leader in charge of a project, confusion will reign.)
As things progressed, design teams began to duplicate one another's work. Features were specified for one part of the system that overlapped with features another team was creating in its part of the system. Confusion grew; arguments ensued; feelings got hurt. (Unless teams have clear and nonoverlapping objectives, they will get in one another's way. The project leader needs to resolve disputes quickly to keep things moving.)
After six months of designing, there was increasing pressure to start programming. Even though the design was still incomplete, the design teams had produced hundreds of pages of specifications, and these were handed off to the programming team. That team was overwhelmed by the volume and complexity of the specifications. (The longer you spend designing a system, the more complex and difficult it will be to build. It's best to design and build smaller pieces in quick, iterative steps.)
To cope, the programmers changed the specifications and cut out features they didn't understand. Also, new releases of the system hardware and software kept coming out, so people kept reworking programs to take advantage of new features in the new releases. Almost a year was spent programming and reprogramming. (System specifications have to be complete and easy to understand. People need to stick to them and not redesign the system while building it; new features can be added in future releases.)
When the beta-test version of the system was finally unveiled, it ran very slowly and crashed constantly. (After all the high expectations and almost two years spent designing and building the system, this performance seriously damaged the credibility of the whole project.)
Programmers scrambled to fix bugs, but support for the system faded. Members of senior management became alarmed at the constantly increasing budget. After another six months, they canceled the project and wrote off millions of dollars. (Delivering smaller subsystems every few months is better than trying to deliver the whole system in a few years. Smaller subsystems are easier to debug, and people see they are getting something for their money.)
Since then, I've successfully delivered many new systems, and much of my success is due to the lessons learned from that failure. What lessons have you learned from your failures, and how have you applied them?