I recently watched a video of Nassim Taleb in which he explains the difference between anti-fragility and robustness in terms of economics and nature. A short explanation is that "anti-fragile" describes something that benefits from mistreatment as opposed to "robust" which describes something that can survive or tolerate mistreatment.
After thinking about this, I realized a big problem with software development is that we expend tremendous energy trying to make systems robust, but seem to give little or no thought to making them anti-fragile. To counter this problem, I thought I'd share a few ideas on how to make software development more anti-fragile.
#1 Embrace the idea that unexpected results can often be positive experiences. "Bugs" should be a thing of the past and should simply be observations about what the system does instead of an indictment of how poorly someone has implemented some other person's idea of how the software should function.
#2 Create a culture around facilitating change instead of trying to restrict it. Instead of having a "Change Management Process" or a "Change Control Process", have a "Change facilitation process". The focus should be on getting changes done, NOT restricting them.
#3 Avoid unecessary monocultures. Anybody with a lawn knows how difficult it is to keep out "non-grass" plants (otherwise known as weeds). In the same note, expending effort to keep every server and every desktop on the exact same platform is more effort than can ever be recouped. At runtime, it doesn't matter if your system uses ruby, python, linux, windows, and z Series, it just matters that it works and all the pieces can work together.
These are just a few ideas and as with any solution, there are negative consequences for attempting to pursue this path. What I wonder is, what other things can we do to make development more anti-fragile?