Uploaded April 2025 | Updated September 2026, 2 weeks ago
Brought to by:
• CodeRabbit — Cut code review time and bugs in half https://www.coderabbit.ai. Use the code PRAGMATIC to get one month free.
• Modal — The cloud platform for building AI applications modal.com/pragmatic
—
How will AI tools change software engineering? Tools like Cursor, Windsurf and Copilot are getting better at autocomplete, generating tests and documentation. But what is changing, when it comes to software design?
Stanford professor John Ousterhout thinks not much. In fact, he believes that great software design is becoming even more important as AI tools become more capable in generating code.
In this episode of The Pragmatic Engineer, John joins me to talk about why design still matters and how most teams struggle to get it right. We dive into his book A Philosophy of Software Design, unpack the difference between top-down and bottom-up approaches, and explore why some popular advice, like writing short methods or relying heavily on TDD, does not hold up, according to John.
We also explore:
• The differences between working in industry vs. academia
• Why John believes software design will become more important as AI capabilities expand
• The top-down and bottoms-up design approaches – and why you should use both
• John’s “design it twice” principle
• Why deep modules are essential for good software design
• Best practices for special cases and exceptions
• The undervalued trait of empathy in design thinking
• Why John advocates for doing some design upfront
• John’s criticisms of the single-responsibility principle, TDD, and why he’s a fan of well-written comments
• And much more!
As a fun fact: when we recorded this podcast, John was busy contributing to the Linux kernel: adding support to the Homa Transport Protocol – a protocol invented by one of his PhD students. John wanted to make this protocol available more widely, and is putting in the work to do so. What a legend! (We previously covered how Linux is built and how to contribute to the Linux kernel at newsletter.pragmaticengineer.com/p/how-linux-is-built-with-greg-kroah)
—
The Pragmatic Engineer deepdives relevant for this episode:
• Engineering Planning with RFCs, Design Documents and ADRs newsletter.pragmaticengineer.com/p/rfcs-and-design-docs
• Paying down tech debt newsletter.pragmaticengineer.com/p/paying-down-tech-debt
• Software architect archetypes newsletter.pragmaticengineer.com/p/software-architect-archetypes
• Building Bluesky: a distributed social network newsletter.pragmaticengineer.com/p/bluesky
—
Where to find John Ousterhout:
• X: https://x.com/johnousterhout
• Website: https://engineering.stanford.edu/people/john-ousterhout
Where to find Gergely Orosz:
• X: https://x.com/GergelyOrosz
• LinkedIn: linkedin.com/in/gergelyorosz
• Bluesky: https://bsky.app/profile/gergely.pragmaticengineer.com
• Newsletter and blog: pragmaticengineer.com
—
In this episode, we cover:
(00:00) Intro
(02:00) Why John transitioned back to academia
(03:47) Working in academia vs. industry
(07:20) Tactical tornadoes vs. 10x engineers
(11:59) Long-term impact of AI-assisted coding
(14:24) An overview of software design
(15:28) Why TDD and Design Patterns are less popular now
(17:04) Two general approaches to designing software
(18:56) Two ways to deal with complexity
(19:56) A case for not going with your first idea
(23:24) How Uber used design docs
(26:44) Deep modules vs. shallow modules
(28:25) Best practices for error handling
(33:31) The role of empathy in the design process
(36:15) How John uses design reviews
(38:10) The value of in-person planning and using old-school whiteboards
(39:50) Leading a planning argument session and the places it works best
(42:20) The value of doing some design upfront
(46:12) Why John wrote A Philosophy of Software of Design
(48:40) An overview of John’s class at Stanford
(52:20) A tough learning from early in Gergely’s career
(55:48) Why John disagrees with Robert Martin on short methods
(1:10:40) John’s current coding project in the Linux Kernel
(1:14:13) Updates to A Philosophy of Software Design in the second edition
(1:19:12) Rapid fire round
(1:01:08) John’s criticisms of TDD and what he favors instead
(1:05:30) Why John supports the use of comments and how to use them correctly
(1:09:20) How John uses ChatGPT to help explain code in the Linux Kernel
—
See the transcript and other references from the episode at newsletter.pragmaticengineer.com/podcast
—
Production and marketing by penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Brought to by:
• CodeRabbit — Cut code review time and bugs in half https://www.coderabbit.ai. Use the code PRAGMATIC to get one month free.
• Modal — The cloud platform for building AI applications modal.com/pragmatic
—
How will AI tools change software engineering? Tools like Cursor, Windsurf and Copilot are getting better at autocomplete, generating tests and documentation. But what is changing, when it comes to software design?
Stanford professor John Ousterhout thinks not much. In fact, he believes that great software design is becoming even more important as AI tools become more capable in generating code.
In this episode of The Pragmatic Engineer, John joins me to talk about why design still matters and how most teams struggle to get it right. We dive into his book A Philosophy of Software Design, unpack the difference between top-down and bottom-up approaches, and explore why some popular advice, like writing short methods or relying heavily on TDD, does not hold up, according to John.
We also explore:
• The differences between working in industry vs. academia
• Why John believes software design will become more important as AI capabilities expand
• The top-down and bottoms-up design approaches – and why you should use both
• John’s “design it twice” principle
• Why deep modules are essential for good software design
• Best practices for special cases and exceptions
• The undervalued trait of empathy in design thinking
• Why John advocates for doing some design upfront
• John’s criticisms of the single-responsibility principle, TDD, and why he’s a fan of well-written comments
• And much more!
As a fun fact: when we recorded this podcast, John was busy contributing to the Linux kernel: adding support to the Homa Transport Protocol – a protocol invented by one of his PhD students. John wanted to make this protocol available more widely, and is putting in the work to do so. What a legend! (We previously covered how Linux is built and how to contribute to the Linux kernel at newsletter.pragmaticengineer.com/p/how-linux-is-built-with-greg-kroah)
—
The Pragmatic Engineer deepdives relevant for this episode:
• Engineering Planning with RFCs, Design Documents and ADRs newsletter.pragmaticengineer.com/p/rfcs-and-design-docs
• Paying down tech debt newsletter.pragmaticengineer.com/p/paying-down-tech-debt
• Software architect archetypes newsletter.pragmaticengineer.com/p/software-architect-archetypes
• Building Bluesky: a distributed social network newsletter.pragmaticengineer.com/p/bluesky
—
Where to find John Ousterhout:
• X: https://x.com/johnousterhout
• Website: https://engineering.stanford.edu/people/john-ousterhout
Where to find Gergely Orosz:
• X: https://x.com/GergelyOrosz
• LinkedIn: linkedin.com/in/gergelyorosz
• Bluesky: https://bsky.app/profile/gergely.pragmaticengineer.com
• Newsletter and blog: pragmaticengineer.com
—
In this episode, we cover:
(00:00) Intro
(02:00) Why John transitioned back to academia
(03:47) Working in academia vs. industry
(07:20) Tactical tornadoes vs. 10x engineers
(11:59) Long-term impact of AI-assisted coding
(14:24) An overview of software design
(15:28) Why TDD and Design Patterns are less popular now
(17:04) Two general approaches to designing software
(18:56) Two ways to deal with complexity
(19:56) A case for not going with your first idea
(23:24) How Uber used design docs
(26:44) Deep modules vs. shallow modules
(28:25) Best practices for error handling
(33:31) The role of empathy in the design process
(36:15) How John uses design reviews
(38:10) The value of in-person planning and using old-school whiteboards
(39:50) Leading a planning argument session and the places it works best
(42:20) The value of doing some design upfront
(46:12) Why John wrote A Philosophy of Software of Design
(48:40) An overview of John’s class at Stanford
(52:20) A tough learning from early in Gergely’s career
(55:48) Why John disagrees with Robert Martin on short methods
(1:10:40) John’s current coding project in the Linux Kernel
(1:14:13) Updates to A Philosophy of Software Design in the second edition
(1:19:12) Rapid fire round
(1:01:08) John’s criticisms of TDD and what he favors instead
(1:05:30) Why John supports the use of comments and how to use them correctly
(1:09:20) How John uses ChatGPT to help explain code in the Linux Kernel
—
See the transcript and other references from the episode at newsletter.pragmaticengineer.com/podcast
—
Production and marketing by penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.


