Consequential

ContentsAct III · MultiplyBuild the rails

Move 41

Make the preview URL the review interface

You asked a product manager to review a pull request. You gave them a highlighted diff and no way to run the thing.

Someone from product opens the pull request you asked them to check. They see 142 added lines, 38 removed, across seven files, syntax-highlighted in red and green. There is a button marked Files changed.

They scroll. They look for something they can have an opinion about. They find the copy string they recognise, leave a comment about the wording, and approve.

You did not learn anything, and neither did they. That is not a failure of their skill. It is a failure of the interface you handed them.

The diff was never a good review interface

Not even for the people it was built for. A study of what reviewers actually struggle with put it bluntly: “all current code review tools we know of show a highlighted diff of the changed files to a reviewer with no additional tool support.” The same work notes that these tools “deliver only basic support for the understanding needs of reviewers”, offering diffing, inline comments and syntax highlighting, which run out fast against anything complex.

Engineers cope because they can reconstruct the running program in their heads from the diff. That reconstruction is the skill, it takes years, and it is exactly the thing your product manager, designer and support lead do not have and do not need to acquire.

When epilot moved their whole company onto shipping code, automatic preview environments were one of the pieces of infrastructure that made it work at all, and the reason they gave was not about judgment. It was about access: if contributors cannot see and interact with their change, they cannot meaningfully contribute.

The move

Every pull request gets a URL that a non-engineer can open, use, and form an opinion about without asking anyone for help.

Note what that sentence does not claim. It does not say their judgment beats yours. It says they currently have no way to exercise any judgment at all, and that this is fixable in an afternoon.

Where their judgment genuinely is better is narrower and worth being honest about: whether the thing feels right to the person who will have to sell it, support it or explain it. That is a real contribution and you are currently making it impossible to offer.

What it looks like

BEFORE                             AFTER

  3 checks passed                    3 checks passed
  +142 −38 across 7 files            Preview   https://pr-482.preview.acme.dev
                                     Sign in   ana@acme.test  (seeded account)
  [ Files changed ]
                                     Changed routes
  reviewers: you                       /pricing            2 visual diffs
                                       /checkout/step-2    no visual change

                                     Data      forked from snapshot, never prod
                                     Expires   when this PR closes

Four things in the right-hand column, and the last two matter as much as the first two.

The URL has to need no local setup and no VPN. The seeded account matters because “log in as someone” is where most non-engineers stop. The changed routes list is what turns “go and look at the site” into a five-minute task instead of a scavenger hunt. And the expiry is what stops you accumulating forty forgotten environments holding live credentials.

Northflank documents both halves of the data question directly: you can “fork your database from a snapshot to restore pre-seeded data more efficiently”, and “The preview environment is automatically deleted when the PR is closed without merging.”

Check who can actually open it

This is the step everyone skips, and it silently undoes the whole move.

Vercel’s comments feature is “enabled by default on all preview deployments, for all account plans, free of charge”, with one catch stated in the same sentence: “The only requirement is that all users must have a Vercel account.” Inviting external users to view and comment is a Pro or Enterprise capability, and Pro is $20 a month per seat. Their Hobby tier is explicitly “restricted to non-commercial personal use”, so it is not an option for your company regardless.

Screenshot diffing prices separately again. Chromatic is free at 5,000 billed snapshots a month, then $179 a month for 35,000 on Starter and $399 for 85,000 on Pro, with overage at $0.008 per snapshot. Their TurboSnap only captures stories with associated code changes, which is what keeps that number survivable.

None of this is expensive. All of it is a decision somebody has to make on purpose, and the failure mode is not cost. It is discovering in week three that the person you built this for hits a login wall.

What it costs

Here is the part that should make you careful, because a preview environment is a machine that runs code from a pull request, and pull requests come from outside.

In a published advisory titled “Preview Deployments are vulnerable to Remote Code Execution”, the summary is as clear as these things get: “An unauthenticated preview deployment vulnerability in Dokploy allows any user to execute arbitrary code and access sensitive environment variables by simply opening a pull request on a public repository.” Fork the repo, open a pull request containing code that prints the environment, and the platform deploys it for you.

So two rules, and neither is optional. Previews get their own secrets, scoped to the preview environment and useless anywhere else. Previews never get production data, which is what the snapshot fork is for. A preview environment holding a real database credential is not a review interface, it is a public endpoint with your production keys in it.

Add one more, less dramatic: for public repositories, do not build previews automatically from forks. Require a maintainer to approve the run.

Try this week

Open your most recent merged pull request and try to answer one question: could someone who does not read code have told you whether it was right?

Then do the smallest version. You do not need a full-stack preview platform to start. If your frontend is static or server-rendered, Vercel and Netlify will give you per-pull-request URLs almost for free, and that alone covers most of what a designer or product manager wants to look at.

Add one line to your pull request template: Preview: followed by the URL, and Sign in as: followed by a seeded account. Then ask the person who last approved a diff without reading it to review the next one properly, and watch what they catch.

They will find something. It will probably be something you would have shipped.

Facts and prices in this chapter verified August 2026.