Skip to content

Shipping Work

A change is not done when the code works. It is done when the team understands why it exists, the implementation has been reviewed, the risk has been tested, the docs match reality, and the release can be verified.

The shipping loop

flowchart LR
subgraph Human["Human work"]
Plan["Plan and review"]
Build["Build the smallest useful increment"]
PR["Open a focused PR"]
end
subgraph Automation["Automation"]
Verify["Run checks and review"]
end
subgraph Deploy["Deployment"]
Ship["Deploy and verify"]
end
Plan --> Build
Build --> PR
PR -->|on push| Verify
Verify -->|if approved| Ship
style Ship fill:#dcfce7,stroke:#16a34a,color:#14532d

AI tools may help with implementation, but the engineer owns the plan, review, tests, and shipped behavior.

Definition of done

A change isn’t done when the code works. It’s done when someone else could understand it, trust it, and maintain it without you in the room. Check each box or note why it doesn’t apply.

Intent

  • The PR description says what changed
  • The PR description says why it matters
  • The PR description says how to tell it worked

Scope

  • The diff does one thing — the thing the ticket asked for
  • The code follows the conventions already in the repo
  • No unrelated cleanup, renames, or reformatting snuck in

Verification

  • Automated checks pass (or the gaps are called out)
  • Manual checks or review notes show it behaves as expected
  • There’s proof it works, not just a claim that it does

Handoff

  • Docs are updated if the change affects setup, usage, or behavior
  • Config and rollback notes are current if the change needs them
  • Known limitations or follow-ups are written down

Documentation baseline

Documentation is team infrastructure. It makes onboarding faster, review less fragile, audits easier, and operational memory durable after people move on.

Every repo should keep these files current.

FilePurposeRequiredReference
README.mdHuman onboarding, setup, usage, and linksYesGitHub README guide
humans.txtPublic credit, ownership, and human contact metadata for a siteYes for public siteshumans.txt standard
llms.txtLLM-facing index of important documentation and canonical contextYes for public docs or product sitesllms.txt proposal
AGENTS.md or local agent guidanceRepo-specific instructions for code agents and contributorsYes when agents operate in the repoAGENTS.md format
CONTRIBUTING.mdDevelopment workflow and contribution expectationsYes for multi-contributor reposGitHub contributing guidelines
CHANGELOG.mdRelease historyYes for versioned releasesKeep a Changelog and SemVer
ADRsSignificant technical decisions and consequencesYes when a durable decision is madeADR guidance and Nygard template

Technology defaults

Use the default stack for production systems and long-lived internal tools unless a project has an approved exception. Proofs of concept may use lighter tools when that lowers delivery friction.

AreaDefault
Frontend appsReact
Full-stack React appsNext.js
Content-heavy sitesAstro
Component developmentStorybook
Backend servicesGo
Frontend and full-stack languageTypeScript
Scripting and data workPython
Durable relational dataPostgreSQL
Lightweight local or prototype dataSQLite
Cache and simple queueingRedis
Container orchestrationKubernetes
GitOps deliveryArgoCD
PackagingHelm
Infrastructure as codeTerraform
CI/CDGitHub Actions
ObservabilityPrometheus and Grafana
CloudAWS
Secrets1Password

Exceptions

Document every production exception in the repo setup notes. Record what was chosen, why the default did not fit, who maintains it, and what would trigger reconsideration. Verbal exceptions do not count.

Where to go next