Not All Friction Is the Same
Source: Dev.to
Introduction
Lately there are many posts celebrating the “death of friction,” praising how AI removes the friction of writing code and increases development velocity. But is friction always bad?
Friction in Software Development
From my personal perspective, the friction a shelter wall provides when a rocket hits it is good friction. Let’s consider a less dramatic example.
When Git arrived, it changed how we manage source code. Anyone could create branches locally, making branching trivial and cheap, and merging easy. Multiple developers could work on the same code in parallel. A lot of the friction imposed by central version‑control systems was removed, which increased the velocity at which changes could reach the main codebase.
To regain visibility and control over those changes, we introduced a new intentional point of friction: Pull Requests. With PRs, a change becomes visible before it is merged. Someone else reviews it, discussions happen, and CI gates can run. PRs deliberately slow the final step so that we regain visibility and control.
Good vs. Bad Friction
- Bad friction slows us down because of effort: writing boilerplate code, setting up environments, repetitive work. Removing this friction improves velocity.
- Good friction is introduced intentionally to maintain control, safety, or correctness. Examples include PRs, deployment gates, controlled releases, feature flags, and even type checks.
The interesting thing is that when “bad” friction disappears and velocity increases, we often need to introduce new “good” friction so things don’t get out of control.
AI and the New Friction Landscape
We are witnessing AI dramatically reducing the friction of writing code, which boosts development velocity. However, the risks don’t disappear. We now need to find ways to introduce new and refined friction that allows us to move at this new speed while regaining visibility and confidence.
Conclusion
Not all friction is the same. Some friction hinders progress, while other friction provides essential safeguards. As tools evolve—especially with AI—we must balance the removal of unnecessary friction with the introduction of purposeful friction to keep development both fast and reliable.