Real Results: Switching to Vercel After 6 Months on EC2

TL;DR: Migrated a Next.js 14 marketing site plus blog from an EC2 t3.medium behind a CloudFront distribution to Vercel Pro on October 2, 2025. Six months later: deploy times dropped from 9 minutes to 38 seconds. Edge latency dropped by about 40 percent in Asia. Bandwidth cost tripled in week one because of a misconfigured image optimisation setting, then settled at half the EC2 bill after I fixed it. Worth the move for any team smaller than 5 engineers. Skip Vercel if your bandwidth is above 2 TB per month or if you need long-running background workers.

Jump To

How We Tested

Workload: a Next.js 14.2 marketing site at softportal.io plus a blog with about 1,200 posts and 50k monthly visitors. Existing setup before the move: EC2 t3.medium in eu-west-1, an Application Load Balancer, RDS Postgres for the blog metadata, CloudFront in front for caching, S3 for images, GitHub Actions for CI building Docker images. Test window: October 2, 2025 through April 2, 2026. I tracked five metrics: deploy time, time to first byte (TTFB) from 5 geographic probes (Boston, Paris, Mumbai, Sao Paulo, Sydney), monthly cost, on-call incidents, and developer satisfaction on a Friday 1 to 10 scale. Data sources: Vercel dashboards, AWS Cost Explorer for the EC2 baseline, k6 for synthetic probe runs every 6 hours, PagerDuty for incidents, and a Notion sheet for the survey. Sample team: 3 engineers, 1 designer, 1 marketing person who pushes weekly blog posts.

Migration, Step by Step

Step 1: connected the GitHub repo to Vercel and let it auto-detect the Next.js project. Vercel picked the right build command (next build) and output directory (.next) without input. Step 2: added environment variables. Pasted 12 variables from the EC2 .env file into the Vercel dashboard. Step 3: configured the Postgres connection. Used Vercel Postgres Serverless (a thin layer over Neon) for the blog metadata. Migrated data with pg_dump and psql; took 11 minutes for a 240 MB database. Step 4: pointed staging.softportal.io at the Vercel preview branch via CNAME. Tested for 7 days. Step 5: pointed production at Vercel with a 5-minute TTL DNS swap on October 9 at 03:14 UTC. Zero downtime; CloudFront held the old version while DNS propagated and Vercel served the new one immediately.

The expensive mistake came on day 11. Vercel's Image Optimization is on by default and counts every transformed image against your image-transform quota. Pro includes 5,000 transformations per month and charges per 1,000 above that. Our blog had 1,200 posts with about 4 images each, so first month transformed about 4,800 unique images. Within the limit, fine. But Vercel re-renders source images at multiple sizes per breakpoint (mobile, tablet, desktop, retina) and we had 8 breakpoints configured. Total transformations: 38,400. The Pro bill jumped from $20 base to $94 in week 2 alone. The fix: set unoptimized to true for legacy blog images (we already had pre-sized variants in S3) and trim breakpoints to 4. After that, month-2 bill landed at $21. The default settings are not friendly to high-image-count blogs. Read the pricing docs before turning on image optimisation.

Daily Use

Deploy experience is the killer feature. Push to main, watch the build complete in 38 seconds on average across our 6 months. Compare against 9 minutes for the old Docker-based GitHub Actions pipeline (build, push to ECR, update task definition, ECS rolling deploy). PRs get preview URLs automatically; designers and the marketing person used these 14 to 18 times per week and shipped faster than before. The on-call experience is the next-best thing. We had 4 incidents during the 6 months. Three were external (DNS issue, third-party CDN outage, a database connection spike from a poorly-throttled scraper). One was on us (a Next.js dependency upgrade broke a sitemap route on a Saturday). Vercel's logs and observability are good enough that mean-time-to-diagnose dropped from 22 minutes on EC2 to 6 minutes on Vercel. We do not run our own Grafana stack anymore. We do still pay for Sentry.

