How Agile Estimation is Like Brewing Beer
A brewer friend of mine asked me what a story point is: Imagine a user story is a beer recipe. We are designing it to some desired user outcome, a traditional style perhaps. Now we can weigh the grain, but 99% of all brewers in the world can only estimate the Hop Bitterness Units. And even if we went to all of the time and expense to do that, as soon as we do, the number starts changing.
Worse, it's not one dimensional. The perceived bitterness is affected by cohumulones, variety), wort viscosity, age, water chemistry, boil time, malt balance, alcohol content, changes in all of the above over the boil, packaging, etc, etc. We also use them for flavor and aroma and there is no way to measure those at all.
Yet, we can hit our target "near enough" and even fairly successfully duplicate a recipe on a different system with all of those variables changed. In that way - basing our outcome on an estimate we know has limited accuracy but is good enough to predict the outcome - story points are like HBUs. They are good enough, we know how much to buy, we can make good beer in the time allotted. This works to such a degree that nobody ever "solved" this problem because it's unimportant in the scheme of things.
So when we decide how much software we are going to create in the next two weeks, we pick a number, like an HBU, and commit to X points. The individual stories might or might not be accurately pointed but in the sum of the whole we can fairly consistently hit X, just as we consistently create a recipe in bitterness, aroma, and flavor.