A description of the image

5 minute read

The “Known-Unknown” Trap

As developers and project managers, we love a clear plan. If we have a wireframe, an API spec, and a database schema, we feel confident. We pull out the calendar, estimate 3 days, and move on.

But there is a dangerous middle ground where design is clear, yet the requirements are not fully defined. You know how it will look, but you don’t know exactly what data fills it or how complex the edge cases will be.

This is often where estimates blow up. How do we handle this specific scenario without just inflating numbers out of fear?

1. Task Decomposition: Break It Down to the Atoms

When design is clear, you can rely on technical complexity rather than requirement vagueness. The secret to accurate estimation here is Atomic Decomposition. Don’t estimate by “Feature”; estimate by “Interaction.”

Example Scenario: Building a “User Profile Update” Feature

Bad Estimate: “3 Days (Update UI + API)” Why it fails: This lumps data fetching, validation, database transactions, and edge-case error handling into one bucket.

Good Estimate (Atomic Breakdown):

  1. Frontend Component Construction: Creating the form and state management. (4 hours)
  2. API Endpoint Logic: Handling the update payload. (8 hours)
  3. Data Validation Layer: Implementing field-specific constraints (regex, length). (4 hours)
  4. Database Migration/Schema Check: Verifying columns exist or creating triggers if needed. (2 hours)
  5. Caching Strategy: Deciding if we need to invalidate the profile cache. (2 hours)
  6. Test Cases (Unit + E2E): Writing mocks for success and specific failure states. (8 hours)

Total: ~28 hours (~3.5 Days). See the difference? By breaking it down, you account for the “design is clear” part (Code/Testing) separately from the “requirement defined” part (Schema Validation).

2. General Practices for Unclear Requirements

When requirements are fuzzy, standard task lists aren’t enough. You need specific methodologies to handle the ambiguity:

A. The “Spike” Task Approach

Create a separate task labeled “Spiking / Investigation.” Estimate this explicitly in time (e.g., 4–8 hours).

  • Task: Investigate legacy API constraints for User Profile Data.
  • Why: It allows you to spend time understanding the “unknowns” without it bleeding into production code time. If the data constraint turns out to be complex, that spike task becomes a “Blocker,” and your plan is flexible enough to accommodate the new findings.

B. The 1:2:1 Rule of Thumb

For ambiguous requirements, use a weighted estimation model:

  • 1 Day: For the obvious build work (Coding what you know).
  • 2 Days: For integration work (APIs, DB connections, Third-party libs).
  • 1 Day: Buffer for “Discovery” (Edge cases that didn’t exist in the design doc).

This ensures you never underestimate integration costs.

C. Use Relative Story Points, Not Hours

If your team estimates using points (Fibonacci sequence), do not try to force them into hours until requirements are stable. If a requirement is “Clear Design but Undefined Specs,” assign it a relative point value that reflects the complexity of the implementation rather than the scope of the feature.

  • Example: A “Login Feature” might look like 1 day, but if the authentication mechanism isn’t fully defined (e.g., MFA requirements aren’t set), bump the estimate by a 50% risk multiplier.

D. Explicit Buffer Tasks

Do not hide buffers inside specific tasks (e.g., don’t add “2 hours” to the DB task). Instead, maintain a separate “Definition of Ready (DoR) Buffer.” If requirements are unclear, reserve a 20-30% contingency for the entire feature block specifically for scope creep during development.

3. The Myth of the “Task-Time Table”

You asked: “Where can I find reference book or tables (task - time spent), to avoid inventing numbers?”

The Honest Truth: They Don’t Exist (And Here Why)

There is no universal “Hours per Task” table that works for everyone. If you look online, you will find old Microsoft or IBM charts from the 90s (like Function Point Analysis). Do not use them. They are inaccurate for modern web applications because:

  1. Stack Dependency: Java on-premise takes longer than React/Node in a cloud environment.
  2. Team Velocity: A Senior engineer’s “login implementation” is 50% faster than a Junior’s.
  3. Environment: Local development is faster than CI/CD integration which these tables ignore.

Where to Find Reliable Data Instead of Tables

Since you cannot find a magic table, you must build your own data source. Here is the best hierarchy for reference:

1. Internal Historical Velocity (The Gold Standard) Look at what your team did last month on similar features. If you built an e-commerce checkout, look back at the tickets closed last quarter that had similar tech stacks and clear designs.

  • Metric: “Story Points per Sprint.” Convert to velocity if needed, but keep it relative.

2. Industry Benchmarks (For Order of Magnitude) If you need a rough number for budget planning before you have data, look at:

  • IBM System Development Metrics (1985): Still cited in academic papers, though dated. Good for high-level function-point estimation.
  • Microsoft “Velocity Data”: Occasionally published by tech giants regarding deployment frequency and lead time.
  • Google Engineering Blog: Search for their articles on engineering metrics (e.g., “Engineering Velocity”). They often break down cycle time per feature stage (Design, Dev, Review, Deploy).

3. Books & Resources for Methodology While they won’t give you a table, these books teach you how to measure your own rates:

  • “Estimating Software Projects” by Dr. Peter M.G.R. (Provides the theory behind why simple multiplication fails).
  • “Succeeding in Software Management” by David H. K (Good for handling estimation risk).
  • DORA DevOps Research & Assessment: While focused on deployment frequency, they provide “Lead Time” data which helps calculate how long code takes from commit to production, indirectly validating your build estimates.

Conclusion: Estimation is Risk Management

In the scenario where design is clear but requirements are not, the risk isn’t in coding; it’s in discovery.

  • Do not hide risks inside your task time estimates (e.g., don’t just say “5 days” when you mean “3 days + buffer”).
  • Use Spike tasks to investigate the undefined parts.
  • Build your own historical data rather than trusting outdated generic tables.

Accurate estimation isn’t about guessing better; it’s about decomposing the work until every unknown has a separate ticket attached to it.

A
Hello! I am Alogio Assistant. Can I help you write a message for the developers? I'll also ask a few questions.