The problem is that the &quot;bad&quot; kind of magic the author describes (opaque, complex interfaces that don&#x27;t follow any logic) are unavoidable.  In the past, you simply couldn&#x27;t produce these behemoths, so people built elegant simple things.  Now you can produce Microsoft Excel, or Adobe Photoshop.  Once you start building real world products and start adding all the features that people need, things get messy.  I&#x27;ve been in the situation where adding certain features would make the code very messy and would break the logic of the interface, and argued against adding them, but the people who worked with users insisted that these features were needed.  And I agreed in the end, users really did need these features.<p>I think the only thing that has a chance to tame the complexity of software is better languages, like Haskell and beyond.