Understanding Over Origin: Why the Missing Friction in AI Coding Matters
Reflecting on Dev.to community discussions regarding code origin, developer friction, and the true meaning of code comprehension.

Stock photo for illustration only, not from the actual event
- Expanding on a previous essay discussing code origins and developer perspectives.
- Drawing lessons from Dev.to comments by developers like @darkwiiplayer and @madsendev.
- Analyzing the fundamental difference between handwritten code and AI-assisted curation.
- Highlighting how real-time friction during coding builds genuine technical understanding.
A few days ago, I published an article titled 'Understanding Over Origin,' which sparked fantastic engagement and thoughtful discussions with developers worldwide. While not everyone agreed, healthy debates across diverse perspectives are precisely what make tech communities thrive. However, the more I engaged with the comments, the more I realized something about my own workflow: I still write a significant portion of my code by hand, and those are the exact parts I take the most pride in.
This isn't gatekeeping or nostalgic identity-defense, but rather an honest admission that my initial essay was incomplete. My conversation with @darkwiiplayer turned out to be my favorite because it forced me to wrestle with an unfinished idea, ultimately leading to this essay.
First, I want to thank the community members who engaged with the core arguments. @unitbuilds pointed out that standardized benchmarking suites represent modern software engineering standards, much like scientific discoveries. He also reminded us that the burden of correctness always rests on the developer who signs off on the pull request. Meanwhile, @madsendev proposed a brilliant concept: what if AI-assisted projects included a self-quiz mechanism on your own repository to prove you actually understand what you built?
"Maintenance receipts are much harder to fake."
komo
That single sentence from @komo completely reframed the debate. Tests, bug fixes, production incidents, and refactoring leave a trail of concrete evidence proving that someone not only built the project but continues to understand, improve, and take responsibility for it over time.
From an analytical perspective, discussions surrounding AI coding tools often operate on two distinct layers. Layer one focuses on code quality, maintenance, and technical understanding—the primary debate in most developer threads. Layer two dives deeper into philosophical questions regarding training data, consent, and scaled machine learning without explicit permission. Acknowledging both layers allows us to grasp the full complexity of the modern software landscape without dismissing valid engineering arguments.
Another profound shift came from @fromzerotoship, who isn't a traditional developer but has successfully shipped over 20 internal tools using AI running in a hospital environment. While they might fail a line-by-line code explanation test, they demonstrate undeniable competence through behavioral resilience under deliberate failure. This made me realize the real distinction isn't about who typed the characters, but about friction.

Stock photo for illustration only, not from the actual event
When I write code by hand, I encounter problems in real-time. I hit a wall, my approach fails, I refactor, and I discover the problem space through constraints and failures. I make active decisions between paths I have personally explored. Conversely, when using AI, I describe my goal, review generated options, and pick the one that looks right—acting as a curator rather than an explorer.
Both methods can yield working code, but the cognitive path to understanding is fundamentally different. Handwritten code generates friction, insight, and better subsequent decisions, whereas AI assistance relies on selection, implementation, and validation.
Source: Dev.to
Found something wrong in this article? Report an issue with this article
Comments
Leave a Comment