The most common mistake in small-team CI is copying big-company processes: dozens of jobs, layers of caching, matrix builds... In a two-person team the actual need is different: fast feedback and safe deploys.
The minimum useful pipeline
My default setup has three steps:
- On every push: lint + type check + build.
- On merge to
main: all of the above + deploy to the server. - After deploy: a single health-check request.
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run lint && npm run build
- name: Deploy
run: rsync -az .next/ deploy@server:/var/www/app/
- name: Health check
run: curl -f https://example.com || exit 1CI's job is not to slow you down; it's to stop a bad release from reaching users.
That's it. As the team grows you can add test parallelization, preview environments and staged rollouts - but first make sure these three steps work every single time.
MÖ
Murat Özdemir
Product manager & mobile developer. Writes about product, performance and good interfaces.