Software Estimation

How do you write accurate software estimates?

 By: Michael Byrd, MCSE, C# Specialist

Software Estimation

So, how do you write accurate Software Estimates? I've heard this question several times over the years but rarely do I get any sort of answer where I feel the person answering actually believes what they're saying or that their estimates are ever accurate. The fact of the matter is that software estimates are often inaccurate by 100% or more!

he principal difficulty in estimating software projects is complexity, requirements, and the people involved. Not always is the software necessarily "complex" but requirements do change or just may be unstable. People definitely do change.

Additionally, there isn't a ton of help out there, unless you want to spend a lot of money on tools or spend lots of time running down vague notions that don't really lead anywhere useful. However, there are at least two excellent books that I found which are extremely helpful in learning how to write accurate software estimates.

The first one is Software Estimation: Demystifying the Black Art by Steve McConnell. There are a lot of tips, case studies, rules of thumb, as well as some math to help you figure it out. The second book that is complementary to this book and you should probably read first is Code Complete, which is basically knowledge on building software that you think would be common knowledge, but isn't necessarily common.

The following points don't focus on any complex math but, on some of the important rules of thumb that can help you develop tools and processes for writing accurate software estimates.

  • 1. First, make sure you have defined the problem that the software is supposed to address. Next, define the requirements and features of the software. Additionally, make sure you've defined all of the inputs and outputs of the system. These things and more are covered in detail in Code Complete.
  • 2. Break down the project into small pieces. It's always easier to make accurate estimates of small pieces vs. large ones. An example of this is to estimate 20% of the classes that will do 80% of the work. Think about those classes, what they do, and the methods they contain.
  • 3. Most developers are generally 20% to 30% lower in their initial estimates than their actual effort. This doesn't mean they don't know what they're doing. What it does mean is that software is often so complex and has so many moving parts you can't keep all of that at the front of your brain while you're working on how long it will take to build component x. By all means get more than one person's input for each piece as each person may think of additional things.
  • 4. Consider the team members that will be doing the actual work. If Nancy is a seasoned developer and says something will take 20hrs and you're going to have John who is a junior developer do the actual work, it's probably going to take John longer. Ask John how long he thinks it will take him to do the work, have him work with Nancy to come up with the number.
  • 5. Take into account communication as well as interruptions. The time it takes for your developers to communicate with each other as well as with the customer is part of the development process and affects how long things will take. The more team members you have working on the project the more paths of communication there will be. Also factor in interruptions, whether they be phone calls, email, vacations, other projects, etc. etc.
  • 6. Changes in requirements, as well as changes with people, will have a direct impact on your initial estimate. Make sure that the person or organization that requested the estimate realize this up front. If additional requirements come up or changes in requirements arise, update the estimate accordingly. I've not seen a software project yet, where something wasn't redefined or added during or after development. This list isn't exhaustive and isn't meant to offer concrete formulas on how you can estimate your particular software project from A to Z. Hopefully, it will give you a starting point to work from.

Would you like to learn more about the software estimation process? Contact us here!

 Ready to get started?
Contact us

Contact Us