Skip to main content
Technology Blog

What a Good Software Project Handover Includes

printed documents, a clipboard and a pen spread across a desk

A handover is where a project either succeeds or quietly fails. Delivering a working system and assuming the client will figure out the rest leaves the organisation dependent on the developer who built it.

The reason is straightforward: a working system proves that the code runs, not that anybody else can run it. Everything needed to operate, change and recover that system after launch has to exist somewhere other than in the head of the person who wrote it, and if it does not, the dependency is permanent no matter what the contract says. A good handover is the process of moving that knowledge into a form an organisation can hold.

Documentation that answers real questions

Good documentation is written around the questions a new team member will actually ask: how do I deploy, where is the configuration, what does this scheduled job do, what breaks if I change this. Architecture diagrams are useful; a runbook that matches reality is better. The test is whether someone who has never seen the project can make a safe change from the documentation alone, without opening a support ticket to find out.

shelves of books in a library with a desk and a laptop in front of them

That test is harder than it sounds, because documentation written by the people who built a system tends to describe the design rather than the operation. The design is how the code fits together. The operation is what happens when it fails, at a particular hour, on a particular evening, with a particular person unavailable.

A small number of topics cover most of it, and each can be checked against a specific question.

  • Deploying from a clean machine. Which tool, which branch, which configuration values must be supplied, and what success looks like while you are watching it.
  • Where configuration lives. Which values sit in the repository, which sit in the hosting provider’s console, and which live in a third-party service. Anything in the second group must be written down, because a console is invisible to anyone unaware of it.
  • What each scheduled job does. Its schedule, what it touches, what happens when it fails, and how to run it by hand. Jobs are usually the least documented part of a system, added when a report was needed and never revisited.
  • What breaks if you change this. The parts that look interchangeable and are not: a database column other code depends on, a webhook URL registered with a payment provider, a value that must stay identical across environments.
  • How to get help. Where the logs are, what to attach to a question, and who to ask when the answer is not obvious.

Keep it short enough to be read. A long document nobody opens is indistinguishable from no document, and the sections used under pressure should be the ones written first.

Everything in one place, with correct access

Domain access, hosting, source repository, deployment pipeline, third-party service accounts, analytics and backups. All of it documented, and all of it transferred to the organisation’s own accounts rather than left in the agency’s. If the agency is the only party who can reach production, that is a dependency rather than a handover, and it should be treated as a risk while it lasts rather than accepted as an arrangement.

Two categories get missed more often than the list itself. The first is anything with a renewal date attached: domains, certificates, third-party subscriptions, and services sitting on a trial that converts to a paid plan at a rate nobody agreed to. Written down with a date and an owner, these are routine. Undocumented, they renew on their own schedule and the invoice arrives after the decision has effectively been made.

The second is the difference between handing over a codebase and handing over a system. Applications contain more than code: certificates, DNS entries, jobs configured in a provider console, rate limits, API quotas, webhook secrets and monitoring rules. Some of it travels in the repository, some sits in an account, and some is a relationship with another organisation that must be re-established deliberately. The deployment pipeline work at SmartEdge IT Solutions keeps the first category honest, because a pipeline defined as code can be handed over and one assembled by clicking through a console cannot.

Data needs its own line. Agree what the organisation receives — an export of records in a documented format, a description of the structure, and a written statement of what happens to copies held by the builder and when they are deleted. Where customer or supplier records are involved, precision here is worth more than politeness.

Credentials and access, deliberately

Every account the project uses should be owned by the organisation, with named individuals rather than shared logins. Where access has to be shared, document who holds it and what happens when someone leaves. Personal accounts, agency email addresses registered as the owner of a production system, and passwords in a spreadsheet are the three patterns that cause real problems after a relationship ends.

a close view of a desk with a keyboard, a notebook, a pen and a coffee cup

An access register is the practical version of this. For each system the project touches, record who can reach it, what they are permitted to do, when that was agreed, and how the access is withdrawn. It looks bureaucratic and is less work than reconstructing permissions from memory during an incident.

Shared logins deserve a decision rather than a shrug. Where a system supports only one administrator account, treat it as a controlled exception: record that it is shared, name the people who hold the credentials, and keep them in the organisation’s password manager rather than in a message thread. A personal account registered as the owner of a production system is the same problem in different clothes: it stops working the day that person leaves.

Break-glass access deserves a plan too: who may reach the system when the normal route is unavailable, what they may do without seeking approval first, and what gets reviewed afterwards. Systems without one tend to depend on informal goodwill, which holds until it is needed twice.

Somebody has to be trained

A recorded walkthrough is a start, not a substitute. Agree a training session with the people who will actually operate the system, and let their questions shape the documentation afterwards. The questions asked in that session are the surest available test of whether the documentation is complete, and the gaps they expose are usually the same ones an incident would expose six months later.

hands working together over a laptop and notes at a table

Training works better when it is arranged by role rather than delivered once to everybody. Whoever updates content needs a different session from whoever deploys, and whoever answers the phone when a customer reports a problem needs another. A single walkthrough for all of them produces a lot of nodding and very little retention.

