Updated: September 20, 2026 Author: Sajjad Farajollahi Primary intent: technical handover / project acceptance / operational continuity Audience: businesses, agencies and technical teams receiving ownership of a website, automation or custom system
The short answer#
A project is not finished when the feature works. It is finished when the receiving organization can find the source of truth, access the system safely, deploy or change it deliberately, recover from failure, identify current owners, and understand known limitations without depending on the departing builder.
GitHub's own repository guidance describes README files as a place to explain what a project does, how to get started, where to get help and who maintains it (GitHub README guidance). GitHub also provides explicit ownership controls through CODEOWNERS and release controls through protected branches and deployment environments (CODEOWNERS, protected branches, deployment environments). WordPress documentation separately reminds operators that a complete backup requires both files and database state (WordPress file backup guidance).
The Sazvara handover standard turns those ideas into a compact acceptance system for real client delivery.

What technical handover means#
In this guide, technical handover means the controlled transfer of operational knowledge, access, ownership and evidence from the delivery team to the organization responsible for the system after acceptance. It is not a folder of screenshots. It is a proof that the system can survive a change in personnel.
That definition matters because many project failures happen after successful launch. The site is live, but nobody knows who owns DNS. The automation runs, but the contractor's personal account owns the workflow. The repository exists, but production was changed manually and no longer matches it. Backups are configured, but nobody has tested a restore. The project appears complete until the first incident or staff change.
A good handover makes those dependencies visible before the original builder disappears.
Handover starts at kickoff, not on the final day#
Ownership decisions should be made while the system is being built. Waiting until delivery creates predictable problems: accounts are opened under personal emails, credentials are scattered, configuration choices are undocumented, and the team must reconstruct architecture from memory.
At kickoff, decide:
- which organization owns the domain and DNS;
- which account owns hosting and cloud resources;
- where source code lives;
- who can approve production changes;
- who pays for third-party services;
- how credentials are created and revoked;
- what acceptance evidence will be required;
- who owns the system after the support window closes.
These are commercial and operational decisions, not administrative cleanup.
Standard 1 — Establish the source of truth#
Every system should have a documented authoritative location for code, configuration and operational instructions. For a software project, that is normally a repository plus controlled deployment configuration. For a low-code automation, it may include platform exports, environment configuration and a separate repository for scripts or schema definitions.
The README should answer what the system is, how to run or inspect it, where to get help and who maintains it. GitHub lists those functions as typical README content (GitHub README guidance).
If production contains manual edits not represented in the source of truth, document and reconcile them before handover. A repository is not authoritative simply because it exists.
Standard 2 — Transfer organizational ownership of accounts#
Create an asset register covering:
| Asset | Required handover information |
|---|---|
| Domain and DNS | registrar, owner account, recovery method, renewal responsibility |
| Hosting/cloud | organization account, billing owner, environments, support route |
| Repository | canonical URL, organization owner, default branch, access roles |
| Database/storage | location, backup policy, restore route, retention |
| Email/delivery | provider, sending domain, authentication ownership |
| APIs/integrations | vendor, account owner, token location, scopes |
| Analytics | property owner, access groups, retention |
| Licenses/plugins | purchaser, renewal, transfer limitations |
| Automation platforms | workspace owner, workflow IDs, service accounts |
The key test is simple: if the original contractor's personal email disappears tomorrow, does the client still control the system?

