This morning I woke up very early on my own, around one hour before my early alarm, starting to think about a project I messed up 3 years ago and what I have could done better. Wait – What? Isn’t there anything better to think about at that time, like breakfast for example… anyways, this is how my brain works, I guess.
So I thought about the root causes why the project failed and what I could have done better or should have done completly different. Here are some learning I recognized:
1. Have the currage to find the best matching tool (aka never use the hammer for a screw)
Our software was not made for such an scenario, so I started to customize our solution to the requirements of the customer. If I would have taken a look on the requirements and thought about the impact on our software, I would have declined the project or simply used just the relevant parts from our software and combined it with software that already fulfiled the requirements.
2. Find your own decisions were ever possible
At some point I realized, it was too much data, for our software, to get the necessary performance. I needed a database I could put in all the data, our software shouldn’t touch. But I haven’t used much databases at that time, so I asked the customer what kind of database I should use. I took the first one he told me to, without evaluating it or even thinking about it on a conceptual level, althoug I noticed the nescience of the customer. I was such a fool. It was horrible. I was working with a unfitting tool I never really wanted.
The better solution would have been, to find my own decision by finding experienced people and taking the time, to evaluate the necessary software in the context of the requirements. This is the essence of my next learning:
3. Take your time to make a plan – this is much more productive than producing code
4. Be honest about the shit
The most things I did were “motivated” by the preassure I got: the budget was very low, the customer was promised to get first results after two weeks and there was other work to do as well and the requirements never ever fit to the estimations.
If you are in a such a situation – don’t try to handle it. Be serious about your responsablity and tell your boss about it. I think it might even be an option to refuse doing such unnecessary work – it’s better for all. Instead strive for a solution that might work for all.
I know there is the SNAFU principle, but you must be as honest and detailed as possible.
5. If you fail, at least learn from it
The best to do so is to get some distance – for example 3 years ;)… From a distance you’ll get a proper view on the failure and are able to extract the experience from it. The best way however, is to learn from the failures of others, but this is much harder (and another topic).