Production Practice · Field note
Production Handoff Is a Release, Not a Folder Transfer
A reliable handoff leaves the next operator with control, context, recovery paths, and a clear account of what is actually running.
Begin with ownership, not documentation
A handoff is successful when the receiving team can operate the delivered system without depending on private knowledge or a developer's personal account. Documentation supports that outcome, but ownership comes first. Domains, hosting, repositories, analytics, email delivery, app stores, databases, and paid services should sit in accounts controlled by the appropriate client or organization wherever the platform allows it.
I make an environment and account inventory before the final release. Each item records its purpose, owner, billing contact, administrative path, renewal responsibility, and access method. Secrets do not belong in the handoff document. They should move through an approved password manager or another controlled channel, followed by an access check from the receiving side.
Freeze a release that can be identified and rebuilt
“The latest version” is not a durable reference. The production release should point to an exact commit, tag, artifact, or deployment record. The repository needs the configuration files, lockfiles, build commands, migration steps, and runtime version required to reproduce it. Environment-variable names can be documented without exposing their values.
The same discipline applies to content and data. The handoff should say whether production content lives in files, a content system, or a database; how schema changes are applied; which data was migrated; and how a failed migration is reversed. If a manual step remains in the release process, it should be written down in the order it must happen rather than remembered as team folklore.
Before acceptance, I run the release path from a clean environment where practical. A successful build on the original development machine proves less than teams often assume. Missing fonts, private packages, local paths, undocumented tools, and ignored files usually become visible only when someone else attempts the same process.
Hand over the operating system around the product
Production is more than application code. DNS, TLS certificates, scheduled jobs, storage, background workers, email providers, webhooks, cache rules, and firewall settings all influence whether the product works. The operating map should connect these parts in plain language and identify where each is configured.
Backups need more than an enabled status. Record what is backed up, where copies are stored, how long they are retained, and who receives failure notices. A restore procedure should name the prerequisites and the point at which restored data becomes authoritative. If a restore has not been tested, say so directly; an untested backup is evidence of intent, not evidence of recovery.
Monitoring should cover signals that someone can act on. At minimum, the receiving team needs to know where application errors, deployment failures, availability alerts, and infrastructure limits appear, along with who is expected to respond. A channel full of alerts with no owner is not an operational safeguard.
Transfer judgment, not just access
The most valuable handoff session explains decisions that are difficult to infer from the code: why a service was chosen, which shortcut is temporary, where the system is sensitive, and what should not be changed casually. I keep this close to the system map and decision record instead of producing a long narrative that will be hard to maintain.
The receiving operator should perform the important actions during handoff. That may include deploying to a non-production environment, reviewing logs, rotating a test credential, restoring a sample backup, editing content, adding a user, or rolling back a release. Watching a demonstration is useful; completing the procedure is better evidence that access and instructions are sufficient.
Close with a written production state
A clean close records what was delivered, what was accepted, and what remains. Known defects, deferred work, browser or device limits, third-party constraints, temporary settings, and open security updates should be visible in one place. Hiding a small defect to make the handoff look cleaner only makes the next decision worse.
The final note should distinguish warranty correction, ongoing maintenance, incident response, and future feature work. Those are different obligations with different response expectations. When the support boundary is explicit, both sides can act quickly without debating whether every new request was implied by the original delivery.