It always takes longer than you expect, even when you take into account Hofstadter’s Law.
The law is a statement regarding the difficulty of accurately estimating the time it will take to complete tasks of substantial complexity. We encounter this at work all the time and a few weeks ago I was having a discussion with my manager on why most software projects take a longer time to complete than planned. He quoted Donald Rumsfeld —
There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don’t know. But there are also unknown unknowns. There are things we don’t know we don’t know.
Similarly most software projects have 3 kinds of tasks —
Knowns —These are the tasks that we know how to implement and have a fair estimate of how long they’ll take. Fresh graduates might underestimate them initially but get better and fairly accurate quickly.
Known Unknowns — The tasks that we know that we don’t know. As we don’t know the complexity of these tasks, there is fair chance that we’ll underestimate them but this can be learnt quickly. One way to overcome this is to take sometime to figure out the unknown (hopefully not too long) and then estimate the project completion time.
Unknown Unknowns — These are the tasks that we don’t know we don’t know. Estimating the time required for these tasks is hard, takes years of experience to figure these out and usually these tasks cause in delaying the project. One way to go about this is to allocate a buffer time for this and just like any learning algorithm, get better at it after a lot of training data.
Another way of looking at Project Management!
Code. Learn. Explore