In our Scrum time we have a Definition of Done posted to the office wall. It's nice. It tells us when a task is done. It's not easy to achieve everything required every time. But it is possible.
There exists also another Definition of Done. It isn't written down anywhere. And it is completely useless:
"You are done with a piece of code or a feature when you won't need to touch it again"
It is useless, because it is impossible to achieve. Only code you delete might not change anymore. Of course there is still version control, so even that piece of code might come back.
Your not done when there is nothing to change. You are done when you provide some business value.