Magic

Result of too much Abstraction. If you don't have a high-level understanding of a black box, its output may seem like magic.

Avoid leaky abstractions as a designer.

Avoid black boxes as a consumer.

Which means you should at least have some high-level knowhow of what's going on inside any system in order to use it => Grey boxes.

On the other hand, while designing a system, design it in such a way that there are no #surprisess. (Private) If that is the case, users wouldn't need to know your implementation details and you wouldn't have Leaky Abstractions

If you have to completely know the system in order to use it, then it doesn't make sense.