I've been thinking more recently about the see-through-ness of tools. Tools are see-through when the abstractions they provide don't unnecessarily cover up what's going on under the hood, i.e. when it's not too "magical" to be understood.

Often tools and abstractions (software libraries, algorithms) seem magical and easy to work with at first glance, but fall apart under its own complexity when you need to dig deeper into its inner workings to fix a bug or customize it to your specific usage. I think there are ways to design tools so that they're less susceptible to this kind of failure mode, though, where it's possible to peer beneath the abstraction layers provided by the tool without getting into a tangly mess you don't understand. I want to build more tools that empower users to peer inside and understand and modify, and fewer tools that operate only within the safety of its own walled garden.