Tech Stack Selection Criteria for Solo Developers
Introduction
Tech stack selection can determine a project's success or failure. Especially when developing alone, wrong choices directly lead to decreased productivity and maintenance hell.
Running a one-person development agency for 5 years, going through dozens of projects, I've developed my own tech stack selection criteria. Not just "I heard this is good," but actually verified principles.
Core Principle: "Choose Boring Technology"
This phrase comes from Dan McKinley's famous article "Choose Boring Technology." It didn't resonate at first, but after several failures, I felt it deeply.
The Trap of New Technology
In 2022, I introduced a newly released technology A to a client project. I was tempted by an article saying "This will double your development speed!"
The result?
- Poor official documentation increased debugging time
- When encountering bugs, no Stack Overflow results
- Major version updates required complete code rewrite
I ended up rewriting with existing technology. A waste of time.
Advantages of Boring Technology
On the other hand, "boring" technologies like React, Node.js, PostgreSQL:
- Solutions can be found through search when problems occur
- Mature ecosystem with necessary libraries available
- Long-term support is guaranteed
When developing alone, minimize time spent solving problems. Experiment with new tech when you have a team.
My Criterion 1: Unify with One Language
Full-Stack JavaScript/TypeScript
Writing frontend and backend in different languages creates context switching costs. When developing alone, this is fatal.
โ Combinations to avoid
- React (JavaScript) + Django (Python) + PostgreSQL
- Vue (JavaScript) + Spring (Java) + MySQL
โ
My combination
- Next.js (TypeScript) + NestJS (TypeScript) + PostgreSQL
Using the same language:
- Types can be shared between frontend/backend
- Copy-paste code is possible
- Build tools can be unified
- No learning curve
Exception Cases
Of course, there are exceptions. When clients require specific tech stacks, or when different languages are needed for performance. But when I have a choice, I always choose TypeScript.
My Criterion 2: Minimize Management Points
Use Managed Services
I don't want to spend time on infrastructure management. Even if it costs more, I use managed services.
My choices:
- Database: Vercel Postgres, Supabase, PlanetScale
- Hosting: Vercel, Railway
- File storage: Vercel Blob, Cloudflare R2
- Auth: NextAuth.js (instead of building from scratch)
If you manage servers yourself, SSL renewal, security patches, backups, monitoring... these things keep holding you back.
Local Development Environment
But in development, I run what I need locally with Docker. PostgreSQL, Redis, etc. No cost, and I can develop without internet.
# docker-compose.yml
services:
postgres:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: myapp
ports:
- "5432:5432"
My Criterion 3: Community Size
The Power of Ecosystem
When choosing technology, more important than GitHub stars is an active community.
Checklist:
- Stack Overflow question count
- GitHub issue response speed
- Discord/Slack community activity
- npm weekly downloads
- Recent update date
Example - State Management Library Comparison
Zustand: npm weekly downloads 3M+, active issue response
MobX-State-Tree: fewer downloads, slow issue response
โ Choose Zustand
Are There Alternatives?
When depending on specific technology, always think "What if this dies?" Choose technology with alternatives, or with clear migration paths.
My Criterion 4: Cost Predictability
Cost Matters for Client Projects
Unexpected costs during the maintenance phase after project completion are problematic. It leads to trust issues with clients.
Services with predictable costs:
- Vercel Pro: $20/month (covers most traffic)
- Railway: usage-based but can set limits
- Supabase: Free tier then $25/month
Services with unpredictable costs:
- AWS pay-as-you-go (traffic explosion = billing explosion)
- Per-hour billing VMs (keeps charging while on)
Use Free Tiers for Personal Projects
For personal or side projects, I actively use free tiers. Vercel Hobby, Supabase Free, Cloudflare free plan combination allows $0/month operation.
My Criterion 5: Exit Possibility
Beware of Vendor Lock-in
Being locked to specific platforms makes future migration difficult.
High lock-in risk:
- Firebase Realtime Database (unique structure)
- AWS Lambda + API Gateway + DynamoDB combination
- Vercel's Edge Functions (non-standard API)
Low lock-in risk:
- PostgreSQL (can host anywhere)
- Standard Node.js (Express, Fastify, etc.)
- Docker containers (can run anywhere)
Migration Experience
I've actually moved from Vercel to Railway, and from Supabase to self-hosted PostgreSQL. Because I used PostgreSQL, data migration was simple with pg_dump/pg_restore.
My Current Stack
My default stack as of 2025:
Frontend:
- Next.js (App Router)
- TypeScript
- Tailwind CSS
- React Query (server state)
- Zustand (client state)
Backend:
- Next.js API Routes (simple cases)
- NestJS (complex cases)
- Prisma
- PostgreSQL
Infrastructure:
- Vercel (hosting)
- Docker (local development)
- GitHub Actions (CI/CD)
Tools:
- VS Code
- pnpm
- Cursor (AI assistance)
I don't deviate much from this stack for new projects. Start quickly with familiar tools, add new things only when needed.
Conclusion
Tech stack selection for solo developers is a survival strategy.
More important than the latest, coolest technology:
- Can you solve problems quickly?
- Can you maintain it alone?
- Can you predict costs?
- Can you move elsewhere if needed?
If you choose technology that passes these criteria, at least your project won't fail because of technology.
If you're curious about new tech, experiment in personal projects first. Client projects use proven stacks.