winnitude!SOFTWARELet’s talk
← The Journal

Studio practice · 5 min read

The handoff starts on day one.

Make ownership, builds and operating knowledge part of delivery so the client can confidently continue the work.

In this article

Deliver the ability to continue

A repository and a final demonstration are not the whole handoff. The receiving team needs to build the software, understand its important decisions, operate it and change it without relying on somebody's memory. That capability is easier to establish gradually than to assemble in the final week. Treat the handoff as a series of small proofs throughout the project.

Start by agreeing who will own the code, infrastructure, domains, signing keys and third-party accounts. Identify the people who will maintain the result and the skills they already have. A small client's office manager needs different operating instructions from an internal platform team. The goal is appropriate independence: routine work should be possible without a specialist, while risky operations should have a clear path to somebody who understands their consequences.

Make a clean build an early milestone

Write down the supported toolchain and the commands needed to build, test and run the application. Pin dependencies where the ecosystem supports it and explain anything that must be installed separately. Keep real secrets out of the repository. Provide an example configuration that names the required settings without containing production credentials. The instructions should say what successful startup looks like.

Ask a second person to follow those instructions from a clean environment while the project is still small. Missing assumptions become visible immediately: an unrecorded SDK, a local directory, a private package or an asset that exists only on the original developer's machine. Martin Fowler's reproducible-build guidance explains why reconstructing older releases matters. For a contract project, the practical benefit is equally direct: the client can fix and extend what was delivered instead of commissioning an archaeological investigation.

Record decisions at the moment they matter

An architecture diagram should help somebody answer a question. Show the major components, their responsibilities and where persistent data lives. Use a separate sequence diagram for an important workflow if the static diagram is becoming crowded. A concise decision note can record the problem, options considered, chosen approach and consequences. The rejected options matter when a future maintainer wonders why the obvious alternative was not used.

For an example approval service, document why a notification failure does not reverse an already recorded decision, how retries avoid duplicate messages and where an operator can inspect failed jobs. These details are more useful than a large diagram full of library names. Keep decision notes near the code and link them from the onboarding guide. Update them when the decision changes, leaving enough history to explain migrations without preserving misleading instructions as current advice.

Hand over operations through a rehearsal

Write short procedures for deployment, rollback, backup restoration and common failures. Specify the required access and the point at which an operator should stop and escalate. A backup that has never been restored is an unverified assumption. Rehearse restoration in an isolated environment, using data appropriate to the client's privacy requirements, and record the result and any limitations.

Google's SRE material on canary releases describes evaluating a limited deployment before broader rollout. That pattern will not suit every small system, but its central question is useful: how will the receiving team detect a bad release and limit its impact? A modest application may use a staging review, a reversible deployment and clear monitoring. Choose a process the client can operate consistently rather than handing over an elaborate release system nobody has time to maintain.

Teach through realistic tasks

A recorded presentation can explain the system, but a receiving engineer should also perform ordinary work. Ask them to make a small change, run the tests, deploy to a safe environment and find a deliberately introduced configuration error. An administrator might instead add a user, revoke access and restore a mistakenly archived record. These exercises expose gaps that a passive walkthrough will miss.

Use questions from the rehearsal to improve the documentation. Avoid interpreting every question as a request for more pages; sometimes a better error message or a simpler command removes the confusion altogether. Keep the training tied to actual responsibilities. A support person needs to identify and communicate a failure, while an engineer needs to diagnose and repair it. Both should know where the relevant logs are and which information must not be shared publicly.

Close the engagement with explicit boundaries

Before sign-off, list delivered features, known limitations, deferred work and the versions of important dependencies. Transfer access deliberately and remove temporary accounts when they are no longer required. Confirm where the source, release artifacts, licenses and operating instructions live. If a commercial component has ongoing fees or redistribution conditions, make those dependencies visible to the client.

Agree what happens after delivery: any warranty period, support arrangements, response expectations and the process for new work. Distinguish a defect against the agreed behavior from a newly requested capability without turning every discussion into a dispute. A good handoff leaves both parties with a shared picture of the system and its remaining risks. The final meeting becomes confirmation of knowledge already transferred, rather than the first time the client discovers what it will take to keep the software running.

Sources & further reading

Primary material behind the discussion and useful places to go deeper. The recommendations and worked examples in this article are our synthesis.

Working through a software or game-development problem of your own?

Talk to Winnitude! ↗Explore our tools ↗