Standard 3 — Transfer access without transferring passwords in a document#
A handover pack should explain where access is managed, not contain reusable master passwords. Prefer named user accounts, organization workspaces and revocable credentials.
GitHub's secrets documentation recommends limiting credential permissions and supports environment-level controls so secrets can remain unavailable until protection conditions are satisfied (GitHub secrets). OWASP's Secrets Management Cheat Sheet likewise recommends centralized control, rotation and least privilege for secret material (OWASP Secrets Management).
The handover should record:
- account or credential purpose;
- owning organization;
- scope/permissions;
- where the secret is stored;
- rotation owner;
- expiry if relevant;
- revocation procedure.
After acceptance, remove obsolete contractor access and verify that the receiving organization can log in independently.
Standard 4 — Document environments and deployment flow#
The receiving team should understand how local, staging and production environments differ. Document versions, configuration boundaries, data restrictions and the normal deployment path.
A useful environment section answers:
- What branch or artifact represents production?
- How is staging created or refreshed?
- Which secrets exist only in production?
- Are database migrations automatic or manual?
- Which checks must pass before deployment?
- Who approves production release?
- How is a failed deployment rolled back?
GitHub protected branches can require reviews and status checks before merge, while deployment environments can require approval before a job proceeds (protected branches, deployments and environments). Even teams not using GitHub Actions can adopt the underlying control model: production change should follow a known, reviewable path.
Standard 5 — Provide an operational architecture map#
The architecture diagram should help someone operate the system. Decorative boxes are less useful than boundaries that answer real incident questions.
Show:
- user entry points;
- application or CMS;
- database and storage;
- external APIs;
- webhooks and scheduled jobs;
- email/SMS delivery;
- analytics or monitoring;
- authentication boundary;
- backup location;
- manual review queues;
- data flows that cross vendors.
Annotate the diagram with ownership where ambiguity is likely. If a lead form depends on a CRM webhook and a transactional email service, the operator should see that chain immediately.
Standard 6 — Include a runbook for routine operations#
A runbook turns knowledge into repeatable action. It should be concise enough that people actually use it.
Minimum runbook procedures:
- normal deployment;
- rollback;
- backup verification;
- restore process;
- common incident diagnosis;
- log locations;
- cache/CDN clearing if relevant;
- credential rotation;
- adding/removing users;
- vendor support escalation;
- pausing automation safely;
- resuming or replaying unfinished work.
The runbook should distinguish safe routine actions from changes that require approval. It should also state prerequisites. "Restore the backup" is not a procedure if nobody knows which backup, where it is or what the restore affects.

Standard 7 — Prove backup and recovery, not just backup configuration#
A backup is only useful if the organization knows what it contains and can restore it. WordPress documentation explicitly separates file backups from database backups and notes that the database is normally stored separately from site files (WordPress file backup guidance).
For a website or automation system, record:
- what is backed up;
- schedule;
- retention;
- storage location;
- encryption/access boundary;
- most recent successful backup;
- last restore test;
- recovery steps;
- recovery owner.
Where possible, perform a restore test in a non-production environment before handover. The evidence can be simple: timestamp, restored version, validation checks and result.
Standard 8 — Document code and change ownership#
A receiving team needs to know who reviews which areas and how changes become accepted. GitHub's CODEOWNERS mechanism can automatically request review from responsible teams and can integrate with branch protection so owned code requires appropriate approval (GitHub CODEOWNERS).
Even without CODEOWNERS, document:
- default reviewer for application code;
- owner of infrastructure/deployment files;
- owner of security-sensitive configuration;
- owner of content/CMS changes;
- owner of workflow rules;
- who may merge or release;
- how emergency changes are recorded afterward.
This prevents ownership from being inferred from whoever last touched a file.
Standard 9 — Record known limitations and deferred work#
Handover is not a claim that the system is perfect. State what remains unresolved.
Use a visible known-limitations register with:
- issue or assumption;
- operational impact;
- workaround;
- risk if ignored;
- recommended next action;
- owner;
- whether it blocks acceptance.
This protects both parties. The client receives an honest system state, and the delivery team avoids implying that every future problem was already solved.
Standard 10 — Attach acceptance evidence#
Every major acceptance claim should have evidence. Examples include:
- tested user flows;
- deployment version or commit;
- screenshots of critical states;
- monitoring/log evidence;
- backup/restore result;
- form delivery verification;
- automated test output;
- accessibility or performance checks where relevant;
- list of credentials revoked after transfer.
The objective is not paperwork for its own sake. Evidence gives the next operator a known-good baseline. If a problem appears later, the team can compare current state against what was actually accepted.
Standard 11 — Revoke temporary access and verify independence#
After the receiving team confirms access, remove temporary accounts, old tokens and unnecessary permissions. GitHub environments and repository permissions make it possible to scope access and require approvals; the broader principle is least privilege and clean ownership (GitHub managing environments, GitHub secrets).
Then run an independence test: ask the receiving organization to perform a routine operation without the departing builder. That might be logging in, deploying to staging, rotating a low-risk credential, restoring a test backup or finding the incident runbook.
If the organization cannot do it, handover is not complete.
Standard 12 — Schedule a short post-handover verification#
Some missing knowledge only appears during real operation. Schedule a follow-up after the system has been used under normal conditions.
Review:
- incidents or questions since transfer;
- unclear documentation;
- access problems;
- unexpected vendor dependencies;
- backup/recovery alerts;
- monitoring gaps;
- recurring manual work;
- whether named owners are actually performing their roles.
The post-handover check should not reopen the project indefinitely. It is a controlled verification that ownership transferred in practice rather than only on paper.
The Sazvara minimum handover package#
The full standard can be summarized into eight deliverables:
| Deliverable | Purpose |
|---|---|
| Asset register | proves organizational ownership |
| Architecture map | shows components, data flow and external dependencies |
| Access register | shows where access is managed without exposing secrets |
| Environment/deployment guide | explains how change reaches production |
| Runbook | supports routine operation and incidents |
| Backup/recovery record | proves recoverability |
| Known-limitations register | records remaining risk honestly |
| Acceptance evidence | establishes a verified baseline |

