Developing a Modern Full-Stack Application: Choosing the Right Tech Stack
Backend language and performance
- Strong disagreement over Node.js/TypeScript backends:
- Critics say Node/TS is inherently slow for CPU-heavy work (large arrays, math), fine for v1 but painful at scale; prefer Go/Rust/Java from the start.
- Others argue Node’s performance is comparable to Java/Go for typical web workloads; most apps are I/O-bound and hit DB limits before CPU.
- Some cite TechEmpower benchmarks to claim Node is slow; others counter with high-performing JS runtimes/frameworks and note all stacks rely on native code underneath.
- Consensus that heavy computation should often be offloaded to separate services, regardless of main backend language.
ORMs, querying, and Prisma
- Prisma draws substantial criticism: slow, inflexible for complex queries, known open issues; some would avoid it entirely.
- Defenders say Prisma is fine for most cases and that you can drop to raw SQL when needed; others prefer Drizzle, Zapatos, or direct SQL with type-safe wrappers.
- Several note that ORM misuse and huge query results cause performance problems in any language; better to chunk/stream data and optimize DB/indexes.
TypeScript’s type system
- Debate over “only sort of static”:
- One side emphasizes progressive typing,
any/unknown, and lack of runtime types; also notes runtime mismatches (e.g., schema changes vs long-lived clients). - Others insist TS is statically typed but not fully sound, and that you should pair it with runtime validation (e.g., zod/yup) at boundaries.
- One side emphasizes progressive typing,
Infra, hosting, and “boring tech”
- Many pain points reported with modern managed/serverless stacks (e.g., Vercel): flaky migrations and cron jobs, odd env var and caching behavior, auth library quirks, background-job limits due to function timeouts.
- This fuels support for “choose boring technology” (traditional AWS, Rails/Laravel/Django, self-hosted Postgres/MySQL, simple VPS) to avoid hype-driven paper cuts.
- Concerns about Next.js vendor lock-in and weak self-hosting story; some prefer Remix or container-based platforms like Cloud Run.
HTMX, PocketBase, and alternative stacks
- HTMX: praised for simple apps and avoiding heavy JS toolchains; critics say hype is strong, complex UX becomes hard to maintain and staff for, not a full SPA replacement.
- PocketBase + SQLite: lauded for speed and rapid setup; skeptics worry about single-instance availability and “not production-ready” status, but others note most apps never hit those limits.
- Multiple commenters advocate classic monolithic stacks (Rails/Laravel/Django + Postgres/MySQL) or Go-based stacks for balance of simplicity, performance, and maturity.
Security and frameworks
- Custom auth shown as hash-based (bcrypt) but flagged as likely vulnerable to timing and other subtle issues.
- Several argue that established frameworks (Laravel/Django/Rails) reduce such risks and let teams focus on product rather than re-inventing backend fundamentals.