My recent work requires coordinating teams to build their own pieces of a larger puzzle. We’re going to replace old system 𝒂 with new systems 𝔁, 𝔂, and 𝒛, and that means each team needs to land their contribution on schedule.

But in my heart I know that software hates schedules! We’re inventing as we go and all kinds of risks can wreck the timeline. Here’s some recent ones that impacted my team:

  • A critical team member left the company.
  • A Java 8 bug blocked feature development ’til we upgraded to Java 11.
  • Random packet loss between our datacenter and AWS blocked migration.

How do we coordinate anything done with so much uncertainty?!

This clarified things for me: Deadlines aren’t predictions; they’re constraints. Software projects are elastic in scope. Replace “when will the whole thing be done?” with “how much can we land by April?”

I’m still uncomfortable going more than a few months into the future. That’s when the risks compound!