A perfect configuration is meaningless if team members write sloppy commits. In this episode we design organization standards: commit message documentation, branching model, developer onboarding, and code review checklists for PRs and releases. Written standards are the bridge to sustainable automation.

In episode 19 we connected release with deployment through GitOps. But there's one fuel that decides everything: commit message quality. semantic-release is only as good as the commits coming in — if a team member writes fix: fix bug, the analyzer can't guess any change type and no release ships. The best configuration in the world won't help if the standard isn't documented and taught.
In this episode we cover:
Rules that only live in a senior engineer's head are rules that are never followed. Organization standards must be:
The two most impactful documents: CONTRIBUTING.md for contributors, and docs/release-process.md for anyone involved in releases.
Start CONTRIBUTING.md with a firm commit guidelines section. A minimal template:
## Conventional Commits
Every commit must follow the Conventional Commits specification:
Format: `type(scope): subject`
Types used:
- `feat` - new feature, triggers a minor release
- `fix` - bug fix, triggers a patch release
- `perf`, `refactor`, `docs`, `test`, `style`, `chore`, `build`, `ci`, `revert`
Special rules:
- Breaking change: write a `BREAKING CHANGE:` footer or add an exclamation mark
to the subject, e.g.: `feat!: drop Node 16 support`
- Scope optional, must be a short noun: `feat(auth): add SSO`
- Subject imperative, lowercase, no trailing period
- Body explains why, not what
Read the full specification at conventionalcommits.org before your first commit.A standard written like this can be translated directly into commitlint rules — so documentation and enforcement read from the same source and never drift apart.
The second part of CONTRIBUTING.md is the branching model. A team that doesn't understand where to push will create its own chaos:
| Branch | Nature | semantic-release result | Environment |
|---|---|---|---|
main | stable | 1.4.0 | Production |
staging | prerelease | 1.4.0-rc.1 | Staging |
feature/* | temporary | no release | - |
Strict rules that must be documented:
main and staging are protected by branch protection.staging to main is the only path to production.feature/* branches are deleted after merge.Onboarding isn't just giving repository access. A flow that works in the real world:
CONTRIBUTING.md — make it part of the first task.The commitlint plus husky setup already discussed in episodes 3 and 9 remains the backbone:
npm install --save-dev @commitlint/cli @commitlint/config-conventional
npx husky init
npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"
git commit -m "feat: add SSO login"With this hook, developers learn from the machine, not from a reviewer's scolding. Mistakes are caught as early as possible — that's the fastest feedback loop for building habits.
Tip
Run one 30-minute practice session on commit messages during onboarding:
have the developer write five correct commits — feat, fix, a breaking
change, chore, and a commit with a scope. Hands-on experience is far
more effective than just reading the documentation.
Review isn't just checking code — it's also a quality gate for releases. A practical checklist:
feat produces minor, fix produces patch.For releases, add post-release checks:
The most effective release review happens when the PR is merged, not once the release is out — that's where the version decision is truly made.
Finally, write docs/release-process.md so there's no mystery:
staging and main.git revert v1.3.0 then release again, or redeploy the previous version.Warning
Don't let release documentation become a dead document. When the process changes — for example moving to a monorepo or adding a new environment — the documentation must be reviewed in the same PR. A stale standard is more dangerous than no standard at all, because it gives a false sense of security.
In this episode we built the human foundation on top of the machine foundation:
CONTRIBUTING.md and docs/release-process.md.main stable, staging rc, feature/* temporary.Now a single team can work consistently. In episode 21 we'll take that consistency to a larger scale — shared config, reusable workflows, and monorepo strategy. See you there!