This is the third post in a series about what software developers can learn from other disciplines that we often perceive as unrelated to our field.
- What software developers can learn about onboarding from the crochet community
- What software developers can learn about client engagement from preschools
- What software developers can learn about estimating from road construction
- What software developers can learn about consulting from hair salons
My dad has worked in road construction for the last 20 years and is now a Superintendent. When talking to him about work, I’m always struck by how similar construction projects are to software projects. In particular, estimating and planning road construction projects present many of the same challenges that we experience when we’re estimating software projects.
I spent some time picking my dad’s brain about the estimation process he uses for his bids and walked away with some ideas for improving the software development estimation process.
Know the terminology
When talking to my dad, he used words like ‘scratch coat,’ ‘wedge,’ and ‘thin lift’ to describe different features of a project and explained how each of those activities differs. They require different effort, different equipment, and can affect the timeline of a project in different ways. When a sales person creates a proposal and includes these words, it's vital that they understand exactly what it is that they’re estimating and what they are committing their construction crew to deliver. Realistic estimates rely on the person doing the estimating having a thorough understanding of the scope of the project and the proposed solution.
When we estimate software projects, we also need to make sure that we have a firm understanding of the scope of our proposal. Is the client asking for a refresh? a rebuild? a migration? When we use these words in our proposals, we need to be explicitly clear about what they mean, especially since they can be interpreted differently by the client.
We also need to understand the technology that we are proposing for our solution and its affect on the timeline.
Are we proposing leveraging proprietary software in our solution? Then we need to include license costs in our estimate.
Does the project have a dependency on an old third party system? We need to include time for someone to research the integration requirements and implement a solution that will support this legacy code as well as the new code we’ll be writing going forward.
Are we proposing a mobile application? Native or hybrid? Estimating a mobile app project without considering the differences of a native solution vs a hybrid solution could wreak havoc on our estimates, budget, and timeline.
Remember the process
My dad explained his estimating process as ‘thinking about the whole process from the beginning customer request all the way through to final delivery.’ To create an accurate estimate, you must think of each step of the project to get to the finished product.
The first step is collecting measurements. My dad couldn’t stress the importance of this enough. If he is bidding a private project, he takes the measurements himself. If he’s bidding a state project, he tries to do the extra leg work to verify the measurements the state provides.
From there, he calculates the quantities of time and material by hand. Even though there is software to help construction estimators automate this process, my dad explained that its easy to forget a step and leave crucial information out of the estimate if you rely on the computer. If every estimate is created with the full project lifecycle in mind, the estimate is more likely to be accurate and less likely to exclude a key feature/requirement.
In road construction, the estimate needs to consider
- Materials such as rock and asphalt
- Rock placed
- Man hours
With software development, we should take this same approach. Instead of looking at a project as one giant unit and trying to pin a number on it, we should think about all the steps it takes to get from proposal to delivery and estimate each step successively. Consider
- Content entry
- Communication and meetings
I find it helpful to estimate the above activities for each epic in order to get a better picture of the true scope of the proposed solution. This exercise also helps if we need to narrow the scope by providing insight into what features are high effort/low value rather than looking at a lump sum project estimate and being unsure how/what to trim.
Accurate estimates lead to more work
Practicing estimation and taking time to create accurate estimates not only leads to happier customers, but also to more competitive proposals and better forecasting.
In road construction, large jobs such as those commissioned by the state are sent out for bid. Obviously there is an incentive to be the lowest bid, but the company must also balance that with the necessary margins needed to cover costs and make a profit. If, as a company, you always build a 30% margin into your estimates to cover project unknowns and company overhead, you won’t win very many large projects since your competitors will be bidding prices based on 5-10% margins.
Companies can submit bids with lower margins when they have confidence that their estimates are accurate and the 5-10% margin is guaranteed. By not padding the estimates, the company submits more competitive proposals and books more business. This brings in more revenue and covers the fixed operating costs of a business earlier in the season leading to improved profit margins on projects later in the season. Accurate estimates also mean that forecasting for staffing is more reliable, which saves money because there is less time between projects and better allocation of the employees.
The above statements aren’t unique to road construction businesses. Every project-based business would benefit in similar ways by improving the accuracy of their estimates.
My dad and I talked about estimating and project management in road construction for a few hours and I’ve barely scratched the surface of what we, as software developers, could learn from it. Estimating is one of the most challenging but valuable skills to learn as a software developer, and we should borrow tips from anywhere we can find them to develop that skill.