DEV Community

Cover image for The No-BS Guide to Picking Your Startup's Tech Stack (Without Going Broke)
Gabriel Anhaia
Gabriel Anhaia

Posted on • Edited on

The No-BS Guide to Picking Your Startup's Tech Stack (Without Going Broke)


You have an idea. You're ready to build. And then you open your browser to set up infrastructure and suddenly you're comparing 47 cloud providers, 12 database options, and 6 different ways to send an email. Three hours later you've deployed nothing and you're reading a blog post about Kubernetes.

Stop.

I've built side projects that died in a week and products that made it to production with real users. The biggest lesson: your infrastructure choices in week one don't matter nearly as much as you think. What matters is shipping fast, keeping costs near zero until you have users, and not painting yourself into a corner you can't get out of.

For each piece of your stack, I'll tell you what to use when you're starting, when to upgrade, and what's not worth paying for until you actually need it.

The Golden Rule: Don't Optimize for Scale You Don't Have

If you have zero users, your infrastructure needs are trivial. A $5/month VPS can handle more traffic than most side projects will ever see. The goal at this stage is:

  1. Spend as close to $0 as possible. Every dollar spent before you have users is a dollar wasted.
  2. Ship fast. Pick boring tools you already know.
  3. Stay portable. Don't lock yourself into a vendor you can't leave.

Hosting

People overthink this one more than anything else.

Option 1: VPS (Virtual Private Server)

A VPS is a virtual machine you rent. You get root access, install whatever you want, and run your app however you like. It's the most flexible and often the cheapest option.

Top picks:

Provider Starting price Standout
Hetzner ~$4/mo Best price-to-performance ratio in the industry. European data centers (Germany, Finland), plus US (Ashburn, Hillsboro). If your users are in Europe, this is the obvious choice.
DigitalOcean ~$6/mo Great developer experience, solid docs, straightforward UI. The "safe" choice.
Linode (Akamai) ~$5/mo Similar to DigitalOcean, good global coverage.
Vultr ~$5/mo Lots of locations, competitive pricing. Good if you need a region the others don't cover.

When to use a VPS: When you want full control, when you're running a backend in any language, when your app is a single service (API + database on the same box is fine for starting out).

When NOT to use a VPS: If you don't want to manage a server at all (updates, security, SSH). If that sounds painful, go with a PaaS instead.

Pro tip: Hetzner's price-to-performance is absurd. A 4 vCPU / 8 GB RAM box costs what DigitalOcean charges for 1 vCPU / 2 GB. For a bootstrapped project, that matters. The tradeoff is fewer data center regions and less hand-holding in the UI.

Option 2: PaaS (Platform as a Service)

You push code, it runs. No SSH, no server management, no thinking about nginx configs.

Top picks:

Provider Free tier? Good for
Railway $5 free credits/mo Modern, fast, great DX. Deploy from GitHub in minutes. Supports databases too.
Render Free for static, paid for services Clean UI, auto-deploys from Git. Free tier for static sites and background workers.
Fly.io Limited free tier Deploy Docker containers globally. Great for APIs that need low latency worldwide.
Vercel Generous free tier The go-to for Next.js / frontend. Don't use it for backend-heavy apps. It's serverless under the hood and cold starts will hurt.
Netlify Generous free tier Static sites and JAMstack. Similar to Vercel but less framework-opinionated.

When to use a PaaS: When you want to focus 100% on code and ship in hours, not days. When you're a solo founder and don't want to play sysadmin.

When NOT to use a PaaS: When costs start climbing. PaaS pricing is great at $0-20/month and terrible at $200+/month. That's when you migrate to a VPS.

Option 3: Cloud Giants (AWS, GCP, Azure)

My honest advice: skip these at the start. Unless you already know them well.

AWS has 200+ services. The billing is unpredictable. The console is a maze. You will spend more time configuring IAM policies than writing code. GCP is slightly better, Azure is slightly worse. All three are designed for enterprises with dedicated DevOps teams, not solo founders.

