Back to Blog
January 9, 20264 min read

Everything Should Be Code

This post explains why important system knowledge should live in the repository as code or versioned configuration, and how that makes teams faster, safer, and easier to onboard.

ArchitectureDevOps

What this phrase actually means

When people say "everything should be code," they do not mean every thought in a company must become a script.

They mean that important parts of the system should be:

  • written down in a versioned form
  • reviewable
  • reproducible
  • easy to discover

In other words, the repo should describe how the system works, not just hold the application source files.


Why this matters more than it first appears

Many teams have critical knowledge scattered across:

  • someone's memory
  • a dashboard setting no one documented
  • a manual production change
  • a database tweak done directly in an admin tool
  • a CI step that only one person understands

That creates risk.

If the system depends on undocumented manual knowledge, then the team is relying on luck and tribal memory.

Code and versioned config reduce that risk because they turn hidden knowledge into shared knowledge.


The big benefits

1. A single source of truth

When schema definitions, infrastructure, and contracts live in the repo, the team has one place to look first.

That makes questions easier to answer:

  • What does the API expect?
  • Which database changes were applied?
  • How is this service deployed?
  • What environment variables matter?

2. Better review and safer change

If a change lives in code, it can be reviewed.

That gives the team a chance to catch:

  • mistakes
  • missing steps
  • risky assumptions

Invisible changes are hard to review.

3. Reproducibility

If environments are described as code, it becomes easier to recreate them consistently.

That helps with:

  • onboarding
  • testing
  • disaster recovery
  • scaling across multiple environments

4. Better AI and team context

The more system knowledge that lives in the repository, the easier it is for:

  • new teammates
  • reviewers
  • automation
  • AI coding tools

to understand how the project actually works.


What should usually live in the repo

At a minimum, many teams benefit from keeping these things versioned:

  • database schema definitions
  • migrations
  • infrastructure configuration
  • API contracts
  • queue and event contracts
  • CI/CD pipelines
  • scripts for setup and release tasks
  • environment variable documentation

The goal is not perfection. The goal is to reduce the amount of "magic" surrounding the project.


A simple example

Imagine a team that changes a production database directly through a GUI tool.

At first, that feels fast. Later, problems appear:

  • local and production schemas drift apart
  • new developers do not know the real shape of the data
  • staging behaves differently from production
  • rollbacks become harder

Now compare that with schema changes handled through migrations in the repo.

The second approach is slower for a moment, but much safer over time because:

  • the change is visible
  • the order is tracked
  • the team can review it
  • new environments can apply the same steps

That is the deeper value of "everything should be code."


This is not about bureaucracy

Some people hear this idea and worry it means extra process.

It can become that if applied thoughtlessly.

The healthy version is not:

"Document everything endlessly."

It is:

"Make important operational knowledge explicit and versioned."

That distinction matters.

The goal is speed with clarity, not paperwork for its own sake.


Common things teams forget to codify

Here are some areas that often remain too manual:

  • feature flags and their defaults
  • scheduled jobs
  • access rules
  • deployment steps
  • monitoring and alerting configuration
  • seed data assumptions

If those pieces are important to the system, they deserve better than being trapped in memory or ad hoc setup steps.


A beginner-friendly way to apply this idea

If you are new to engineering, start by asking:

  1. If a teammate joined today, could they discover this from the repo?
  2. If production broke, could we reproduce or repair this from versioned information?
  3. If one person left the team, would this knowledge disappear?

If the answer is "no," that area probably needs to be brought into code or documented configuration.


Final thought

If something is important enough to affect how the product runs, it is important enough to make visible, reviewable, and repeatable.

That is why "everything should be code" is less about philosophy and more about operational maturity.