Designing for Cost
Interfaces that hide what they cost — the repository call that loads a million rows, the N+1 that is an API-shape failure before it is a query failure.
Do not optimise blindly — and notice that the structural choices deciding allocations, copies, round trips and contention are all made before there is anything to profile.
An interface that hides what it costs is a design failure. `findAll()` looks like a getter and may read the whole table; a signature that cannot express a bound cannot be used safely.
The classic N+1 is treated as a query bug and fixed with an eager-load hint. Often it is an interface that only knows how to answer about one thing at a time, called from a loop that had no alternative.
Immutability, boundary adapters and DTO mapping layers all buy reasoning guarantees with copies. That is usually a good trade and it is never a free one, so the design should be able to say what it bought.
The quote is about small efficiencies and it is routinely used to dismiss all performance thinking. Structural cost decisions are not premature; micro-tuning without measurement is.