When they make sense: When you need a specific managed service (SQS, Lambda, DynamoDB), when you're at scale and need the reliability guarantees, or when you got startup credits. Apply for AWS Activate or GCP for Startups. They give $5k-100k in free credits, and that changes the math completely.

The exception: If you already work with AWS daily and can set up an EC2 instance with your eyes closed, go ahead. Use what you know. Speed of shipping beats theoretical optimization.

My recommendation

Solo/bootstrapped, day one: Hetzner VPS ($4-8/mo) if you're comfortable with Linux, or Railway if you want zero ops.


Domain Name

You need one. Don't overthink it.

Where to buy:

Registrar Why
Cloudflare Registrar At-cost pricing (no markup, no renewal tricks). If you're using Cloudflare for DNS anyway (you should be, see below), this keeps everything in one place.
Namecheap Good prices, decent UI, reliable. The classic choice.
Porkbun Cheap, no-nonsense, good for less common TLDs.

Avoid: GoDaddy (upsells everywhere, renewal prices spike), Google Domains (shut down, migrated to Squarespace).

Cost: A .com runs $10-15/year. A .dev or .io is $15-40/year. Don't spend $2,000 on a premium domain before you have users. mycoolapp.dev is fine. Change it later if the project takes off.

Pro tip: Buy the domain early even if you're not ready to launch. Good names disappear. But don't buy 15 domains for 15 ideas. Buy one for the idea you're actually building right now.


DNS and CDN

Cloudflare. Just Use It.

This isn't even a decision. Cloudflare's free tier is absurdly generous and there's no reason not to use it.

What you get for free:

  • DNS. Fast, reliable, globally distributed. Point your domain here.
  • CDN. Your static assets get cached on 300+ edge servers worldwide. Free.
  • DDoS protection. Basic but real. Free.
  • SSL/TLS. Free HTTPS certificates, auto-renewed. No more Let's Encrypt cron jobs.
  • Page Rules / Redirects. Basic traffic routing for free.

Set up Cloudflare on day one. Even if your app is just a landing page. It takes 10 minutes and you get production-quality DNS and CDN for $0.

When to pay: Cloudflare's paid plans ($20/mo+) add WAF rules, image optimization, and analytics. You won't need these until you have real traffic. The free tier covers 99% of startups in their first year.

Alternatives: Fastly (expensive, for big scale), AWS CloudFront (complex, pay-per-use). Neither is worth it when Cloudflare free exists.


Database

Bad decisions here actually hurt, because migrating databases is painful. Choose wisely.

For most web apps: PostgreSQL

PostgreSQL is the right default for almost every project. It handles relational data, JSON data (with jsonb), full-text search, geospatial queries, and more. It's not the best at any single thing, but it's good-to-great at everything. One database that covers 90% of use cases means fewer moving parts.

How to run it:

Option Cost Effort
On your VPS Free (already paying for the VPS) Medium. You manage backups and updates.
Supabase Free tier (500 MB) Low. Managed Postgres + auth + APIs. Great for MVPs.
Neon Free tier (512 MB) Low. Serverless Postgres, scales to zero. Good for side projects.
Railway ~$5/mo Low. One-click Postgres alongside your app.
AWS RDS / GCP Cloud SQL $15-50/mo Low ops but high cost for a startup.

My recommendation for day one: Run Postgres on your VPS if you have one. It's free and simple. If you're on a PaaS, use Supabase or Neon's free tier.

When to pay for managed: When your project has real users and you can't afford downtime. Managed databases handle backups, failover, and patching. That's worth $15-30/month when people depend on your service.

When PostgreSQL isn't enough

Need Use
Caching / sessions Redis (or Valkey, its open-source fork). Run it on your VPS or use Upstash (free tier with pay-per-use).
Full-text search (serious) Meilisearch (self-hosted, free) or Typesense (cloud, free tier). Elasticsearch is overkill for startups.
Real-time / offline-first SQLite with Litestream for replication. Seriously underrated for single-server apps.
Document store Just use Postgres jsonb. You almost certainly don't need MongoDB.

