
Introduction: A Python Icon’s “Betrayal”
Armin Ronacher, creator of Flask—one of Python’s most beloved web frameworks—is a household name in the Python community. For years, he’s been a standout contributor to Python’s ecosystem, with his career deeply intertwined with the language. Yet when launching his AI startup, he made a surprising decision: the company’s core backend services wouldn’t use Python, the reigning champion of AI, but Go instead.
This choice raises a fundamental question: Why would a top-tier Python expert “betray” his preferred language in an AI project where Python should dominate? This isn’t just a technical decision—it’s the result of an internal struggle between two identities: the “Swiss watchmaker” who pursues code perfection and the pragmatic founder focused on shipping products. This article explores how Armin Ronacher balances these personas and how AI-era tech companies should rethink their technology stack decisions.
1. Reconsidering Python: AI’s King with Hidden Concerns
Python’s dominance in today’s tech landscape seems unshakeable, especially in AI. However, every technology choice involves tradeoffs, and even Python isn’t the best answer in every scenario.
Python’s Absolute Strengths
First, we must acknowledge that no company can completely avoid Python. Armin Ronacher explicitly states that whether you like it or not, Python will be part of your stack. Its position in these domains is irreplaceable:
- Machine Learning (ML): Core for AI inference and data processing tasks.
- Data Processing: Unmatched data science ecosystem.
- Infrastructure Management: For example, Armin uses Pulumi with Python to build his company’s infrastructure.
As the “glue” in the ecosystem and the data science engine, Python’s value is undeniable. Even for network-intensive tasks like AI inference, performance bottlenecks typically lie in networking rather than the language itself, making Python an excellent choice.

The Tradeoff for Core Services
Despite Python’s ubiquity, Armin believes it shouldn’t be used to build his new company’s primary services. This consideration isn’t rooted in performance bias but stems from deeper insights into language complexity and ecosystem strengths.
- Growing Complexity: Armin observes that Python itself is becoming increasingly complex. In contrast, Go has maintained relative simplicity since inception. This matters because for an engineering team that needs rapid iteration and collaboration, Go might be “an easier language to write.”
- Ecosystem Specialization: Technology choices aren’t just about what a language can do, but what its ecosystem is good at. Armin explicitly states he’s abandoning Python not for performance reasons, but because of “what the ecosystem is good at.” While Python is fully capable of handling email parsing (one of Armin’s company’s core businesses), this isn’t where its ecosystem naturally excels. Compared to Go, it’s not the “chosen one” for building this type of scaled core service.
These nuanced considerations led Armin to look toward another language, naturally bringing us to the discussion of Go.
2. Embracing Go: The Pragmatist’s Victory
If choosing technology is an art, then for startups, the core of this art is pragmatism. Armin Ronacher’s choice of Go perfectly embodies this philosophy. Go isn’t the most “sexy” or feature-rich language, but in specific scenarios, it’s the most pragmatic, most suitable tool.
Here are Go’s core advantages that made it stand out:
- Built for Web Services: Go is clearly positioned as “an excellent language for building web services” with intense focus (“really kind of only web services”), plus some CLI tool building capability. This focus makes it exceptionally performant in its target domain.
- Extreme Pragmatism: This is Armin’s primary reason for choosing Go. He emphasizes Go’s “very pragmatic language features,” a crucial quality for startups that need to focus on products, ship quickly, and reduce unnecessary technical friction.
- Ecosystem Stability: For long-term projects, technology longevity is a key consideration. Armin believes Go can be “expected to stick around.” Even if Google stopped maintaining it someday, the massive community and industry users have enough strength and willingness to sustain its vitality, providing solid guarantees for projects.
- The Pragmatic Landing Point After Avoiding Python Scaling Concerns and Rust Development Friction: After weighing options, Go became an ideal pragmatic choice. It avoids both Python’s ecosystem fit issues when building certain types of core services and Rust’s steep learning curve and high development “friction,” making it the best choice for a “founder.”

To understand this decision more clearly, we need a horizontal comparison of these languages to see their roles in different scenarios.
3. Horizontal Comparison: Go vs. Rust vs. Python Use Cases
Armin Ronacher houses “two programmers” within himself: one is the “Swiss watchmaker” pursuing code perfection, usually thriving in the open-source world; the other is the company founder focused on product delivery, making all decisions with pragmatism first. From the latter’s perspective, he made a clear distinction between Go, Rust, and Python’s applicable scenarios.

