DiscoverDead Code
Dead Code
Claim Ownership

Dead Code

Author: Jared Norman

Subscribed: 7Played: 125
Share

Description

The software industry has a short memory. It warps good ideas, quickly obfuscating their context and intent. Dead Code seeks to extract the good ideas from the chaos of modern software development.

Hosted on Acast. See acast.com/privacy for more information.

54 Episodes
Reverse
In this Dead Code episode, Jared talks with longtime Rubyist and former Rails Core member Kasper Timm Hansen about “riffing,” a sketch-first approach to software design. Instead of jumping straight into migrations and production code, Kasper opens a scratch Ruby file—mixing real and pseudo-code with short prompts—to explore names, relationships, and system flow without worrying about correctness. The practice surfaces unknowns early, conserves mental stamina, and produces lightweight artifacts that can guide teams or even become executable prototypes. Kasper shares stories from client work, a RailsConf demo, and workshops showing how riffing helps uncover design flaws, generate stronger options, and make domain modeling more collaborative. He encourages developers to treat code like sketches, be less precious about early ideas, and embrace riffing as a fun, low-cost way to boost creativity and resilience in software design.Links:Spinel CoopRailsConf 2024 Talk (YouTube)RailsConf 2024 Slides (Speaker Deck)Kasper’s websiteKasper’s GitHubDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
On this episode of Dead Code, Jared talks with Justin Searls, co-founder of Test Double, about programming workflows, decision-making, and the evolving role of developers. They explore how the order and tempo of thought matter more than static code, why tackling the riskiest problems first can shape better outcomes, and how Justin’s idea of the “full-breadth developer” expands a programmer’s role to include product vision and context. The conversation touches on Agile and XP roots, consulting realities, and how AI coding agents can both accelerate and complicate work. The episode wraps with Justin encouraging blogging and direct connection, while Jared reflects on building a “grand unified theory” of how programmers decide their next step.Links:Sign up at jardo.dev/anarchyagile to enter the 50th episode giveaway!Test DoubleJustin Searls: Find his writing, projects, and podcast Breaking Change at justin.searls.coGrowing Object-Oriented Software, Guided by Tests by Steve Freeman & Nat PryceExtreme Programming Explained by Kent BeckThe Secrets of Consulting by Jerry WeinbergClojure REPLSolidusSwiftDataCloudKitCursorClaude CodeDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
The 50th episode of the Dead Code Podcast brought Karl Weber, Jared Norman, Benjamin Wil, Sofia Besenski, and Noah Silveira together to mark the milestone with sharp, funny, and critical takes on the state of tech. They skewered CEOs bragging about AI-driven layoffs as short-sighted profiteering, questioned the hype fueling the AI bubble, and praised Ruby and Rails for extending developers’ “rage quit stamina” despite flaws in error reporting and dependency management. The group emphasized the importance of empathetic, fast code reviews and smaller PRs, arguing that culture and collaboration matter more than mythical “10x developers.” They also critiqued DHH’s claim that executives should be the least busy, framing it as privilege disguised as wisdom, while pointing out that rest and balance benefit everyone. The episode captured their signature mix of humor, industry critique, and camaraderie, closing with gratitude for 50 episodes and excitement for what’s next.Links:Giveaway: Anarchy Agile hats — enter at jardo.dev/anarchyagile“CEOs Are Publicly Boasting About Reducing Their Workforces With AI” – FuturismThe Pragmatic Engineer 2025 Survey: What’s in your tech stack? Part 1“Two Simple Rules to Fix Code Reviews” – The Pragmatic Engineer“In Praise of Normal Engineers” – Charity Majors, Honeycomb“Executives Should Be the Least Busy People” – David Heinemeier HanssonDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared interviews Dave Gauer, creator of the Ziglings project—a whimsical, hands-on tutorial for learning the Zig programming language. Dave shares how Ziglings began as a personal learning tool and grew into a widely loved resource, especially among younger developers. He emphasizes the value of learning in public, blending humor, accessibility, and bite-sized challenges to make complex systems programming concepts less intimidating. The conversation also explores Dave’s deep interest in the Forth language, the appeal of small, self-contained “microworlds” for learning, and his broader philosophy on sharing work, embracing whimsy, and building things that make programming joyful and approachable.Links:ZiglingsZigRustlingsForth ColorForthAlpine LinuxLynx browserWhy’s (Poignant) Guide to RubyLearning PerlThe Little SchemerMindstorms by Seymour Papert Steal Like an Artist by Austin KleonRatfactor.com – Dave Gauer’s personal website and blog.Forth in Space (section on Ratfactor) – Dave’s notes on how Forth has been used in radiation-hardened chips and space tech.Dead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared and guest Mond explore how James C. Scott’s concepts of legibility, metis, and episteme apply to tech interviews, arguing that standardized hiring processes prioritize what’s easy to measure over what truly reflects engineering skill. They critique the over-reliance on algorithmic interviews, noting that senior engineering work often depends on tacit knowledge—metis—that can’t be captured in rubrics or LeetCode problems. The conversation touches on Goodhart’s Law, the risks of over-optimization, and how attempts to make human processes more legible through metrics can backfire. Jared shares how his company experiments with more realistic code assessments, though both acknowledge the challenges of scaling less standardized approaches. They conclude by warning that technological standardization of social systems, like hiring, can entrench flawed norms and obscure what actually matters.Links:James C. ScottSeeing Like a StateLegibility (as a concept)Goodhart’s LawThe Cobra EffectLeetCodeYAMLMond’s Blog – Here Comes the MoonDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared speaks with Jens Oliver Meiert and Fabien Basmaison, co-maintainers of CSS Naked Day, a long-standing web tradition that invites developers to strip CSS from their websites for one day to emphasize semantic HTML, accessibility, and the separation of concerns in front-end development. Originally launched in 2006, the event encourages developers to reflect on the underlying structure of their sites and how well they function without styling. Meiert and Basmaison discuss how modern tools like Tailwind, CSS-in-JS, and component-based design both challenge and occasionally align with the event’s philosophy, and they explore reasons for the decline in participation, from increased reliance on frameworks to the rise of AI-assisted development. Looking ahead to the 20th anniversary in 2026, they hope to inspire more developers to join in, even in small ways, as a reminder of the enduring value of accessible, maintainable, and standards-based web design.Links:Jens' BlogCSS Naked DayCSS Zen GardenFrontend DogmaPandaDocDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared interviews Ivo Anjo, a Ruby performance expert at Datadog, about Ruby’s concurrency model and his work improving visibility into it. They discuss the Global VM Lock (GVL), which simplifies Ruby’s internals but hinders multithreading, and explore the promise and current limitations of M:N scheduling, now partially implemented via Ractors in Ruby 3.4. Ivo created the gvl-tracing gem to visualize thread behavior and uncover subtle bugs, advocating for a more intelligent, OS-like scheduler to improve performance fairness. He also shares insights from building Datadog’s always-on production profiler and his direct-bind gem, which allows low-level access to Ruby internals when official APIs fall short. Overall, the episode highlights a growing movement of developers modernizing Ruby’s internals and pushing past its reputation for being slow.Links:gvl-tracingdirect-bindStackProfrbspyRactorsYJITRubyConfRubyKaigiEuRuKo 2025Dead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared talks with Marco Roth about Herb, a new fault-tolerant parser for HTML and ERB designed to improve the developer experience in the Rails ecosystem. Unlike tools like Deface or Nokogiri, Herb doesn’t auto-correct or mask errors—it parses templates exactly as written, enabling better diagnostics, formatting, and linting for server-rendered views, especially in Hotwire, Turbo, and Stimulus contexts. Built in C for portability and speed, Herb can be used across Ruby, JavaScript, and browsers via WebAssembly. Marco created it after running into limitations with existing tooling while building the Stimulus LSP. Future plans include deeper integration with tools like Ruby LSP and possibly enabling LiveView-style reactive rendering in Rails. Developers can try it today via a VS Code extension or the interactive web playground.Links:DefaceSpreeSolidusNokogiriRuboCopPrismHerbHerb PlaygroundHerb VS Code ExtensionHotwireTurboStimulusStimulusReflexPhoenix LiveViewRuby LSPEpisode 10 with Kevin Newton on PrismEpisode 38 with Carson Gross on HTMX Dead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared talks with Alan Ridlehoover, Senior Engineering Manager at Cisco Meraki, about managing software complexity through clear abstractions and thoughtful design. Using a metaphor of a vending-style coffee machine, Alan explains how complexity often arises not from algorithms but from code that’s hard to understand due to excessive abstraction or poor structure. He emphasizes focusing on the readability of what’s directly in front of you, using tools like flog and the ABC metric to quantify complexity, while also trusting gut instinct and applying heuristics like Sandi Metz’s five-line rule. Alan discusses minimizing over-engineering, favoring well-named private methods over inline comments, and stresses that code and commit messages—not comments—should tell the story. He also introduces “rehydration,” the process of adding back duplication to reveal better abstractions, helping developers make their code more maintainable and easier to change over time.Links:Flog (Ruby)ABC MetricGerritDRY Principle (Don’t Repeat Yourself)Domain-Driven Design (DDD)PolymorphismDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared chats with Scott Werner, CEO of Sublayer, about his experimental AI web framework, Monkey’s Paw—a Ruby-based tool that uses natural language prompts to generate web pages, embracing LLM “hallucinations” as a creative feature rather than a flaw. Designed to bring back the playful spirit of early Web 2.0, Monkey’s Paw allows developers to prototype ideas quickly and unexpectedly, often resulting in delightful, unintended features like auto-generated tooltips. Scott explains how the project reflects a broader shift toward ephemeral, AI-assisted development and introduces Sublayer, his minimal agent framework built for AI generation. Both Jared and Scott agree that while LLMs may not produce enduring art, they offer fun, whimsy, and new ways to experiment in coding, highlighting how these tools can be valuable outside of pure productivity or profit-driven goals.Links:Monkey’s PawSublayerArtificial RubyWorks on My Machine (Substack)WebsimTRICK CompetitionRails GeneratorsPowerPoint CopilotDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
Short-Form Summary:In this episode of Dead Code, host Jared chats with Noel Rappin, Staff Engineer at Chime and co-author of the updated Programming Ruby (“The Pickaxe Book”), about revitalizing Ruby’s most iconic reference. Rappin explains that despite claims Ruby is “dead,” it’s still widely used by startups and major companies like GitHub and Shopify. He took on the update to bridge the gap between Ruby 2.0 and 3.3, modernizing the book to reflect new features like pattern matching and changes in the ecosystem, while keeping it relevant for today’s developers, many of whom are coming from JavaScript, Python, or Java. They discuss the balance between Ruby’s flexible syntax and emerging norms via tools like RuboCop, the cautious use of metaprogramming, and how Ruby’s expressive power still stands out. Rappin hints at a future Ruby 4 update and encourages developers to embrace Ruby’s strengths, especially for teams valuing agility and clarity.Links:Noel RappinDave ThomasProgramming Ruby (The Pickaxe Book)why’s (poignant) Guide to RubyBundlerRuboCopStandardRBRactorsPattern Matching in RubySorbetRBSSteep Dry-typesSinatraRSpecConcurrent RubyFibersDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared is joined by Lucian and returning guest Joel to debate a classic Ruby dilemma: whether to access instance variables directly or use getter methods. Lucian advocates for getters, especially in large, fast-changing codebases, arguing they help catch subtle bugs and improve maintainability, as well as insights drawn from his time at Cookpad and the Short Ruby newsletter. Joel, while appreciating the clarity and performance of direct access, introduces his gem strict_ivars, which raises runtime errors for undefined variables, offering a hybrid solution that improves safety without sacrificing flexibility. The conversation expands into the future of Ruby developer experience, discussing AST-based tooling, the role of testing, and how small, intentional coding choices can add up to more resilient and readable software.Links:Short Ruby NewsletterShow Ruby YouTube ChannelJoel Draper’s Websitestrict_ivars GemJoel on BlueskyPractical Object-Oriented Design in Ruby (POODR) by Sandi MetzPrism Bootsnapruby-require-hooks by Vladimir DementyevAST (Abstract Syntax Tree)Modified Condition/Decision Coverage (MCDC) – advanced testing techniqueRuby Keyword ArgumentsCookpadPlaneShopifyDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared interviews Heydon Pickering about his satirical strategy to sabotage AI web crawlers by generating nonsense versions of his blog posts. Using Eleventy and JS DOM, Heydon replaces keywords in his content with absurd alternatives from a static lexicon, creating grammatically broken, jargon-filled text that wastes crawler resources without harming his SEO. Frustrated by how LLMs scrape web content without consent, he frames his approach as both a protest and a creative, Dadaist rebellion against exploitative tech norms. While the method won’t cripple AI models, it reflects a broader resistance to the unchecked harvesting of human-created content.Links:“Poisoning the Well” (Heydon’s article)“Please Stop Externalizing Your Costs Directly In My Face” – The article that partly inspired Heydon’s efforts to push back against LLM scraping.Heydon’s BlogWebbed Briefs (Heydon’s video series)Eleventy (11ty)JS DOMrobots.txtnofollow attributeDadaismDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared talks with Stevan about building reliable distributed systems using Erlang-inspired design patterns. Stevan shares how his background in functional programming and formal verification led him to simulation testing—a deterministic approach to testing distributed systems that avoids the flakiness of traditional CI environments. He emphasizes that Erlang’s true innovation lies not in lightweight processes, but in its structured behaviors (like gen_server and supervisor), which make systems easier to reason about, test, and verify. These behaviors support a more disciplined approach to concurrency, enabling reproducible fault injection and better simulation frameworks. Stevan advocates for programming languages that natively support deterministic testing and model checking, suggesting that the future of distributed systems lies in building on these structured, verifiable foundations.Links:Stevan’s BlogErlangElixirAgdaIdrisTLA+RocJepsenAntithesisBEAMLet it crash philosophyDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared interviews Carson Gross, creator of HTMX, about the principle of Locality of Behavior (LoB) and its role in web development. Carson explains that HTMX enhances HTML rather than replacing it like modern JavaScript frameworks, offering a simpler, hypermedia-driven approach ideal for use cases like e-commerce. He critiques the traditional emphasis on Separation of Concerns, arguing that keeping behavior close to markup improves maintainability and avoids “spooky action at a distance.” Carson acknowledges trade-offs between LoB, DRY, and SoC, emphasizing the importance of context-based decision-making. He and Jared also discuss broader software trends, advocating for deeper modules, simpler APIs, and a pragmatic, less ideological approach to coding as the industry evolves.Links:HTMX WebsiteHTMX Essays (especially Locality of Behavior and When to Use Hypermedia)grugbrain.devHypermedia Systems BookRichard Gabriel’s “Worse Is Better” EssayMozilla Developer Network (MDN)John Ousterhout’s A Philosophy of Software DesignThe Uncle Bob vs. John Ousterhout ArgumentBig Sky Software (Carson’s Company)HyperscriptDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared chats with Nora, a Rust contributor, about operator precedence and the trade-offs between code clarity and conciseness across programming languages. Nora, inspired by her blog post “Don’t Play the Precedence Game,” explains how languages like C and Rust handle operator order differently, particularly around equality and bitwise operations, which can lead to subtle, hard-to-spot bugs. She advocates for using parentheses generously to make intent explicit, even if some consider it “noisy,” and highlights how tools like linters and formatters approach optional syntax differently. They also touch on Ruby’s permissive style, Lisp’s avoidance of precedence via prefix notation, and broader lessons for language design—ultimately agreeing that clarity should win when it matters, and that different languages cater to different developer mindsets.Links:“Don’t Play the Precedence Game” RustC Programming LanguageRubyLispGoRescriptrustfmtClippyPrettierNora’s Website  Nora’s MastodonNora’s GitHub Dead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared speaks with software engineer Nicole Tietz-Sokolskaya about the ethical complexities of large language models (LLMs). Nicole shares her mixed experiences with LLMs—finding brief personal value but little long-term usefulness in her work—and critiques their environmental impact, reliance on questionable training data, and potential to concentrate power among major tech companies. She raises concerns about consent, bias, and the quality of generated code, while also acknowledging LLMs’ potential in accessibility and trust and safety roles. Ultimately, both Nicole and Jared advocate for a values-driven approach to technology, urging developers to critically evaluate the tools they use and the broader implications of their choices.Links:Mastodon: nicole@tietz.socialNicole’s BandcampCan I Ethically Use LLMs?Talon Voice SoftwareRecurse CenterDeconstruct ConfAMP ProjectDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, Jared talks with Kevlin Henney about the importance of immutability in software development, particularly as a strategy for reducing bugs related to state and concurrency. Kevlin explains that while many programming languages default to mutable state, treating state change as a privilege—not a right—can lead to more maintainable, less error-prone code. He discusses how immutability strengthens encapsulation, simplifies reasoning about systems, and avoids issues like race conditions and deadlocks, especially in multi-threaded environments. Kevlin also emphasizes that these design choices are architectural, not just implementation details, and that teams benefit from shared philosophies around state management. The conversation ties into broader programming culture and offers practical insights for developers, especially those working in languages like Ruby, where mutability is common but evolving.Links:Kevlin Henney’s article – “Restrict Mutability of State”Book – 97 Things Every Programmer Should KnowOpen source repo with contributionsOverflow collection curated by Shirish Padalkar (includes the “Restrict Mutability of State” essay)RubyConf Mini Providence Talk – Immutable Data StructuresRailsConf Talk – Immutable Objects in Practice@Kevlin on Bluesky@Kevlin@mastodon.socialKevlin Henney on LinkedInDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, journalist Joan Westenberg joins host Jared to explore the political and ethical consequences of our tech choices, advocating for decentralized, open-source platforms over corporate-controlled ecosystems like Google and Meta. Joan shares her path from tech journalism to founding The Index, a reader-supported publication free from ads and investor influence, driven by a DIY punk ethos inspired by bands like Fugazi. She critiques the monopolization of the internet, the erosion of data privacy (especially for EU users), and the complicity of tech giants in supporting authoritarian politics. Emphasizing the power of small, intentional decisions, Joan urges listeners to resist cynicism, adopt “pragmatic meliorism,” and choose tools and platforms that align with their values—even if it’s harder—because incremental change still matters.Links:The IndexJoan Westenberg’s WebsiteGhostMastodonPixelfedLemmyFairphoneMurena / /e/OSVivaldiQwantEcosiaWhere Wizards Stay Up Late: The Origins of the InternetDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
In this episode of Dead Code, host Jared Norman speaks with Jean Boussier, a key contributor to the Ruby community and Shopify engineer, about the challenges of concurrency in Ruby, particularly the Global VM Lock (GVL). Jean explains that while the GVL was originally implemented to simplify Ruby’s design, it now limits parallel execution, sparking debate on whether it should be removed. He argues that many Ruby applications are more CPU-bound than previously thought and suggests improving Ruby’s thread scheduler as a more practical short-term solution rather than eliminating the GVL entirely. The discussion also explores Ractors, Ruby’s experimental approach to parallelism, which remains unstable and impractical for most applications. Jean envisions a future where Ractors become more viable, gradually leading to broader concurrency improvements. The episode wraps up with insights on profiling tools and the evolving landscape of Ruby performance optimization.Links:Jean Boussier’s BlogJean’s GitHubIvo Anjo’s GVL Profiling Talk (RubyConf)Ivo Anjo’s GVL Profiling ToolJean’s Blog Post: “So, You Want to Remove the GVL?”Jean’s Blog Post: “The Mythical IO-Bound Rails App”Ruby Ractors DocumentationDead Code Podcast Links:MastodonXJared’s Links:MastodonXtwitch.tv/jardonamronJared’s Newsletter & WebsiteEpisode Transcript Hosted on Acast. See acast.com/privacy for more information.
loading
Comments