Monday, October 10, 2011

Bad experience: Reasons why the last project was a disaster.

Usually I try my best to work in an ordered manner.
This means:

  1. Interview the project manager (the person responsible for the success of the project) for the story.
  2. Convert this story to requirements.
  3. Present the project manager with the requirements.
  4. If approved go to the next level.
  5. Do a High Level Design (HLD) 
  6. Present this HLD sidelong the requirements and estimate roughly the solution time in human days labor.
  7. If approved go to the next level.
  8. Breakdown the HLD to low level design (LLD).
  9. Estimate LLD and present estimated more accurately time  in human labor.
  10. If approved go to the next level.
  11. Implement the LLD and stick to it (no time for adventures).
  12. Do unit test, system test as much as i can (depends, sometimes not possible).
  13. Present a working machine.
  14. Be happy and relax.

This time, everything went wrong! Why?

Here were the flow of things:
  1. Pressure to implement as fast as possible (reasons: no time, no budget).
    1. I broke and agreed to 'be fast'.
  2. Skip HLD + LLD, start implement! ==> no thoughts of risks, everything looks easy when you don't think about it deeply.
  3. Implementation got some problems I didn't see in advance (and frankly, none can think that deeply).
  4. More and more problems arose ==> delivery time breaks ==> more pressure.
  5. No one is happy, all is waiting for the delivery => more pressure ==> shorter code, less secure code, BAD CODE!
  6. ... The test-bench is too complex to operate... Catastrophic :-)

Next time - Do it right! 
If the project manager don't want to do it right, ignore him :), take your time, design it, show him the design, say 'i thought about it and found some problems' (when doing the hiding HLD + LLD).

You only get an advantage in the start, when things get rough (and they do!) you will cross the break-point and start to be slow (because you can't load all the HLD into your head).

In the end the project worked, the code, barely, but did managed to work, the time for this project took much longer then 'fast and short' (twice if not more the time it should take), and a bad taste was in the mouths.