I have had to spend the last few months of my life without ... a life ! Not that I had much of one before that, but this is not the point. We had this client we had signed a contract with in June for what we all believed to be a small project, due to be released in September. And we only managed to deliver our release last week : a web application (ASP .NET, C# 2.0, Oracle 10g) targeting IIS 6.0 on Windows Server 2003 and a desktop application (Forms, C# 2.0, Oracle 10g) on Windows XP Tablet PC Edition 2005. The whole thing amounts to about 185,000 lines of code (according to CLOC), if that should ever mean something to you (please share your experience if it does ;-).
The point is that we had to spend about twice as much resources on this project than was planned : we were 2 months late (on a 3 months project) and had to get additional developers involved at some point. So, what happened ? The answer is simple : a special blend of about all of the 36 Classic Mistakes (except, notably, the Technology-Related Mistakes). The project at some point seemed so doomed, with blurry ever-changing requirements and about no visibility on our project, that we consider our achievement as a big success (and also as a proof that we are on the right tracks with our growing Software Factory). But that does not mean we would accept to get through this again, and I know I, for one, would not.
Everybody involved in this project can be blamed. Me, us and them. And for this never to happen again, we all will have to learn from our mistakes. Starting with me, obviously. But the thing is that I cannot know for sure that my coworkers will have the same attitude. And that if they do, they will do it in (what I, in my humble opinion, would call) a sensible way. And I know for a fact that our client will not. So where do I go from here ? As for me, I sense I have to become a more accurate estimator. There seems to be a lot of work incurred, such as better organization and a lot of (boring) track keeping activity, but I guess it is what it takes. I also have to give more visibility on my work to people who lack the most basic technical skills.
And I committed myself to improve my skills in the fields that I sensed people I have had to work with lacked. Even if could have considered (probably erroneously) them as not directly related to my job. And if I can, at the same time, improve my communication skills (and there is much room for improvement here) so that I can share this knowledge with them, I think will have greatly reduced the risk of me having to live through this again. First things first, I will start with requirements gathering.
It seems like a lot of work. And I think it is. But I guess it is what I like about this job. It's : getting better all the time.