Software development is inherently unpredictable
Software development isn't unpredictable because of unknown external influences. It's unpredictable because it's very nature is that of discovery.Software development is inherently unpredictable.
You probably agree with this, at some level. “Yes, we’ll run into unexpected bugs” or “Of course, we don’t know what the customer will request next week” or even “Obviously, people get sick sometimes, and that may push the schedule back.”
Those are all valid examples of unpredictability affecting software development, of course.
But that’s not what I mean.
I mean that software development, by its very nature, is unpredictable.
Think of it this way: When you write software, what are you doing? You’re inventing something new. It may have similarities to something you’ve done before, of course. But if you had done the exact same thing before, you wouldn’t be writing software now. You’d be copying software, which takes a few milliseconds typically.
So here’s the thing:
If we already know exactly what our software should look like before we write it, it’s because we’ve already written that exact software before. And then we’re done! There’s nothing more to do!
The act of writing software is an act of discovery. We’re discovering what software we need to write, as we write it.
That’s inherently unpredictable.