It seems to make intuitive sense. Yet ultimately it feels like a sort of "generalized abstract nonsense", a way of "saying less and less about more and more until you are saying nothing at all about absolutely everything".
I can see how it can be used, at least at a metaphorical level, to explain things (like "how small flaws can compound to create big problems", as in this article). But it has never been clear to me how it can actually be used in practice in a positive way -- determining a small intervention that can be used to push a complex system in a desirable direction, rather than a problematic one.
Otherwise, of what use is it other than to convince us that in the real world, even the smallest mistakes we make can balloon way out of proportion? So... what are we supposed to do?
1. Keep our systems simple so that these things can't happen? (Then how do we build interesting things?) 2. Formally specify everything so that we understand every possible error mode? (Seems like just an indirect way of forcing ourselves to do #1.) 3. Add enough belts and suspenders and other layers of redundancy that the probability of a truly catastrophic error is reduced to the level that you feel comfortable with?
None of those seem very practical, except in the obvious domains where failure results in loss of human life or massive amounts of money.