First, the rule:
Nothing done after 12 straight hours can be trusted.
Yes, you. Everyone from nurses to truck drivers to factory workers to yes, even engineers. This is a general labor problem. After 12 hours, your brain is simply fatigued.
I've done some data mining of our defect tracking system, and this has been true over my last 3 or 4 jobs:
- Our bug rates climb close to 3x for developers working during "crunch times" - precisely when they're pulling 12-16 hour days.
- Our duplicate bug rate, unreproducible bug rate, and "wow what the heck does that mean?!" bug rate all increase 2-5x during QA crunch times.
- Our reopen rate goes up during the same crunch periods, as does the number of erroneous reopens.
In the case of software development, there are probably a couple of reasons. First is simply error rates as the brain gets tired. The second is that these long work hours are almost always in a crunch period when you're rushing something out the door. Adding fatigue to a sense of hurry is a recipe for cutting corners. Cutting corners increases mistakes.
What can we do?
First and most important, send people home. Keeping them working for more than 12 hours straight will only increase your problems and reduce your overall productivity. Don't fall into the trap.
Second, and this is implied by your first reaction, try to avoid excessive crunches. Crunch times will happen, and it can't be helped. So be sure you're well-rested going into them. And when they're done, ease off for a while.
Third, rotate people so your entire team isn't crunched all at the same time. Be careful here that the entire team has bought into this so you don't get friction from someone leaving at 5 when another person has many more hours of work to do.
We're all under a lot of pressure, and "yesterday" is usually the desired delivery date, but don't violate the 12 hour rule, or you'll just pay for it on the back end.