This blog is a summary, with lots of links, of the antifragile software movement. Loosely, Antifragile is the property of thriving through volatility and surprise. You can refer to the budding antifragile software manifesto , but note also that this goes beyond robust/resilient (see the picture below).
As part of a Digital Transformation, here are six things to think about.
1. Adaptive Failure Injection
Hormesis is the acceptance of a little trouble to gain protection from bigger trouble. In software, we use fault injection to improve testing coverage by adding some trouble. Fault injection alone is not antifragile, but if the system also learns from the problems, then it becomes antifragile. See also Simulated Fault Injection (SFI) and Software Implemented Fault Injection (SWIFI).
IEEE Xplore listed many fault injection tools and here is a survey of techniques. Fault injection can be hardware or software and can occur anywhere in the dev cycle. At compile time, Fault Injection Description Language (FIDL) allows compiler based injection tools to be extended with new failure modes. And, Generic Object Oriented Fault Injection (GOOFI) is an scholarly look at layering tools for pre-runtime.
2. Automatic Bug Detection and Repair
Folks at MIT have researched how to import checks from other applications (CodePhage) and perform automatic software patches (Genesis). Semantic Aware Model Checking (SAMC) can be used for bug discovery. Claire Le Goues, in FTFY, explains research advances in automatic bug repair and GenProg is a general method for doing this on legacy systems.
3. Failure As A Service
The term may not stick, but Failure-as-a-Service (FaaS) allows cloud services to perform failure drills. Gremlin is said to be a FaaS and Daniel Bryant talks about Netflix failure service with failure injection testing (FIT).
FaaS is antifragile because it looks at failure as a good thing.
4. Autoscaling and Microservices
Software with autoscaling/microservices, and feedback monitoring, is antifragile because there is gain from increased duress. Examples are AWS scaling of EC2 instances at infrastructure level and OpenShift scaling of app containers. Russ Miles wrote a book on creating antifragile software with microservices. And, here are some Perficient articles on autoscaling with IBM WebSphere and MQ and IIBA HQ, Oracle WebCenter, and Elastic Beanstalk.
5. Antifragile Software Design
Russ Miles says we “attempt to deliver while being prepared for the unknown.” Vikas Singh has some designs for antifragile software and suggests “high cohesion and loose coupling” and “while putting any new code in production, make it unpluggable in case things go wrong.”
Genetic Programming (GP) is designs that are expected to evolve and there is a group dedicated to this. Consider open source as an antifragile approach and also well-aged platforms because technology mortality decreases with time (Lindy Effect). Use principles of chaos engineering to address uncertainty and there is work on Lineage Driven Failure Injection (LDFI) to study fault tolerance of systems.
6. An Antifragile Culture
To produce more antifragile software, the dev process and culture should itself be more antifragile. Software has a tendency to reflect the culture in which it was created, so the organization is important. Rich Armstrong describes a process with a culture of FaaS, holacracy, and servant leadership. Bilgrin Ibryam states antifragility requires the right organization and team structure.
Continuous deployment and DevOps is antifragile. Werner Vogel, CTO at Amazon, talks about the scaling, continuous deployment, and a workplace of the future that embraces errors. He says “Today’s digital business models require smaller, frequent releases to reduce risk.”
The software of the future will have a rock-star team of bug writers!