← All Essays

The 24/7 Engineer

Every other industry runs a night shift. Software finally has one: autonomous factories that ship tested code while you sleep, directed by humans who stopped typing.

Your best engineer ships code while you’re eating dinner.

The Night Shift Software Refuses to Take

You wake up, pour coffee, and open your laptop to find a pull request waiting. It was opened at 3:17 AM while you slept, but nobody got paged and nothing broke in production. The title is crisp, the description references yesterday’s sprint ticket and design doc, and it notes an edge case in the validation logic that you forgot to specify. The diff is clean, the tests pass, and the commit message is better than anything you’ve written this month. You review it and merge. By 8:30 AM, the feature is live in a preview environment without you having written a single line. A growing number of teams in 2026 already live this; for them, it’s just Tuesday.

But you’d never know it from the public conversation, which makes AI engineering look almost entirely visual and performative. Scroll through Twitter and you’ll find screen recordings of vibe-coding sessions, threads ranking IDE plugins, and hot takes about which autocomplete feels most “magical.” I watched someone build a calculator in nine minutes last week and get fifty thousand likes for it. We celebrate what happens on the screen because it’s easy to share, even though the highest-leverage work has always been invisible. Architecture doesn’t photograph well, constraint modeling won’t fit in a tweet, and communication and system design happen in documents. The IDE is just a display. Autonomous engineering is the extreme version of that invisibility, so the industry tends to ignore it when there is nothing obvious to post.

Every other industry figured out long ago that production doesn’t stop when workers go home. Factories run night shifts, hospitals staff graveyards, and airlines fly red-eyes. Even in software, we automated deployment years ago: CI/CD pipelines run while we sleep, monitoring pages us during dinner, and infrastructure scales while we vacation. We accepted that servers don’t need humans, but drew an arbitrary line at developing the software itself and insisted that someone had to be present to write it. That line comes from architecture, not physics, and it’s already dissolving.

The 8-Hour Trap

We don’t talk about it, but every team operates under the quiet assumption that work happens when people are awake. Standups happen at ten, deploys go out before five, midnight bugs are emergencies, and Friday features wait for Monday. This rhythm feels natural enough that we mistake it for a law. The forty-hour week was negotiated to protect human workers; it says nothing about how long software can operate. Applying that limit to automated engineering in 2026 is a category error.

Software doesn’t sleep. Servers run at 3 AM exactly as they do at 3 PM, and your auth service can be exploited on a Sunday whether you’re online or not. We built autonomous deployment, monitoring, and scaling, then hit the final mile and declared that a human still had to sit down and type. There is no technical reason for this; we simply never designed development to be as continuous as the systems it produces. Context decays every hour between idea and implementation, and the engineer who understood a requirement Tuesday morning has forgotten half its nuance by Wednesday afternoon. An eight-hour day is a context boundary as much as a time boundary, making every morning a partial reset and every weekend a hard reboot. We accept that friction because we’ve never known anything else.

The Software Factory

Most “AI coding” initiatives failed because of their architecture: one chat window, one huge prompt, and one general-purpose agent trying to hold the entire codebase, business logic, security policy, and deployment context in its head. It was like asking one person to design the product, write the code, run QA, and push to production in a single sitting. No human team would organize this way, so the predictable result was great demos followed by messy production code and expensive debt.

Teams operating at scale moved on to software factories: deterministic harnesses that route work between specialized phases. The first phase validates the product request against existing requirements and flags ambiguities. The second analyzes the codebase, identifies the services to modify, and produces an implementation plan that respects existing boundaries. Code generation happens in phase three, followed by automated and integration tests in phase four, security scanning in phase five, and deployment behind human approval in phase six. Because each stage is isolated and replaceable, you can swap the code-generation model without touching testing or update security policy without disrupting routing. Whatever you call it, this is industrial engineering applied to software.

The harness matters more than any one piece of code it generates. You spend more time tuning the factory than reading its diffs, because that is where the job is moving.

What “Away” Actually Looks Like

Abstract concepts collapse without concrete examples, so picture a Thursday evening after your team has wrapped sprint planning. A groomed and validated ticket moves to Ready for Dev, and the factory picks it up at 6:47 PM. The Product Validation agent reads the ticket, checks it against the requirements, and notices that the acceptance criteria mention an incomplete data-retention policy. Because the architecture already enforces a thirty-day default, it proceeds with that constraint and passes a structured intent document to the next stage.

The Architectural Planning agent maps that document against the current codebase. It identifies changes to the billing service, a new endpoint in the API gateway, and an update to the event pipeline. It also recognizes a strict interface contract in the billing service and designs around it instead of trying to refactor it. The Code Generation agent implements the plan within those boundaries, and the Testing agent generates unit, integration, and edge-case tests. One of those tests exposes a timezone issue the spec didn’t address, so the factory logs the failure, attempts a fix, and reruns the tests to verify it.

By 2:13 AM, the factory opens a pull request whose description contains the original ticket, the architectural decisions, the constraints respected, and the tests added. It describes the edge case the factory caught and resolved, includes a clean security scan, and tags the relevant engineers before moving to the next ticket. On Saturday, while the team is hiking or doing absolutely nothing work-related, the factory tackles technical debt. It refactors a legacy utility flagged by static analysis, updates two outdated dependencies with known CVEs, and generates documentation for an internal service nobody understands. None of this requires a human to be present, but all of it requires a human to have built a harness that defines what good looks like.

Monday morning feels different when you start from a full inbox of finished work instead of an empty one.

The Economics

