Profile    Mohammed Shiroz Status   Loading  
Logo
Share This
Back to blog
Filter by:
Tags
//Article title

Estimating Software Tasks: A Comedy in Three Acts

About Post

Every developer has performed this play. Most of us have performed it this month. It has three acts, a cast of one optimist, and an ending everybody in the audience saw coming except the lead actor.

Take your seats. Phones on silent. The curtain rises.

Act I: The Question

Monday morning. A stand-up meeting. Coffee is still hot. Hope is still alive.

Product manager: Small one. Can we add an "export to CSV" button on the payments page?

Developer (already picturing the code): Oh, that's easy. The query exists, I just loop and write rows. Two hours.

Somewhere backstage, a stagehand quietly cancels the developer's Wednesday.

Notice what happened. The developer didn't estimate the task. They estimated the happy path of the part they could already see: the loop. Nobody estimated the button, the permissions, the edge cases, the review or the deploy. Those weren't in the picture yet.

Act II: The Discovery

Monday afternoon, then Tuesday, then a bit of Wednesday.

The loop works in twenty minutes. The developer feels like a genius. Then the plot arrives:

  • ❌ Some payments have a tenant name with a comma in it. The CSV now has an extra column for one row and Excel is furious.
  • ❌ Arabic names come out as question marks in Excel until you add a byte order mark. Nobody has ever remembered the BOM on the first try.
  • ❌ The page filters by date and status. The export should obviously respect the filters. "Obviously" was not in the ticket.
  • ❌ Finance has a lot of payments. Exporting all of them in one request times out. It needs to be a queued job that emails a link.
  • ❌ Who's allowed to export? Turns out not everyone who can see the page.
  • ❌ The code review asks, reasonably, for a test.

None of this was hidden. All of it was predictable. It just wasn't visible from the stand-up, because at the stand-up we were looking at the loop.

Act III: The Reckoning

Thursday. The same stand-up. The coffee is cold. So is the room.

Product manager: How's the two-hour button?

Developer: Nearly there. Just waiting on review.

The audience nods. They have all said "nearly there". They have all been "nearly there" for a full day.

The button ships Friday. It's a good button. It handles commas, Arabic, filters, permissions and big exports. It just wasn't a two-hour button. It never was.

Curtain.

Behind the scenes: why the play always ends this way

Douglas Hofstadter summed it up decades ago: it always takes longer than you expect, even when you take into account Hofstadter's Law. A few reasons it keeps happening to smart people:

  • We estimate the coding, not the work. Coding is often the smaller part. Understanding, edge cases, testing, review, deploying and checking it in production are the rest.
  • Unknowns don't show up in the estimate because they're unknown. You can't add time for a problem you haven't imagined yet.
  • Optimism is the default setting. We picture the version of the task where everything works first time.
  • A single number sounds like a promise. "Two hours" leaves the meeting as a commitment, even if you meant "two hours if nothing weird happens".

Director's notes: how to write a better script

You can't remove uncertainty from software. You can stop hiding it.

✅ Break it down before you answer. Spend five minutes listing the pieces: UI, query, permissions, edge cases, tests, review, deploy. Estimate the pieces, not the feeling. The list itself usually exposes Act II before it happens.

✅ Give a range, not a number. "Half a day to two days, depending on how big the exports get" is more honest and more useful. It tells the listener where the risk is.

✅ Name your assumptions. "Assuming the export follows the current filters and only managers can use it." When an assumption breaks, the estimate changing is expected, not a failure.

✅ Add a buffer for the things you can't see. Not as padding to hide, but as a visible line. Everyone knows the unknowns exist.

✅ Spike the scary part. If one piece is genuinely unknown, time-box an hour to investigate it, then estimate.

✅ Compare with last time. Your memory of how long things take is optimistic. Your ticket history isn't.

If you remember one thing: when someone asks "how long?", the most valuable answer isn't a number. It's "let me list what's involved", followed by a range.

Estimates will always be a bit of theatre. But a play where everyone knows Act II is coming is a lot less stressful than one where it's a surprise every single time.

What's the most innocent-sounding "two-hour" task that ate your whole week?

Comments (0)
Leave your review

Thanks for your valuable comments. Your comments has been updated and appreciate your getting in touch...

01. About Shiroz

Mohammed Shiroz

Hi, I'm Mohammed Shiroz, a software engineer and AI enthusiast from Sri Lanka who turns ideas into intelligent, real-world solutions. With over 9 years of hands-on experience, I currently lead real estate ERP development at Kate Group, a...

03.My Projects

04. Categories

Ready To order Your Project ?

Get in Touch
Close