Availability and Rugged Software Design

Ever been ready to check out at a store or restaurant when the credit card machine went down? It usually isn’t the credit card terminal itself, but something between that terminal and the merchant . . . phone line or power line down, cell tower gone dark, or any number of other things that can go wrong. It’s understandable, but still frustrating when things don’t hum along as expected.Rugged Software and Happiness

Availability of some applications is critical to their users, and 100% Availability is an attribute that software developers and IT departments around the globe are struggling to achieve. The old definitions of “high availability” just aren’t good enough today. Let an application fail two or three times and watch users move to another one that may be more stable. Social media is replete with referrals from users of competing applications, and unhappy users will seek advice from happy users to find an application that is “always available.” RuggedLeanAgile

Reliability, Availability, Maintainability and Survivability are attributes of rugged software that we strive to build into applications right from the outset. From a user’s view, Reliability is the measure of failures over time. Availability is the percentage of time the app is ready to use. Maintainability, which we discussed in a previous post, is a measure of the ease with which an application can be restored to operational status following a failure. Survivability is the ability of the application to recognize an attack and defend itself.

Typical objectives of Availability requirements are to ensure that the app is ready for use whenever it is needed, where ever the user wants to access it. It’s important that we constantly strive for that goal of 100% Availability, because your customers are going to expect that level of dependability.

Much of the planning of building in these safeguards is accomplished in our Discovery white board sessions with our clients, and the User Stories that result from that planning. Then we apply Test Driven Development and Continuous Integration practices, which, of course, are derived from our Lean and Agile approach to software development.

It has been amazing to watch the sophistication of software grow over the last decade or so. Reliability and Maintainability have always been a factor in software planning. Availability formerly was the challenge of an IT department, but with the advent of our mobile devices, it has come to the forefront for every application, with Survivability following closely behind.

It’s safe to say that all applications in the future are going to be required to have these rugged attributes, and that the Open Source community will continue to develop software and frameworks that make our online presence(s) more seamless, more productive, and more enjoyable, while doing a lot more for us invisibly in the background.