“Here’s some advice,” the software engineering professor said, “take your initial estimate and multiply it by four.” My entire software engineering class chuckled. We couldn’t know it at the time, but that advice was actually no laughing matter.
Software development is a creative endeavor. Estimating how long something will take is tough. You never know what issues you’ll find coding until you bump into them. Because of that, it’s not uncommon for software projects to go past their estimated timeline. But there’s another reason most estimates are often off the mark.
When estimating a project, we often fail to account for its communication and collaboration overhead.
We think the work will be coding, searching StackOverflow, coding some more, and a bit of tidying up along the way. Actually, the work ends up being more like a cycle of coding, asking for feedback, waiting for feedback, working on the feedback, and reporting on progress.
Communication and collaboration are necessary for a project’s completion but are never top of mind when estimating. To make matters worse, these non-coding activities are as hard to estimate as the coding itself. You don’t know when the people you asked for a review will have time to look over your code, and you don’t know if they will suggest changes.
Many tech companies have embraced remote work after seeing its viability during the Covid-19 lockdowns. In a distributed company, async-first coordination and collaboration add even more overhead to the project’s timeline. Collaboration across time zones can add extra time because of the round trip duration of each exchange. It’s also crucial to write detailed status updates in a searchable medium. Doing so saves precious sync with your manager for valuable conversations. It also gives distributed stakeholders access to that information without them having to ping you. But you need to put in the time for writing all that.
Communication and collaboration are an unpredictable but substantial part of any project time budget.
Font image credits to ipython/xkcd-font.