← 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, open your laptop. Waiting for you is a pull request. Opened at 3:17 AM, while you slept. Nobody got paged. No production incident. The database is fine. The clients are asleep. The title is crisp. The description references yesterday’s sprint ticket and cross-links the design doc. It also notes an edge case in the validation logic that you forgot to specify. The diff is clean. Tests pass. The commit message is better than anything you’ve written this month. You read it, merge. By 8:30 AM the feature is live in a preview environment, waiting for you to test it. You didn’t write a single line. A growing number of teams in 2026 already live this. It’s just their Tuesday.

But you’d never know it from the public conversation. The entire discourse around AI engineering is visual and performative. Scroll through Twitter and you’ll find screen recordings of vibe coding sessions, threads ranking IDE plugins, hot takes about which autocomplete feels most “magical.” (I watched one last week where a guy built a calculator in nine minutes and got fifty thousand likes. A calculator.) We celebrate what happens on the screen because it’s easy to share. The highest-leverage work has always been invisible. Architecture doesn’t photograph well. Constraint modeling is impossible to fit in a tweet. Communication and system design happen in documents. The IDE is just a display. Autonomous engineering is the extreme version of that invisibility. If you can’t post it on social media, the industry ignores it.

Every other industry figured out long ago that production doesn’t stop when workers go home. Factories run night shifts. Hospitals staff graveyards. Airlines fly red-eyes. Even in software, we automated deployment years ago. CI/CD pipelines run while we sleep. Monitoring pages us while we eat dinner. Infrastructure scales while we vacation. We accepted that servers don’t need humans. But when it comes to actually developing software, we drew an arbitrary line. Someone has to write it. That line is architecture, not physics. And it’s already dissolving.

The 8-Hour Trap

We don’t talk about it, but every team operates under a quiet assumption. Work happens when people are awake. Standups at ten. Deploys before five. Midnight bugs are emergencies. Friday features wait for Monday. This rhythm feels natural enough that we mistake it for a law. The forty-hour week was negotiated by factory unions to prevent human collapse. It has nothing to do with software. Applying it to software engineering in 2026 is a category error.

Software doesn’t sleep. Servers run at 3 AM exactly like they do at 3 PM. Bugs don’t check calendars. Your auth service will get exploited on a Sunday whether you’re online or not. We built autonomous deployment, monitoring, and scaling. Then we hit the final mile and said, here, a human must sit and type. There’s 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. The engineer who understood the requirement Tuesday morning has forgotten half the nuance by Wednesday afternoon. An eight-hour day is a context boundary as much as a time boundary. Every morning is a partial reset. Every weekend is a hard reboot. We accept this 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. A 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. The result was predictable: great demos and messy production code that creates expensive debt.

Teams operating at scale moved on. They built software factories: deterministic harnesses that route work between specialized phases. Phase one validates the product request against existing requirements and flags ambiguities. The second phase analyzes the codebase and identifies the correct services to modify. It produces a constrained implementation plan that respects existing boundaries. Code generation happens in phase three, within the guardrails defined by phase two. Phase four runs automated tests and integration suites. Security scanning happens in phase five. Deployment is phase six, gated by human approval. Each stage is isolated and replaceable. Swap the code generation model without touching testing. Update security policy without disrupting routing. Call it whatever you want. In practice, it’s industrial engineering applied to software.

The harness matters more than the code it generates. You spend more time tuning the factory than reading the diffs. That’s the job now.

What “Away” Actually Looks Like

Abstract concepts collapse without concrete examples. So here’s Thursday evening. Your team wrapped sprint planning. A ticket was groomed and validated, then moved to Ready for Dev. The factory picks it up at 6:47 PM. The Product Validation agent reads the ticket, checks it against requirements, and notes that the acceptance criteria mention a data retention policy that isn’t fully defined. It sees the architecture already enforces a thirty-day default, so it proceeds with that constraint. It 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 and a new endpoint in the API gateway. It also needs an update to the event pipeline. It recognizes the billing service has a strict interface contract from six months ago. It doesn’t try to refactor that contract. It designs around it. The Code Generation agent takes that plan and writes the implementation within those boundaries. The Testing agent immediately generates unit tests and integration tests, plus edge-case validation. One test fails. A timezone issue the spec didn’t address. The factory logs it, attempts a fix, reruns the tests, and verifies.

