Glueglue
AboutFor PMsFor EMsFor CTOsHow It Works
Log inTry It Free
Glueglue

The Product OS for engineering teams. Glue does the work. You make the calls.

Monitoring your codebase

Product

  • How It Works
  • Platform
  • Benefits
  • Demo
  • For PMs
  • For EMs
  • For CTOs

Resources

  • Blog
  • Guides
  • Glossary
  • Comparisons
  • Use Cases
  • Sprint Intelligence

Top Comparisons

  • Glue vs Jira
  • Glue vs Linear
  • Glue vs SonarQube
  • Glue vs Jellyfish
  • Glue vs LinearB
  • Glue vs Swarmia
  • Glue vs Sourcegraph

Company

  • About
  • Authors
  • Contact
AboutSupportPrivacyTerms

© 2026 Glue. All rights reserved.

Blog

Why Software Estimation Is Structurally Hard - And It's Not Because Engineers Are Bad at Math

Why software estimation fails and how to fix it

PS

Priya Shankar

Head of Product

February 23, 2026·11 min read
Software Estimation

Software project estimation fails because engineers estimate effort while stakeholders expect duration, and because the relationship between code complexity and delivery time is nonlinear. To improve estimation accuracy, use historical delivery data from your actual codebase instead of gut feel, provide ranges instead of point estimates, separate known work from unknowns, and track actual-vs-estimated to calibrate over time. Teams that adopt range-based estimation with codebase intelligence data see 40-60% improvement in forecast accuracy within two quarters.

I've shipped hundreds of estimates across three companies. My accuracy improved dramatically when I stopped relying on gut feel and started using historical data from our actual codebase.

Effort estimation is one of the hardest problems in software engineering. I spent three years running a quarterly planning process where we'd map out features, get engineering estimates, and then watch probably 60% of them slip. I kept thinking the problem was that my engineers weren't good at estimating. Then I realized the actual problem: I was asking them to do something that's inherently impossible.

Software effort estimation is structurally different from estimating other kinds of work, and until you understand why, you'll keep building estimation processes that fail.

I spent three years running a quarterly planning process where we'd map out features, get engineering estimates, and then watch probably 60% of them slip. I kept thinking the problem was that my engineers weren't good at estimating. Then I realized the actual problem: I was asking them to do something that's inherently impossible.

Software effort estimation is structurally different from estimating other kinds of work, and until you understand why, you'll keep building estimation processes that fail.

Let me give you a concrete example. Last year, I was comparing two pieces of work: one was a feature we wanted to add to our payment flow, and another was a refactor of our authentication module. On paper, they looked similar in scope. Both were "medium" in the old fashioned sense - probably 2 - 3 weeks, maybe 4 if something unexpected came up. But when we actually dug into the details, the payment feature took three weeks. The auth refactor took eight weeks and required pulling in an engineer from another team.

The difference? The payment feature touched one part of the codebase. It integrated with systems we'd already built integrations with before. We knew the pain points. The auth refactor touched the foundation that half our codebase depends on, it had implicit dependencies we only discovered as we started digging, and it required someone who understood the architectural history of why auth was built the way it was.

They looked the same. They were completely different.

Comparison of estimation uncertainty between simple features and complex refactoring work

This is what I mean by software being non-fungible. Building a new feature that's similar to features you've built before might take the same time as a feature that's completely different, even if the scope appears equal. Two pieces of code that look the same on a wireframe can differ by 10x in implementation effort depending on what part of the codebase they touch, who on your team understands it, and what's already been half - built and abandoned.

Why Industry Benchmarks Don't Work For Your Codebase

A lot of teams try to solve this by looking up industry benchmarks. "Authentication features typically take 2 weeks." "Payment integrations run 3 - 4 weeks." Then they try to apply these to their own codebase and get frustrated when they're wildly wrong.

The benchmark might be true for some abstract, generic codebase. It's almost never true for your codebase. Because your codebase has history. It has technical debt in specific places. It has architectural decisions that made sense five years ago and are now constraints. It has implicit knowledge in the heads of three senior engineers who built the system.

