The Law of Leaky Abstractions
I see this fact used pretty often to dismiss the idea that we should use abstractions at all, and I think that's pretty wrongheaded. As an example, it's pretty common to hear that people should prefer writing raw SQL to using an ORM or query builder because those are both "leaky abstractions"<p>Abstractions aren't necessarily only there so that you don't need to understand anything about what's being abstracted. They are there so that your code can get away from nitty-gritty implementation details, and be more focused on the problem domain.<p>What would you rather see when you're coming into a new codebase:<p><pre><code>    const formData = new FormData();
    formData.append('name', 'Widget');
    fetch(`/api/widgets/${id}`, {
       method: 'POST',
       body: formData
    })
</code></pre>
or:<p><pre><code>    Widget.save({ name: 'Widget' });</code></pre>