You’ve worked hard on the project for more than year. Finally, it looks like all the features are actually complete, and most even have unit tests. You can breathe a sigh of relief. You’re done.
Or are you?
Does “feature complete” mean “production ready”? Is your system really ready to be deployed? Can it be run by operations staff and face the hordes of real-world users without you? Are you starting to get that sinking feeling that you’ll be faced with late-night emergency phone calls or pager beeps? It turns out there’s a lot more to development than just getting all the features in.
Too often, project teams aim to pass QA’s tests, instead of aiming for life in Production (with a capital P). That is, the bulk of your work probably focuses on passing testing. But testing—even agile, pragmatic, automated testing—is not enough to prove that software is ready for the real world. The stresses and the strains of the real world, with crazy real users, globe-spanning traffic, and virus-writing mobs from countries you’ve never even heard of, go well beyond what we could ever hope to test for.
To make sure your software is ready for the harsh realities of the real world, you need to be prepared. I’m here to help show you where the problems lie and what you need to get around them. But before we begin, there are some popular misconceptions I’ll discuss. First, you need to accept that fact that despite your best laid plans, bad things will still happen. It’s always good to prevent them when possible, of course. But it can be downright fatal to assume that you’ve predicted and eliminated all possible bad events. Instead, you want to take action and prevent the ones you can but make sure that your system as a whole can recover from whatever unanticipated, severe traumas might befall it.