Thankfully, more and more people are defining when a new piece of functionality is “done” as when it gets released to a user. This is huge progress from previous definitions such as dev complete, test complete or business signed off.
Lessons from the Lean Startup movement show that we can do better. “Done” should mean used. It’s great having software out there but we need to know if it’s being used and providing value.
When defining requirements for a feature they should include business acceptance tests, e.g. this feature should drive this much traffic or n users keep returning to this feature.
If you are doing truly iterative development you need to keep iterating, pivoting and releasing until your business tests pass. That is when the feature is really “done”.