By 2:13 AM, the factory opens a pull request. The description contains the original ticket and architectural decisions. It lists the constraints respected and the tests added. It describes the edge case the factory caught and resolved. It includes a security scan showing no new vulnerabilities. It tags the relevant engineers. Then it moves 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 required a human present. All of it required a human to have built the 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. Pick your number. I won’t, because I can’t defend it, and neither can anyone quoting it at you. It also argues the wrong thing. The win isn’t volume. With a tuned harness the output is genuinely good, frequently better than what a tired human ships at 5 PM on a Friday, because the factory never gets sloppy and never skips a step to make it home. But counting that in engineering-hours is the same lie as counting lines of code. Motion isn’t value.

The honest economics aren’t about volume. They’re about decoupling. Execution stops requiring your presence. The real constraint on a software team was never typing speed. It was continuity. A human holds context for eight hours, goes home, and leaks half of it overnight. Monday rebuilds what Friday knew. A factory doesn’t leak. The constraint you set Tuesday is still the constraint at 2 AM Saturday. Tests get written, debt gets paid, dependencies get patched in the hours nobody is online, all of it 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 needs real investment in harness architecture and constraint modeling, plus pipeline design and continuous verification. I’ve spent more time tuning the router between agents than reading the code they produced. That ratio is the job now. But the cost of not building it is worse. You’re competing against teams operating on a different clock. Speed was never the problem.

The standard objection is that this just moves the work to review. True early on, when the factory is unrefined and every PR needs a babysitter. But the burden moves in one direction. Each rejected change is a constraint you encode once and never explain again. Each accepted one is a pattern the harness keeps. The review tax is highest on day one and falls from there. The keyboard team’s tax is 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. 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 - it’s the existential question, “if the machine writes the code, what do I do?” The question assumes an engineer’s value is measured in amount of code produced. That was never true and is more visibly false now. Churning out code has been a commodity skill for years, and AI just made the pricing visible. The value was always in the judgment around the typing: understanding which problem to solve and how to constrain the solution so it doesn’t destroy your system. Then communicating those constraints to everyone else. As it has always been, it’s about being a communicator and a deep-thinking engineer.

So what does the human actually do? Everything that requires context and taste. The engineer sits in the product meeting, hears “users need to export their data,” and understands this means a GDPR-compliant, rate-limited, auditable bulk export with specific retention rules. They skip writing the export function. Instead, they encode those constraints into the factory’s validation layer, where the gate enforces them. Implementations that break the rules get rejected automatically, before a human ever sees them, until one passes clean. The engineer defined what correct looks like. Typing was never part of it.

The factory has no taste. It will implement a user flow that technically satisfies requirements but destroys the experience. It doesn’t understand why a confusing flow makes users anxious. Fatigue killing engagement is completely outside its model. The human engineer defines the product sandwich, embedding innovation between familiar touchpoints so users don’t panic. They decide which tickets are worth the factory’s time and which are symptoms of unclear strategy. They say no. Machines are excellent at saying yes to every request. Humans are 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 eat a week of factory time for zero customer impact? These are strategy questions. Syntax is the machine’s problem now. Engineers who refuse this shift and cling to the keyboard are defending a commodity skill. The ones who embrace it become orchestrators of leverage. They write less code personally. They multiply the value of every line the factory writes by ensuring it’s the right change, done for the right reason.

They spend their day saying yes or no. The factory does the rest.

The Compounding Gap

Teams building autonomous factories in 2026 aren’t just shipping faster. They’re compounding advantage every night while competitors sleep. On Monday, the factory team has shipped three features to the keyboard team’s one. By Friday, it’s ten to three because the factory’s tests got smarter and its constraints got tighter. By quarter’s end, the keyboard team has stopped competing. They’re in a different league. The factory team isn’t iterating on product. They’re iterating on their own production capacity.

Most of us think linearly about productivity. We 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 starts each week where they left off, plus whatever they can type before their focus breaks. The difference between continuous accumulation and periodic bursts isn’t a bigger number. It’s a different shape entirely.

By 2027, asking an engineer to manually implement a feature from scratch will look as quaint as asking an accountant to do long division by hand. They can do long division just fine. It’s just a waste of human attention. The tools exist. The harnesses are production-ready. The architecture has been proven for years. 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. They review code tested by systems they designed. For them, the bottleneck stopped being stamina a long time ago. Now it’s just judgment.