![Building Pi, and what makes self-modifying software so fascinating
Mario Zechner is the creator of Pi, a minimalist, self-modifying AI coding agent, that is the foundation upon which OpenClaw (created by Peter Steinberger) is built. Meanwhile, Armin Ronacher is the creator of Flask, and a longtime user of Pi. The pair are also friends.
I sat down with Mario and Armin for the latest episode of the Pragmatic Engineer Podcast for an interesting conversation about AI and their reservations about it – even though both are heavily invested in building AI-powered tools.
Mario explains why he built Pi, and gives his take on why it has become so popular. Armin walks us through how he uses AI tools, including building a game with Pi, and why he always puts human judgment firmly at the heart of his approach.
We cover the risks of over-automation, the limits of agentic workflows, and why strong engineers with informed judgment still matter. We also get into the challenges of working with code written by non-engineers, and whether open source can withstand a tidal wave of agent-generated code.
—
*Brought to you by our season partners:*
• Statsig — The unified platform for flags, analytics, experiments, and more. http://statsig.com/pragmatic
• Sonar – The makers of SonarQube, the industry standard for automated code review. https://www.sonarsource.com/pragmatic/?utm_medium=paid&utm_source=pragmaticengineer&ut[…]egory=Paid&s_source=Paid%20Other&s_origin=pragmaticengineer
• WorkOS – Everything you need to make your app enterprise ready. https://workos.com/
—
*The Pragmatic Engineer deepdives relevant for this episode:*
• The impact of AI on software engineers in 2026: key trends https://newsletter.pragmaticengineer.com/p/the-impact-of-ai-on-software-engineers-2026
• Cycles of disruption in the tech industry https://newsletter.pragmaticengineer.com/p/cycles-of-disruption-in-the-tech
• The AI engineering stack https://newsletter.pragmaticengineer.com/p/the-ai-engineering-stack
• The creator of OpenClaw: I ship code that I dont read https://newsletter.pragmaticengineer.com/p/the-creator-of-clawd-i-ship-code
• What is inference engineering? Deepdive https://newsletter.pragmaticengineer.com/p/what-is-inference-engineering
—
*Where to find Mario Zechner:*
• X: https://x.com/badlogicgames
• LinkedIn: https://www.linkedin.com/in/mariozechner
• Website: https://mariozechner.at
*Where to find Armin Ronacher:*
• X: https://x.com/mitsuhiko
• LinkedIn: https://www.linkedin.com/in/arminronacher
• Website: https://mitsuhiko.at
• Blog: https://lucumr.pocoo.org
—
*In this episode, we cover:*
(00:00) Intro
(07:30) How Mario, Armin, and Peter Steinberger met
(15:15) How 30 dev teams use AI agents: learnings
(21:50) The importance of judgment
(24:26) Challenges when non-engineers write code
(28:30) Downsides of over-automation
(32:18) Pi
(48:09) OpenClaw + Pi
(50:54) “Clankers”
(57:32) Open source and AI
(1:00:22) Complexity as the enemy
(1:02:50) Building an AI-native startup
(1:11:52) “Slow the F down”
(1:16:40) MCPs vs. CLI
(1:25:03) Predictions and staying up to date
—
See the transcript and other references from the episode at https://newsletter.pragmaticengineer.com/podcast
—
Production and marketing by https://penname.co/. Building Pi, and what makes self-modifying software so fascinating](https://i.ytimg.com/vi/n5f51gtuGHE/mqdefault.jpg)







