If you’re a data person like me, you probably keep track of your finances fairly closely. You also probably have a budget. The thing I’ve noticed about my budget is that every month there always seems to be some line item that I’m over budget on. Sometimes it’s dining out. Sometimes it’s groceries. Sometimes it’s something entirely different, but it’s always something.
There’s a couple reasons for this. The first of which is that my software calculates an average monthly expense. The problem is, assuming a normal distribution, that 50% of the time you are going to be above that average and 50% of the time below it. For budgeting purposes, using the average isn’t a great idea since any given month there’s a pretty good chance you are going to be above it. You probably should use average + 1 standard deviation or something like that, and then if you still have money left over you know that you’re on track.
What’s the big deal, you ask? Well, even if I’m not necessarily spending more than I save, I may be saving less than I should be for things like my kid’s college, retirement, emergency funds, etc.
But there’s a second and more important issue. Every month that I overspend my budget on some line item, I look to see what caused it. I’m looking for something I can do to avoid the overage in future months. It seems like most months I say to myself “oh, well that was an exception because my brother is only going to get married once, so I won’t have another large gift expense” or “well, my friends from California were in town, and they only come once a year, so no big deal that we went out and spent $200 on dinner.” And yet, every month, there’s some item that seems to be some exception.
So when does an exception stop being an exception? For my overall budget, probably some time ago when it became apparent that some line item was always going to be over budget. It’s hardly a budget anymore if I keep blowing it (or at least not a very good one).
What’s this have to do with software? The analogy applies to defects or your development budget and more.
Do you find that every defect you look at seems to be a special case or “really hard to find” or “a rare case” or “once in a blue moon”? When do you realize that these exceptions probably aren’t exceptions at all but part of a bigger pattern that while harder to solve is eroding the quality of your code?
Do you think that if you overran your budget in one month that something in the next month isn’t also going to come up? Maybe it isn’t the same exact thing, but it’ll be something. When do we stop denying the data and accept that what we want to believe is an exception is really a pattern?