CI/CD Pipelines for Small Dev Teams: A Simple Setup
Small teams don't need elaborate pipelines. Here's a simple GitHub Actions setup that runs tests, type checks, and deploys safely.
Small teams do not need elaborate CI/CD pipelines — they need a simple, reliable one that runs the right checks and deploys safely. After setting these up across many projects, here is the boring, working version.
What runs on every PR
- Linter (ESLint, Pint, whichever).
- Type checker (tsc --noEmit for TypeScript projects).
- Unit and integration tests.
- Build verification (does the production build succeed).
These four catch most bugs and run in a few minutes. Anything slower (E2E, security scans) belongs on a separate workflow that runs on the main branch or nightly.
Parallelize, cache, fail fast
Run the four jobs in parallel rather than sequentially. Cache node_modules, vendor directories, and any other heavy dependencies. Set fail-fast: true so a single failure cancels the rest of the matrix and the team gets the result faster.
Branch protection that matches
In your repository settings, make those four checks required to merge. This is the actual enforcement — without it, the pipeline is informational and broken builds reach main.
Deploy on merge, not on every PR
Production deploys should happen when a PR merges to main, not on every push. Preview deploys (Vercel, Netlify, similar) on every PR are great for review — but they are not production. Keep the production path narrow and gated.
What I avoid
Custom Docker images, complex matrix configurations, and mandatory code coverage thresholds — for small teams, these add maintenance overhead without much benefit. Start simple and add complexity only when you can name the problem it solves.
About the author

Richard Gamora
Fullstack developer based in the Philippines, working mostly with Laravel and Vue.js, with eight years of production experience across web and mobile.
More on Testing & Tools
August 20, 2025
Playwright vs Cypress in 2026: Honest Trade-Offs
Both Playwright and Cypress are excellent end-to-end testing frameworks. Here's an honest comparison based on real usage in production teams.
August 13, 2025
Jest Mocking Patterns That Save Time
Jest's mocking API is powerful but easy to misuse. Here are the patterns that produce reliable tests without fighting the framework.
August 6, 2025
Web Scraping with Puppeteer: Practical Patterns
Puppeteer makes scraping JavaScript-heavy sites possible. Here are patterns for selectors, waiting, anti-bot handling, and keeping it maintainable.