The Minimal Stack That Powers My Production Apps
There was a time when I thought building “serious” backend systems meant using everything:
The Minimal Stack That Powers My Production Apps
There was a time when I thought building “serious” backend systems meant using everything:
Kubernetes, microservices, message brokers, complex CI/CD pipelines…

This is an AI-generated image.
It looked impressive. It felt powerful.
But it also broke. A lot.
Over time, I learned something the hard way:
The best production systems aren’t the most complex… they’re the most predictable.
This is the minimal stack I now use to run real production apps — stable, fast, and surprisingly scalable.
The Stack (Simple, but Powerful)
- Node.js — runtime
- Express — API layer
- PostgreSQL — primary database
- Redis — caching + queues
- PM2 — process manager
That’s it.
No Kubernetes. No microservices. No unnecessary layers.
Let’s break down why this works so well.
1. Node.js — Fast Enough for Almost Everything
People love debating runtimes.
But in real-world apps?
👉 Node.js is more than capable.
Why I Stick With It
- Handles concurrent requests well
- Huge ecosystem
- Same language across frontend & backend
Real Use Case
- APIs serving thousands of users
- Realtime features (WebSockets)
- Background jobs
The secret isn’t the runtime — it’s how you use it.
2. Express — Boring Is Good
There are newer frameworks. Faster ones. Trendier ones.
But Express has one big advantage:
It just works.
Why I Prefer It
- Minimal abstraction
- Easy to debug
- Massive community support
Example
app.get('/users', async (req, res) => {
const users = await db.getUsers();
res.json(users);
});
No magic. No confusion.
3. PostgreSQL — The Underrated Beast
If I had to pick one database for most projects, this is it.
Why PostgreSQL Wins
- Relational + JSON support
- ACID compliance
- Powerful indexing
Real Trick
Use it for more than just tables:
SELECT data->>'name' FROM users;
You get flexibility without sacrificing structure.
4. Redis — The Silent Performance Booster
Redis is like a cheat code.
What I Use It For
- Caching API responses
- Session storage
- Job queues
Example
const cached = await redis.get("user:1");
if (cached) return JSON.parse(cached);
Why It Matters
- Reduces database load
- Speeds up APIs dramatically
5. PM2 — Keep Your App Alive
Most beginners ignore this part.
They run:
node app.js
And call it “production”.
That’s risky.
PM2 Fixes That
pm2 start app.js -i max
What You Get
- Auto restart on crash
- Load balancing (cluster mode)
- Monitoring
Why This Stack Works in Production
1. Fewer Moving Parts
Every extra tool is:
- Another failure point
- Another thing to debug
Minimal stack = fewer surprises.
2. Easier Debugging
When something breaks, you know exactly where to look:
- API → Express
- Data → PostgreSQL
- Cache → Redis
No hunting across 10 services.
3. Faster Development
You don’t spend time:
- Writing YAML configs
- Managing infrastructure
- Fixing DevOps issues
You focus on shipping features.
4. Scales Further Than You Think
People underestimate how far this setup can go.
With:
- Proper indexing
- Caching
- Horizontal scaling (PM2 + load balancer)
👉 You can handle serious traffic.
When I Don’t Use This Stack
Let’s be honest — it’s not perfect for everything.
I move beyond this when:
- Teams grow large (microservices make sense)
- System becomes highly distributed
- Different services need different tech
But for 80% of projects, this stack is more than enough.
The Biggest Lesson
I used to chase complexity.
Now I optimize for:
- Stability
- Clarity
- Speed
Because in production:
Simple systems survive. Complex ones fail in creative ways.
Final Thoughts
If you’re building backend apps today, you don’t need a massive stack to get started — or even to scale.
Start simple.
Master the fundamentals.
Add complexity only when it’s truly needed.
That’s how you build systems that don’t just work…
…but keep working.
[embed]12 Backend Tricks Nobody Talks About Most backend advice on the internet is… safe.medium.com
메타데이터
- post_id
- d567b9d504e4
- slug
- the-minimal-stack-that-powers-my-production-apps-d567b9d504e4
- url
- https://systemweakness.com/the-minimal-stack-that-powers-my-production-apps-d567b9d504e4
- canonical_url
- https://systemweakness.com/the-minimal-stack-that-powers-my-production-apps-d567b9d504e4
- author_url
- https://medium.com/@somendradev23
- status
- ok
- fetched_at
- 2026-06-13 00:08:42