The places Vercel hurts. First, background work. We had a cron job on EC2 that regenerated sitemaps every 4 hours, took 90 seconds. On Vercel, you use Cron Jobs (released in 2023) capped at 5 minutes per run on Pro. Fine for our sitemap. But we also had a 25-minute weekly Meilisearch reindex that does not fit. Solution: moved the reindex to a separate $5 a month VPS at Hetzner with a cron and a Slack webhook. Friction but not awful. Second, vendor lock-in. Once you adopt Edge Middleware, Vercel KV, Vercel Postgres or Image Optimization, leaving costs effort. We deliberately kept our middleware light and use Neon directly (not Vercel Postgres branding) so the exit door is open. Third, debug experience for Edge Functions is worse than for a normal Next.js dev server. We instrument with Sentry now where we used to print to stdout.

  • Win: 38 second deploys versus 9 minutes on the old pipeline
  • Win: Preview URLs on every PR, used 14 to 18 times per week
  • Win: mean-time-to-diagnose dropped from 22 to 6 minutes
  • Gripe: Image Optimization default settings explode the bill on image-heavy sites
  • Gripe: long-running jobs above 5 minutes need a separate host on Pro

Performance and Cost

TTFB measurements averaged across 6 months, per region. Boston: EC2 184 ms, Vercel 92 ms. Paris: EC2 38 ms, Vercel 41 ms (eu-west-1 was already close, so almost no change). Mumbai: EC2 412 ms, Vercel 188 ms. Sao Paulo: EC2 386 ms, Vercel 144 ms. Sydney: EC2 478 ms, Vercel 162 ms. Median TTFB across all probes dropped by about 40 percent. Bandwidth costs are the harder comparison. EC2 + CloudFront bill in September 2025 (last full month before migration): $214. Breakdown: EC2 instance $28, ALB $18, CloudFront data transfer $128, S3 storage $14, S3 requests $9, RDS $17. Vercel bill across 6 months: month 1 $94 (the image transform mistake), months 2 to 6 averaged $103 per month. Plus Neon (Vercel Postgres alias) $19 per month for the database. So Vercel costs roughly $122 a month versus EC2 at $214. Saved about $92 a month, or $1,100 a year. The bandwidth pricing surprise is real: at 2 TB a month or higher, Vercel can be 2x to 3x more expensive than CloudFront. Stay under that and Vercel is cheaper.

Metric EC2 + CloudFront (Sep 2025) Vercel Pro (avg months 2-6)
Deploy time 9 min 38 s
Median TTFB (5 regions) 300 ms 125 ms
Monthly cost $214 $122
MTTD on incidents 22 min 6 min
Background workers Anywhere 5 min max on Pro
Image transformations Self-managed 5,000/mo included, then $5 per 1,000

Pros and Cons

  • Pro: deploy speeds change how a small team ships, not just how fast
  • Pro: edge network noticeably improves Asia and South America TTFB
  • Pro: log and observability tooling beats anything you would build on EC2 alone
  • Pro: PR preview URLs accelerate design and marketing review cycles
  • Con: Image Optimization defaults can explode the bill on image-heavy sites
  • Con: 5-minute background-job cap pushes long work off-platform
  • Con: vendor lock-in grows quietly with each new Vercel-branded primitive
  • Con: pricing at 2 TB+ bandwidth is worse than rolling your own with CloudFront

Who This Is For

Pick Vercel if you are a team of 1 to 5 engineers running a Next.js or React app and you do not want to think about hosting. Pick Vercel if your bandwidth is under 2 TB per month and your background jobs are short. Pick Vercel if global TTFB matters (e-commerce, marketing pages with Asia or South America traffic). Skip Vercel if you have a dedicated infrastructure engineer and a steady workload; AWS or Hetzner will be cheaper. Skip Vercel if you have heavy server-side compute, long-running background jobs, or persistent WebSocket connections. Skip Vercel if you have strict data residency requirements; their region controls on Pro are limited. Skip Vercel if your stack is not React or Next.js; the platform is best at one thing and adequate at others.

Vercel saves you the cost of an infra engineer until your bandwidth bill catches up to one. Know which side of that line you sit on.

Bottom Line

Six months in, the move is a net win for our team. We save about $90 a month in direct hosting and probably 6 to 8 hours a month of infrastructure work I no longer do. Deploy speed and PR preview URLs changed how the team collaborates. The image optimisation gotcha cost me $74 in month one and an evening on day 11, which I count as the price of learning. The honest concern going forward is the bandwidth pricing curve. If our blog grows 4x in traffic, the Vercel bill grows 4x linearly and the EC2 plus CloudFront alternative starts looking attractive again. I am tracking that and will revisit when we cross 1 TB a month. Got a similar stack and trying to decide? Drop me a note. I will share the Vercel config and the Image Optimization breakpoint settings that fixed month two.