by Suvro Upadhyaya – Accurately estimating programming time is, in part, a process of defining limitations -- experience, domain knowledge, speed vs. quality. It is also about thinking of future needs and constant efforts to have code that is maintainable. And it is highly dependent upon the culture of the team/organization.
All these average out with the passage of time with fairly stable teams working on a product. Collective wisdom of the team prevails in defining the requirements of the software and the team becomes capable of answering how much time certain things will take in development.
I have seen scrum be very useful in estimating programming time. You divide the project into units and have developers estimate how long it will take to complete each unit. The developers with the lowest and highest estimates are asked to explain why they chose the numbers. This will help to uncover issues or assumptions. After discussion, the most commonly agreed upon estimate is chosen. This estimate gets fine tuned with feedback from actuals and usually after 6 months or so, the team is estimating closer to actuals.
Even so, there are right ways of doing things and wrong ways of doing things. Very aggressive estimates can force engineers to cut corners when what you really want them to do is take the time to write code that is self-documented and maintainable, which will be useful in the long run. If you think the quality of the software produced needs to be more robust or if you think the software will not be able to meet short term business needs, it is time to work on inherent assumptions the team is making, analyze the processes by which the team is producing software and rectify them. On the other hand, if you think the team is producing software that is taking care of all the planning of ill-defined future needs, it might be prudent to let the team do refactoring at a later stage when needs become more concrete. Understanding where the team stands and where you want the team to be is the core of successful intervention.
Suvro Upadhyaya is a Senior Software Engineer at Oracle and is a member of the CIO Forum on LinkedIn.