It seems like estimating time is one of the less talked-about skills of the engineer, but one that's at least as important as cranking out good code, and maybe harder to master. So for the more seasoned engineers out there, or anyone, really: how did you learn to look at a project, break it down, and attach time to the pieces? I find our team struggling with 2-week sprints, but there are clearly people planning things out months in advance-- what steps do you take? What about making or validating estimates on aspects that you don't have expertise in (for instance, estimating a front-end task when you're mostly on the backend)? When starting with no history, how many weeks of concrete scheduling data do you need before your estimates begin to hold water? And on the softer side, how do you (gently) nudge someone in the right direction if they are consistently off in their estimates?
Lastly, a couple ideas I've heard of but never tried:
- Planning poker: http://en.wikipedia.org/wiki/Planning_poker
- Use fib when assigning hrs to tasks: 1, 2, 3, 5, 8, 13h etc
Anyone use these with success? Perhaps suggestions for lightweight project management tools?