Skip to main content

What Happens From Commit to Production

How to see the full path between writing code, validating it, packaging it, releasing it, and operating it without treating deploy like magic.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

Track

Startup Engineer Interview Trail

Step 5 / 10

The problem

A lot of people spend years shipping software without building a clear mental model of what happens after git push.

The result is usually a blurry view:

  • commit goes in
  • pipeline runs
  • some time later, it “goes up”

That works until something breaks.

When it does, the missing model shows up fast:

  • nobody knows what was validated
  • nobody knows which artifact was produced
  • nobody knows whether the issue came from build, configuration, or deploy

Deploy feels magical only until the first serious problem.

Mental model

The most useful way to picture the path from commit to production is this:

  1. code changes
  2. validations run
  3. a reproducible artifact is generated
  4. configuration and environment are accounted for
  5. release happens
  6. the system is observed after release

Each step answers a different question:

  • does the code compile and pass checks?
  • what exactly am I releasing?
  • which environment will this run in?
  • how do I release without spreading damage?
  • how do I know it worked?

Breaking the problem down

Commit is not deploy

It sounds obvious, but this separation matters.

Commit represents a code change.

Deploy represents putting a version into an environment so it can run.

In between there is a path that needs to reduce uncertainty.

Validation filters errors early

This is where things like these belong:

  • typecheck
  • lint
  • tests
  • build

These steps do not guarantee a perfect production release.

But they do help remove cheap mistakes before they become expensive.

Artifact answers “what exactly will run?”

An artifact can be:

  • bundle
  • container image
  • compiled package

The important part is that production should run something identifiable and reproducible.

If each environment rebuilds in its own way, you lose confidence about what was actually released.

Configuration changes behavior without changing the artifact

Another thing that confuses teams a lot:

  • build is one thing
  • configuration is another

The same version can behave differently because of:

  • env vars
  • secrets
  • flags
  • external endpoints

When the team mixes all of that into one black box, debugging gets worse.

Release is not just copying a file

The deploy step can include:

  • publishing a new version
  • switching traffic
  • running a migration
  • warming up instances
  • releasing by percentage

Even without fancy terminology, the main idea is simple:

how do I put this change into production with controlled risk?

Post-deploy is part of the flow too

After release, the job is not done.

You still need to know:

  • did the error rate go up?
  • did latency get worse?
  • is the main feature still working?
  • can we continue, or do we need rollback?

A pipeline without post-deploy observability is just a fast lane to the wrong place.

Simple example

Imagine a Node API in production.

A clean flow looks like this:

  1. a developer makes a commit
  2. CI runs checks and tests
  3. the build produces a versioned image
  4. the image goes to a registry
  5. production gets that image with its own configuration
  6. deploy releases the new version
  7. the team watches logs, errors, and latency

If something goes wrong, it becomes much easier to answer:

  • did the code pass checks?
  • which image was released?
  • which configuration was active?
  • did the error start before or after deploy?

Without that chain, everything turns into “I think it was the pipeline.”

Common mistakes

  • Treating commit, build, and deploy as one thing.
  • Rebuilding differently in every environment.
  • Coupling secrets to the artifact.
  • Releasing without looking at any signal afterward.
  • Calling any script CI/CD without being clear about its role.

How a senior thinks

People with more experience look at a pipeline less like automation and more like risk control.

The reasoning usually sounds like this:

“I want to know what was validated, what was generated, what was released, and how to detect quickly if the release made the system worse.”

That way of thinking improves both delivery and debugging.

Because it makes the whole path explainable.

What the interviewer wants to see

In an interview, when they ask about deploy, the evaluator rarely wants tool names first.

They want to see whether you understand the flow.

You move up a level when you:

  • separate commit, build, artifact, and deploy
  • talk about configuration as its own layer
  • mention gradual release or rollback when it makes sense
  • treat post-deploy observability as part of the process

A strong answer usually sounds like this:

“I think about the path from commit to production as a risk-reduction chain. First I validate, then I generate an identifiable artifact, then I release with environment configuration, and I observe behavior before I consider it done.”

A good pipeline is not the one with the most steps. It is the one that makes clear what changed, what was released, and how to go back if needed.

Quick summary

What to keep in your head

Practice checklist

Use this when you answer

You finished this article

Part of the track: Startup Engineer Interview Trail (5/10)

Next article Feature Flags vs Deploy: When to Use Each One Previous article How to Distinguish Symptom from Root Cause

Keep exploring

Related articles