At our company we've informally come up with "done-done!" What's that you ask? Well, how many times in your past, have you been told a piece of code you need to integrate into your module is "done" but after you goto integrate it.....it......well.....it's just done complete. Ya, it's technically "done" but there are more holes in it than swiss cheese! So what's the point of saying it's "done" when it's not REALLY done?!
And what does "done" mean to QA? Does it mean they can take a build? Is your piece feature complete and just needs some testing? What about integration with your partner classes/modules? What about regression testing? Unit testing? phew??!?!? Lots of questions eh?
Well, at my company, we've informally adopted the phrase "Done-Done!" What's that mean? Well, for you math-geeks out there, check this out!
Requirements + Code + SQL scripts + Dev Testing (that's means you and anything you do to prove to yourself it's done) = DONE!
But wait, you're not "Done-Done" yet. YOU might be done, but your piece isn't! You still need to "share" that piece with others, THAT'S where the second "Done" comes into play. You'd be surprised how often things get mixed up at this stage, hence the need for the next phase.
Done + Integration Testing + QA Testing + bug fixes (yup, there's gonna be some, just deal with it and fix'em) = DONE-DONE!
Once you this that point, THEN and only then can you say your piece is complete! So the next time you're in a meeting and the team lead/manager/boss ask you "are you done that piece yet?" Think about the above and answer honestly.
Now it's time to grab a coffee and get back to coding.