Asia/Shanghai
BlogMay 26, 2026

Deployment Notes for Small Teams

Simple release discipline without turning every launch into process overhead
Li Zimu
Deployment Notes for Small Teams
Small teams need deployment discipline, but they usually do not need a heavy process. The goal is to make releases repeatable enough that shipping does not depend on memory. A good process should protect production without slowing every small change to a crawl. Here is the lightweight release shape I prefer for web products and internal tools. Before changing anything, identify what the release actually owns. Is it a frontend container? A backend service? A single Nginx route? A database migration? A worker? Most production mistakes come from touching more than the release requires. If the change is a frontend update, it should not restart the backend or modify unrelated subdomains. The candidate version should build locally or in CI before production traffic is involved. This catches dependency issues, type errors, missing assets, and route generation failures while the current production version is still untouched. For a Next.js service, that usually means:
  • Install from lockfile.
  • Run the production build.
  • Start the production server locally or in a canary container.
  • Check the exact pages that will be public.
Whenever possible, start the new version on a new internal port. That gives you a canary target. You can check HTML, assets, health endpoints, routes, and logs before the public domain points at the new service. This also makes rollback simpler because the old route is still known. Nginx changes should be narrow. If the release is for the root website, change the root website route. Do not touch API subdomains, chat routes, or unrelated reverse proxies. The safest release is the one with a small blast radius. A rollback script is most useful when it exists before the switch. It should restore the previous route, test the Nginx configuration, and reload only after validation passes. It does not need to be fancy; it needs to be concrete. When production is under pressure, clear commands beat good intentions. After traffic moves, check the public URLs and the things that should not have changed. For a personal site, that might mean:
  • Homepage returns 200.
  • About, Work, Blog, sitemap, and robots work.
  • Hidden routes stay hidden.
  • Existing upstream paths still return their previous responses.
  • Other subdomains still answer.
Small-team deployment can stay simple. It just has to be explicit.
Share this post: