A few years ago, my wife, daughter and I were out to dinner. My daughter was about three at the time. My daughter, who has always been a daddy’s girl looked up at me mid-meal and said “sit with you?”. To be fair, my daughter has me wrapped around her finger, but I said “not until you are all done.”
So, she looked down at her pizza and declared “I all done.” Smart girl, I thought. Since I had allowed her control of the definition of done, she could simply declare herself successful and get what she wanted. So, I clarified, “not until you finish your pizza.”
“Done” wasn’t something that I could assess really. After all, who was I to say whether she was satiated or not. All I could see was that there was pizza on the plate. What does this have to do with software, you might ask.
Well, the critical difference between “done” and “finish your pizza” is who was the one with the ability to assess success. In software measurement, many measurements have a denominator that serves to represent the amount of work. You might use function points, lines of code, story points, etc. But, the distinction you should be making in choosing your metric is “is this measure independent from the people doing the work?”
Lines of code and story points are not. Function points are. If you don’t establish the ability to independently assess the amount of work, then you are putting the definition of success entirely in the hands of the developers. That’s not to say that developers want to do a bad job, but when push comes to shove, it’s easier to fudge a metric you control than actually make a change for the better.