Why We Migrated from Python to Node.js

Startup rewrites backend in week two; commenters cry “use what you know” and roast the timing

TLDR: One week after launch, Skald rewrote its backend from Python/Django to Node.js for simpler handling of many web calls at once. Comments erupted: some say just use what you know, others call the post dated or marketing fluff, arguing tool choice should follow needs, not hype.

The founders of Skald pulled a dramatic week-two move: ditching Python (with the Django framework) for Node.js to chase easier “async” work—basically doing lots of internet calls at the same time—and future scale. They say Python’s async is confusing, Django’s support is patchy, and Node’s event loop just felt simpler. But the crowd wasn’t buying the hero narrative. The loudest reaction: you should’ve used the tool you know on day one, not rewrite a week after launch. One commenter rolled eyes with “This feels like an article from 2013”, while another quipped it’s “coding week last week, marketing week this week”—translation: the blog post is the real product. Practical voices chimed in that Django is heavy baggage for simple web APIs, making this less a tale of scale and more a case of developer comfort. Not everyone was snarky: a supportive dev shared they did the same and even dropped a handy tool, alt-swagger, to make Node docs easy. The drama centered on whether this was a smart early pivot or overengineering cosplay. The memes wrote themselves: “week-two pivot speedrun,” “scaling at 12 users,” and PG’s startup mantra getting side-eye. Verdict from the comments? Fewer sermons on scale, more shipping.

Key Points

  • A startup rewrote its backend from Python/Django to Node.js one week after launch to better handle async I/O workloads.
  • The decision was driven by frequent concurrent calls to LLM and embedding APIs requiring efficient network concurrency.
  • The authors cite Python’s lack of native async file I/O and Django’s incomplete async support, including a non-async ORM.
  • Bridging sync/async in Django required widespread use of sync_to_async and async_to_sync, adding complexity and risk.
  • They found Node.js’s event-driven model and their familiarity with it better suited for rapid iteration and scalability at this stage.

Hottest takes

"they should have used the tool they were most familiar with on day 1" — goalieca
"This feels like an article from 2013" — adamnemecek
"Looks like last week was coding week, current one is marketing week" — inerte
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.