Skip to content

Instantly share code, notes, and snippets.

@rafaelquintanilha
Created September 4, 2025 18:03
Show Gist options
  • Select an option

  • Save rafaelquintanilha/e67e4fd4892652b10fda118d0d4f4690 to your computer and use it in GitHub Desktop.

Select an option

Save rafaelquintanilha/e67e4fd4892652b10fda118d0d4f4690 to your computer and use it in GitHub Desktop.
Software Project Estimation Challenges

Detailed Briefing: Software Project Estimation Challenges

This briefing document synthesizes key themes and crucial insights from the provided sources regarding the notorious difficulty of software project estimation. It highlights why accurate forecasting is so challenging, common pitfalls, and strategies to improve the process.

I. Core Problem: Software Development as Discovery, Not Manufacturing

A central theme across the sources is the fundamental difference between software development and more traditional, predictable fields like construction or manufacturing. This distinction is the root cause of estimation difficulties.

  • Software is a Design Process: "Software development is, fundamentally, a design process." (r/programming) Unlike building a plane, where the design is largely finalized before construction, writing code is more akin to designing the airplane itself.
  • Act of Discovery and Invention: "Software development is -- by definition -- an act of discovery and invention. It must always involve something unknown." (Software Engineering Stack Exchange - SE-SE)
  • Novelty and Unpredictability: "The reason we write new software is because we have a new feature or new technology or both. New means new -- unknown -- unpredictable." (SE-SE) This inherent novelty makes accurate prediction impossible.
  • Lack of Identical Precedents: Unlike painters or carpet installers who do "nearly identical" projects, software often involves "new tools, technologies, where requirements are changing, etc. This is more extrapolation into the unknown than interpolation over our past experiences." (SE-SE)

II. Key Factors Contributing to Estimation Difficulty

Multiple specific factors contribute to the inaccuracy of software estimates, often interacting in complex ways.

  1. Unclear and Shifting Requirements:
  • Customer Uncertainty: "The problem is that customers don't know what they want. They only have a vague idea." (SE-SE) They often cannot articulate their needs fully until they see or interact with a solution.
  • "Tiny" Changes, Massive Impact: "Customers like change their requirements exactly when you've just finished the concerned part... they don't see that this tiny change requires to change other things, which require to change others, etc." (SE-SE)
  • Misinterpretation: Initial requirements, even if seemingly clear, can be understood differently by developers ("sometimes you can understand that the mean 'A', and, after starting to implement them, you would notice that they maybe mean 'B'.") (SE-SE)
  1. Unforeseen Technical Challenges & "Unknown Unknowns":
  • Hidden Complexity: What seems "Simple", "Easy", "Basic" to non-experts often masks significant underlying complexity. (r/programming)
  • Unexpected Problems: "Some problems may arise. For example, if, to begin your work, you must install on your machine a fancy SQL server and the installation fails and the support is nonexistent, you may spend weeks solving this issue." (SE-SE)
  • Legacy Code & Technical Debt: Working with existing, potentially "crappy" source code can significantly inflate timelines as developers spend time understanding and fixing it. (SE-SE) Projects may also double time estimates to "deal with technical debt." (r/programming)
  1. Human Factors & Non-Development Tasks:
  • Optimism Bias: Developers, and even managers, tend to be overly optimistic. Estimates are often "the most optimistic prediction that has a non-zero chance of coming true." (SE-SE, quoting Tom DeMarco)
  • Forgetting Overhead: Developers frequently "forget about all other tasks than programming including meetings, phone calls, helping our coleague, etc." (SE-SE) They also often neglect "non-development tasks like meetings and emails concerning the project, deployment, QA support, UAT support, writing unit tests, research, documentation etc." (SE-SE)
  • Developer Availability: Estimates rarely account for the reality that developers are not available for "the full 8 hours a day 5 days a week" due to time off, other meetings, personal issues, etc. A "6-hour availability per developer per day" is suggested as a more realistic baseline. (SE-SE)
  • Individual Productivity Variance: "Research on programmer productivity shows some programmers may be as much as 26 times more productive as others." (SE-SE) This wide variance makes team-level estimation challenging.
  • Motivation & Focus: A developer's "motivation" can fluctuate; some days are highly productive, others are spent on "Programmers StackExchange." (SE-SE)
  1. Interdependencies and External Dependencies:
  • Reliance on Others: "Your estimate depends on other people." (SE-SE) Projects can be significantly delayed waiting for designers, other developers, or customer responses.
  • Availability/Quality of External Code: The project's timeline can be impacted by the "Availability of code she is dependent on" and the "Quality of code she is dependent on." (SE-SE)
  1. Pressure and Misuse of Estimates:
  • Estimates Become Commitments: "Estimates often become a commitment, so our judgment is modified." (SE-SE) This pressure leads to unrealistic targets.
  • Schedule as Motivator: "Many managers attempt to use schedule as a motivator. (It has the opposite effect, but that doesn't stop managers from trying.)" (SE-SE)
  • "Shadow Schedules": The existence of unacknowledged, realistic schedules alongside official, often unrealistic, contractual ones. (r/programming)

