
It starts small. A script, maybe. Or a little automation someone banged together to stop a server from flapping. Late on a Tuesday, a person on the team writes it, tests it against whatever was breaking, and ships it into the dark. The alert noise stops. Everyone exhales. The creator never writes anything down—not out of laziness, but because to them it’s all so obvious. The tool becomes part of the floor. Invisible. Assumed.
Months go by. That person takes a new job. And then, at 2:14 a.m. on a Saturday, the script chokes. No one knows where it lives, how it gets triggered, or what it was actually supposed to do. The quiet risk has just become a loud outage.
We study infrastructure resilience at Gray Haven Lab. We see this pattern everywhere, in teams big and small. Somebody ends up being the living documentation for a chunk of the stack. The tool itself usually isn’t complicated—a Bash script, a Terraform module, a handful of iptables rules, a cron job that trims old backups. The fragility comes from the fact that only one brain holds the mental model. It’s not really a people problem. It’s a dependency problem with a human face.
The Shape of the Risk
We talk about bus factor like it’s a headcount metric. But the sharper question is: which tools have a bus factor of one? Eight engineers on a team, and still a single service can be a single point of failure if only one person understands its guts. The risk doesn’t spread across people. It clumps around artifacts.
These artifacts have a certain look. They got built under pressure—during an incident, or up against a hard deadline. They solve a narrow, concrete problem. They don’t appear on any official architecture diagram. You’ll find them squatting in someone’s home directory, a personal GitHub repo, or a cron table no one audits. They run silent, until they don’t.
The operational fallout is grimly predictable. The tool breaks, and the team has no shared language to describe what’s wrong. The on-call engineer sees a symptom—disk full, stale certificate, data pipeline gone quiet—but can’t follow it back to the cause. The fix turns into archaeology: reading old commits, grepping through Slack, praying the original author left a comment somewhere. Sometimes the only path forward is to reverse-engineer the tool’s behavior from its side effects.
Why Documentation Isn’t Enough
The usual advice is “document everything.” But documentation by itself doesn’t kill the quiet risk. A wiki page can describe what a script does while leaving out why it exists or what it silently assumes. The original author writes, “Syncs staging DB from production,” but omits that it only works if the VPN tunnel to the colo is up, that it wants a specific version of pg_dump, and that it will corrupt data if you even look at it wrong during a full moon—metaphorically speaking.
Operational knowledge lives in the friction. The workaround someone discovered at 3 a.m. The undocumented flag that avoids a race condition. The vivid memory of that one time the script filled a disk and took down a neighbor service. Documentation captures the happy path. Incidents expose the edges, and those edges stay in the builder’s head.
Even good documentation rots. A config file changes. A dependency gets bumped. The docs drift, and the only person who would notice is the one who already knows the system cold. For everyone else, the documentation becomes a false friend—confidently describing a reality that’s no longer there.

How Tools Become Single-Threaded
Nobody sets out to build a knowledge silo. The conditions are mundane. A senior engineer spots a toil task that keeps recurring and automates it in an afternoon. The automation is a side quest, not a project, so it skips review. It works, so it stays. The engineer becomes the de facto owner by right of creation.
Time passes. Patches accumulate. Each one makes the tool a little more opaque to an outsider. A flag appears because one environment acts weird. A conditional branch handles a legacy API that only the original author remembers. The logic turns into a geological layer cake of past incidents, each stratum laid down by the same person.
Team dynamics can speed this up. In places that reward heroic fixes, there’s a subtle incentive to be the one who understands the weird corners. Knowledge becomes currency. Sharing it can feel like giving away an advantage. Most engineers don’t think this way consciously, but the current is there. The quiet risk grows in the gap between individual expertise and collective capability.
The Incident Connection
Single-maintainer tools show up in prolonged incidents far more than they should. When an outage hits and the resident expert is unreachable, the rest of the team faces a puzzle with missing pieces. They can read the code, but they can’t read the context. They don’t know that restarting the service also means flushing a Redis cache, or that the monitoring check has a 10-minute hysteresis hiding the real failure.
The timeline stretches. A 20-minute fix becomes a two-hour dig. The team eventually resolves it—often by working around the tool instead of healing it. A new script gets written to replace the old one, and the cycle starts again. The original tool isn’t retired. It just sits there, a landmine for the next on-call rotation.
This is why we push for writing a recovery checklist before you need one. A checklist pulls the operational logic out of one person’s head. It doesn’t need to be exhaustive. It just needs to answer: “If this thing breaks and I’m not here, what would I want the on-call engineer to know?” We’ve dug into this in our piece on pre-incident recovery checklists, and the thinking applies directly to single-maintainer tools.
Spotting the Problem in Your Own Stack
The quiet risk is obvious in hindsight, but it’s sneaky in real time. Tools that only one person understands don’t wave flags. They hide. Still, there are signals.
First, listen for the “who owns this?” silence. In incidents or planning chats, if a question about a component reliably gets met with “Oh, that’s Sarah’s thing,” you’ve found a candidate. The tool may not even have a formal owner—just a name attached to it.
Second, look at your runbooks. If a runbook for a service references a script or a config tweak without saying how it works, and the only person who can elaborate is the one who wrote it, the risk is live. The runbook becomes a magic spell: run this command, trust the outcome. When the spell fizzles, nobody knows how to debug it.
Third, audit your cron tables, systemd timers, and scheduled jobs. Look for entries that aren’t managed by config management or infrastructure-as-code. These are often the “temporary” fixes that became permanent residents. They run quiet, and their failure modes stay invisible until they trigger a downstream mess.
Pairing as a Countermeasure
The strongest defense against single-maintainer tools isn’t a policy or a product—it’s a practice. When someone builds a new script or automation, have them pair with another engineer for a 30-minute walkthrough. The point isn’t code review. It’s transferring the mental model. The second person asks: Why does this need root? What if the network is slow? Where does the output land?
This pairing doesn’t need to produce perfect documentation. It just needs to create a second brain holding a rough copy of the logic. If the original author leaves, that second brain can reconstruct what matters. The knowledge doesn’t need to be deep. It just needs to be shared.
Some teams formalize this as an “ops buddy” system. Every operational tool gets a primary and a secondary owner. The secondary is expected to triage a failure, even if they can’t fix every edge case. The primary keeps the secondary posted on significant changes. The overhead is small. The reduction in quiet risk is real.

