* ''Patient: "Doctor, it hurts when I do this."'' * ''Doctor: "DontDoThat."'' All the stories are finished, all the unit and functional tests are running, the system is ready to go as far as you can tell. Now all you have to do is load up 15,000 live employees and pay them. The production support team plans to be there anyway, and will do most of the grunt work, calling people in when they need help. You make a plan for getting all the tasks done. It's Christmas season, so you make a list of who will be available and when. You load them ... and 600 people that weren't supposed to be there ... minus a few who were supposed to be there. You get a data feed, including 400 people who weren't supposed to be there, but who were included in their own feed ... so their data is duplicated in the database. Someone forgot that W2s have to be made, resulting in a couple of days' work that weren't in the plan. Production Support feels pressure, but doesn't want to bother people over the holidays. So they feel more pressure. When they do call people, they are sick or still out of town. People come in and rebuild the database on the fly. Everything is fixed, but no one is happy. Time runs shorter and shorter, and fears run higher and higher. There's no real way to test whether the fixes fixed anything. It's now clear that the right strategy was to back up the database, remove the bad people and records, and run everything correctly. It's now clear that you need a way to undo any given individual without backing up the entire database. Fears peak, support blows the whistle. An emergency meeting is called and the release is cancelled. Everyone suddenly realizes that launching all 15,000 people was a dumb idea, that doing it over the holidays was a dumb idea, that thinking Production Support could handle it in their CopiousFreeTime was a dumb idea, that imagining that the customers could even check all 15,000 people over the holidays was a bad idea. Doctor, it hurts when I release this. ---- ''Doc, it hurts when I don't increment.'' The above tale is not incremental. All the stories were incremental, the tests were incremental, but the release was not. It went from 0 records to 15,000 live grunting records in one jump. This is why XP recommends FrequentReleases with teeth. Releases that go all the way to end users, frequently, are less likely to hide surprises until they grow monstrous. ''A mixed metaphor is like a clear blue sky with no paddle. --PhlIp''