It's not that software is never finished. It's just that done is not a good description to describe the status of software.
What's the status of the "Buy 12 get one free promotion?"
What's done for one particular team isn't done for another. Done for the business analyst isn't done for the the person doing deployment. It leads to a lot of confusion among teams, particularly when teams are in multiple physical locations.
What's needed to help communicate the status is a common set of terms used by the teams in all locations to consistently indicate status. I use the following terms with my teams. This not only helps identify the status of a particular feature, it takes the emphasis off a particular phase and helps the team realize that one shot isn't the game. Half time isn't done. The goal of a software service or product is to rollout the features desired by the business, not to just complete one particular phase.
- Business requirements complete
- Graphical User Interface (GUI) requirements complete
- System requirements complete
- Technical design complete
- Code construction complete
- Code review complete
- Code review changes complete
- Unit test complete
- Unit test issues changes complete
- First pass system test complete
- System test issues complete
- Final system test complete
- Customer acceptance test complete
- Customer acceptance issues complete
- Deployment complete
- Pilot complete
- Rollout complete