When the Expert Has Already Left
Sometimes you inherit the quiet risk. The builder is gone, and the tool is a black box. The immediate impulse is to rewrite it—often the right long-term call—but rewriting under pressure is dangerous. You don’t yet know all the edge cases the original handled. A rewrite can resurrect old bugs or miss critical side effects.
A better first step is a structured exploration. Treat the tool like a codebase you’re onboarding to. Start with inputs and outputs. What triggers it? What does it produce? What systems does it touch? Map the dependencies without changing anything. Run it in dry-run mode if one exists. Read the commit history, even if the messages are sparse. Look for clues in the timing of changes—were they made during a specific incident?
Record what you find in a living runbook. Write down the known unknowns. If you can’t figure out why a particular conditional exists, flag it. The goal is to shrink the mystery a little each week. The tool should be less opaque today than it was last week.
Once you have a working understanding, decide whether to refactor, replace, or simply document and tolerate the tool. The choice depends on criticality and replacement cost. Some tools are worth replacing immediately. Others are stable enough that the pragmatic move is to wrap them in better monitoring and call it done. The important thing is that you’re choosing consciously, not just hoping.
Building Resilience Into the Pattern
Resilience here means the tool can survive its creator’s absence. Concrete steps can move a tool from single-threaded to shared, even without a full rewrite.
First, move the tool into shared ownership. Put it in a team repository with clear maintainership. Add a README stating primary and secondary contacts. Even if the secondary only knows the basics, that’s better than a single point of failure.
Second, add lightweight operational tests. A script that prunes old backups should have a check verifying it can connect to the storage backend and that it’s not about to delete everything. These tests don’t need to be comprehensive. They just need to catch the most common failure modes before they become incidents.
Third, connect the tool to your alerting. If the tool fails, someone should get paged. The alert should include a link to the runbook. This sounds obvious, but many single-maintainer tools run without monitoring because the original author “just knew” when something was off. That knowledge leaves with the author.
The Cultural Shift
Addressing the quiet risk takes more than processes and runbooks. It takes a cultural acknowledgment that heroic solo work is a liability, not a strength. This can be uncomfortable in cultures that celebrate the 10x engineer who fixes everything themselves. The solo fixer is valuable in a crisis, but the long-term cost of their unshared knowledge gets paid by the team during the next crisis.
Managers and technical leads can model the right behavior. When someone ships a solo automation, the response should be “Great, who else knows how this works?”—not just “Great, thanks for fixing it.” The question isn’t a critique. It’s a recognition that shared understanding is part of shipping.
Over time, the team’s default posture shifts. New tools get built with an audience in mind. Comments explain the “why,” not just the “what.” Runbooks are written as if the author is going to be on vacation when the tool breaks—because eventually, they will be. The quiet risk doesn’t vanish, but it becomes quieter still, a background hum instead of a ticking clock.
FAQ
What exactly is a “single-maintainer tool”?
A single-maintainer tool is any script, automation, configuration, or service where only one person on the team understands how it works, what it depends on, and how to fix it when it breaks. It’s not about complexity; it’s about the concentration of operational knowledge in one person’s head. Even a simple cron job can qualify if no one else knows it exists.
How do I convince my team to invest time in documenting these tools?
Frame the conversation around incident risk and on-call health. Instead of saying “we need better documentation,” point to a recent incident where a knowledge gap stretched the outage. Ask what the team would do if the expert on a particular tool were unreachable at 3 a.m. Make the risk concrete and personal. Most engineers have been burned by an opaque tool during an on-call shift and will support efforts to reduce that pain.
What’s the difference between a runbook and documentation for these tools?
Documentation describes how the tool works. A runbook describes what to do when it stops working. Good documentation might explain the tool’s architecture, dependencies, and design decisions. A runbook is operational: it lists symptoms of failure, diagnostic commands, and steps to restore service. For single-maintainer tools, a runbook is often more valuable than exhaustive documentation because it directly supports incident response.
Is it realistic to have zero single-maintainer tools?
Probably not, and that’s not the goal. Every team has small utilities that only one person deeply understands. The goal is to ensure the critical tools—the ones whose failure would cause an outage or data loss—are shared. Start by identifying the tools that would wake someone up if they broke. Make sure at least two people understand those. The rest can be addressed over time as part of normal operational hygiene.