Had to evaluate all three when we hit 200 devs and the free plan finally died. Sticker prices are horseshit - here's what you'll actually pay.
GitHub Enterprise: $21/month becomes $70 real fucking quick
GitHub lists $21/user/month like that means something. That's before your security team finds out about Advanced Security and decides they can't live without it.
GitHub's pricing page looks reasonable until reality hits:
CI minutes evaporate faster than free coffee. 50k minutes sounds like a lot until every goddamn feature branch triggers Docker builds, integration tests, and security scans. We burned through our allocation by day 12 of the month. GitHub's billing docs show overage rate is $0.008/minute - doesn't sound like much until your bill jumps from $5k to $9k with zero warning.
Advanced Security becomes mandatory. Your security team will read one blog post about dependency scanning and suddenly $49/user/month isn't optional anymore. Boom - you're at $70/user before you've deployed a single feature. There are cost optimization strategies but good luck convincing security to disable half their precious scans.
The Bitbucket migration was 6 weeks of hell. Sales promised "a few days." Reality was rewriting every single CI config because GitHub Actions YAML is completely different from Bitbucket Pipelines. Lost count of how many times I heard "this used to work in Bitbucket" during standups.
But here's the thing - devs don't bitch about GitHub. The search actually finds code, PRs load in under 30 seconds, and Actions mostly works without randomly failing. When your team isn't fighting the tooling, they ship faster.
Bitbucket: Cheap because it's 2005 tech with a 2024 price tag
Bitbucket pricing looks amazing at $6.60/user/month until you actually try to use it:
- 25 users: $2,300/year (Data Center)
- 500 users: ~$16k/year (if you hate your devs)
- 2k+ users: "call for pricing" (corporate speak for "bend over")
Yeah, it's cheap. There's a reason why.
Search doesn't fucking work. I'm not exaggerating - try finding a commit message from last quarter. The search will return 3 random commits from 2019 and call it a day. Bitbucket's search issues are well documented, with users reporting "Search is currently unavailable" for weeks at a time. Our devs gave up and just git clone
everything locally to use grep
.
PR reviews from the stone age. Diff viewer chokes on any file over 1000 lines. Inline comments randomly vanish between page loads. Mobile app crashes if you look at it sideways. I've seen devs email diffs instead of using Bitbucket's review system.
Pipelines fail for sport. Same commit, same branch, same fucking everything - fails randomly with "Build encountered an error" and zero logs. Restart it three times and suddenly it works. Our DevOps guy started drinking heavily during the Bitbucket months.
If your CFO is breathing down your neck about costs and your devs are saints who won't quit, Bitbucket might work. Spoiler: your devs aren't saints.
GitLab: $99/month per dev or your CFO will have a stroke
GitLab has three tiers but only Premium ($29) and Ultimate ($99) matter unless you enjoy missing basic features.
GitLab's pricing at least doesn't hide costs - everything's upfront. The problem? Ultimate costs more than most people's rent. They even have an ROI calculator to justify the sticker shock.
500 devs on GitLab Ultimate = $600k/year. That's literally a senior engineer's entire comp package just for Git hosting. I had to present this to our board with a straight face. GitLab claims 483% ROI over 3 years but that assumes you actually use every feature they bundle.
Security scanner flags literally everything. Last week it marked console.log('hello world')
as "critical injection vulnerability." Took our security team 3 days to understand this was JavaScript logging, not SQL injection. The scanner generates ~500 false positives per week that someone has to triage.
CI quota math makes no sense. Premium gets 10k minutes but shared runners count different than your own runners, Docker builds eat minutes faster than npm builds, and parallel jobs multiply everything by some coefficient they don't explain. We went over quota running the same pipelines that worked fine the month before.
UI changes every goddamn Tuesday. GitLab ships so aggressively that the screenshot in yesterday's documentation shows a completely different interface. Spent an hour last week looking for the security settings that got moved to a different menu. Again.
If you need everything (Git, CI/CD, security, project management, container registry, kitchen sink), GitLab Ultimate delivers. But $99/user/month is house payment money for some Git repositories. For comparison, that's 5x more than GitHub Enterprise and makes even AWS CodeCommit look reasonable.