Ask each attendee to bring a real task and to attempt it during the session. The questions that come out of people doing their actual work are the ones that tell you what is missing, and they are cheap to collect while the person who built the system is still in the room. Write them down afterwards and fix the documentation — that is the purpose of the session, not a formality at the end of it.

Agree the maintenance plan up front

Decide before launch what support looks like, what response times apply and what falls outside the agreement. Agreeing it while everyone is still positive is much easier than negotiating it when something has broken. Include what happens at renewal, and put a reminder in the diary for the person who owns the relationship, because the conversation nobody remembers to have is the one that matters.

Be specific about what the agreement does not cover, because that is where disagreements come from. Adding a feature is not maintenance. Redesigning a report is not maintenance. Deciding eighteen months after the build that a new integration is required is a project, and recognising that earlier keeps it cheap.

Response times are better defined by severity than by a single number. A request that has stopped trading is a different thing from a question about a report, and a plan treating both alike either over-promises or under-delivers. The client should be able to tell which category they are in, and know what to do while waiting.

Some maintenance is genuinely optional, and saying so early gives the client a real choice rather than a vague reassurance. The honest position is usually that part of it is not optional and part can wait, with the caveat that deferred work accumulates: an ageing platform eventually makes a small change disproportionately expensive. That is a conversation for renewal rather than for the moment a routine update turns into an incident. The application maintenance support agreements SmartEdge IT Solutions writes set out that boundary explicitly.

Decide what happens to the original build team

The hardest question in a handover is what happens to the people who built it. A team that has just finished a project is often the team with the most context, and dispersing them immediately is how knowledge gets lost. Where the budget allows, keeping at least one person reachable for a defined period after launch costs very little and removes most of the early risk.

a team working at laptops around a table in a bright office

This is a resourcing decision as much as a technical one, so it should be made rather than inherited from whatever the delivery schedule happens to be. A defined period of availability after launch costs comparatively little next to the alternative.

If the team is moving on, capture what exists only in their heads while they are still reachable. The questions asked in the first month after launch are a running list of what the documentation failed to explain, and answering them takes an afternoon rather than rediscovering the gaps through incidents later.

The rehearsal: could somebody else deploy it?

One test finds more problems than any documentation review. Give the repository and the written instructions to somebody who was not on the project, on a machine that has never seen the system, and ask them to build and deploy it to a throwaway environment. Then time how long it takes.

people in a training session around a table with laptops and notes

Run it with the surroundings stripped of anything unspoken: no passwords already saved, no keys already present, no familiarity with the provider’s console. Whatever the original team would have done from memory is precisely what is missing from the document, and the rehearsal is where that becomes visible.

Write down every question that had to be asked and everything that could not be found. That list is the handover in a form nobody can argue with, because it came from the point of view of the person who will operate the system. If the exercise takes a day, the documentation is unfinished. If it cannot be completed at all, the project has a dependency that needs naming now rather than three months into a support arrangement. The DevOps consulting work at SmartEdge IT Solutions approaches the same problem from the other end, making deployment repeatable as a way of forcing the missing knowledge into writing before launch day.

Then repeat it against a restored backup rather than a working machine. Deploying from what already exists is not the same as rebuilding from nothing, and that difference is where the missing pieces live.

A handover is a date, not an event

Treat it as a scheduled item with a checklist, agreed during the build rather than at the end. Both sides should know in advance what is being handed over, and what will be provided afterwards. A handover that arrives unannounced, incomplete, at the end of a difficult week is where the majority of projects quietly fail, and it is almost entirely a planning problem rather than a technical one.

Put the date in the plan at the start of the build, with the same seriousness as a launch. Agree the contents while everyone still remembers the arguments, because a list written in the last hour of a difficult week contains whatever the team can still recall.

Give the client something to sign. Not a legal document — a short checklist stating what has been transferred, what has been demonstrated, and what remains open. It gives both sides the same definition of done and makes an incomplete handover visible rather than arguable. The project process at SmartEdge IT Solutions builds handover material in from the start for exactly this reason: it is far harder to assemble retrospectively.

What is not a handover

A zip of the repository. A deployment that only works from one person’s laptop. A working system with no record of how it is configured. Each of these looks like completion from a distance and turns into an incident report up close.

a planner, a notebook and a pen laid out on a desk

Two more patterns are worth naming. A handover in which the client watched a demonstration and nobody asked them to do anything means nobody has established that they could. And one where every account sits in the builder’s name, with passwords passed on by message, looks complete on a checklist and fails the first time somebody leaves.

None of this is difficult to arrange while a project is still running, and far cheaper than to repair afterwards.

Editorial profile

Sophia Morgan Software and Architecture Editor

Sophia Morgan covers custom software, integrations and system design for SmartEdge IT Solutions. Her subject is the decision before the build: what to buy, what to configure, what genuinely needs writing, and what will be cheaper to change later if it stays flexible now.

Also 2 articles in the Insights archive.

← Back to Blog