Developers are good at creating mental models of how the system probably works underneath. Non-developer users usually don&#x27;t do this. If you&#x27;re making a product for non-developer users, your subconscious tendency to model the system is a <i>disadvantage</i>, because you won&#x27;t have a reliable sense for what&#x27;s intuitive and what&#x27;s not. If an abstraction leaks, you&#x27;ll see straight through it and manipulate what&#x27;s under the abstraction; a non-developer user will continue to try to manipulate the abstraction itself.<p>This disadvantage potentially extends to managers whose job includes understanding what the abstracted-over system is, but they&#x27;re probably not thinking about it as hard on a day-to-day basis as the developers.<p>(Note that &quot;non-developer users&quot; probably also includes developers whose expertise does not extend to the specific system in question and therefore have no ability to guess what&#x27;s leaking across the abstraction barrier, e.g., Linux users trying to use a Windows tool, new employees figuring out your in-house build system, etc. etc.)