Why we migrated from Python to Node.js
Overall reaction to the rewrite
- Many readers see this less as “Python vs Node” and more as “Django async mismatch” plus “use what you know.”
- Several think a 3‑day rewrite early on is fine if it makes the team happier and faster; others see it as premature optimization and weak technical planning.
- Some view the post as thinly veiled marketing / clickbait (“Python to Node” flamebait, “week 1 pivot” narrative).
Python, Django, and async
- Strong consensus that Django is ill-suited for async-heavy, streaming, or high-concurrency workloads; its async story is described as awkward, “a parallel universe API,” and full of footguns.
- Multiple commenters stress this is more about Django than Python: alternatives like FastAPI + SQLAlchemy, green threads (gevent), Celery, or Channels could have addressed many pain points.
- Others argue Python async itself is messy: late arrival, multiple competing async models, confusing integration with libraries, and tricky interactions between anyio/asyncio.
- Some defend Python: async can work well with proper patterns (processes/threads/greenlets, Celery for background work) and Django’s ORM/ecosystem are still huge productivity wins.
Node.js and TypeScript perspectives
- Supporters say Node/TS is a natural fit for IO-bound, LLM/HTTP-heavy workloads: async is first-class, concurrency is straightforward, and TypeScript’s type system and tooling feel more mature than Python’s typing.
- Several practitioners report that large Node+TS codebases have been easier to maintain than comparable Python+async+types setups.
- Skeptics highlight npm dependency bloat, deprecation churn, security/supply-chain risks, and argue that Node is far from the “clean” choice; some would have preferred Go, C#, Java, or Rust if you’re rewriting anyway.
Alternative stacks & async models
- FastAPI is widely mentioned as the more appropriate Python choice for this use case; some say the team should have “just learned async FastAPI.”
- Others propose modern TS stacks (Hono, Elysia, Drizzle, Kysely), or completely different runtimes (Deno, Bun).
- Elixir/BEAM is heavily praised as purpose-built for massive concurrency and async, with Phoenix/LiveView and OTP eliminating a lot of DIY scheduling/queueing—though hiring and ecosystem concerns are noted.
- A few suggest that instead of a wholesale rewrite, they could have introduced Node microservices alongside Django and migrated incrementally.
ORMs and database access
- Divisive topic: some would have dropped ORMs entirely for SQL; others emphasize ORMs’ value (migrations, relations, admin UIs, ecosystem integration).
- Node ORM landscape is seen as fragmented; Django’s ORM is viewed as “complete and proven,” but can become painful off the “happy path.”