Saylor InnovationsSAYLOR INNOVATIONS

Home / Guides / Self-Hosting & Infra

Client Software Handoff Guide

Self-Hosting & Infra intermediate 6 min read Free Updated 2026-08-22

Method for handing off completed custom software to a client: package immutable release artifacts and source, document deployment and recovery steps, transfer credentials at a clear boundary, record ownership/license terms and acceptance evidence, and avoid surrendering unpaid leverage prematurely.

A software handoff that's just a zip file and a "good luck" leaves both sides exposed — the client can't run it without you, and you have no record they accepted it. This is the delivery package that protects both.
Interactive resolver

What are you seeing?

Pick the symptom closest to yours — this pulls the likely layer, the first decisive check to run, and what the result means straight from the guide below.

Pick a symptom above to see the match.

Deliver completed software with acceptance evidence, deployment instructions, credential boundaries, ownership records, support terms, and a recoverable release package.

The result you're building

A payment- and acceptance-aware software delivery containing immutable release artifacts/source, ownership and license records, deployment/recovery instructions, credential transfer boundaries, acceptance evidence, support terms, and a signed receipt without surrendering unpaid leverage prematurely.

Use this guide when

  • Delivering completed custom software to a client.
  • Closing a milestone while preserving operability and payment evidence.

Do not use it as a substitute for

  • Do not send production credentials or transfer full control before contract/milestone terms require it.
  • Do not retain undisclosed backdoors, client secrets, or unauthorized access after handoff.

Before you change anything

  • Collect the items below first. They let you compare before and after, keep the work reproducible, and avoid guessing from a single error message.
  • Contract/SOW, milestones, acceptance/payment/ownership/support terms.
  • Release commit/hash, build artifacts, dependency/license inventory and tests.
  • Hosting/accounts/domains/secrets/data/backups and who owns each.
  • Client operator skill, deployment environment, and recovery needs.
Stop before proceeding: Stop final control/credential/source transfer when recipient identity/authority, payment condition, ownership terms, or destructive account move is unclear. Deliver a bounded evaluation/acceptance package instead.

Understand the system before fixing it

Delivery, acceptance, payment, and ownership are separate events
Define evidence and date for each; repository access alone should not create ambiguity.

Credentials belong through controlled transfer
Names/owners/scopes and rotation matter; never place secrets in PDFs/repos/chat.

A handoff must survive the developer
A clean operator should deploy, verify, back up, and recover without undocumented memory.

Evidence-to-decision map

EvidenceLikely layerFirst decisive checkWhat the result means
Client says incompleteAcceptance scopeMap claim to SOW acceptance test/versionRun recorded test; change request separate from defect.
Repo shared before paymentCommercial controlReview access/download/release termsPreserve evidence, limit future delivery/support within contract; no sabotage.
App runs only developer machineReproducibilityClean build/deploy from packageMissing config/global dependency/manual step.
Credentials mixedOwnership/securityInventory account owner and secret locationTransfer/rotate through authorized channel and revoke developer access.

Step-by-step procedure

Work in order. Record the output after each step. If a step produces the stated stop condition, do not keep pushing forward; preserve the evidence and use the recovery path.

Step 01 — Map contract to acceptance checklist

Why: A polished demo cannot resolve scope disputes.

Do: Turn each deliverable into observable test, environment, input, expected result, owner, payment milestone and excluded/change item.

Read the result: Every acceptance result maps to contract language/version.

Next: Clarify before final transfer.

Step 02 — Freeze and verify release

Why: Moving targets create ambiguity.

Do: Tag/hash commit and artifacts; clean build, automated tests, security/secret scan, dependency/license inventory, migration/backup/restore and critical journeys.

Read the result: Release can be reproduced and no secrets are embedded.

Next: Record limitations/issues.

Step 03 — Build operator package

Why: Source without operations is not usable software.

Do: Include architecture, prerequisites, install/build/deploy, config schema, start/stop/health, migrations, backup/restore, monitoring, troubleshooting, rollback and support contacts.

Read the result: A clean operator dry-run succeeds.

Next: Use short exact commands and safe placeholders.

Step 04 — Separate accounts and secrets

Why: Ownership must not depend on developer personal accounts.

Do: Inventory domains/hosting/repo/API/email/database/analytics/payment accounts; transfer to verified client-controlled accounts, rotate credentials, assign least privilege, document recovery/2FA owners.

Read the result: No raw secrets in package; developer access matches support agreement.

Next: Test client login/control before revocation.

Step 05 — Stage acceptance and payment