A worked example: website plus CRM automation#
Imagine an agency delivers a WordPress marketing site with a form that creates CRM leads and sends internal notifications.
A weak handover provides administrator credentials and a ZIP file. A strong handover identifies domain owner, host, repository, production/staging flow, WordPress administrator roles, CRM connection, email service, webhook path, automation workspace, token storage, log location, retry behavior, form test cases, backup policy and the person responsible for failed leads.
The difference is not document length. It is operational completeness.
If the CRM token expires, the receiving team knows where to rotate it. If the automation fails, they know where unfinished leads appear. If a developer proposes a change, they know where the canonical source is and who approves production release. If the site must be restored, they know both files and database are required.
That is what ownership looks like after the original delivery team is gone.
Add a machine-readable handover manifest where practical#
Human-readable documentation is essential, but a small machine-readable manifest can reduce ambiguity for future audits. For example, a JSON or YAML file can list the canonical repository, production URL, runtime versions, environment names, backup locations, external vendors and document paths without containing secrets. The manifest becomes an index that tooling and future maintainers can inspect quickly.
The manifest should reference rather than duplicate sensitive configuration. Record that a production database credential is stored in the organization's secret manager and identify the owning role; do not copy the credential into the manifest. Likewise, record the workflow or environment identifier rather than embedding access tokens.
This structure is especially useful when an organization manages several sites or automations. It creates a consistent inventory format and makes missing fields obvious during acceptance. A handover audit can verify that every system has an owner, recovery location and canonical source before the project is closed.
Treat vendor and license continuity as part of technical continuity#
Websites and automations frequently depend on paid plugins, domains, SaaS accounts, messaging providers or API plans. A system can be technically well documented and still fail after handover because a subscription remains attached to a contractor's card or an annual license renewal goes to an abandoned inbox.
For each commercial dependency, record the vendor, owning organization, billing contact, renewal cycle, plan constraint and what stops working if the subscription lapses. Where a license cannot be transferred, document the replacement or repurchase path before acceptance. Do not assume that because software is currently active the receiving team controls its continuation.
A useful handover meeting therefore includes both a technical owner and whoever controls purchasing or billing. The team should be able to identify which services are operationally critical and which are replaceable conveniences. This turns surprise renewals into planned operating costs.
Preserve incident history that changes how the system should be operated#
Not every past incident belongs in the handover pack, but recurring or architecture-relevant failures do. If a cache layer has caused stale checkout behavior, an API occasionally times out, a scheduled job must not overlap, or a plugin update has a known incompatibility, record that operational knowledge.
For each relevant incident, keep a short note describing the symptom, cause if known, safe detection method, remediation and whether a permanent fix remains outstanding. This is more valuable than a long chronological ticket archive because it translates history into future operating guidance.
Incident knowledge should connect to the runbook and known-limitations register. A future maintainer encountering the same symptom can then begin with evidence rather than rediscovering the system under pressure.
Define the end of the outgoing team's responsibility#
A handover can become commercially ambiguous if ownership transfers technically but support expectations remain open-ended. State the acceptance date, observation window, included corrections, exclusions and the point at which future changes become maintenance or a new engagement.
This boundary protects the receiving organization too. It identifies exactly when they should begin using the new support route, who handles incidents after the transition, and which unresolved items were accepted knowingly. Clear responsibility dates are part of operational continuity, not merely contract administration.
Acceptance checklist#
Before signing off a project, confirm:
- [ ] the organization owns domain, hosting, repository and vendor accounts;
- [ ] canonical source and production version are identified;
- [ ] staging and deployment flow are documented;
- [ ] credential storage and rotation owners are documented;
- [ ] temporary access is scheduled for revocation;
- [ ] architecture and data flows are understandable;
- [ ] routine runbook procedures exist;
- [ ] backups include all required state;
- [ ] restore has been tested or a limitation is explicitly recorded;
- [ ] known limitations and deferred work are visible;
- [ ] acceptance evidence is attached;
- [ ] post-handover verification is scheduled.
Frequently asked questions#
Should a handover document contain passwords?#
No. It should document the access route, account owner, storage mechanism and rotation procedure. Secrets should be transferred through appropriate controlled systems and remain revocable.
Is a README enough?#
A README is a useful entry point, but production operation also needs ownership, deployment, access, recovery and incident information. GitHub itself describes README content as an introduction to use, support and maintenance rather than a complete operations system (GitHub README guidance).
What if the client has no internal developer?#
The handover should still leave the system inspectable and transferable. Name an external maintenance owner if necessary, but keep accounts, billing and core assets under the client's organizational control where practical.
Should every project use branch protection and deployment approvals?#
Control strength should match risk and team size. The important principle is that critical production change has a known authorization path. GitHub provides branch protection and deployment reviewers as concrete mechanisms where they fit (protected branches, deployment environments).
How Sazvara uses this standard#
Sazvara treats handover as part of delivery quality. See Sazvara services for rescue, automation and build work, review selected work for implementation context, or request a diagnostic when an inherited system cannot be safely changed because ownership or documentation is missing.
A project that only its builder can operate is unfinished. The goal of handover is to convert working software into an owned, recoverable and maintainable business asset.
Sources and further reading#
- GitHub: About README files
- GitHub: About CODEOWNERS
- GitHub: Protected branches
- GitHub: Deployments and environments
- GitHub: Managing environments
- GitHub: Secrets
- OWASP Secrets Management Cheat Sheet
- WordPress: Backing up files
- WordPress documentation
- Google Search guidance for AI features
- Bing grounding guidance
Editorial note: This article was produced with AI-assisted research and drafting, then reviewed against Sazvara's operational, security, ownership, originality and release-quality controls. The twelve-standard handover model and minimum package are Sazvara's synthesis; product and platform controls are linked to their official documentation.
Have a system that is stuck, manual or difficult to ship?
Sazvara diagnoses the system before prescribing the technology. Bring the constraints, failure modes and current state.