I realized this when I was talking to a PM at a 40 - person engineering organization who said estimation was "getting easier over time." She'd been there five years. Of course it was easier for her. She knew the system. She knew which estimates were sandbagged because of a buried complexity. She knew which features would hit tech debt. A new PM coming in would have no idea.

This is why estimation variance is so high in software. Not because engineers are bad at estimating, but because the actual effort depends on invisible factors. The code quality in that module. Whether the person who wrote it is still around. Whether there are tests. Whether it touches the database layer or just sits on top of it. Whether it requires a new infrastructure component or uses something that already exists.

You can't reduce this to a single number because the uncertainty isn't random - it's structural.

Generic benchmarks fail because they ignore codebase history, technical debt, and hidden dependencies

The Right Approach: Ranges and Transparency

Here's what I've learned actually works: stop asking for a number. Start asking for a range and a confidence level, plus an explicit statement of what could blow up the estimate.

Instead of "this will take 3 weeks," you're looking for "this will take 2 - 3 weeks if it doesn't hit the tech debt in the data layer, 4 - 5 weeks if it does, and we're 70% confident in that range because we've done similar work before."

This sounds like it takes more effort. It actually saves time, because you're forcing the estimation conversation to happen at a useful level of detail. You're not pretending to certainty you don't have. And when something DOES take longer than expected, you're not surprised - you already understood the risk.

