Ever worked on a project that seemed endless? You started with some idea of what you wanted to do but as the project went on that changed, creating more work, and done got further away. The cycle repeats and nothing ever makes it out the door.

If you don’t have a clear idea of what done means before you start it’s too easy to get distracted, go off on tangents, and move farther away from where you originally wanted to get to. Before you start you write down what you think done is for the project. It doesn’t have to be the final done, a good first milestone you can use to release something then stop and re-evaluate the project at works too.

As you start work you will learn more about the problem and have new ideas for what done means. Unless you’ve discovered your approach is completely wrong you should stick close to your original definition of done and make note of the new ideas for the next iteration. Building the “muscle” of finishing and shipping projects is important as it forces you to practice the whole lifecycle of creating software. If you keep changing what done means and never ship then you will never practise those parts of the process.

No matter how much work you’ve done it’s only valuable when it’s in the customers hand.