<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq" -->

---
title: Why we migrated from Python to Node.js | daily.dev
description: A startup rewrote their backend from Python/Django to Node.js/Express one week after launch due to Python&#x27;s async limitations. The team struggled with Django&#x27;s...
canonical: https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Why we migrated from Python to Node.js | daily.dev
og:description: A startup rewrote their backend from Python/Django to Node.js/Express one week after launch due to Python&#x27;s async limitations. The team struggled with Django&#x27;s...
og:url: https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq
og:image: https://api.daily.dev/og/posts/XP9E2oFLq.png
og:image:alt: Why we migrated from Python to Node.js
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Why we migrated from Python to Node.js

**[Hacker News](https://daily.dev/sources/hn)** · 10 min read · 296 upvotes · 32 comments

## Summary

A startup rewrote their backend from Python/Django to Node.js/Express one week after launch due to Python's async limitations. The team struggled with Django's incomplete async support, colored functions problem, and the need for constant sync/async conversions. Despite losing Django's ergonomic ORM, they gained 3x throughput, unified their codebase with their existing Node worker service, and improved code maintainability. The three-day migration was driven by concerns about scalability and code quality rather than immediate load issues.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.yakkomajuri.com/blog/python-to-node>

## Community discussion

Top comments from developers on daily.dev.

**@alexandr\_sedeke** · 68 upvotes

> I completely believe the team’s reasoning — Django’s async story can be painful in mixed sync/async setups. Still, saying Python sucks feels too harsh. I work a lot with Node.js and TypeScript and love their developer flow, but Python shines in many other domains.
>
> It’s really about choosing the right tool for the specific workload. For highly concurrent, IO-bound systems, Node (or even Bun with Hono) can be excellent choices. For CPU-heavy or data-driven apps, Python remains elegant and powerful.
>
> And honestly, if raw performance were the only metric, we’d probably all be writing this in...

**@l4nos** · 11 upvotes

> Python and Django have their place, for scaffolding monolith APIs quickly that are data or math intensive.
>
> If you want Finance Exchange level latency then Rust is the only way to go.
>
> Node and Go are great middleground runtimes that handle async pretty well.
>
> Interesting article, not sure I agree with their comments about Prisma though.

**@harukinkd** · 9 upvotes

> Someday, you’ll regard your decision, and move it to a better language again

**@alexanderddaguob** · 8 upvotes

> I don't know Django as a Pythonist but FastAPI is great for async/await. I have not tried Node.js yet for backend. Thanks for this article though and your insight.

**@francoratovoson** · 5 upvotes

> Maybe out of topic but shouldn't the pr title be `refactor`  instead of `feat` ?

## Similar posts on daily.dev

- [What I love about Django](https://daily.dev/posts/what-i-love-about-django-7gnjuqa7b) · Hacker News · 2 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python), [#nodejs](https://daily.dev/tags/nodejs), [#backend](https://daily.dev/tags/backend), [#django](https://daily.dev/tags/django)

[View this post on daily.dev](https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Why we migrated from Python to Node.js","url":"https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq"},"datePublished":"2025-11-03T18:10:49.706Z","dateModified":"2025-11-03T18:11:11.862Z","description":"A startup rewrote their backend from Python/Django to Node.js/Express one week after launch due to Python's async limitations. The team struggled with Django's...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a82c079851337eac65c47ed28e3c5b25?_a=AQAEulh","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a82c079851337eac65c47ed28e3c5b25?_a=AQAEulh","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":32,"discussionUrl":"https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":296},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":32}],"keywords":"python,nodejs,backend,django","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Why we migrated from Python to Node.js"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/why-we-migrated-from-python-to-node-js-xp9e2oflq","comment":[{"@type":"Comment","text":"I completely believe the team’s reasoning — Django’s async story can be painful in mixed sync/async setups. Still, saying Python sucks feels too harsh. I work a lot with Node.js and TypeScript and love their developer flow, but Python shines in many other domains.\nIt’s really about choosing the right tool for the specific workload. For highly concurrent, IO-bound systems, Node (or even Bun with Hono) can be excellent choices. For CPU-heavy or data-driven apps, Python remains elegant and powerful.\nAnd honestly, if raw performance were the only metric, we’d probably all be writing this in Rust or other language.","datePublished":"2025-11-04T11:22:36.708Z","url":"https://daily.dev/posts/XP9E2oFLq#c-cq8hZsMUM","author":{"@type":"Person","name":"Alexandr","url":"https://daily.dev/alexandr_sedeke","image":"https://media.daily.dev/image/upload/s--7vbOXR11--/f_auto/v1757353978/avatars/avatar_A2emkOCirWqb76GcC4BKR?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":68}},{"@type":"Comment","text":"Python and Django have their place, for scaffolding monolith APIs quickly that are data or math intensive.\nIf you want Finance Exchange level latency then Rust is the only way to go.\nNode and Go are great middleground runtimes that handle async pretty well.\nInteresting article, not sure I agree with their comments about Prisma though.","datePublished":"2025-11-06T03:15:48.160Z","url":"https://daily.dev/posts/XP9E2oFLq#c-DXBnpacXt","author":{"@type":"Person","name":"Rob","url":"https://daily.dev/l4nos","image":"https://media.daily.dev/image/upload/s--TpdGm0C---/f_auto/v1730253491/avatars/avatar_PbxwZcegoR3dxRGBKXKpb"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":11}},{"@type":"Comment","text":"Someday, you’ll regard your decision, and move it to a better language again","datePublished":"2025-11-12T22:53:41.483Z","url":"https://daily.dev/posts/XP9E2oFLq#c-yoLC3SZcJ","author":{"@type":"Person","name":"Haruki","url":"https://daily.dev/harukinkd","image":"https://lh3.googleusercontent.com/a/ACg8ocLk21wkr_1uW_emNX7YYte3g3KF_hB2QXNC40P59WHcyXhbLtQ=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":9}},{"@type":"Comment","text":"I don’t know Django as a Pythonist but FastAPI is great for async/await. I have not tried Node.js yet for backend. Thanks for this article though and your insight.","datePublished":"2025-11-10T07:19:56.240Z","url":"https://daily.dev/posts/XP9E2oFLq#c-ONACCpKW7","author":{"@type":"Person","name":"Alexander D. Daguob","url":"https://daily.dev/alexanderddaguob","image":"https://media.daily.dev/image/upload/s--HzXYAZuD--/f_auto/v1756896199/avatars/avatar_DbeKd2z6Eb2A9vZlroZaB?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":8}},{"@type":"Comment","text":"Maybe out of topic but shouldn’t the pr title be refactor  instead of feat ?","datePublished":"2025-11-12T06:32:30.552Z","url":"https://daily.dev/posts/XP9E2oFLq#c-H6mbCGmg0","author":{"@type":"Person","name":"Franco RATOVOSON","url":"https://daily.dev/francoratovoson","image":"https://avatars.githubusercontent.com/u/56756707?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":5}}]}
```

