This is one of the hardest questions in a software project. Most custom software is original, meaning no one has solved this problems in this way before. It is hard to give a fixed deadline when you donāt know for certain what you are going to make.
That said, there are some unnecessary reasons projects fall off schedule:
Scope creep is when a project includes work A, B, and C, but later on X, Y, and Z get slipped in. The problem with scope creep is that the project is never finished.
All software is never ācompleteā, so waiting for everything in you project to be 100% done is running a race with no finish line.
Project completion should be based on quantifiable metrics. For instance āfaster websiteā is not good, ā30% faster websiteā is better, and ā30% faster website based on report X in comparison in Aug 2024ā best.
The best tool I know of for keeping projects under control is to define the project in the context of outcomes, not features. Lets look at a quick example!
If I said our app should have a calendar feature, this leads to a long list of sub-features:
There are about a thousand things still missing from this list!
Lets contrast that with an outcome based project. We want users to be able to easily see a daily agenda and use a calendar style picker to easily switch to other days.
You can probably imaging a screen showing a list of events for today with a simple grid based month calendar with days highlighted that have events on them.
Doing this greatly reduces the complexity and scope of the project. This reduction in complexity is key to keeping a project on time. It also leads to tighter and more focused software that just works better.
How about you? Ever have a run away project? How did you deal with it?