You are previewing Software Estimation: Demystifying the Black Art.
O'Reilly logo
Software Estimation: Demystifying the Black Art

Book Description

Often referred to as the “black art” because of its complexity and uncertainty, software estimation is not as difficult or puzzling as people think. In fact, generating accurate estimates is straightforward—once you understand the art of creating them. In his highly anticipated book, acclaimed author Steve McConnell unravels the mystery to successful software estimation—distilling academic information and real-world experience into a practical guide for working software professionals. Instead of arcane treatises and rigid modeling techniques, this guide highlights a proven set of procedures, understandable formulas, and heuristics that individuals and development teams can apply to their projects to help achieve estimation proficiency.
Discover how to:

  • Estimate schedule and cost—or estimate the functionality that can be delivered within a given time frame

  • Avoid common software estimation mistakes

  • Learn estimation techniques for you, your team, and your organization * Estimate specific project activities—including development, management, and defect correction

  • Apply estimation approaches to any type of project—small or large, agile or traditional

  • Navigate the shark-infested political waters that surround project estimates


  • When many corporate software projects are failing, McConnell shows you what works for successful software estimation.

    Table of Contents

    1. Welcome
      1. Art vs. Science of Software Estimation
      2. Why This Book Was Written and Who It Is For
      3. Key Benefits Of This Book
      4. What This Book Is Not About
      5. Where to Start
    2. Acknowledgments
    3. Equations
    4. Figures
    5. I. Critical Estimation Concepts
      1. 1. What Is an “Estimate”?
        1. 1.1. Estimates, Targets, and Commitments
        2. 1.2. Relationship Between Estimates and Plans
        3. 1.3. Communicating about Estimates, Targets, and Commitments
        4. 1.4. Estimates as Probability Statements
        5. 1.5. Common Definitions of a “Good” Estimate
        6. 1.6. Estimates and Project Control
        7. 1.7. Estimation’s Real Purpose
        8. 1.8. A Working Definition of a “Good Estimate”
        9. Additional Resources
      2. 2. How Good an Estimator Are You?
        1. 2.1. A Simple Estimation Quiz
        2. 2.2. Discussion of Quiz Results
          1. How Confident Is “90% Confident”?
          2. How Wide Should You Make Your Ranges?
          3. Where Does Pressure to Use Narrow Ranges Come From?
          4. How Representative Is This Quiz of Real Software Estimates?
      3. 3. Value of Accurate Estimates
        1. 3.1. Is It Better to Overestimate or Underestimate?
          1. Arguments Against Overestimation
          2. Arguments Against Underestimation
          3. Weighing the Arguments
        2. 3.2. Details on the Software Industry’s Estimation Track Record
          1. How Late Are the Late Projects?
          2. One Company’s Experience
          3. The Software Industry’s Systemic Problem
        3. 3.3. Benefits of Accurate Estimates
        4. 3.4. Value of Predictability Compared with Other Desirable Project Attributes
        5. 3.5. Problems with Common Estimation Techniques
        6. Additional Resources
      4. 4. Where Does Estimation Error Come From?
        1. 4.1. Sources of Estimation Uncertainty
        2. 4.2. The Cone of Uncertainty
          1. Can You Beat the Cone?
          2. The Cone Doesn’t Narrow Itself
          3. Accounting for the Cone of Uncertainty in Software Estimates
          4. Relationship Between the Cone of Uncertainty and Commitment
          5. The Cone of Uncertainty and Iterative Development
        3. 4.3. Chaotic Development Processes
        4. 4.4. Unstable Requirements
          1. Estimating Requirements Growth
        5. 4.5. Omitted Activities
        6. 4.6. Unfounded Optimism
        7. 4.7. Subjectivity and Bias
        8. 4.8. Off-the-Cuff Estimates
        9. 4.9. Unwarranted Precision
        10. 4.10. Other Sources of Error
        11. Additional Resources
      5. 5. Estimate Influences
        1. 5.1. Project Size
          1. Why Is This Book Discussing Size in Lines of Code?
          2. Diseconomies of Scale
          3. When You Can Safely Ignore Diseconomies of Scale
          4. Importance of Diseconomy of Scale in Software Estimation
        2. 5.2. Kind of Software Being Developed
        3. 5.3. Personnel Factors
        4. 5.4. Programming Language
        5. 5.5. Other Project Influences
        6. 5.6. Diseconomies of Scale Revisited
        7. Additional Resources
    6. II. Fundamental Estimation Techniques
      1. 6. Introduction to Estimation Techniques
        1. 6.1. Considerations in Choosing Estimation Techniques
          1. What’s Being Estimated
          2. Project Size
          3. Software Development Style
            1. Effect of Development Style on Choice of Estimation Techniques
          4. Development Stage
          5. Accuracy Possible
        2. 6.2. Technique Applicability Tables
      2. 7. Count, Compute, Judge
        1. 7.1. Count First
        2. 7.2. What to Count
        3. 7.3. Use Computation to Convert Counts to Estimates
        4. 7.4. Use Judgment Only as a Last Resort
        5. Additional Resources
      3. 8. Calibration and Historical Data
        1. 8.1. Improved Accuracy and Other Benefits of Historical Data
          1. Accounts for Organizational Influences
          2. Avoids Subjectivity and Unfounded Optimism
          3. Reduces Estimation Politics
        2. 8.2. Data to Collect
          1. Issues Related to Size Measures
          2. Issues Related to Effort Measures
          3. Issues Related to Calendar Time Measures
          4. Issues Related to Defect Measures
          5. Other Data Collection Issues
        3. 8.3. How to Calibrate
        4. 8.4. Using Project Data to Refine Your Estimates
        5. 8.5. Calibration with Industry Average Data
        6. 8.6. Summary
        7. Additional Resources
      4. 9. Individual Expert Judgment
        1. 9.1. Structured Expert Judgment
          1. Who Creates the Estimates?
          2. Granularity
          3. Use of Ranges
          4. Formulas
          5. Checklists
        2. 9.2. Compare Estimates to Actuals
        3. Additional Resources
      5. 10. Decomposition and Recomposition
        1. 10.1. Calculating an Accurate Overall Expected Case
          1. The Law of Large Numbers
          2. How Small Should the Estimated Pieces Be?
        2. 10.2. Decomposition via an Activity-Based Work Breakdown Structure
        3. 10.3. Hazards of Adding Up Best Case and Worst Case Estimates
          1. Warning: Math Ahead!
          2. What Went Wrong?
        4. 10.4. Creating Meaningful Overall Best Case and Worst Case Estimates
          1. Computing Aggregate Best and Worst Cases for Small Numbers of Tasks (Simple Standard Deviation Formula)
          2. Computing Aggregate Best and Worst Cases for Large Numbers of Tasks (Complex Standard Deviation Formula)
          3. Creating the Aggregate Best and Worst Case Estimates
          4. Cautions About Percentage Confident Estimates
        5. Additional Resources
      6. 11. Estimation by Analogy
        1. 11.1. Basic Approach to Estimating by Analogy
          1. Step 1: Get Detailed Size, Effort, and Cost Results for a Similar Previous Project
          2. Step 2: Compare the Size of the New Project to a Similar Past Project
          3. Step 3: Build Up the Estimate for the New Project’s Size as a Percentage of the Old Project’s Size
          4. Step 4: Create an Effort Estimate Based on the Size of the New Project Compared to the Previous Project
          5. Step 5: Check for Consistent Assumptions Across the Old and New Projects
        2. 11.2. Comments on Uncertainty in the Triad Estimate
          1. Estimation Uncertainty, Plans, and Commitments
      7. 12. Proxy-Based Estimates
        1. 12.1. Fuzzy Logic
          1. How to Get the Average Size Numbers
          2. How to Classify New Functionality
          3. How Not to Use Fuzzy Logic
          4. Extensions of Fuzzy Logic
        2. 12.2. Standard Components
          1. Using Standard Components with Percentiles
          2. Limitations of Standard Components
        3. 12.3. Story Points
          1. Cautions About Ratings Scales
        4. 12.4. T-Shirt Sizing
        5. 12.5. Other Uses of Proxy-Based Techniques
        6. 12.6. Additional Resources
      8. 13. Expert Judgment in Groups
        1. 13.1. Group Reviews
        2. 13.2. Wideband Delphi
          1. Effectiveness of Wideband Delphi
          2. “The Truth Is Out There”
          3. When to Use Wideband Delphi
        3. Additional Resources
      9. 14. Software Estimation Tools
        1. 14.1. Things You Can Do with Tools That You Can’t Do Manually
        2. 14.2. Data You’ll Need to Calibrate the Tools
        3. 14.3. One Thing You Shouldn’t Do with a Tool Any More than You Should Do Otherwise
        4. 14.4. Summary of Available Tools
        5. Additional Resources
      10. 15. Use of Multiple Approaches
        1. Additional Resources
      11. 16. Flow of Software Estimates on a Well-Estimated Project
        1. 16.1. Flow of an Individual Estimate on a Poorly Estimated Project
        2. 16.2. Flow of an Individual Estimate on a Well-Estimated Project
        3. 16.3. Chronological Estimation Flow for an Entire Project
          1. Estimation Flow for Large Projects
          2. Estimation Flow for Small Projects
        4. 16.4. Estimate Refinement
        5. 16.5. How to Present Reestimation to Other Project Stakeholders
          1. When to Present the Reestimates
          2. What If Your Management Won’t Let You Reestimate?
        6. 16.6. A View of a Well-Estimated Project
      12. 17. Standardized Estimation Procedures
        1. 17.1. Usual Elements of a Standardized Procedure
        2. 17.2. Fitting Estimation into a Stage-Gate Process
        3. 17.3. An Example of a Standardized Estimation Procedure for Sequential Projects
        4. 17.4. An Example of a Standardized Estimation Procedure for Iterative Projects
        5. 17.5. An Example of a Standardized Estimation Procedure from an Advanced Organization
        6. 17.6. Improving Your Standardized Procedure
        7. Additional Resources
    7. III. Specific Estimation Challenges
      1. 18. Special Issues in Estimating Size
        1. 18.1. Challenges with Estimating Size
          1. Role of Lines of Code in Size Estimation
        2. 18.2. Function-Point Estimation
          1. Converting from Function Points to Lines of Code
        3. 18.3. Simplified Function-Point Techniques
          1. The Dutch Method
          2. GUI Elements
        4. 18.4. Summary of Techniques for Estimating Size
        5. Additional Resources
      2. 19. Special Issues in Estimating Effort
        1. 19.1. Influences on Effort
        2. 19.2. Computing Effort from Size
          1. Computing Effort Estimates by Using Informal Comparison to Past Projects
          2. What Kinds of Effort Are Included in This Estimate?
        3. 19.3. Computing Effort Estimates by Using the Science of Estimation
        4. 19.4. Industry-Average Effort Graphs
        5. 19.5. ISBSG Method
          1. Kind of project: General
          2. Kind of project: Mainframe
          3. Kind of project: Mid-Range
          4. Kind of project: Desktop
          5. Kind of project: Third Generation Language
          6. Kind of project: Fourth Generation Language
          7. Kind of project: Enhancement
          8. Kind of project: New Development
        6. 19.6. Comparing Effort Estimates
        7. Additional Resources
      3. 20. Special Issues in Estimating Schedule
        1. 20.1. The Basic Schedule Equation
        2. 20.2. Computing Schedule by Using Informal Comparisons to Past Projects
        3. 20.3. Jones’s First-Order Estimation Practice
        4. 20.4. Computing a Schedule Estimate by Using the Science of Estimation
        5. 20.5. Schedule Compression and the Shortest Possible Schedule
        6. 20.6. Tradeoffs Between Schedule and Effort
          1. Schedule Compression and Team Size
        7. 20.7. Schedule Estimation and Staffing Constraints
        8. 20.8. Comparison of Results from Different Methods
        9. Additional Resources
      4. 21. Estimating Planning Parameters
        1. 21.1. Estimating Activity Breakdown on a Project
          1. Estimating Allocation of Effort to Different Technical Activities
          2. Estimating Requirements Effort
          3. Estimating Management Effort
          4. Estimating Total Activity
          5. Adjustments Due to Project Type
          6. Example of Allocating Effort to Activities
          7. Developer-to-Tester Ratios
        2. 21.2. Estimating Schedule for Different Activities
        3. 21.3. Converting Estimated Effort (Ideal Effort) to Planned Effort
        4. 21.4. Cost Estimates
          1. Overtime
          2. Is the Project Cost Based on Direct Cost, Fully Burdened Cost, or Some Other Variation?
          3. Other Direct Costs
        5. 21.5. Estimating Defect Production and Removal
          1. Estimating Defect Removal
          2. An Example of Estimating Defect-Removal Efficiency
        6. 21.6. Estimating Risk and Contingency Buffers
        7. 21.7. Other Rules of Thumb
        8. 21.8. Additional Resources
      5. 22. Estimate Presentation Styles
        1. 22.1. Communicating Estimate Assumptions
        2. 22.2. Expressing Uncertainty
          1. Plus-or-Minus Qualifiers
          2. Risk Quantification
          3. Confidence Factors
          4. Case-Based Estimates
          5. Coarse Dates and Time Periods
        3. 22.3. Using Ranges (of Any Kind)
          1. Usefulness of Estimates Presented as Ranges
          2. Ranges and Commitments
        4. Additional Resources
      6. 23. Politics, Negotiation, and Problem Solving
        1. 23.1. Attributes of Executives
        2. 23.2. Political Influences on Estimates
          1. External Constraints
          2. Budgeting and Dates
          3. Negotiating an Estimate vs. Negotiating a Commitment
          4. What to Do if Your Estimate Doesn’t Get Accepted
          5. Responsibility of Technical Staff to Educate Nontechnical Stakeholders
        3. 23.3. Problem Solving and Principled Negotiation
          1. A Problem-Solving Approach to Negotiation
          2. Separate the People from the Problem
          3. Focus on Interests, Not Positions
          4. Invent Options for Mutual Gain
          5. Insist on Using Objective Criteria
            1. Technical Staff and Technical Management Own the <span xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg" class="emphasis"><em>Estimate</em></span>
            2. Nontechnical Stakeholders Own the <span xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg" class="emphasis"><em>Target</em></span>
            3. Technical Staff and Nontechnical Staff Jointly Own the <span xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg" class="emphasis"><em>Commitment</em></span>
        4. Additional Resources
    8. A. Estimate Sanity Check
      1. Scoring
    9. B. Answers to Chapter 2 Quiz, "Table 2-1"
    10. C. Software Estimation Tips
      1. Chapter 1
      2. Chapter 2
      3. Chapter 3
      4. Chapter 4
      5. Chapter 5
      6. Chapter 6
      7. Chapter 7
      8. Chapter 8
      9. Chapter 9
      10. Chapter 10
      11. Chapter 11
      12. Chapter 12
      13. Chapter 13
      14. Chapter 14
      15. Chapter 15
      16. Chapter 16
      17. Chapter 17
      18. Chapter 18
      19. Chapter 19
      20. Chapter 20
      21. Chapter 21
      22. Chapter 22
      23. Chapter 23
    11. Bibliography
    12. Steve McConnell
    13. Index
    14. About the Author
    15. Copyright