Hot take on MongoDB: Most projects that use MongoDB would be better served by Postgres. Mongo is great for genuinely schemaless data at massive scale. If you're building a CRUD app with users and orders, that's relational data. Use a relational database.


Object Storage (Files, Images, Uploads)

You need somewhere to store user uploads, images, PDFs, and other files. Don't put them in your database. Don't store them on your VPS filesystem (you'll lose them when you migrate servers).

Top picks:

Provider Free tier Price after S3-compatible?
Cloudflare R2 10 GB + 10M requests/mo $0.015/GB/mo Yes
Backblaze B2 10 GB $0.006/GB/mo Yes
AWS S3 5 GB (12 months) $0.023/GB/mo It IS S3
MinIO (self-hosted) Free Free (your VPS cost) Yes

Go with Cloudflare R2. The free tier is generous, there are zero egress fees (AWS S3 charges you every time someone downloads a file), and it's S3-compatible so your code works with any S3 SDK.

Why egress fees matter: With AWS S3, you pay to store files AND you pay every time someone downloads them. If you host images that get popular, your bill can spike out of nowhere. R2 and Backblaze B2 don't charge egress. For a startup watching every dollar, this is the difference between a predictable bill and a surprise.


Authentication

Don't build auth from scratch. You will get it wrong. Password hashing, session management, OAuth flows, email verification, password reset. That's a massive surface area for security bugs, and the cost of getting it wrong is losing your users' data.

Top picks:

Provider Free tier Good for
Supabase Auth 50k MAUs If you're already using Supabase for your database, just use this.
Clerk 10k MAUs Beautiful prebuilt components. Best DX if you're using React/Next.js.
Auth.js (NextAuth) Free (self-hosted) Open source, you own the data. Good if you want control.
Firebase Auth Generous free tier Proven, works with any stack, good social login support.
Keycloak (self-hosted) Free Enterprise-grade, self-hosted. Powerful but complex. Overkill for most startups.

If you're using Supabase, use Supabase Auth. If not, Clerk for the fastest setup, Auth.js if you want to own everything. Most free tiers cover you until 10k+ monthly active users. That's a good problem to have.


Transactional Email

Your app needs to send emails: verification, password reset, notifications. Don't use Gmail's SMTP. It'll get rate-limited and flagged as spam.

Top picks:

Provider Free tier After that
Resend 3,000 emails/mo $20/mo for 50k
Postmark 100 emails/mo (trial) $15/mo for 10k
Amazon SES 3,000/mo (if sent from EC2) $0.10 per 1,000
Brevo (ex-Sendinblue) 300 emails/day $9/mo

Resend if you care about developer experience (great API, React email templates). Amazon SES if you want the cheapest per-email cost at scale.

Pro tip: Set up SPF, DKIM, and DMARC records on your domain from day one. Without these, your emails go straight to spam. Every provider above has docs on how to do this. It takes 15 minutes and saves you hours of "why aren't users getting my verification emails?"


Source Code: GitHub vs GitLab vs Bitbucket

Your code needs a home. Short answer: use GitHub.

Long answer: GitHub won the developer platform war. The ecosystem is unmatched. GitHub Actions for CI/CD, Dependabot for security patches, Copilot for AI-assisted coding, and the fact that every open-source library you'll ever use lives there. Your future hires already know it.

GitLab is solid if you want everything (code, CI, registry, project management) in one platform and you prefer self-hosting. Some teams love it. But for a solo founder, GitHub's free tier covers everything you need.

Bitbucket still exists, mostly because of the Jira integration. If your team is deep in the Atlassian ecosystem, it makes sense. Otherwise, skip it.

Free tier: GitHub gives you unlimited private repos, 2,000 CI/CD minutes/month, and 500 MB of package storage. That's more than enough for any startup.


CI/CD (Continuous Integration / Deployment)

You need automated tests and deploys. Manually SSHing into your server to git pull is fine for day one and embarrassing by day thirty.

Top picks:

Provider Free tier Notes
GitHub Actions 2,000 minutes/mo (free for public repos) If your code is on GitHub, this is the default. Huge marketplace of actions.
GitLab CI 400 minutes/mo Good if you're on GitLab.
Coolify (self-hosted) Free Open-source PaaS you run on your own VPS. Heroku alternative. Handles deploys, databases, SSL. Worth looking at if you want PaaS convenience on VPS pricing.

Just use GitHub Actions. It's where your code already lives, the free tier is generous, and you can go from running tests to deploying to your VPS with a simple workflow file.

Pro tip: If you're on a VPS and want push-to-deploy without setting up CI pipelines, look into Coolify. It's a self-hosted Heroku alternative that runs on your VPS and gives you automatic deploys, database management, and SSL through a web UI. Install it on a Hetzner box and you've got a PaaS experience for $4/month.


Monitoring and Error Tracking

You don't need this on day one. You need this on the day your first real user reports a bug and you have no idea what happened.

Top picks:

Provider Free tier What it does
Better Stack (formerly Logtail) Free tier available Uptime monitoring + logs. Clean UI.
Sentry 5k errors/mo Error tracking with stack traces, breadcrumbs. Industry standard.
Grafana Cloud 10k metrics, 50 GB logs Full observability stack. Powerful but complex.
UptimeRobot 50 monitors Simple uptime pings. Get alerted when your site goes down.

Set up UptimeRobot (free, 2-minute setup) on day one so you know when your site is down. Add Sentry when you have real users so you catch errors before they report them.

Don't set up Grafana/Prometheus/Loki on day one. You don't need dashboards when you have 3 users. Tail your logs with journalctl and move on.


Analytics

You built it. But is anyone using it? You need to know. Guessing doesn't count.

Top picks:

Provider Free tier Notes
Plausible $9/mo (no free tier, but worth it) Privacy-friendly, lightweight, no cookie banners needed. EU-hosted.
PostHog 1M events/mo Product analytics, session recordings, feature flags. All-in-one. Self-hostable.
Google Analytics Free The default. Powerful, but heavy, and your users' data goes to Google. Requires cookie consent in the EU.
Umami (self-hosted) Free Open-source Plausible alternative. Run it on your VPS for $0.

If you care about privacy (and your European users), go with Plausible or self-host Umami. If you want product analytics beyond page views (funnels, user journeys, feature usage), PostHog is hard to beat on the free tier.

Google Analytics is fine if you just need basics and don't mind the privacy tradeoffs. But for a startup, PostHog gives you way more signal about what users actually do in your app, not just which pages they visit.


Payments

If you're building a business, you need to charge money. This is one area where you should absolutely not build it yourself.

Top picks:

Provider Transaction fee Good for
Stripe 2.9% + $0.30 The industry standard. Best docs, best API, huge ecosystem. Works globally.
Lemon Squeezy 5% + $0.50 Merchant of record, so they handle sales tax/VAT for you. Higher fee, but zero tax headaches.
Paddle 5% + $0.50 Same merchant-of-record model as Lemon Squeezy. Good for SaaS.

The tax question matters more than you think. If you sell to customers in the EU, you're responsible for collecting and remitting VAT in every country. That's a nightmare for a solo founder. Lemon Squeezy and Paddle handle all of that because they're the merchant of record, meaning the sale technically goes through them. You pay a higher percentage, but you don't need an accountant in 27 countries.

Stripe is the right choice if you're selling in one country or you already have tax infrastructure figured out. The API is the best in the industry and the ecosystem of tools (Stripe Billing, Stripe Tax, Stripe Connect) is unmatched.

For most solo founders starting out: Lemon Squeezy until the 5% fee starts hurting, then migrate to Stripe + a tax solution when revenue justifies the complexity.


The $0 Stack (Everything Free)

Here's a complete stack that costs literally nothing:

Layer Tool Free tier
Hosting Railway or Render Free credits / free tier
Domain (skip for now, use the free subdomain) $0
DNS/CDN Cloudflare Free
Database Supabase or Neon Free tier
Storage Cloudflare R2 10 GB free
Auth Supabase Auth 50k MAUs
Email Resend 3k emails/mo
Analytics PostHog or Umami (self-hosted) 1M events or free
Payments Lemon Squeezy 5% + $0.50 per sale
CI/CD GitHub Actions 2,000 min/mo
Monitoring UptimeRobot 50 monitors

Total: $0/month. This stack can handle a real MVP with real users. You won't need to spend a dollar until you have traction.


The $10-20 Stack (Ready for Real Users)

When free tiers feel limiting:

Layer Tool Cost
Hosting Hetzner VPS (2 vCPU, 4 GB) ~$6/mo
Domain Cloudflare Registrar ~$1/mo (billed yearly)
DNS/CDN Cloudflare Free
Database PostgreSQL on VPS Free (same box)
Storage Cloudflare R2 Free tier
Auth Supabase Auth or Clerk Free tier
Email Resend Free tier
Analytics Umami on VPS Free (self-hosted)
Payments Lemon Squeezy or Stripe % per sale
CI/CD GitHub Actions Free tier
Monitoring UptimeRobot + Sentry Free tiers
PaaS layer Coolify on VPS Free (self-hosted)

Total: ~$7-8/month. This is what I'd recommend for most solo founders who are comfortable with a terminal. You get a real server, a real database, and PaaS-like deploys, all for less than a Netflix subscription.


Mistakes I've Seen (and Made)

1. Starting with Kubernetes. You have one service and zero users. You don't need container orchestration. You need a VPS and systemd. K8s is for teams running dozens of services at scale. You're not there yet. You may never be.

2. Using a microservices architecture. Build a monolith. Split it later if you need to. Every startup that succeeded started as a monolith. Most of them still are.

3. Paying for managed services before you need them. A managed database at $50/month makes sense when you have paying customers. Before that, Postgres on your VPS is fine.

4. Not setting up backups. This isn't a "scale" concern. Back up your database from day one. A cron job that dumps Postgres to R2/S3 once a day takes 10 minutes to set up and will save your project when (not if) something goes wrong. If you're using a managed database, make sure automated backups are actually enabled.

5. Choosing tech you don't know because it's "better". The best technology is the one you can ship with today. If you know Python, build it in Python. If you know JavaScript, use Node. The language and framework matter far less than actually launching.


When to Upgrade

Here's a rough guide for when to start spending real money:

Signal Action
Free tier limits hitting regularly Move to paid tier of the same service
VPS CPU consistently above 70% Upgrade to a bigger VPS (still cheaper than migrating)
You can't afford downtime Move database to managed (Supabase, RDS, etc.)
You're making revenue Invest in monitoring, error tracking, better email
You have a team Set up proper CI/CD, staging environments, code review
You're past $500/mo on PaaS Consider migrating to VPS + Coolify for massive savings

The pattern: start free, pay when it hurts, and always know what you're paying for and why.


Now Go Build Something

Nobody ever lost a startup because they used Hetzner instead of AWS. Plenty of startups died because the founder spent three weeks configuring Terraform instead of talking to users.

Pick a stack from the tables above, set it up this weekend, and ship something. You can always change things later. You can't get back the weeks you spent comparing options instead of building.

What does your stack look like? Did I miss a service you swear by? Drop it in the comments. I'll update this post with good suggestions.


Want to go deeper?

This article covers the highlights, but the full picture is a lot bigger. I wrote a book that goes into every layer in detail — hosting, payments, databases, security, tax compliance, CI/CD, privacy regulations, and complete stacks at every budget from $0 to $200/month. It also includes dedicated playbooks for SaaS, e-commerce, marketplaces, mobile apps, API products, and content platforms.

Ship It: The Complete Tech Stack Guide for Startup Founders — 306 pages, 32 chapters. From zero infrastructure to production-ready.

Top comments (0)