While I like James Reason&#x27;s book and I find its discussion of mental models instructive in my code and in my life, I do have to break with him on his conclusions, which chiefly amount to the takeaway that systems at the level of complexity we&#x27;re building today are impossible to run safely, and we should shut them all down.  (I exaggerate, but only a little.)<p>A book I like which responds to Reason&#x27;s is Nancy Leveson&#x27;s Engineering a Safer World (free PDF from the MIT Press, even! <a href="https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;books&#x2F;engineering-safer-world" rel="nofollow">https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;books&#x2F;engineering-safer-world</a>) which says, okay, if we don&#x27;t want to shut these systems (like the Internet) down, how can we run them safely, and provides some guidance.<p>I gave a short talk about it at Facebook&#x27;s most recent Security@Scale conference in Boston a couple weeks ago, the video of which is here: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=e_-n5wX8okQ" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=e_-n5wX8okQ</a><p>Edit: To tie this back to the OP, I think while it&#x27;s desireable for software to be as simple as is reasonable given constraints, it&#x27;s decreasingly possible to say that all software can be built so simply that analytic reduction works, and we need tools to help us cope with software systems which exhibit emergent complexity.