Python: The Ubiquitous “Glue” and Data Science Engine
- Role: Python is the universal “glue” in the ecosystem and the undisputed default choice for data processing and machine learning.
- Advantages: Most powerful library ecosystem, supports rapid prototyping and iteration. In network-intensive tasks like AI inference, the language’s performance bottleneck isn’t prominent.
- Tradeoffs: The language’s inherent complexity is increasing, and for certain types of core services, it may not be the most natural, direct choice.
Rust: The “Swiss Watch” for “Rust-Shaped Problems”
- Role: Rust is the expert-level language for solving specific “Rust-shaped problems,” such as handling binary data, building databases, load balancers, or high-performance Python extension modules.
- Advantages: Memory safety, predictable performance without garbage collection (GC), excellent as Python extensions.
- Tradeoffs (for Startups): Extremely high development “friction.” This includes “incredibly slow” compilation speeds and the steep learning curve of ownership and borrow checking. This makes it highly unsuitable for environments requiring rapid iteration and flexible adjustments.
Go: The Pragmatic, Focused Web Service Builder
- Role: Go is the pragmatic choice for building web services and CLI tools, a focused service-building specialist.
- Advantages: Simple language, easy for teams to learn and master, stable ecosystem, excellent performance in high-concurrency service scenarios.
- Tradeoffs: Its applicable domain is relatively focused, lacking Python’s “jack-of-all-trades” versatility.
Notably, Armin also explicitly ruled out using TypeScript/JavaScript for core backend services. Despite its increasingly mature language environment, he’s reserved about the npm ecosystem, stating bluntly: “I feel like in the JavaScript ecosystem, I can barely build efficiently without introducing 500+ dependencies, which makes me uncomfortable.”
Traditional language selection considerations are now very clear. However, AI’s rise introduces a new, potentially disruptive decision dimension.
4. The New Deciding Factor: AI Agent Code Generation Quality
The rise of AI programming assistants is fundamentally changing software development paradigms, and the underlying logic of technology selection is shifting accordingly. Armin Ronacher, as an entrepreneur heavily relying on AI-assisted coding (which he calls his “army of interns”), discovered a striking fact: AI Agent code generation quality has become an unavoidable consideration.
He reached a clear conclusion from practice:
“I did actual testing… I found that AI Agents perform much better on Go than on Python.”
Why? The reason lies in the language’s design philosophy. Armin explains: “Because the abstractions are very thin, it (AI) can understand the code better.” Go’s simplicity and directness make its structure easier for large language models to understand and generate, resulting in more reliable, more correct code.

This discovery is significant for a team heavily dependent on AI. When your “army of interns” is more efficient and makes fewer errors with a particular language, choosing that language isn’t just a technical preference—it directly impacts the entire team’s productivity.
Conclusion: No Best Language, Only the Right Choice
Armin Ronacher’s abandonment of Python for Go isn’t a rejection of Python, but rather a highly pragmatic tradeoff made in a new technical paradigm, based on a specific startup context (AI company, rapid iteration, small team collaboration).
His decision logic can be summarized as follows:
- Pragmatism Above All: For startups, product success matters far more than “meticulously crafted” code. Choosing tools with less friction and more focus on solving core problems is wise.
- The Art of Tradeoffs: Among language simplicity (easy for teams to master), ecosystem maturity, performance, and development efficiency, Go provides an excellent balance point.
- Embracing New Paradigms: Incorporating AI code generation quality into core technology selection considerations reflects adaptation to changing times. A language’s friendliness to AI is becoming a new, critical productivity metric.
Ultimately, Armin’s story brings a profound insight to all technical decision-makers: we must continuously reevaluate our toolbox and courageously make the most suitable, most pragmatic choices based on current project needs and emerging technology waves.
Article Summary
Flask creator Armin Ronacher chose Go over Python for core services in his new AI startup. This decision doesn’t negate Python but stems from a startup’s extreme pursuit of pragmatism, simplicity, and team efficiency. He views Go as the pragmatic choice after avoiding Rust’s development friction and Python’s ecosystem specialization limitations. More critically, he discovered that AI Agents generate far better Go code than Python—a decisive new factor in the AI-assisted programming era.
- Long Time Link
- If you find my blog helpful, please subscribe to me via RSS
- Or follow me on X
- If you have a Medium account, follow me there. My articles will be published there as soon as possible.