The usual pitch here is a multiplier: five engineers plus a factory equals the output of fifteen, or whatever number a vendor wants to quote. I won’t pick one because I can’t defend it, and neither can most people citing one. More importantly, it argues the wrong thing because the win isn’t raw volume. With a tuned harness, the output is genuinely good and often better than what a tired human ships at 5 PM on a Friday, because the factory never gets sloppy to make it home. Counting that advantage in engineering hours repeats the mistake of counting lines of code; motion isn’t value.

The honest economics are about decoupling execution from your presence, not producing a larger volume of code. The real constraint on a software team was never typing speed; it was continuity. A human holds context for eight hours, goes home, and loses some of it overnight. Monday has to rebuild what Friday knew. A factory does not have that problem. The constraint you set Tuesday remains in place at 2 AM Saturday, while tests get written, debt gets paid, and dependencies get patched inside the boundaries you defined while awake. You wake up to more than you went to bed with.

Building the factory isn’t free. It requires real investment in harness architecture, constraint modeling, pipeline design, and continuous verification. I’ve spent more time tuning the router between agents than reading the code they produced, because that ratio increasingly defines the job. The alternative is competing against teams operating on a different clock, and raw typing speed was never the real problem.

The standard objection is that this just moves the work to review, which is true early on when the factory is unrefined and every PR needs a babysitter. But the burden moves in one direction. Each rejected change becomes a constraint you encode once and never explain again, while each accepted change gives the harness another pattern to follow. The review tax is highest on day one and falls from there; the keyboard team’s tax stays flat forever.

The House of Cards

The objection I hear most is about quality: “AI writes garbage. You’re stacking a house of cards that falls over the first time it meets real traffic or real bugs that someone needs to solve.” It’s the strongest argument against the factory, and it has a boring answer. We already know how to make machine output trustworthy because we’ve done it for decades. You don’t trust a deploy because a human typed it; you trust it because it passed the tests.

Quality was never a property of who wrote the code. It was a property of what the code had to survive. A thorough suite of unit tests, integration tests, and end-to-end Playwright flows doesn’t care whether a human or a factory wrote the function. It only cares whether the function works. And here’s what the skeptics miss: writing those tests used to be the tedious, expensive part everyone skimped on. Now it’s the cheapest thing in the building. The factory generates exhaustive coverage faster than a human writes a single assertion. The thing that makes autonomous code safe is the thing autonomous systems are best at producing.

So the factory doesn’t just write features. It writes the unit tests that pin down the logic, the integration suites that prove the pieces compose, the end-to-end Playwright flows that walk the actual user journey, and it ships behind performance monitors that catch regressions in production. Without tests, yes, it’s a house of cards. With them, it’s verified more thoroughly than most code a human ships by hand, because the verification finally costs almost nothing.

The New Role of the Engineer

The other fear runs deeper: if the machine writes the code, what do I do? The question assumes an engineer’s value is measured by the amount of code produced. That was never true, and it is more visibly false now. Churning out code has been a commodity skill for years; AI simply made the pricing visible. The value was always in the judgment around the typing: understanding which problem to solve, constraining the solution so it doesn’t damage the system, and communicating those constraints to everyone else. The work still requires a thoughtful engineer, but it increasingly rewards communication over keystrokes.

So what does the human actually do? Everything that requires context and taste. An engineer sits in the product meeting, hears “users need to export their data,” and recognizes that this means a GDPR-compliant, rate-limited, auditable bulk export with specific retention rules. Instead of writing the export function personally, they encode those constraints in the factory’s validation layer, where the gate enforces them. Implementations that break the rules are rejected automatically before a human ever sees them, and the loop continues until one passes cleanly. The engineer’s contribution was defining what correct looks like, not doing the typing.

The factory has no taste. It will implement a user flow that technically satisfies the requirements while destroying the experience, because it doesn’t understand how confusion and fatigue affect users. The human engineer defines the product sandwich, embedding innovation between familiar touchpoints so users don’t panic. They also decide which tickets deserve the factory’s time and which are symptoms of an unclear strategy. Machines are excellent at saying yes to every request; humans are still necessary for the veto.

Is this feature worth building now, or is it a distraction from the core revenue driver? Does the debt the factory flagged actually matter, or is it a false positive that will consume a week for no customer benefit? These are strategy questions, while syntax is increasingly the machine’s problem. Engineers who adapt write less code personally and multiply the value of every line the factory writes by ensuring it’s the right change for the right reason. Their day becomes a series of consequential yes-or-no decisions, with the factory handling the implementation.

The Compounding Gap

Teams building autonomous factories in 2026 aren’t just shipping faster; they’re compounding an advantage every night while competitors sleep. On Monday, the factory team may have shipped three features to the keyboard team’s one. By Friday, the gap grows because the factory’s tests have improved and its constraints have tightened. By quarter’s end, the teams operate in different leagues. The factory team is iterating not only on its product, but also on its own production capacity.

Most of us think linearly about productivity and imagine ten-percent gains, but a system that works continuously while you don’t is a categorical shift. Every night the factory accumulates more code, better tests, refined harnesses, and patched vulnerabilities. The codebase gets healthier while humans are offline. Meanwhile, the keyboard-dependent team resumes each week where it left off and advances only as quickly as people can type before their focus breaks. Continuous accumulation and periodic bursts produce fundamentally different growth curves.

By 2027, asking an engineer to implement a feature manually from scratch may look as quaint as asking an accountant to do long division by hand. They can do it, but it wastes human attention on a task the available tools can handle. Continuing to type every function manually when a constrained system could do it in your absence is institutional inertia wearing a rigorous mask.

The 24/7 work week is already here for teams that built it. They wake up to pull requests written while they slept and review code tested by systems they designed. For them, the bottleneck is no longer stamina. It’s judgment.