"You probably need to talk to Dave." "Only Sarah knows that pipeline." "Use Jenkins, but not that Jenkins." "Don't deploy on Fridays."
If you've worked in software long enough, you've heard some version of every one of those sentences. They're all answers to the same question, and it happens to be one of the fastest ways I know to judge the health of a software platform. Can I deploy your code? I mean right now, safely, using the process the team claims to trust, without three meetings first, without someone digging up the right Confluence page from 2019, and without waiting for Dave to get back from vacation.
The answer tells you a lot.
The Clean Answer and the Telling One
Sometimes the answer is clean. Yes, the pipeline is in GitHub Actions, you merge to main, the artifact builds once and gets promoted through environments, and the rollback steps are in the runbook linked from the service README. The platform may still have problems, but the team has turned deployment into a repeatable process and made the dangerous thing harder to do by accident.
Then there's the other kind of answer, the one that starts with "Well..." and wanders through which cluster it depends on and why you shouldn't touch production. When you hear that, you've found a fragile system protected by institutional knowledge instead of engineering discipline.
The engineers usually aren't the problem. The people around these systems tend to be smart, careful, and deeply experienced, and they know where the bodies are buried because they've spent years digging the system out of trouble. The platform has just gotten so fragile that only a few of them know how to get a change out safely.
How Folklore Forms Around Critical Systems
That's how organizations end up with folklore around their most critical systems. Nobody sets out to do it, and nobody writes a strategy document that says let's make this service terrifying to operate. It happens slowly. A deployment fails once, so someone adds a manual checklist. A database migration goes sideways, so only one person is allowed to run migrations after that. Then a production incident lands on a Friday, and Friday deployments are forbidden forever.
Each of those decisions made sense at the time, and in isolation most of them still do. The team was responding to pain and trying not to repeat a bad day. But if nobody goes back and fixes the system, the workaround becomes the process.
Over time the organization starts calling it expertise, but every deployment that needs a specific human instead of a repeatable process is technical debt. A manual checklist often turns out to be automation nobody got around to building, a release captain is often a single point of failure with a calendar invite, and a "safe deployment window" usually means nobody trusts the deployment path.
Carrying Risk by Hand
This kind of debt is easy to hide because the system appears to work. Features still ship and the status reports still turn green, while underneath, the team is carrying risk by hand. One engineer knows which environment variable can't be changed. Another knows which job has to be restarted after deployment, even though nothing in the pipeline says so. Someone else knows the first deploy usually fails and the second one usually works, and somebody knows rollback only works if the schema didn't change, the cache wasn't warmed, and the moon is in the right phase.
That knowledge is valuable, and it's dangerous when it stays in people's heads, because it doesn't onboard anyone and it doesn't survive a resignation or a bad week. You cannot scale heroics.
Hero engineers are usually created by broken systems. The organization rewards whoever can nurse the deployment through production and ends up depending on the person who can fix what nobody else understands. That person may be doing excellent work while the system around them fails, and good engineering leadership doesn't confuse that dependency with value. Dave may be great at his job. The question worth asking is why the platform needs Dave in order to deploy safely.
Complexity Does Not Excuse Fragility
When only one or two people can deploy a service, the organization usually tells itself a flattering story about how complex the service is and how senior the people who understand it are. Sometimes that's true. Complexity still doesn't excuse fragility, and a hard domain doesn't justify a process nobody can safely repeat.
The more the system matters, the more its deployment and recovery paths matter. A deployment pipeline is an organizational contract, spelling out how code moves from idea to customer, who can change the system, and how recovery happens when something goes wrong. When that contract is undocumented or depends on a few people, the organization has made a choice, whether or not anyone made it consciously, and it chose speed in the moment over a platform that holds up later.
That choice compounds. New engineers learn to be afraid of production, teams learn to wait for the right person, and releases get bundled together because every deployment is expensive. Bigger releases carry more risk, which breeds more fear and more process, and eventually somebody in a planning meeting asks why delivery feels so slow.
The Signs Are Visible If You Look
The signs are usually visible if you're willing to look. Deployments get scheduled around specific people. Runbooks explain what to do only when everything goes right, and the recovery procedures are either undocumented or untested. There's a long checklist nobody fully understands, production access works like tribal status, and nobody wants to be the one who presses the button. People say "safe release window" when they mean the platform scares them.
Production deserves caution, and customers shouldn't be treated as test fixtures. Caution and discipline are different things, though. Discipline looks like small changes, tested rollback paths, and a deployment process that makes sense to someone who didn't build the original platform, while fear looks like a team moving the release because one particular person is out that day.
The Better Question
A better question than who knows how to deploy this is what would need to be true for any qualified engineer to deploy it safely. That changes the conversation, because you stop going after the person with the knowledge and start moving the knowledge into the system.
In practice that's unglamorous work. You write down the deployment path and automate the manual steps where the automation is obvious. You build the artifact once and promote it through environments, make configuration explicit, and document rollback honestly, including the cases where rollback isn't safe. You practice recovery before a customer is waiting, keep branches short and releases small, and add checks where mistakes have already happened. Eventually production stops feeling like a haunted house.
None of this requires perfection, since a platform where nothing ever fails is a fantasy. Healthy systems fail in ways the team understands, recover through paths the team has practiced, and make common operations boring.
Controlled Deployment
The goal is controlled deployment, which is a long way from casual deployment. A casual deployment is "just push it and see what happens." A controlled one means the process is clear, the blast radius is limited, and recovery is ready before anything ships. Mature teams build toward that by removing superstition while keeping judgment, and by getting expertise out of one person's head without pretending deployment is ever risk-free.
The hard part is that this work doesn't look impressive. It won't produce a shiny feature for the quarterly demo, because it looks like deleting old Jenkins jobs, fixing flaky tests, and turning rollback into something somebody has run. Somebody has to do it anyway, because the system is what happens after the code ships. If the code can only be deployed by one person, or rollback is written down but nobody has tried it in a year, or production support depends on whoever remembers the last outage, all of that is part of the system too.
Architecture covers more than services, APIs, and queues. It includes ownership, deployment, and the shape of the work after the pull request is merged, which is why most architecture problems are ownership problems and why deployment exposes them so quickly.
What the Question Reveals
That's what makes "can I deploy your code?" such a useful question. It sounds tactical, but it cuts straight through the story an organization tells itself, and it shows you whether the pipeline is trusted, whether recovery works, and whether expertise has been turned into engineering discipline or left as folklore.
Nobody is saying every engineer should deploy every system casually. Production access controls, compliance requirements, and change windows can be completely legitimate. Those controls should be explicit and designed, though, and a vague warning passed down like a campfire story doesn't qualify. "Don't touch production" is a symptom, and so is a release window that exists because rollback is fake and monitoring is weak.
The healthier path is slower at first. It takes time to make deployment repeatable, patience to unwind fragile pipelines, and leadership willing to protect the work when feature pressure gets loud. The payoff is that engineers stop waiting on rituals, incidents shrink because changes shrink, and routine work stops depending on heroes.
A healthy platform is one where any qualified engineer can deploy the code safely, because the system was designed to make the right thing easy and the dangerous thing difficult. That kind of maturity never shows up on an architecture diagram. You see it when someone new asks whether they can deploy your code, and nobody on the team flinches.
Frequently asked questions
What does the question “can I deploy your code?” actually reveal?
- It reveals whether deployment is a repeatable process or a ritual that depends on specific people. A clean answer (merge to main, the artifact builds once, promotion is controlled, rollback is documented) shows the team has made the right thing easy. An answer that routes through a particular person, a particular cluster, or a forbidden Friday reveals a fragile system protected by institutional knowledge, and it tells you whether the pipeline is trusted and whether recovery works.
Why is depending on one person to deploy a problem if that person is excellent?
- Because the useful question is why the platform needs that person in order to deploy safely. Knowledge trapped in one person's head doesn't onboard new engineers and doesn't survive a resignation or a bad week. Hero engineers are usually created by broken systems that reward nursing deploys through production, and good leadership doesn't confuse that dependency with value. The fix is to move the knowledge into the system so the person stops being a requirement.
How do these fragile deployment processes form in the first place?
- Slowly, through sensible one-off responses to pain. A deploy fails, so someone adds a manual checklist. A migration goes sideways, so only one person runs them. An incident lands on a Friday, so Friday deploys are forbidden. Each decision makes sense in isolation, but if nobody goes back to fix the underlying system, the workaround becomes the process and the fragility hardens into folklore.
What is the difference between a casual deployment and a controlled one?
- A casual deployment is pushing it and seeing what happens. A controlled deployment has a clear process, a limited blast radius, and recovery ready before anything ships. Mature teams aim for controlled, which means removing superstition while keeping judgment and making risk visible instead of pretending deployment is risk-free.
Are deployment controls and restrictions always a bad sign?
- No. Production access controls, compliance requirements, and change windows can be completely legitimate. Legitimate controls are explicit, understandable, and designed, while symptoms are vague warnings passed down like campfire stories, such as don't touch production. Even a no-Friday-deploys rule can be sensible, but if it exists because rollback is fake and monitoring is weak, it is just naming the fear.
What does it take to make a platform deployable by any qualified engineer?
- Move the knowledge out of people's heads and into the system. Write down the deployment path, automate the obvious manual steps, build the artifact once and promote it through environments, make configuration explicit, and document rollback honestly, including the cases where it is not safe. Practice recovery before a customer is waiting, and keep branches short and releases small. None of it requires perfection. Healthy systems still fail, but they fail in ways the team understands and recover through paths the team has practiced.
