Switching CI/CD platforms
doesn't pay for itself by default.
Vendor pitch decks compare run-rate. They never include the engineering hours to rewrite 35-120 pipelines, the parallel-run period, the training overhead, or the inevitable risk buffer. This calculator stacks the migration cost honestly against the run-rate saving, and returns a verdict: GO NOW, GO IF STRATEGIC, STAY, or TARGET IS MORE EXPENSIVE.
switch configuration
From
To
Pipelines to migrate
Team size (developers)
Build minutes per month
Total minutes across all pipelines, including parallel job multiplication.
Pipeline complexity
Simple: ~8 hrs/pipeline. Typical: ~14 hrs. Complex (matrix builds, custom plugins, env-specific secrets): ~26 hrs.
Parallel-run period
How long you run both platforms in parallel during cutover. 0 = hard cutover; 2 = typical safe migration.
STAY
Migration cost erases the savings.
Either payback is too long or 3-year net is negative. The current platform is fine financially. Re-evaluate when usage doubles or pricing changes materially.
Migration cost
$105,228
one-time
Annual saving
$22,080
vs current
Payback period
4.8 yr
months at current saving
migration cost stack
run-rate comparison
Jenkins (self-hosted)
$2,260/mo
GitHub Actions
$420/mo
3-yr net
-$38,988
Migration cost = pipeline engineering (count × complexity-adjusted hours × $95/hr fully-loaded) + team training + parallel-run period + fixed setup + 20% risk buffer. Run-rate uses each vendor's published per-seat + per-build-minute pricing (verified May 2026). Self-hosted hosting overhead included for Jenkins and Buildkite. Treat the output as a planning anchor, get firm migration quotes from the target vendor or a SI partner before locking the decision.
How the verdict works
Payback under 18 months and 3-year net positive
The maths is decisive. Strong financial case independent of any strategic factor. Greenlight.
Payback 18-36 months, 3-year net positive
Financially defensible but not compelling on cost alone. Justify with non-cost factors: developer experience, vendor concentration risk, feature requirement (e.g. matrix builds, OIDC, ARM runners) the current platform can't deliver.
Payback over 36 months, or 3-year net negative
Migration cost erases the savings. Re-evaluate when usage doubles, pricing changes materially, or the current platform raises prices on a renewal cycle. Don't migrate just because you can.
Target platform run-rate exceeds current
No annual saving exists to recover the migration. Switching is strategic-only, justify with DX, vendor risk, or feature requirements, and accept ongoing higher spend as the trade-off.
What vendor pitches miss
- Per-pipeline engineering hours. The slide that compares per-minute price never mentions that you need to rewrite every Jenkinsfile or GitLab CI YAML into the new platform's DSL. At 14 hours per typical pipeline and $95/hr fully-loaded, this is usually the largest line item by a wide margin.
- Parallel-run period. Safe migrations involve running both platforms for 1-3 months during cutover. That is current-platform run-rate that you pay during the migration, not new-platform savings. The vendor's "you'll save $X/month" headline ignores this.
- Source-platform complexity. Migrating from Jenkins (Groovy DSL, plugin sprawl, custom shared libraries) costs more per pipeline than migrating from GitHub Actions YAML. The calculator applies a complexity multiplier to the source platform, Jenkins 1.40x, GitLab 1.20x, GitHub Actions 0.90x.
- Risk buffer. Migrations overrun their estimates roughly 30-40% of the time, usually for reasons nobody predicted (secrets-rotation that breaks deployment, runner image incompatibilities, downstream tool integrations that need updating). A 20% buffer is the minimum honest provision.
Methodology
The calculator computes two figures and a verdict:
- Run-rate comparison: for each platform, monthly cost = (team_size × per-seat) + (build_minutes × per-minute) + hosting_overhead. Pricing verified May 2026 against each vendor's public pricing page (GitHub Actions, CircleCI, GitLab, Buildkite, AWS CodeBuild, Bitbucket Pipelines). Self-hosted Jenkins and Buildkite carry a fixed hosting overhead.
- Migration cost: (pipelines × pipeline_hours × $95/hr) + (team_size × 4 × $95) + (parallel_months × current_monthly) + $8,500 fixed setup, then × 1.20 for risk buffer. Pipeline hours = 14 × complexity_mult × source_platform_complexity. Engineer rate ($95/hr) is US blended security/platform engineering fully-loaded.
- Verdict: based on payback months and 3-year net. Under 18 months & net positive = GO NOW. 18-36 months & net positive = GO IF STRATEGIC. Otherwise STAY. Negative monthly savings overrides everything as TARGET MORE EXPENSIVE.
Treat the output as a planning anchor, not a binding number. Real migrations vary by team experience, codebase quirks, and how aggressively you can run cutover. Use the calculator to set negotiation context with vendors and to prioritise, then get firm migration quotes from the target vendor or a systems integrator before locking the decision. Last vendor-pricing verification: May 2026.
related