You’ve worked hard on your project. It looks like all the features are actually complete, and most even have 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 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 and alerts? It turns out there’s a lot more to development than just adding all the features.
Software design as taught today is terribly incomplete. It only talks about what systems should do. It doesn’t address the converse—what systems should not do. They should ...