III. Common Manifestations of Bad Estimation

The consequences of poor estimation are well-documented and frustratingly common.

  • The "Multiply by 2, Change Order of Magnitude" Rule: "One-day tasks take up to two weeks. 'We will have it ready at the end of month' denotes project taking years to complete." (r/programming)
  • The 20/80 Rule (Misapplied): "The last 20% of the project usually take 80% of the time." (SE-SE) This is compounded by the fact that the first 80% also takes 80% of the time, and it's hard to know which part is "last."
  • Missed Deadlines & Corner Cutting: Unrealistic deadlines lead to "last-minute corner cutting and quality sacrifices, with a generous side of reproach and finger pointing." (Dropbox) This builds "huge mountains of tech debt that make the resulting edifice nearly impossible to extend later." (r/programming)
  • Collective Denial: "In most organizations, the news that the project is not on track arrives about 2 weeks before the due date, no matter how long the overrun is." This is due to a desire to give optimistic spins, hear good news, disconnects in communication layers, and a reluctance to deliver bad news. (SE-SE)
  • "PMP style projects" as "Delusion on Reality": These methodologies often prioritize adhering to a schedule by sacrificing quality (e.g., cutting unit testing) and relying on unacknowledged overtime to "put out the 1000 deployment/integration fires" after "delivery." (r/programming)

IV. Strategies for Improving Estimation & Project Management

