3 ms·
I was recently rewatching some old Taleb talks about fragility. Our software systems are extremely fragile. I wonder if there is any way we can make them anti-
by pharmakom 4y ago
I was recently rewatching some old Taleb talks about fragility. Our software systems are extremely fragile. I wonder if there is any way we can make them anti-fragile? What would this look like?
- f1refly 4y agoTDD helps a lot against fragility imo. The main issue is explaining why your project takes so much longer as your tests force you to work out every edge case.
- cbrogrammer 4y agoTDD helps close to 0 % with fragility and only exists to help development
- danuker 4y agoHow would you apply TDD to a backup system? By writing backup and restore tests? What if one test fails unreproducibly?
- ilyt 4y agoWell, you should test your backups. But TDD is entirely unrelated to the problem aside from including "test" in the name
- ilyt 4y agoTDD not really. Having tests help, writing them first is irrelevant
- icedchai 4y agoIt doesn't. All those unit tests don't guarantee you have a working system, especially when everything is mocked out (which is often the case.) End-to-end and integration tests are much more helpful. But even then, they won't look at operational concerns like backup and recovery.
- karlicoss 4y agofuzzing?
- gabesullice 4y agoI think they are. When a crash happens, the cause is identified, we patch the bug, and redeploy the system. After that, the software cannot fail for the same reason again—it's less fragile than before. A fragile thing is like a wine glass. Once it breaks, it cannot be restored to its original state and especially not made better than before. However, if you're talking about patching the system while it's still running, check out "Stop Writing Dead Programs" from Strangeloop '22: https://youtu.be/8Ab3ArE8W3s https://youtu.be/8Ab3ArE8W3s
- crote 4y agoThe telecom industry ran into similar issues and developed Erlang. I think a big takeaway from it is that designing systems which are failure-free is a fool's errant - no matter how hard you try, you can never get rid of 100% of the bugs. Instead, make it failure-tolerant: sooner or later every part of the system will break, so it should be constructed in such a way that it can gracefully recover from failures, and even operate with some parts of it unavailable. Crashes are expected, so the system is designed to handle them properly.
- nottorp 4y agoI haven't seen Taleb offer solutions... in the one book i managed to go through he just told you endlessly to be prepared for unpredictable events.
- atchoo 4y agoA long time since I read it but I think he gave examples like mithridatism, poisoning yourself to build up resistance. Anti-fragility is about incorporating change as an expectation instead of seeking stability and fearing it. For software, that would mean practices like Chaos Monkey. If your production system stays up while an external process is constantly killing processes and deliberately corrupting memory and files then you have good confidence of riding through unexpected failures.
- GnarfGnarf 4y agoSoftware systems will be fragile as long as people and organizations don't understand the cost of quality software, or don't think it's worth it. You don't get what you don't pay for™