In this episode of Elixir Wizards, hosts Charles Suggs and Emma Whamond sit down with Saša Jurić, Elixir mentor and author of Elixir in Action, to discuss software craftsmanship in the age of AI. As AI coding tools become increasingly capable, Saša argues that the real challenge isn't generating code, it's maintaining quality, clarity, and shared understanding within a codebase.
We explore the difference between correct code and good code, and why code is more than a set of instructions for a machine to execute. Code is also documentation, communication, and a long-term investment that future developers must be able to understand and maintain. Saša shares his concerns about the growing "theater of pull requests," where teams go through the motions of code review without creating meaningful opportunities for learning, feedback, or knowledge sharing.
The hosts and Saša talk about practical ways to work effectively with AI, including taking smaller steps, carefully reviewing AI-generated code, and using AI as a collaborative tool rather than an autonomous developer. Throughout the discussion, Saša challenges the industry's obsession with speed and makes the case that the principles of good software development (incremental progress, clear communication, and human judgment) remain important in the age of AI.
Key Topics Discussed
The difference between correct code and good codeCode as communication, documentation, and shared understandingThe "theater of pull requests" and ineffective review practicesHow AI is changing software development workflowsUsing AI as a collaborator rather than a replacementWhy smaller, incremental changes lead to better outcomesHuman oversight in AI-assisted developmentBalancing development speed with maintainabilityPull request size and review effectivenessCommit history as a tool for storytelling and contextThe risks of accumulating technical debt faster with AITesting and validating AI-generated codeRefactoring AI-generated solutions for clarityApplying agile principles to AI-assisted workflowsThe role of experience and judgment in software designWhy software craftsmanship still matters in the age of AILinks mentioned
Code Complete by Steve McConnell https://khmerbamboo.wordpress.com/wp-content/uploads/2014/09/code-complete-2nd-edition-v413hav.pdf
Harness AI for DevOps, Testing, and AppSec https://www.harness.io/
Claude Code https://claude.com/product/claude-code
Claude Code GitHub https://github.com/anthropics/claude-code
Pull Request for Oban https://github.com/oban-bg/oban/pull/331
SMPP https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer
OpenAI Codex https://chatgpt.com/codex/
Opus AI https://opus.ai/
Tidewave https://tidewave.ai/
Credo Static Code Analysis https://github.com/rrrene/credo
https://smartlogic.io/podcast/elixir-wizards/s11-e09-static-code-analyzer-elixir-credo-ruby-rubocop/
Link to Sasa’s X post https://x.com/sasajuric/status/2029522378196238503
Saša Jurić “Tell Me A Story” at Goatmire https://www.youtube.com/watch?v=GOrKfCs-mr0
https://meks.quest/blogs/the-theatre-of-pull-requests-and-code-review
Looks Good to Me: Constructive Code Reviews by Adrienne Braganza https://www.manning.com/books/looks-good-to-me
Towards Maintainable Elixir: Testing https://medium.com/very-big-things/towards-maintainable-elixir-testing-b32ac0604b99
TDD, Where Did It All Go Wrong (Ian Cooper) https://youtu.be/EZ05e7EMOLM
Special Guest: Saša Jurić.