- Estimation
- Project Management
- Engineering
How to Estimate Software Development Time: My 7 Steps
How to estimate software development time as a PM: break work down, use three-point ranges, add hidden work, adjust for AI tools, and share estimates honestly.
· 6 min read

Estimation is where a developer background helps a project manager most. I've been on both sides: the developer asked "how long will this take?", and now the project manager who has to turn that answer into a plan a client can trust. What my developer years taught me is how to protect quality while finding real ways to shorten a timeline, and that starts with an honest estimate.
This is the approach I use and recommend for estimating software development time.
The short answer
Break the work into small pieces, estimate each piece as a range with the people who will build it, add the work people forget (testing, reviews, deployment, communication), and present the result with its assumptions and uncertainty, not as a single fixed date. Then track actual effort against the estimate and adjust.
Why software estimates go wrong
Estimates usually go wrong for predictable reasons:
- The task is too big to estimate meaningfully.
- Only coding is counted, not testing, code review, deployment, or fixes.
- Unknowns (a new API, unclear requirements) are treated as known.
- The estimate is given under pressure and turns into a promise.
- Nobody updates it when the situation changes.
Step 1: Break the work down (work breakdown structure)
Large tasks hide complexity. "Build the checkout" is hard to estimate well; "cart summary screen", "payment provider integration", and "order confirmation email" are much easier.
The formal version of this is a work breakdown structure (WBS): a hierarchy that splits the whole project into deliverables, then into smaller pieces of work you can estimate and assign. For a software project, that might look like:
- Checkout (deliverable)
- Cart summary screen
- Payment provider integration
- Order confirmation email
- QA and fixes for the checkout flow
Two rules make a WBS useful: together, the pieces should cover all the work, including testing and deployment (often called the 100% rule), and each lowest-level piece should be small enough to estimate with confidence. A practical rule of thumb: if a single piece is estimated at more than a few days, break it down further.
Step 2: Estimate in ranges (three-point estimating)
For each piece, ask for three numbers: optimistic (O), most likely (M), and pessimistic (P). There are two common ways to combine them:
- Triangular: (O + M + P) ÷ 3, a simple average.
- PERT (beta): (O + 4M + P) ÷ 6, which gives the most likely value more weight.
PERT also gives a rough spread: standard deviation ≈ (P − O) ÷ 6.
For example, if a task is 3 days at best, 5 days most likely, and 15 days if things go wrong, PERT gives (3 + 20 + 15) ÷ 6 ≈ 6.3 days, with a standard deviation of about 2 days. That's a very different conversation from "5 days".
The formula matters less than the habit: thinking about what could go wrong produces better estimates than a single guess.
Step 3: Add the work people forget
For every feature, check whether the estimate includes:
- code review and fixes from review,
- QA testing and bug fixing,
- deployment to staging and production,
- documentation or handover notes,
- meetings and client clarifications.
Coding is only part of delivery. Three days of coding can turn into closer to five days of delivered work once these are included. Your own tracked actuals will show the real ratio for your team.
Step 4: Ask the people doing the work
The developer who will build a feature usually knows its risks better than anyone. As a project manager, my role is to ask good questions, not to impose a number:
- What's the hardest part of this?
- What don't we know yet?
- Has anyone on the team done something similar?
- What would make this take twice as long?
For team estimates, planning poker works well: everyone picks an estimate privately and reveals it at the same time, then the highest and lowest explain their reasoning. It surfaces hidden risks early and stops the loudest voice from setting the number.
Step 5: Account for uncertainty explicitly
Some work is genuinely uncertain: a new third-party integration, a technology the team hasn't used, or a vague requirement. For those, either:
- run a spike, a short, time-boxed piece of research or prototyping (a term from Extreme Programming), and estimate after it, or
- add a visible buffer for that item and explain why.
Keep buffers visible and tied to specific risks, not hidden in every task.
Step 6: Adjust for AI coding tools, carefully
AI coding tools are now part of most teams' work, and it's tempting to cut estimates because "AI will make it faster". The evidence says be careful:
- Google's 2025 DORA report found that 90% of respondents use AI at work. AI adoption now has a positive relationship with delivery throughput, but it still has a negative relationship with delivery stability. In DORA's words, AI "amplifies what's already there."
- METR's early-2025 study found that experienced developers took 19% longer on tasks when using AI tools, even though they believed AI had sped them up. In February 2026, METR said developers are likely more sped up now, but that the size of the gain is hard to measure.
What I take from this: AI can shorten the coding part, but it doesn't remove review, testing, or integration, and more code can mean more to review. Don't apply a blanket "AI discount". Track your own team's actuals and adjust from real data.
Step 7: Communicate the estimate, then track it
How you share an estimate matters as much as the number. I try to:
- give a range, or a date with a confidence level,
- name the main risks and assumptions behind it,
- separate "committed" scope from "nice to have",
- say clearly when the estimate will be revisited.
Uncertainty explained up front is a conversation. A surprise later is a broken promise.
Then track estimated versus actual effort for each task. We track approximate effort on every task. The point isn't to blame anyone. It's to learn which kinds of work the team consistently underestimates, and to feed that into the next estimate.
Frequently asked questions
How do you estimate software development time?
Break the work into small tasks, estimate each as a range with the people who will build it, and add time for code review, testing, fixes, and deployment. Add visible buffers for real unknowns, and present the total with its assumptions and risks. Then compare actual effort with the estimate to improve the next one.
What is the three-point estimate formula?
You estimate optimistic (O), most likely (M), and pessimistic (P) values. The triangular formula is (O + M + P) ÷ 3. The PERT (beta) formula is (O + 4M + P) ÷ 6, which weights the most likely value more. PERT's standard deviation is roughly (P − O) ÷ 6, which gives a sense of the spread.
Story points vs hours: which should you use?
Story points measure relative size and complexity, which helps a team compare work without debating exact hours. Hours are easier for clients and budgets to understand. Many teams estimate in points for sprint planning and use their historical pace to translate that into dates. Whichever you use, stay consistent and track actuals.
What is a spike in agile?
A spike is a short, time-boxed investigation used to reduce uncertainty before estimating or building something, such as testing an unfamiliar API or prototyping a risky approach. The term comes from Extreme Programming. The output is knowledge, a clearer estimate, or a decision, not a finished feature.
Should estimates include a buffer?
Yes, but keep it visible and linked to specific risks, such as a new integration or an unclear requirement, rather than quietly padding every task. Hidden padding makes estimates impossible to learn from, while a visible buffer can be discussed with the client and released if the risk doesn't happen.
Final thoughts
Good estimates aren't about predicting the future perfectly. They're about understanding the work, being honest about uncertainty, and updating the plan as soon as you learn something new.
Related: Why Software Projects Get Delayed, How I Track 10 Projects at Once, and my move from developer to project manager.