In agile projects, we talk a lot about "done." Some teams talk about done, or done-done, or done-done-done. To me, that's confusing. I have one definition of done, and that's release-able. When we use done as release-able, I know what the feature is when someone marks it as done when it's moved across the board during the iteration.
But if you are in the midst of your transition to agile, you might not be there yet. You might have legacy code with tons of technical debt, and you don't know if the changes you have made are safe. What do you do then?
- Define your team norms. I like my definition. No surprise there! But if you don't have a cross-functional team that includes testers, and you are writing your own automation, decide what you are going to call done for your team.
- Write your own automated tests and decide what level they will be at. If you are a developer, you need to write automated unit tests. If you have no testers on your team, someone has to write system level tests. Or, something that looks like system level tests.
- Consider swarming around each feature as a team, so every person chooses a role for each feature. Trade off roles for a given feature, so you all share the love of writing code and tests equally. This is especially good if you have technical debt and you have to pay it off. If you know you have a feature that will touch on an area of large technical debt, the swarming will allow to work as a team to address the debt and pay some of it off.
- If you don't have testers on your team, make sure you raise this as an impediment and have some management person address this. Remember, agile teams are cross-functional teams. Yes, people can play other roles, but if you are not, by nature, a great tester, it will show in the product.
If, for some reason, you have a handoff to another group before the product can be released, step back and examine why. It's not a crime, but it does create another step. Is there a good reason for that step? If so, consider ways to integrate that step into your work. Is there a way to integrate?
The more you integrate all the work for a feature into your cross-functional team, the more agile you will be. That is, the more able you are to release an increment of product, get feedback, and accept change. And, that's the point of your definition of done.
So, when you think about done, think about a definition of done that works for your team and your environment. And, if your definition of done is not release-able, re-examine your definition every so often to see if it is still working for you. Maybe things have changed.