I’m a big fan of Martin Fowler and his work. Recently I came by an interesting panel from InfoQ ‘07 about Modifiability in Agile development () . While I concur with many of the things said, one thing I would have expect to have in that panel, and did not hear - is focus on writing software which is easy to maintain and support.
A lot has been said about Test-Driven development and how important it is to understand the problem domain and start by writing the top-down test plans and embed it into the software development process. That is quite right, but the problem domain does not only covers the end-user, it also covers the people who need to maintain and support the software. Let there be "Operations Driven Development" an augmentation to "Test Driven Development".
Some background: JAJAH Operations team works 24 by 7 (some actually say it’s 26 by 8, but that’s a different story) with the sole purpose of delivering the best possible VOIP quality. This covers web servers, application servers as well as telephony and networking equipment. That’s kind of complicated, marrying all these technologies together and than make sure they all play nicely together. That’s where JAJAH NOC (Network Operations Center) comes into play, tracking every part of the system, around the clock, constantly. These hard working guys don’t care much about Modifiability, they care about Maintainability.
Hence, the consumer who picks up the bill is only one part of the equation when it comes to software development of mission critical system (and others as well). As software developers, we should not only think on how to make sure our software is tested according to the product understanding, but also how do we as developers bring out software that other can keep on running.
Developers should be well conscience about software monitoring, alerts, logging and error reporting. Providing good monitoring, error reporting and exception handling so other people can perform root cause analysis and react is not a science - it’s an Art. It’s also a sign of a mature developer.
I’ve been looking into error reporting Design Patterns and found surprisingly too few of those. I wonder why.
Amichay