Abstraction-heavy codebases can be deceiving, with layers of indirection disguising themselves as valuable abstractions. Good abstractions, like TCP, hide complexity, allowing us to operate without delving into inner workings. However, bad abstractions often just add unnecessary cognitive overhead, making codebases more challenging to navigate. Abstractions have costs in terms of performance and complexity, and unnecessary layers of indirection can hinder understanding, debugging, and maintenance. It’s crucial to use abstractions wisely, ensuring they truly simplify the system rather than just adding complexity. Remember, if you’re not hiding complexity, you’re only making things more complicated.
https://fhur.me/posts/2024/thats-not-an-abstraction