Your CI Pipeline Is Slower Than the Bug It Catches
Small teams keep adding CI checks until a five minute fix takes forty minutes to ship, and nobody ever goes back to prune the pipeline.
Nobody sits down and designs a slow CI pipeline on purpose. It happens one reasonable addition at a time: a linter here, an end to end suite there, a security scan someone's manager asked for, a visual regression step after a logo got squished in production once. Eighteen months later a one line fix takes forty minutes to go green, and the team just accepts it as the cost of doing things properly.
It isn't. A pipeline that takes longer than the bug it would have caught is a tax, not a safety net.
The math nobody runs
Here's the question most teams never ask: what does this specific check actually save us, on average, per run? A type checker that catches a real error in one run out of twenty, in thirty seconds, is a bargain. An end to end suite that takes twelve minutes and has caught one real regression in the last three months is not obviously worth it, especially once you count the twelve minutes times however many times a day your team pushes.
Multiply that out across a five person team shipping ten times a day and you're looking at hours of collective waiting, every single day, for checks that mostly confirm what everyone already expected. The cost isn't abstract. It's the engineer who stops running tests locally because CI will "catch it anyway," the PR that sits unmerged overnight because nobody wants to babysit a pipeline, the deploy that gets batched into a riskier Friday afternoon push because splitting it in two means waiting twice.
What actually deserves to block a merge
Not every check needs to run on every push, and not every check needs to block anything. A rough split that works for most small teams:
- Fast and cheap (lint, typecheck, unit tests): run on every push, block the merge. These should finish in under two minutes or something is wrong with how they're written, not with the idea of running them.
- Slow and valuable (full end to end, load tests, security scans): run on a schedule or before a release tag, not on every commit. Nobody needs to wait on a load test to merge a copy change.
- Slow and low value: delete it. If a check hasn't caught anything in months and nobody can explain what failure mode it guards against, it's decoration.
The honest fix is almost never "buy faster CI runners." It's going through the pipeline line by line and asking what each step is actually buying you, then being willing to cut the ones that aren't earning their minutes.
This is the kind of unglamorous audit we do early when we build software for clients, because a team that's scared of its own pipeline ships less, not more carefully. If your current setup feels like this and you want a second opinion on what to keep, we'll build you a working MVP in a week and show you a pipeline that doesn't fight you. Or if you'd rather just talk it through first, get in touch.
Want to build something like this?
Cedrix ships production-grade software fast — and even offers a free7-day MVP so you can see your idea working before you commit.