Determining time estimates for development projects: A non-dev´s perspective

April 8th, 2010

1

As an engineer specialized in industrial processes, the subject of determining time estimates for  software development projects has been something that I’ve always found very interesting.  

Non-developers usually have no understanding at all about programming. They do not understand the considerable intellectual challenges that come with it. Every new design is a totally new problem. Coding one day can be like building a water dam, the next day a skyscraper and the following one a cargo port. In the end, they are all three examples of building efforts; however, the implications, required abilities and intrinsic challenges vary completely. The question is then, why are software projects always so different from what has been done before? The answer is: no matter if you reuse code from other projects, every new software project has new endeavors that actually push the limits of what is possible. There is no precedent, or reference on how to approach them. 

In school they teach you that there are several methodologies specifically for calculating how long a dev team is going to take to finish a program. However, based on my experience of working with developers, I have concluded that such methods just don´t work as they are supposed to. As a matter of fact they are rarely used. According to what I’ve experienced, these are the reasons why they don´t work:

  • The main reason is probably that an endless amount of, not only unforeseeable, but also never-seen-before complex problems arise during the development process. Getting time estimates for them is considerably subjective.
  • Every language has its particularities, and hence using a calculation method that was based on other generally older languages, completely changes the conditions. When people say “hey lets use COCOMO on our Ruby project” they don’t understand the underlying contradiction.
  • Every developer is good for different coding aspects and there is no way to standardize their abilities, period.
  • As the programmers start to code, new software updates come out in the market, old versions sometimes become outdated, hardware requirements change and a bunch of other unforeseen tech variations always take place.
  • New developers join the team and occasionally some of the original members leave too. The effects caused by these changes are sometimes considerable. It takes a long time to understand new code bases, period. 
  • Programmers will hate me for this one but: edge cases. Trying to solve edge cases can consume huge amounts of time and resources. “What if the user enters a thousand-character-long username? Ahh? We have to be prepared!” I would say "Whatever!!! “Focus on the most relevant stuff, leave the minor hipster tweaks for the end!”

After long conversations with experts in the matter and doing some research, I’ve concluded that the most successful way to estimate software development times is by:

1. Dividing the project in several parts, then get a group of developers with experience IN THAT TYPE OF WORK to determine rough estimates.
2. Coming up with roadmaps, iteration plans and budgets.
3. Loosening the constraints between the components as much as possible. You might not be able to determine estimates for 2 parts out of a 10 component software, but if you can get the estimates for the other 8, then you have something to work with. 
4. Always adding more time for unexpected events that ironically will most likely take place 

Once a developer told me his “dev time estimation rule”, it went like this:

Ask a developer how long is he going to take to develop the system. If you feel the estimate is doable, then multiply that number times two. If you still think it’s something you can live with, then multiply it times three. If you then are all pissed off and you look like Jack Nicholson in The Shining, but you still think there’s a good chance that even then the program would be useful, then, and only then, you’ve found a realistic estimate. 

(image source)

Tagged with:

Related Posts

Author

Humberto Herrera Rincon-Gallardo

Small

Humberto works as an analyst and he is always up for adventure, always.

Tags

API Aardvark Art Athletes AutoCAD AutoLISP Avinash Kaushik Barrelfish Box Shadows Buttons CSS3 Calculus Careers Catalysts Community Community Conferences/Conventions Conferences/Conventions Cross Browser Culture Degrading Digital Footprints Evernote Front End Development Gaming Geek Culture Glass Gradients HR HTML Haskell Holidays IPv4 IPv6 IgniteLA Ignorance Innovative Interactions Kanban Knowledge LEGO Lomography Los Angeles Martha Stewart Movies Multikernel Music NBA PAX Penny Arcade Expo Photoshop QA Resolutions Rounded Corners SGML Scheme Scriptability Seattle Social Fresh Software Development Sports Stereomood Swag Unix Videos Web Standards World Cup 2010 Xbox360 advice agile ajax apps beta beta testing beta versions bloggers brands browser cache caching call/cc challenges china chrome cold call comet communication community management company culture company pages computation connectivity continuations control-structures copyleft copyright coroutines creative workspaces creativity critiques css cucumber cursors customer service customer support data products design designers dynamic code economy entrepreneur entrepreneurs exceptions extension facebook feed firefox franken post gadgets generators google greasemonkey grid system http humanization influencers innovation intellectual property internet iphone jQuery javascript job search job-hunting jobs lambda lamp marketing markov chain martinis monetization strategies mottos mst3k networking new technology open source software partner passion patent phone plugin privacy productivity products programming languages protocol pure-function quality assurance readability remote pair programming resumes tips rspec ruby ruby on rails scalability screencast security servers social media software engineering sponsors start-ups state syntax taxes team members terminology test threads tips tools turing machine type theory types typography unicycling user experience user stories vidcon web development webspider xbl youtube zappos

1 Comment Leave a comment

Mitchell
5 months ago

“In software engineering graduate school I got the idea that what language you used just changed the time estimation method by multiplying by a constant, but now I’m starting to see that Perl really is different” -My old boss

Reply to comment

Leave a comment

Anonymous
Right now

Your comment preview

Reply to comment





Incorrect please try again
Enter the words above: Enter the numbers you hear:
If you are not able to read this, you can get another image or hear it
Want to see an image again?

Allowed Tags

_emphasis_
*strong*
??citation??
-deleted text-
+inserted text+
^superscript^
~subscript~
@code@

Add code using a GIST
gist: gistid