Writing
How to Standardize 20 Repositories Without Centralizing Every Decision
· 2 min read
How to Standardize 20 Repositories Without Centralizing Every Decision
A shared baseline should make reliable delivery easier while leaving implementation decisions with the engineers closest to the work.
On this page
Across roughly 20 repositories, consistency is an engineering concern. So is local ownership.
Standardize too little and each repository becomes a different set of assumptions. Standardize too much and every change depends on the people maintaining the shared machinery.
The useful middle is a baseline that protects boundaries and evidence without prescribing every implementation decision.
Standardize the contract
Start with what another engineer or team needs to trust a change.
- A documented way to install dependencies and run checks.
- Tests that exercise changed behavior and relevant failure cases.
- Clear review expectations.
- Reproducible artifacts and identifiable versions.
- Release notes and deployment assumptions that downstream teams can use.
These are delivery contracts. They do not require identical internal architecture.
Keep the baseline small and versioned
Shared pipeline steps and configuration should have explicit versions and a documented upgrade path.
A change to the baseline can affect many repositories. Review it as an interface change: explain compatibility, test representative consumers, and make rollback possible.
Do not copy a large configuration everywhere and call that reuse. Copies drift, and an urgent fix becomes a search exercise. Extract the parts that genuinely need a shared lifecycle; leave repository-specific behavior visible in the repository.
Make exceptions inspectable
Some repositories have legitimate differences.
An exception should explain the constraint, identify an owner, and state when it will be reviewed. That is different from an unexplained disabled check.
If several teams need the same exception, the baseline may be wrong. Use that feedback to improve it rather than accumulate permanent special cases.
Leave implementation judgment with maintainers
Centralize common evidence requirements, not every technical decision.
Repository maintainers should still choose the design, tests, and implementation appropriate to their component. Shared standards help them explain those choices and establish that the result is ready to integrate.
Reviews should connect a requirement to a concrete risk. “The template says so” is a weak explanation. “The next team must be able to reproduce this artifact” gives the requirement a purpose.
Roll out with feedback
Try changes in representative repositories before broad adoption. Include both ordinary consumers and the ones with unusual constraints.
Document friction, improve error messages, and make the common path easier. Track what is adopted separately from what is proposed or still being evaluated.
The goal is not identical repositories. It is independent teams producing compatible, reviewable, and repeatable changes.
Related reading
-
The Engineering System Is a Product
CI, tests, repository standards, release practices, and developer experience deserve the same deliberate design as the software they help deliver.
-
Integration Is Not a Phase
Independently successful services can still fail at system delivery. Interfaces, environment assumptions, and release evidence need attention throughout development.
Mentions
No webmentions yet. This post accepts mentions at https://karlhill.com/webmention.
On this site
Written by
Karl Hill