All non-trivial abstractions are leaky to some degree.
Spolsky's 2002 law. TCP abstracts away unreliable networks until the network is bad enough that the abstraction's behaviour shows through, which is why abstractions must be understood, not just used.
In practice
- A spreadsheet that hides the currency conversion works for three years and produces a wrong number the day a rate is missing.
- A no-code platform works until the requirement falls outside it, at which point the user needs to understand everything it was hiding.