Then here's the part that most teams don't do: track what actually happened, and compare it to your estimates. Not to shame engineers (that's the fastest way to make estimation worse). But to calibrate. "We estimated 2 - 3 weeks, it took 4. What did we miss?" Usually it's something systematic. You didn't account for review cycles. You didn't account for the fact that this code is adjacent to a stability issue. You were optimistic about how the new framework would integrate with your legacy code.

The teams that get estimation closer to reality are ones that build a historical database of "here's what we thought would happen, here's what actually happened, here's what we learned." Then they use that historical data - specific to their codebase, not generic industry benchmarks - to inform future estimates.

The PM's Role in Creating Estimation Uncertainty

I'm going to be direct: as a PM, you create estimation uncertainty without even realizing it.

When you hand engineering a spec that's vague, or that describes what you want without understanding the constraints of the architecture, you're forcing engineers to estimate around unknowns. "We want the user to be able to do X" - but what does X actually require? Do you know? Or are you asking engineering to figure out both what needs to be built AND how to build it?

Contrast that with a spec that's rooted in architecture. I understand that doing X requires touching the data layer, and I know our data layer has been stable for two years. I understand that feature Y would require coordination with the infrastructure team, and I know that's a bottleneck right now. My spec is grounded in reality, not in what I hope is possible.

When PMs write specs from that place, estimation becomes more accurate. Not because engineers suddenly get better at estimating, but because there are fewer unknowns to estimate around.

This is one of those things where codebase visibility actually changes PM behavior. When I can see the architecture, when I understand what systems are stable and which are fragile, I write different specs. I ask better questions. I don't promise features without understanding what they touch.

How PM spec clarity directly impacts estimation accuracy and reduces uncertainty

What Better Estimation Actually Looks Like

The process isn't complicated, but it requires discipline:

Identify the uncertainty explicitly. "We estimate 2 - 3 weeks because we're not sure whether this touches the auth system." Now you know what question to ask to reduce uncertainty. Maybe you spend a morning digging into it. Now you know: it does touch auth, and that's on the team's refactor roadmap, so we need to coordinate. New estimate: 3 - 4 weeks, higher confidence.

Separate estimation from commitment. You can estimate something as 4 - 6 weeks and commit to shipping it in 4 weeks if you're willing to accept risk. But don't pretend the estimate says something it doesn't. Say it clearly: "We estimate this at 4 - 6 weeks, we're committing to 4 weeks, here's what we're accepting risk on."

Track variance over time. Every sprint, look at the things that went faster or slower than expected. Pattern match. Are you consistently underestimating refactors? Overestimating integrations? Underestimating anything that touches a specific module? That's data. Use it.

Involve the people who know the system best. This sounds obvious, but a lot of teams have an "estimation meeting" that includes product, program management, maybe a tech lead - but not the engineers who actually know the details of what they're about to build. The engineers who know the system are your best source of intelligence on where the unknowns are.

Four-step framework to improve estimation accuracy through identification, separation, tracking, and team involvement

Frequently Asked Questions

Q: How to improve software project estimation accuracy?

Improve estimation accuracy with four practices: First, use historical delivery data — track how long similar features actually took by analyzing cycle time and complexity from your Git history, not by asking engineers to guess from scratch. Second, separate known from unknown work — estimate the known parts precisely and assign explicit risk buffers for unknowns. Third, provide ranges, not points — a "3-5 week" range is more honest and useful than a "4 week" commitment that misses 60% of the time. Fourth, use codebase intelligence tools to surface hidden complexity, dependency risks, and code ownership gaps before estimation, so engineers estimate with data instead of intuition. Teams tracking actual-vs-estimated delivery across sprint velocity consistently improve accuracy by 40-60% within two quarters.

Q: Isn't giving ranges just a way to give yourself more room to miss? A: It's the opposite. Ranges force you to be honest about uncertainty. And when teams track actual versus estimated — using cycle time data and sprint velocity trends — they get better at understanding where the uncertainty actually comes from. Most teams that move to ranges find their estimates get MORE accurate over time, not less, because they're no longer hiding unknowns behind padding.

Q: How do we prevent engineering from just giving huge ranges to be safe? A: Track what happens. Over time, if a team is consistently estimating 2 - 5 weeks and delivering in 2 weeks, the range shrinks. If they're consistently hitting the high end, you have a calibration conversation - not a blame conversation, but a "what am I missing?" conversation. The incentive structure should be on accuracy, not on making the estimate look better than it is.

Q: What's the PM's actual responsibility here? A: Writing clear specs that don't hide unknowns. Understanding enough about the codebase — using dependency maps and codebase intelligence tools — to know when you're asking for something that might be complex. Being honest with stakeholders about the uncertainty ranges you're getting. And resisting the urge to pressure engineers into estimates they don't believe in. That last one is worth its weight in gold because one accurate 4 - 6 week estimate is worth ten false 2 - 3 week estimates that slip.


Related Reading

  • Sprint Velocity: The Misunderstood Metric
  • Cycle Time: Definition, Formula, and Why It Matters
  • DORA Metrics: The Complete Guide for Engineering Leaders
  • Programmer Productivity: Why Measuring Output Is the Wrong Question
  • Software Productivity: What It Really Means and How to Measure It
  • Automated Sprint Planning: How AI Agents Build Better Sprints

Author

PS

Priya Shankar

Head of Product

Tags

Software Estimation

SHARE

Keep reading

More articles

blog·Mar 1, 2026·10 min read

Brooks' Law Visualized: Why Adding Engineers to Late Projects Makes Them Later

Brooks' Law states that adding people to a late software project makes it later. Here is why it happens, how to visualize it with real data, and what to do when your project is behind schedule.

AM

Arjun Mehta

Principal Engineer

Read
blog·Feb 23, 2026·8 min read

Software Estimation Accuracy: Why Estimates Fail and What Works

Estimates fail because of optimism bias and missing context. Reference class forecasting and explicit uncertainty work better.

PS

Priya Shankar

Head of Product

Read
blog·Feb 23, 2026·9 min read

Why Your Roadmap Keeps Slipping

Roadmaps slip because of invisible dependencies and missing codebase context. See how to make the information visible before planning.

VV

Vaibhav Verma

CTO & Co-founder

Read

Related resources

Glossary

  • What Is Software Project Estimation?
  • What Is Estimation Best Practices?

Use Case

  • Glue for Engineering Planning

Stop stitching. Start shipping.

See It In Action

No credit card · Setup in 60 seconds · Works with any stack