Five ways to improve time estimation in your software projects

Rafik Mas’ad
Nursoft
Published in
5 min readMay 22, 2019

Delays and cost overruns are typical in software development. One of every six projects has a budget overrun of 200% and a schedule overrun of almost 70%. As a custom software development boutique, in Nursoft, we have to estimate a wide variety of projects including applications for various devices, languages and software architectures. We obtain less than 25% error in around 90% of the projects, due to the implementation of diverse state of the art techniques created by our research team.

Through out our 6 years of experience we have gained a lot of experience (practice) on the art of estimating the effort (time) of projects. It’s time to show you the basics of how we do it. I’m going to give you some background on software development effort estimation techniques and how to achieve better estimations in your own team.

Three software development effort estimation techniques

As one of the more challenging tasks in software engineering, there are a bunch of methods and techniques to revolve this problem. There are at least three groups: expertise based, model based and learning oriented techniques.

(1) Expertise based methods rely on expert knowledge and judgmental processes that compare new projects or functionalities with older ones.

For example, Planning Poker is a widely used method in which an effort estimation is obtained as a consensus among individual judgments, reached after a series of discussions and re-estimation rounds. Unfortunately, these methods tend to be inaccurate, in part due to the technical uncertainty characterizing the development of a new software product, but mainly due to the bias of human judgments and their sensitivity to pressure from internal and external groups.

(2) Model based methods perform predictions using models defined by a small, fixed and carefully designed set of parameters. In this category, we found classic methods such as CoCoMO and Function Points Analysis.

(3) Learning oriented techniques are those employing machine leaning algorithms, from linear regressions to deep-learning algorithms, to build a predictive model that’s functional form is inferred from data. Since these methods estimate the effort from the company’s historical data like team predictions of the project features and the real effort invested, large amounts of it are usually required to begin using them.

How to improve your estimations

… and now the spicy part.

Applying sophisticated methods in a company can be costly and even not fit with your development methodology. Here you will find some easy tips to implement based on the 3 previous techniques.

Trust collective wisdom

The lack of knowledge of details of a functionality (i), the complexity of implementation of certain sections (ii) or the existence of technologies that facilitate the work (iii) are one of the main sources of error in estimations.

Holding meetings where it is estimated collectively is a great measure to share knowledge among the team that will develop the functionality results in a better estimate and also allows to have a more complete knowledge of the functionality that is going to work.

Create a safe climate without pressure

To avoid the bias produced by the pressures of the team or clients, generate a climate of respect and leaving aside personal judgments of the professional’s estimation. If you want to reduce project times, reduce the functionalities to develop, do not press the developers to give you the most optimistic estimation (spoiler: it will never be accomplished!)

Disaggregates the system in functionalities

If you have the requirements of the project or the sprint, estimate the individual features and not the entire project. Errors tend to cancel between overestimations and underestimations.

Store and review data of previous functionalities

Save the estimates and the real effort (time) of the functionalities you have developed. When you have to estimate other functionalities you can review the ones that are similar and see how long they were delayed in the past, what were their average estimation errors and with that information adjust your prediction.

Do not predict, forecast

100% of the times you make an estimation you will be wrong (what is in doubt is how much). The nature of software development effort prediction is stochastic, not deterministic.

Giving a forecast of the type, “we will take between 1000 to 1300 work hours with 80% probability” is more honest (and accurate) than giving a closed amount.

For this, you can use a Monte Carlo simulation with the stored data of previous projects. This will not only give you a forecast based on your historical data, but it will also allow you to have information such as the variance between the estimation and the reality (and consequently, the probability of different delivery times).

Finally…

Estimating is a difficult process, in general, not all the details of the requirements arise when you have to quantify the effort, changes occur during development and psychological pressures play an important role in the team. Embracing uncertainty is necessary, knowing that your estimate is going to fail and betting on reducing that margin is a key factor. In this post, we leave you with some tips that we hope you can use to improve your own estimation processes.

TL;DR

  • You will fail making an estimation, your job is to reduce the uncertainty.
  • Use the knowledge of your team, more people discussing about a project effort estimation have more accurate results.
  • Do not pressure your team, make they comfy throughout the whole development process (and after & before).
  • Estimate functionalities/sprints not the whole project.
  • Give a forecast not a closed number, the nature of software development effort prediction is stochastic not deterministic.

Rafik is the Head of Technology of Nursoft (like a CTO, but more fancy), also the Software Architect, his current field of interest is machine learning applied to effort estimation, but tomorrow who knows what it could be.

Do you have any projects you want to estimate? contacto@nursoft.cl

Are you good at estimating projects? humanos@nursoft.cl

Just want to say hola? hola@nursoft.cl

--

--