While perfect estimation may be impossible, the sources offer concrete strategies to improve accuracy, manage expectations, and mitigate risks.

  1. Demand Clarity & Break Down Tasks:
  • Get a Detailed Spec: For any task, no matter how "simple," demand a specification and ask clarifying questions. (Dropbox)
  • Recursive Breakdown: "Break down all ambiguities." Continuously break tasks into smaller, more granular pieces until all details are accounted for. (Dropbox, SE-SE)
  • Analysis as a Separate Task: "If a task is complex enough, estimate the time for such analysis itself. Let the estimation be a separate process." (SE-SE)
  1. Involve the Development Team & Foster Transparency:
  • Engineer-Driven Estimates: "Ideally, each engineer should each be able to estimate his or her part of the project from scratch, rather than anchoring on a schedule someone else has given." (Dropbox)
  • Group Estimation: "You get all of the people who will actually work on the project to provide all of the estimates (A planning poker session can really help here)." (SE-SE) This makes estimates collective and owned by the team.
  • Transparency with Clients: Make the estimation process transparent, including buffers for unknowns. "The client's I've worked with have liked this since they know that there is some cushion in the schedule/financials." (SE-SE)
  1. Embrace Iteration and Adaptability (Agile Principles):
  • Iterative Development: Deliver "parts of a large project on time is easier." (SE-SE) This allows for "small feature release to small feature release." (r/programming)
  • MVP Approach: Start with a Minimum Viable Product (MVP) to establish the full workflow (tests, build, deployment) and then iteratively build towards features that provide customer value. (r/programming)
  • Monitor Progress, Don't Force Estimates: Instead of fixed long-term estimates, "monitor progress. If it looks like things are stalling, figure out why. If things are moving forward, figure out why and make sure not to screw this up." (r/programming)
  • Kanban/Small Todo Lists: Use tools like Jira as a Kanban board with small, bite-sized tasks rather than overwhelming "giant todo list[s]." (r/programming)
  1. Learn from Past Experience & Use Data:
  • Track Actuals: "Track a multiplier for your estimates by logging how long it actually took you to do each task and comparing your initial schedule with the real time elapsed for the project." (Dropbox)
  • Evidence-Based Scheduling (Joel Spolsky): This method uses historical data to refine estimates, often through Monte Carlo simulations, to provide probabilities of ship dates. (Dropbox, SE-SE)
  • Post-Mortem Analysis: After a task is finished and an estimate was wrong, "try to find reasons why. And incorporate this knowledge into next estimation process." (SE-SE)
  1. Manage Expectations & Communicate Proactively:
  • Push Back on Unrealistic Deadlines: "If you think the dates are unrealistic, you need to speak up." Frame it as preferring a world where goals are met through compromise rather than missed deadlines and quality sacrifices. (Dropbox)
  • Offer Options: Instead of a single estimate, provide clients with options like "quick and dirty" (1 week), "standard option" (4 weeks), and "gold option" (4 months), clarifying the trade-offs in quality and future-proofing. (r/programming)
  • Be Clear About Dependencies: If estimates rely on others, state it clearly: "I will deliver the product in two months after the designer will give me PSD files." (SE-SE)
  • Don't Estimate Under Pressure: Claim time to do a "reasonable estimation." (SE-SE)
  1. Account for Buffers and Unknowns:
  • Add Buffers: Always include "lots of buffering, based on past experience" for unexpected setbacks, interruptions, and optimism bias. (Dropbox) Some suggest multiplying estimates by 2, then adding more. (r/programming)
  • "Shift the estimates to the upper option" and then double it, because "you don't know what you don't know." (r/programming)
  • "Known unknowns" and "unknown unknowns." (SE-SE)

V. Why Traditional Project Management (PMP) Often Fails in Software

The sources are highly critical of traditional, plan-driven methodologies like PMP when applied to complex software projects.

  • Delusion on Reality: PMP is seen as "an annoying attempt to impose a delusion on reality and then declare the delusion a success." (r/programming)
  • Not Suited for Design: "PMP may work great for things like construction... The problem is that software development is not construction. It is not executing a plan. Software development is, fundamentally, a design process." (r/programming)
  • Cutting Corners: "The most common methodology for "successful" PMP projects is to cut every corner possible in order to "keep to the schedule" get people to work evenings and weekends (entirely not on the gantt chart) and then create another workflow entirely after "delivery" where the most senior developers put out the 1000 deployment/integration fires." (r/programming)
  • Misuse of Story Points: "If you use Story Points to set deadlines, you're doing Scrum wrong. Story points should measure the complexity of the story... not a time frame." (r/programming)

VI. Conclusion: Embracing Uncertainty and Managing Expectations

The overwhelming consensus is that perfect software estimation for complex, novel projects is mathematically impossible due to the inherent chaos, discovery, and changing nature of the work. The focus should shift from precise prediction to robust management of uncertainty and clear communication.

  • "Accurately estimating complex work is impossible, but going through the exercise helps a bit." (r/programming)
  • "The only way to accurately know how long a project takes is when it's finished." (r/programming)
  • Good managers "manage expectations, not deadlines." (r/programming)
  • "Honest and clear communication is really important." (SE-SE)
  • The goal is to move from a world of missed deadlines and finger-pointing to one where "everyone compromises on the date and feature set and then meets those goals." (Dropbox)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment