Home

Choosing Friction - Why Developers Feel Disconnected from Their Work

The tools removed the resistance that used to tie us to what we build. Nobody is going to give it back, so the craft now has to be chosen, and part of that choice is not ours to make.

I. The Library and the Machine

I learned to program at fourteen, in BASIC, on a computer that knew far more than I did and had no intention of telling me any of it.

There was no internet in that house. There was nobody to ask. There was only my family's 486, a blinking cursor and a handful of programs whose behavior I could observe and whose logic I could not yet read, and the method, if a fourteen-year-old flailing at a keyboard can be said to have a method, was this: change one thing, run it, see what broke. Change it back. Change something else. A number in a loop, a line moved above another line, a GOTO pointed somewhere it had no business pointing. The machine answered every experiment with exactly one of two verdicts, a result or an error, and it never explained itself, and it never got tired, and it never once pretended I understood something I did not.

That machine was the library and the only librarian, and the librarian answered every question by handing me the consequences.

Later the internet arrived and the library got bigger, and stranger, and much better staffed. Documentation, mailing lists, man pages, a forum thread from years ago where a stranger with a username like a typo had hit your exact bug, described it badly, and then come back eleven days later to post the fix (and, if the gods were kind, the reason the fix worked). The posture never changed, though. Half researcher, half mechanic. You read, you poked, you stared at the small parts of the machine until one of them confessed. Hours went into it. Some of those hours were stupid, most of them were how anything got learned at all.

The hunt was how the thing became yours.

Today you describe what you want, an agent writes it, the tests go green, and you ship. It works, which is not a small thing, and I will defend it later in this essay against people who would rather it did not. And a striking number of engineers, competent ones, productive ones, will tell you in private that they feel like visitors in their own codebases. They built the thing and they do not feel that they built it.

That feeling deserves better than to be dismissed as nostalgia, because it has a mechanism, and the mechanism is old.

II. The Feeling Has a Name

Gergely Orosz, who has spent years writing about how engineering actually gets done, described expecting AI to produce most of the code he ships and losing, in the process, something that took years to build. Erik Meijer, who helped give us LINQ and a good chunk of how a generation thinks about functional programming, praised the tools sincerely and then went off to make music on real instruments, because that was the place he could still find flow.

These are not just anecdotal cases. There's science to back this feeling up. A set of experiments published in Scientific Reports, about 3,500 people across four studies, found that after doing a task with generative AI, people's intrinsic motivation for doing similar work on their own dropped by about eleven percent and their boredom rose by about twenty. The researchers' explanation was almost tender in its plainness: people felt less in charge of the result, and so felt less connected to it.

Faster, more bored, less attached. Three readings from the same instrument.

And here I owe a correction, because in 2025 I wrote an essay called You're Not Being Replaced by AI. You're Being Freed to Think Again, which argued, with the cheerful confidence of a man who had not yet lived through a year of agents, that the tools would take the boring parts of the job and hand us back the thinking. Let the AI nail the beams, I wrote. You decide where the sun hits the living room.

Some of that held. The part that did not hold was the inventory. I had filed the friction under waste. I had looked at the hours spent under the joists counting nails and assumed they were the price of the architecture, a toll paid on the way to the real work, when a good share of them were the real work, or at least the part of it that put the house into your hands. I was right that the tools would free us from the friction. I was wrong about what the friction had been holding.

Engineers already have the vocabulary for what it was holding. Every system you have ever built has a cache. A cache hit is cheap. A cache miss is expensive: you go all the way to the origin, you wait, you fetch the real value, and on the way back you write it into local memory so the next request is fast. We spend careers minimizing misses, and rightly, for machines.

A mind is a different kind of system, because for a mind the miss is the only path by which anything gets stored. The forum dig was a slow fetch from origin, and on the way back the answer got written into you, along with the wrong answers you tried first and the shape of the system you had to understand to recognize the right one. An agent is a cache with a near-perfect hit rate, and the cache lives outside your head. Every request gets served. Nothing gets written locally. A year of that and you have extraordinary throughput and a stone-cold local store.

Call it cold competence: the ability to ship systems of which you hold no warm copy.

The sadness people are describing is what cold competence feels like from the inside. It has a cause, and the cause was described, with unsettling precision, about two hundred years before anyone wrote a line of Python.

III. The Servant Knew the Object

In the Phenomenology of Spirit, published in 1807, Hegel tells a short and famous story about a lord and a bondsman. Two consciousnesses meet, struggle, and one ends up commanding while the other ends up working. The lord appears to have won everything. He gets the enjoyment of things; the bondsman gets the labor of producing them.

Then Hegel turns the story over. The lord relates to the world only by consuming it, and consumption vanishes the moment it is complete. The bondsman relates to the world by working on it, and work, in Hegel's phrase, is desire held in check: you cannot simply devour the thing, you have to shape it, which means you have to understand how it resists you. And in the shaped object the bondsman finds something the lord never gets, his own mind made external and lasting, standing there in the world where he can see it. Over time the bondsman becomes the one who knows, and the lord becomes a dependent, propped up by a servant whose knowledge he never acquired.

Read that next to the job description we have been handed for the agentic era. The mechanic is promoted to orchestrator. You specify, review, approve, and enjoy the output. The agent does the shaping. In Hegel's ledger this is a promotion to lord, and he spent a chapter explaining why the lord loses.

There is an objection here, and it is a good one. Engineers have always delegated. A tech lead hands work to a junior and reviews the result, and nobody calls that a tragedy of self-consciousness. True, and the good tech leads always knew the cost, which is why the old advice was to keep a hand in the code. But notice where the forming went when you delegated to a junior. It landed in the junior. Somebody's cache got warm. The work produced a person on the other end, and that person became, three years later, the engineer you trusted with the payment system.

The agent has no self for the work to form. The shaping happens, the object comes out shaped, and the self-formation that labor has produced in someone for the entire history of making things is simply discarded, the way an engine discards heat. For the first time the bondsman's half of Hegel's story happens to nobody at all.

IV. Beside the Machine

Marx read Hegel and moved the story into the factory, where it got less metaphysical and more specific.

In the 1844 manuscripts he described the worker as estranged in several directions at once: from the product, which belongs to someone else, from his fellow workers, from what he called his species-being, and, most relevant here, from the activity of working itself. When the activity stops being an expression of the person doing it, Marx wrote, the worker "only feels himself outside his work, and in his work feels outside himself." It is hard to find a better one-sentence description of approving your fortieth AI-generated diff of the afternoon.

Thirteen years later, in the notebooks we now call the Grundrisse, he went further, in a passage known as the Fragment on Machines. As industry develops, he argued, the knowledge and skill of society as a whole, what he called the general intellect, gets absorbed into the machinery. The machine comes to contain the know-how that used to live in the craftsman's hands. And the worker, in a phrase that has aged like a prophecy, "steps to the side of the production process instead of being its chief actor." He becomes a watchman, a regulator, standing next to a process that no longer runs through him.

A large language model is the general intellect in an almost embarrassingly literal form. It is every man page, every mailing list, every eleven-days-later forum fix from every stranger with a typo for a username, compressed into weights. The library I used to walk into now walks to me, already digested, and I stand beside it.

There is an irony in this that Marx would have enjoyed more than I do. The forums were a commons. People wrote those answers for nothing, for each other, because somebody had once written one for them, and the value of the commons lived partly in the visit, in the fact that to use it you had to go there and read and be changed by what you read. The compressed version requires no visit. It is also, for most of us, rented back by the month.

V. When the Hammer Breaks

Heidegger gives the sharpest account of what actually happened to me in front of that BASIC prompt, and it starts with a hammer.

In Being and Time he observes that a tool in skilled use withdraws from view. When you are hammering well you do not see the hammer; you see the nail, the board, the shelf you are building. He called this being ready-to-hand. The hammer only becomes visible as an object, something you stare at and turn over and think about, when it breaks, or goes missing, or gets in the way. Breakdown is the moment the hidden structure of the world shows itself, because only then does the thing stop being a transparent extension of your intention and become a thing with properties of its own.

Debugging was institutionalized breakdown. A bug is the moment the stack stops being transparent and the framework, the runtime, the network, the lying assumption in the ORM all become conspicuous at once. Every SYNTAX ERROR my fourteen-year-old self ever triggered was a broken hammer, and every broken hammer taught me what a hammer was. The forum dig was what you did while the hammer was broken.

An agent absorbs breakdown. The error goes back into the loop, the loop retries, the test goes green, and the hammer never becomes visible to you because it never breaks in your hand. In cache terms, the miss still happens. It just never reaches you.

Later, in "The Question Concerning Technology," Heidegger widened the claim. Modern technology, he argued, reveals the world in a particular mode he called enframing, in which everything shows up as standing-reserve, stock waiting on call to be ordered: the river becomes a water-power supplier, the forest becomes a cellulose inventory. Against it he set an older mode, poiesis, bringing-forth, the craftsman attending to the material until the thing emerges. Code produced by an agent is standing-reserve in its purest form. Available, interchangeable, summoned on demand. You do not bring it forth. You place an order and it arrives.

Peter Naur, who had no interest in Heidegger and every interest in programs, reached the same place from the other side in 1985, in an essay called "Programming as Theory Building." His argument was that the real product of programming is a theory held in the heads of the people who built it: why the system is shaped this way, how it maps to the world, what would have to change if the world changed. The code is a lossy shadow of that theory. When the team that holds it disperses, the program dies, even if it keeps running, because nobody can modify it intelligently anymore.

Naur's theory is the warm cache. And cold competence makes possible something Naur only imagined happening at the end of a program's life. A program can now be born already dead.

VI. Labor That Leaves Nothing

Hannah Arendt split human activity in a way that maps uncomfortably well onto the sprint board. In The Human Condition she separated labor from work. Labor is cyclical, tied to necessity, and its products are consumed almost as fast as they are produced; it leaves nothing behind. Work is fabrication. It makes durable things, a world of objects that outlasts the act of making and that the maker can stand in relation to.

Software, oddly, used to be work in her sense. You made a thing, it stood there, and you knew where its joints were, because you had cut them. The agentic loop pulls it toward labor. Tickets in, diffs out, consumed by the next sprint, and nothing durable deposited in the person who did it. Twelve hours of pressing enter is the keyboard's purest form of the cycle Arendt was describing, metabolism without residue.

Simone Weil, who took a year off from teaching philosophy in the 1930s to work on factory lines so she could know what it did to people, wrote that attention is the rarest and purest form of generosity. She came out of the factory convinced that the pace of the line had been designed, without anyone intending it, to make attention impossible.

You asked, at some point in the last year, where your attention went. It went to the review queue. It went to the wall of diffs, the agent transcript, the dashboard. And what happens there is vigilance, which is a different faculty with a different shape. Vigilance waits for something to go wrong. Attention dwells in the thing itself until it gives up what it is. We traded the second for the first and booked the trade as a productivity gain.

VII. Against Nostalgia

Now the part of the essay where I have to keep it honest, because the version that stops at section six is a grievance with citations.

I do not miss the forty minutes I once lost to a Webpack configuration, and neither do you. A great deal of the old friction was waste in the plainest sense: documentation written by people who hated readers, forums where the answer to your question was a moderator closing it as a duplicate of a different question, toolchains that punished curiosity and rewarded only the people who had already suffered through them. Some of the romance of that era is survivorship bias wearing a hoodie. And the fourteen-year-old at the BASIC prompt, with no internet and nobody to ask, would have given anything for a patient explainer that never got tired of his questions.

The strongest objection is historical. Every generation of programmers has mourned the friction the previous generation had. Assembly programmers mourned registers. C programmers mourned manual memory management, sometimes while it was still corrupting their heaps. And each time the craft survived, so why should this time be different?

Because each of those transitions moved the friction up a layer. You stopped fighting registers and started fighting abstractions, and abstractions resist just as hard, so the breakdowns kept arriving and the caches kept warming. What is new is a tool that can absorb resistance at any layer you point it at, including the layers you needed to meet yourself.

And the same tool does not have to do that. Ivan Illich, in Tools for Conviviality, drew the line in 1973: a convivial tool extends the autonomy of the person using it, while a tool pushed past a certain threshold makes its users dependent, and the threshold is often a matter of how the tool is used rather than what it is. Anthropic ran the experiment that shows this in code. In a randomized trial where developers learned an unfamiliar library, the group with AI assistance scored seventeen percent lower on a comprehension quiz afterward. But inside that group the spread was enormous. People who asked the assistant only conceptual questions and resolved their own errors kept most of their learning. People who handed it the work did not. Same model, same task. The difference was the relationship.

Albert Borgmann, writing about technology and the character of everyday life a decade later than Illich, saw the same fork in the home. Central heating delivers warmth without the hearth, without the wood that had to be cut and the fire that had to be tended and the family that gathered around it because that was where the warmth was. He did not propose abolishing central heating. He proposed that we keep what he called focal practices, chosen deliberately, alongside the devices: the shared meal next to the microwave, the run next to the car. The device is fine. The device as the only way of meeting the world is the problem.

VIII. Choosing the Friction

So here is the claim, stated bare. The craft is still available, and it is no longer the default. The tools will not hand you the friction anymore. If you want it, you have to choose it, and choosing it looks less like asceticism and more like cache management.

Pick your hearth. Some part of the system you build by hand, on purpose, chosen for where the theory matters most: the domain model, the invariant that keeps money from duplicating, the subsystem that will page you at three in the morning. Everything else can come from the agent. That part comes from you.

Let things break in your hands. When the agent's code fails, read the failure before you re-prompt. Open the stack trace. Find out which hammer broke and why. That single habit, the refusal to let the retry loop eat every breakdown, puts you back in the place where the knowledge lives.

Use the model the way the convivial group in that trial used it, as a library you visit with questions, where the answers go into you before they go into the codebase. Ask it why. Ask it what would break if. Then write the thing yourself, or at least write enough of it that you could have.

Run the explanation test before you ship. Could you explain this change, out loud, to a colleague, at three in the morning, during the incident it is about to cause? If not, you are shipping a program without a theory, and Naur already told you what that is.

And move the curiosity to where resistance still lives. The domain still resists. Users still resist. Production at scale still resists in ways no agent has absorbed, because production is the one place the world gets a vote. The staring-at-small-parts instinct that used to go into a forum thread can go there now.

Each of these is a deliberate cache miss. Expensive, slower, a terrible idea for the dashboard. The only way anything ever got written into you.

IX. What You Cannot Choose Alone

And then the honest ending, the one Marx would insist on.

Alienation, for him, was never just a mood. It was a description of how work was organized, which means it does not yield to individual habit alone. The engineer pressing enter for twelve hours did not lack the right personal practices. He was on a team where there was no time to review and the goal was to ship no matter what. You can choose friction on a Tuesday afternoon. You cannot choose it on a team that measures you in diffs per day and quietly selects for cold competence, because the system, as the line goes, is perfectly designed to produce the results it produces.

Which puts part of this on whoever sets the pace. Budget for misses. Make review mean understanding, which means making it slower. Keep a few problems that juniors are allowed to solve slowly, the thing I argued in The Cost of Being Indispensable looked wasteful in the sprint and paid for itself in the five-year view. That argument is truer now than when I made it, because the slow problems were the warm caches, and we are running out of them.

The BASIC prompt never taught me anything. It just refused to pretend. Every error was a door. Every door was a cost. The cost was how the work became mine. The tools will not charge it anymore.

Pay it on purpose.