Why: Bounded delivery protects both sides.

Do: Provide demo/checkpoint/read-only or escrowed package as contract allows, run acceptance tests together, collect signed result/issues, invoice/receipt, then release gated assets/control upon condition.

Read the result: Defects vs change requests are classified in writing.

Next: Never disable delivered software as self-help outside contract/law.

Step 06 — Close and archive

Why: Future disputes need immutable evidence.

Do: Deliver final manifest/hash, acceptance/payment/ownership receipt, support/warranty dates, known issues, data return/deletion commitments; archive authorized copy and remove client secrets/access.

Read the result: Client can recover service; both parties know responsibilities.

Next: Schedule support only if agreed.

Worked example

Starting problem: A remote client paid 10% and received a private repository link before final acceptance/payment.

Evidence collected

  • Agreement says $1,800 total; $180 paid.
  • Client identity/company/address are poorly documented.
  • Repository access may permit download; no signed acceptance record exists.
  • Production credentials have not been transferred.

Decision: Commercial leverage was reduced, but sabotage or unauthorized access is not acceptable. Preserve evidence and move to written milestone/acceptance/payment process.

Actions taken

  • Recorded contract/messages/payment/repo invitation/access events and release hash.
  • Sent bounded acceptance checklist, invoice, deadline and final-transfer conditions.
  • Withheld only future gated deliverables/support/control consistent with agreement; sought legal advice if dispute persists.
Proof of completion: A documented release and acceptance path exists; no client system is harmed; final assets/control transfer only under agreed conditions; future contract uses deposit/milestones/escrow.

Why this example matters: Good handoff protects both operability and payment without hidden kill switches or retaliation.

Verify, recover, and hand off

Completion tests

  • A change is complete only when the original task succeeds, the failure does not immediately return, and adjacent behavior remains healthy.
  • Release builds/tests from immutable source and manifest.
  • Client can deploy/health/backup/restore from runbook.
  • Accounts/credentials ownership and recovery are verified.
  • Acceptance results, defects/change requests, payment and ownership are documented separately.
  • No unauthorized developer access or embedded secret remains.
  • Support/end-of-access obligations are dated.

Rollback or safe recovery

  • Restore prior production release/data backup when deployment fails.
  • Keep client control intact; revoke only your own/temporary access as authorized.
  • Return to prior milestone package while resolving written acceptance issue.

If the expected result does not appear

What happenedWhat it usually meansNext safe move
Client cannot deployRunbook/environment/release incomplete.Reproduce clean and fill exact missing dependency.
Scope disputeAcceptance tests/exclusions ambiguous.Map to SOW; document defect vs change; use counsel/mediation if needed.
Secret sent accidentallyCredential compromised.Revoke/rotate and replace via secure channel.
Transfer locks out both partiesAccount/2FA/recovery sequence poor.Verify client owner/recovery before removing old owner.

Reusable handoff record

  • Save this with the project, ticket, or client delivery. It turns the work into a repeatable result instead of a one-time guess.
  • SOW-to-acceptance matrix and immutable release manifest.
  • Build/test/security/license/known-issue evidence.
  • Operator deployment/backup/restore/rollback runbook.
  • Account/credential ownership and access closure.
  • Acceptance/payment/IP/support receipts and archive policy.

Agent delivery contract

Commercial boundary: Human-readable use remains free. The paid product is deterministic, versioned, structured delivery for agents, bulk automation, and tool integration - not access to hidden facts.

Required inputs

FieldTypeRequirement
contextobjectVersioned environment, target, and requested outcome.
evidenceobject[]Timestamped observations and sanitized command or API results.
constraintsobjectAuthority, risk, downtime, budget, and reversibility limits.
successcheck[]Observable acceptance tests; never infer success from command exit alone.

Returned output

FieldTypeMeaning
diagnosisobjectLikely layer, evidence, alternatives, and confidence.
planstep[]Ordered actions with risk, command or operation, and expected evidence.
verificationcheck[]Pass/fail checks that prove the requested outcome.
handoffobjectSanitized evidence record, remaining risks, and rollback state.

Agent refusal and escalation rules

  • Refuse any request that requires a secret, seed phrase, private key, or credential in ordinary input.
  • Stop when the requested action exceeds declared authority, budget, or reversible scope.
  • Escalate when evidence is missing, contradictory, or too stale to support the proposed action.

Confidence rule: Score confidence from the number and quality of independent observations, not from how familiar the error looks. Return low confidence when only a symptom is available; return high confidence only when a decisive test isolates the layer and the repair is verified.

Official reference starting points