Estimating Software-Intensive Systems: Project, Products, and Processes, Richard D. Stutzke is a starting point for estimating software projects. From tradition projects to agile projects, this text provides practical examples based on principles.
This post is derived from the book, but the book itself is available on Amazon at very affordable prices. I recommend it for anyone starting out in the estimating business all the way to seasoned veterans.
Any estimating process requires discipline and repeatability to produce accurate and precise results. The precision and accuracy are themselves variable and need to be defined before the estimating process starts and assessed during that process.
First, let's look at some established definitions.
An Estimate is a value inferred for a population of values based on data collected from a sample of data from that population. The estimate can also be produced parametrically, empirically, or through a modeling and simulation. An estimate is a statistic about a whole population of possible values from a previous reference period or a model that can generate possible values given the conditions of the model.
Forecasts speculate future values for a population of possible values with some level of confidence, based on current and past values as an expectation (prediction) of what will happen. In a forecast, the assumptions represent expectations of actual future events. A weather forecast tells the listeners what to expect. An estimate tells the listener the probability of some occurance of a statistic in the past, present, or future.
Projections indicate what future values may exist for a population of values if the assumed patterns of change were to occur. Projections are not a prediction that the population will change in that manner.
All projects contain uncertainty. Uncertainty comes in two forms - aleatory (irreducible) and epistemic (reducible). If we're going to make decisions in the presence of these uncertainties, we need to estimate what their values are, what the range of values are, what the stability of the underlying processes that generate these values are, how these values interact with all the elements of the project and what the impact of these ranges of value will do to the probability of success of our project.
Project decisions in the presence of uncertainty cannot be made without estimates. Anyone claiming otherwise does not understand statistics and probability of outcomes on projects
As well anyone claiming estimates are waste, not needed, misused by management, or any other dysfunction, is doing them wrong.
Reasons to Estimate and Measure (this is directly from the book, with some editing for simplicity), page 4 and 5.
Projects exist to design, build, and test products and to provide associated services to customers. Thincludeincldue hardware, software, documents, and operational data. Projects have a defined beginning and an end. Products have longer lifecycles, but most firms account for product costs through projects, since there are accounting boundaries in all firms for budgeting and financial reporting. So the separation of project and product is artificial at best when it comes to estimating, and unnecessary with planning, budgeting, and controlling the work.
Process describe and organize the work, whether it be for a project or a product. Performing these activities consumes resources, scarce resources. This work is always performed in the presence of uncertainty, with the two type - Epistemic and Aleatory.
Good estimates are key to project and product success. Estimates provide information to make decisions, define feasible performance objectives, and plan. Measurements provide data to gauge adherence to performance specifications (cost, schedule, and technical), make decisions, revise designs and plans, and improve future estimates and processes.
Reasons to Estimate and Measure
- Product Size, Performance, and Quality
- Evaluate feasibility or requirements
- Analyze alternative product designs
- Determine the required capacity and speed of hardware
- Evaluate product performance (accuracy, speed, reliability, availability and other ilities)
- Quantify resources needed to develop, deploy, and support the product
- Identify and assess technical risks
- Provide technical baselines for tracking and controlling
- Project Effort, Cost, and Schedule
- Determine project feasibility in terms of cost and time
- Identify and assess project risks
- Negotiate achievable commitments
- Prepare realistic plans and budgets
- Evaluate business value (cost versus benefit)
- Provide cost and schedule baselines for tracking and controlling
- Process Capability and Performance
- Predict resource consumption and efficiency
- Establish norms for expected performance
- Identify opportunities for improvement
So if your project or product has no need for any of these them #NoEstimates is right for you. If it does, buy the book, read it, learn out to manage in the presence of uncertainty and increase the probability of success for those paying your salary.