Molly Rocket
Modern software spirals into unmanageable bloat because developers optimize for abstract architectural dogmas like SOLID rather than measuring real hardware execution costs.
AI-assisted summary of Where Does Bad Code Come From? — original source. Check the original for full context.
Source published:
Key ideas
- Modern software decay is characterized by massive build times, fragile dependency stacks packaged into Docker containers, and multi-gigabyte memory footprints for trivial tasks. (1:00)
- The core failure of software architecture stems not from algorithmic complexity, which is mathematically solved, but from unchecked glue code and infrastructure that exploded once physical hardware memory constraints disappeared. (6:40)
- The industry's widespread adoption of dogmas like 'Clean Code' and SOLID functions as unscientific ritualism because these concepts completely lack operational definitions or measurable ties to physical hardware. (23:08)
- Software development costs should be evaluated along measurable, empirical axes—including execution time on hardware, onboarding latency, code modification costs, and communication overhead—rather than subjective aesthetics. (29:44)
Detailed notes
## Background Published on YouTube by Molly Rocket (Casey Muratori) on November 2, 2021, this video is a rebroadcast of an invited corporate lecture delivered to the team at Infura via Twitch. Released as part of a promotional series for the Kickstarter campaign of the graphic novel Meow the Infinite Book Two, the presentation features a re-recorded opening to fix earlier audio issues and examines why modern software codebases consistently spiral into slow, bloated disasters.
## TL;DR Casey Muratori investigates the root cause of software decay, arguing that modern bloat, sluggish performance, and fragile build pipelines stem not from algorithmic failures, but from an unchecked sprawl of infrastructure and glue code. He presents programming as a navigational process governed by an internal mental generator and filter, contrasting earlier resource-constrained eras—where severe hardware limits enforced lean design—with modern development environments that lack corrective evolutionary pressure. In place of physical constraints, the industry has embraced dogmatic rituals and fictional aesthetic metrics like 'clean code' and the SOLID principles, which fail to model actual computer hardware. Ultimately, Muratori contends that bad code persists because software engineering has abandoned empirical measurement, urging developers to tether their practices to tangible costs such as execution speed, build times, and real developer workflows.
## Atmosphere & style The presentation carries the candid, no-nonsense urgency of an engineering intervention, blending sharp industry critique with conversational warmth. Muratori speaks with passionate exasperation about multi-hour build times and fragile software ecosystems, grounding his technical arguments in vivid, memorable analogies like stranded Arctic expeditions and navigating real continents with maps of Middle-earth. Listening to the lecture feels both liberating and intensely pragmatic, cutting through corporate software dogma with an earnest appeal to return to measurable physical reality.
## Bulletin - [01:00](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=60s) Modern software decay is characterized by massive build times, fragile dependency stacks packaged into Docker containers, and multi-gigabyte memory footprints for trivial tasks. - [06:40](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=400s) The core failure of software architecture stems not from algorithmic complexity, which is mathematically solved, but from unchecked glue code and infrastructure that exploded once physical hardware memory constraints disappeared. - [23:08](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1388s) The industry's widespread adoption of dogmas like 'Clean Code' and SOLID functions as unscientific ritualism because these concepts completely lack operational definitions or measurable ties to physical hardware. - [29:44](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1784s) Software development costs should be evaluated along measurable, empirical axes—including execution time on hardware, onboarding latency, code modification costs, and communication overhead—rather than subjective aesthetics.
## Key takeaways - [01:00](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=60s) Modern software routinely inflates to millions of lines of code, requiring hours to compile and gigabytes of RAM to execute basic operations without any corresponding increase in reliability. - [03:50](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=230s) Market forces allow bad code to thrive because software development is young, competitive pressure is low, and consumers have few alternatives, making quality disconnected from profitability. - [06:40](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=400s) Computer science has successfully solved algorithms and data structures through rigorous Big-O notation, but has failed to create an equivalent discipline for infrastructure and glue code. - [06:40](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=400s) Historically, severe hardware limitations—such as 64 kilobytes of RAM and slow processors—served as an automatic, brutal filter that prevented infrastructure bloat. - [09:31](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=571s) A programmer's brain relies on an internal generative loop paired with an evaluation filter, which novice coders train to discard bad syntax and experienced coders refine to select specific architectural patterns. - [13:51](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=831s) Software development resembles dead-reckoning navigation and exploration through uncharted terrain rather than rigid upfront civil engineering architecture. - [17:52](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1072s) Bad code originates when developers get completely lost in the development wilderness, taking circuitous, wasteful paths that terminate nowhere near the intended destination. - [18:47](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1127s) Because modern hardware is practically boundless, external institutional dogma, blogs, and university curricula have replaced physical system constraints as the primary trainers of developers' mental filters. - [23:08](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1388s) Aesthetic movements like 'Clean Code' and the SOLID principles are unfalsifiable and lack any operational, machine-testable definitions. - [27:24](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1644s) Adhering to abstract software design patterns without tracking real-world machine outcomes degenerates engineering into a superstitious ritual performed for psychological reassurance. - [29:44](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1784s) Real software costs break down into writing, agreeing/arguing, reading, modifying, executing, and debugging code, with execution on hardware being the paramount computational cost paid by the user. - [32:21](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1941s) Teaching developers rules like the Liskov substitution principle instead of machine realities is equivalent to handing an explorer a fictional map of Mordor to navigate from South America to Africa. - [34:39](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2079s) Uncritical code reuse creates compounding failure traps when engineers adopt libraries and base camps built by predecessors who were themselves hopelessly lost. - [36:19](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2179s) To fix software engineering, claims of architectural superiority must be backed by empirical before-and-after metrics, such as verifiable reductions in onboarding time or runtime performance gains. - [39:57](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2397s) Bad code fundamentally persists because the industry has stopped measuring physical reality and almost exclusively optimizes for fictional, abstract qualities.
## Detailed walkthrough ### [00:01](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1s) Introduction and Genesis of the Lecture
Casey Muratori introduces the final video in a series of promotional releases for the Kickstarter campaign of the graphic novel *Meow the Infinite*. This presentation is a two-part rebroadcast of an invited lecture he delivered to the team at Infura (infura.io), followed by an upcoming Q&A session.
When preparing the lecture, Muratori had asked the audience for topics they wanted addressed. A common thread ran through nearly all their submissions: code spiraling out of control, ballooning into massive, slow, and underperforming codebases. To address these recurring concerns, he structured his talk around a fundamental question: “Where does bad code come from, like where do these problems come from?”
[01:00](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=60s) The Modern Symptoms of Software Decay
Looking at software development from an objective viewpoint, Muratori observes an overriding sense of decay creeping into the modern industry. Software today suffers from an explosion of unnecessary complexity across several dimensions:
```mermaid flowchart TD accTitle: Symptoms of Modern Software Bloat accDescr: A flow illustrating how fragile dependency stacks lead to massive builds, bloated resource usage, and poor software performance.
subgraph Tooling["Tooling & Build Pipeline"] A["Recursive Package Managers"] --> B["Fragile Dependencies"] B --> C["Docker Containers as Band-Aids"] C --> D["Multi-Hour Build Times"] end
subgraph Runtime["Runtime Inefficiencies"] D --> E["Massive Executables\n(100–200 MB)"] E --> F["Huge Memory Footprints\n(Multiple GBs)"] F --> G["Stalling, UI Latency & Latent Bugs"] end ```
Programs that perform relatively straightforward tasks now routinely contain hundreds of thousands or even millions of lines of code. Build pipelines are so fragile and tangled with deep dependency chains—where a package manager installs a language environment, which installs another package manager, which downloads nested dependencies—that teams must package builds into Docker containers just to keep them running in the future. Muratori points out that even on modern, exceptionally powerful hardware, compiling popular open-source projects like TensorFlow can take hours.
Once built, software products exhibit shockingly poor quality: - Systems stall and force users to wait while loading or communicating over a network. - Simple user interactions, such as scrolling 2D images, consume gigabytes of memory and require executables spanning 100 to 200 megabytes. - Despite this immense overhead, software reliability has not improved; applications remain as buggy and fragile as ever.
As Muratori summarizes the current state of affairs: “It’s still totally buggy and it has all the same problems if not more problems than it has always had before it sort of jumped this level of sort of kind of complexity and and kind of in general this this overall overriding sort of sense of decay that seems to be seeping in to whatever we call the software industry currently.”
[03:50](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=230s) Defining "Bad Code": Quality Versus Market Forces
Muratori clarifies that criticizing "bad code" requires establishing a clear definition rather than mere complaining. Crucially, his critique is divorced from financial success or developer enjoyment. In today's market, quality code is not a commercial prerequisite. Because software is still relatively early in its historical evolution and competitive pressure is remarkably low, consumers typically choose between a tiny field of options. Companies can ship substandard, unoptimized software and remain highly profitable.
He also notes that developers may still have fun using current toolchains and frameworks—strapping on VR goggles, downloading frameworks, and gluing things together. The core problem, therefore, is not about profit or personal enjoyment, but about wasted engineering potential.
Evaluating the industry's shortfall, Muratori asserts: “All I’m trying to talk about when we talk about bad code is like what’s our potential, like like what could we be doing engineering-wise versus where we currently are; are we performing up to that potential at all or are we actually kind of falling pretty far behind where we could be if we looked at what we could be delivering to our customers and to society if we took things more seriously?”
[06:40](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=400s) Algorithms vs. Architecture: The Glue Code Dilemma
To locate the actual root of bad software, Muratori draws a sharp boundary between algorithmic complexity and architectural infrastructure. The software engineering discipline has largely mastered algorithmic design. Computer science understands order notation, complexity classes, hash table behavior, heap properties, and sorting routines, and teaches these concepts coherently.
```mermaid flowchart LR accTitle: Algorithms Versus Glue Code accDescr: Compares well-understood algorithmic theory against the uncontrolled growth of glue code and infrastructure.
subgraph Solved["Solved Domain"] A["Algorithms"] --> B["Big-O Notation"] A --> C["Data Structures (Heaps, Hash Tables)"] end
subgraph Broken["Problem Domain"] D["Glue Code"] --> E["Infrastructure & Connectors"] E --> F["Unchecked Overhead"] end ```
The real breakdown does not stem from choosing the wrong sorting algorithm; it occurs in the massive sprawl of infrastructure and glue code designed to link algorithms together. Historically, severe hardware constraints prevented this sprawl. When computers operated with only 64 kilobytes of RAM, natural physical boundaries made it impossible for glue code to spiral out of control.
Muratori highlights this structural difference: “When a computer only has 64K of RAM in it, right, there’s no way for that glue code to spiral out of control, there’s no way for the infrastructure to be all that big to begin with, so there was a natural limit on what could actually happen there.”
Because modern machines lack these hardware limitations, and because the software field never created an effective replacement discipline to limit bloat, codebases expand unchecked. To understand why no replacement emerged, Muratori transitions to examining how programmers actually learn to build software.
[09:31](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=571s) Training the Brain's Generator and Filter
Casey Muratori introduces a concept that may sound trite to non-programmers and silly to experienced ones, yet represents a fundamental reality of programming that is taken for granted and rarely discussed. Nobody is born knowing how to write software. Recalling his own childhood, he explains that before he could actually code, he sat as a tiny child at his father's computer keyboard typing literal gibberish. Early on, learning to input characters produces complete garbage. Over time, however, the human brain trains itself to recognize that only specific syntax and character combinations yield results in a programming language—which is precisely why they are called languages, complete with grammar and syntax rules.
```mermaid flowchart LR accTitle: Mental Generator and Filter Pipeline accDescr: Visual model showing how programming input moves from broad generative syntax to filtered regularized code. subgraph MentalProcess["Cognitive Training Loop"] direction TB G["Syntax Generator<br>(Produces possible code)"] F["Selection Filter<br>(Discards invalid/poor paths)"] G --> F end subgraph Evolution["Skill Progression"] direction TB Novice["Novice Programmer<br>(Massive possibility space, unconstrained babel)"] Expert["Experienced Programmer<br>(Narrow, highly regularized output)"] Novice --> Expert end MentalProcess --> Evolution ```
Under the hood, the brain develops what functions like an artificial intelligence model: a generator paired with a filter. The generator produces syntactically valid constructs within the output domain, while the filter evaluates and discards options that do not move closer to the goal based on an internal metric. As a programmer matures, this generative and filtering loop elevates: instead of operating on raw syntax, the brain learns abstractions like functions and library components, generating and filtering at higher semantic levels. For seasoned programmers, this process becomes exceptionally dialed in:
> “So that filter has dialed in quite a bit, right, they're throwing out a lot of possible options that would be legal in the language they're programming at and only selecting from a very, very narrow set, so that generator-filter process is producing highly regularized, very predictable things at that point.”
While the exact physiological mechanisms remain unknown, this regularization means an enormous possibility space has been carved away. Whereas a beginner can type any arbitrary babel allowed by compiler syntax, an experienced programmer effectively loses the inclination to write vast categories of legal code, having trained the brain's internal filter to permit only a narrow, predictable subset.
[13:51](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=831s) Programming as Navigation and Exploration
To capture what this mental model feels like in practice, Muratori frames programming through the metaphor of navigation and exploration rather than traditional architectural analogies. Rather than drafting a complete blueprint upfront and executing it like a civil engineer or drawing UML diagrams, writing software resembles dead reckoning through uncharted terrain. The programmer acts as a navigator lacking complete maps, venturing in a general direction, testing routes, and backtracking when a path leads nowhere. Some journeys explore completely uncharted territory where no developer has gone before, while others trace familiar ground with slight variations to improve upon a previous route.
The outcomes of software development mirror the fortunes of physical expeditions. Sometimes a project hits its intended mark smoothly, delivering everything the team envisioned. Other times, the journey becomes an unmitigated disaster:
> “Other times we just like forget it this thing ain't shipping, ditch the boat, take as much food as you can, walk across the iceberg and let's hope that like we encounter another human being before we all die, right?”
In this analogy: - The path traveled represents the development process itself: a straight, clean trajectory marks a smooth project, whereas constant backtracking and circuitous routes indicate a painful, grinding ordeal. - The destination represents the quality and nature of the finished product. - Much like a mathematical function that can only be sampled at discrete evaluation points rather than predicted in advance, a programmer often cannot know the exact end state until arriving there or getting close enough to confirm land.
[17:52](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1072s) Getting Horribly Lost and the Origin of Bad Code
This navigational framework directly explains where bad code originates. In struggling software projects, teams are not merely experiencing minor setbacks; they are getting horribly lost in the wilderness. Development becomes an aimless march along wasteful, convoluted paths that burn excessive time and energy, only to terminate in a location that bears virtually no resemblance to the original goal.
> “So what we're sort of seeing when we talk about the bad code situation, right, is in these processes I feel like we're just getting horribly lost, like we're just kind of not only are we just like kind of aimlessly creating these huge routes through things that are very wasteful and take way too much time and all these other sorts of things, but also when we end up somewhere it doesn't really seem to be very good, like it seems like we're kind of nowhere near where we wanted to be, right?”
Muratori points out that this metaphor resonates so strongly because it matches the exact visceral sensation developers experience midway through or at the conclusion of a troubled project. Engineers look at their work and realize they have completely lost their bearings, unable to see a viable path forward or articulate why progress has ground to an intangible, frustrating halt.
[18:47](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1127s) The Lost Feeling and How Navigational Filters Are Built
When software development goes sideways, programmers often experience a profound sense of disorientation: they make changes they believe ought to move the project forward, only to find themselves knocked backward or making no real progress at all. To understand why this navigational process fails, the blame must be placed on how both individuals and institutions train the mental filter that governs moment-to-moment coding decisions. In earlier computing eras, extreme hardware constraints naturally forged that mental filter. A machine had only 64 kilobytes of memory, an underpowered processor like a 6800 or 6502 that could barely execute instructions, and disk load times that stretched on for eons. Under those harsh conditions, anyone who managed to make a program run had already undergone an intense vetting process. Every single decision succeeded or failed purely on whether the software was genuinely good; even a minor flaw meant the software simply would not function. It was akin to training polar explorers in the Arctic, where anyone who failed to adapt quickly did not survive.
Modern programming environments lack that unforgiving weeding-out mechanism because system resources are virtually limitless. While some programmers still develop an intuition through personal experimentation and self-guided hacking—an approach that frequently correlates with people who avoid producing catastrophic code—most developers now have their internal filters tuned by external institutional pressures. They absorb rules from university courses, senior mentors, code reviews, and performance evaluations from managers. They turn to Stack Overflow to mimic highly upvoted answers, or attend lectures and industry talks to absorb best practices. These external influences do not typically fail when teaching well-defined topics like algorithms or sorting routines, where searchable resources are technically sound. The breakdown happens entirely in the rest of the software: the massive expanse of infrastructure and architecture that possesses no formal Big-O notation or rigorous mathematical framework.
- Historical hardware limitations (tight memory limits like 64K, slow processors, long disk access times) acted as a brutal, automatic filter that forced developers to deeply understand the hardware. - Unlimited modern resources eliminate that natural evolutionary pressure, allowing bloated or broken architectural models to function well enough to survive. - Foundational computer science concepts (like sorting algorithms) are generally taught adequately; the training failure lies in general software architecture and structural infrastructure.
---
[23:08](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1388s) The Cult of "Clean Code" and Imaginary Metrics
Across the software industry, architectural advice is overwhelmingly dominated by vague aesthetic assertions about code cleanliness. Programmers are bombarded with rules intended to produce "clean code," yet clean code itself is never given a concrete, verifiable definition. There is no automated diagnostic tool or compiler pass that can evaluate a program and issue an objective verdict of whether the codebase is clean or unclean. Instead, the industry relies on prescriptive dogma like the SOLID design principles, encouraging developers to treat these patterns as universal virtues. In inspecting these principles, none correspond to measurable physical operations occurring inside a computer's CPU or memory. They are fictional constructs that exist purely in the human mind, deliberately warping the developer's internal decision filter to favor abstract patterns over hardware realities.
```mermaid flowchart TD accTitle: Mental Filters in Software Design accDescr: Contrasting dogma-driven mental filters like SOLID with real-world physical and organizational constraints.
subgraph DogmaFilter["Dogmatic Clean Code Filter"] A["SOLID Principles / Slogans"] --> B["Abstract Mental Rules"] B --> C["Disconnected Code Architecture"] end
subgraph RealWorldFilter["Hardware & Practical Constraints"] D["Physical Machine (CPU / Memory)"] E["Development Speed & Delivery"] F["Defect Rate & Maintainability"] end
C -.->|"Ignores / Bypasses"| RealWorldFilter ```
To demonstrate how ubiquitous this dogma is, Casey notes that when he went to take a screenshot of Stack Overflow to use as a slide example, the Stack Overflow company blog for that very day happened to feature an article instructing readers to adopt the SOLID principles. The fatal flaw shared by all such clean-code movements is an absolute refusal to quantify or measure anything that actually matters. It is merely taken on faith that adhering to doctrines like the Liskov substitution principle will magically yield smoother development cycles, faster feature delivery, or fewer bugs. As Casey Muratori explains:
> “The assumption is that if you do that your development process will take less time or be smoother or have less bugs or something, the code will be cleaner, it's just an abstract statement that if you do these things the code will be cleaner and somehow that will affect something you can actually measure, but we're never going to say what that something actually is or try to quantify it.”
- Clean code lacks any operational, machine-testable definition; it is defined exclusively as a checklist of prescribed developer behaviors. - SOLID principles operate as imaginary mental metrics rather than reflections of actual computer hardware or runtime behavior. - High-profile industry authorities, including Stack Overflow's engineering blog, actively promote these abstract design patterns to working developers.
---
[27:24](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1644s) Programming Rituals vs. Concrete Engineering Realities
When advice instructs programmers to perform specific structural transformations without ever correlating those steps to measurable outcomes, programming ceases to be engineering and becomes a ritual. It functions identically to traditional superstitious practices, such as blessing food before a meal: adhering to the ritual might grant psychological comfort or make a developer feel virtuous, but it remains disconnected from physical reality. Rituals often persist solely because someone in authority demanded them, promising vague benefits while never having to demonstrate the mechanism of action. When an engineer's mental generator-and-filter process is tuned to achieve compliance with SOLID rather than compliance with the physical machine, the real execution platform is entirely abandoned. As Casey Muratori emphasizes:
> “If what I'm targeting is SOLID, I'm by definition not targeting the actual computer, right? The thing that I'm supposed to be worrying about, which is a computer that runs this code, is nowhere to be found in that acronym, right, it's not there anywhere.”
Furthermore, these dogmas contain no self-correcting mechanisms. No clean-code advocate ever provides the escape hatch stating that if following an architectural pattern increases development time or complicates debugging, the team should abandon it. Rather than inventing another empty acronym to replace existing ones, Casey constructs an illustrative counter-acronym—spelled out as "WARMD"—to demonstrate what an engineering-focused guideline should actually address. If the software industry insists on building mnemonics to guide developers' mental filters, those mnemonics ought to be anchored directly to tangible, measurable attributes that impact real machines and real development timelines.
- Clean code rules function like unexamined rituals, performed for comfort or compliance without any verification of their efficacy. - Abstract design methodologies completely omit any representation of the physical computing hardware running the software. - Prescriptive clean-code principles fail to include criteria for abandonment when they actively waste engineering time.
[29:44](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1784s) The Cost Breakdown: Measuring What Programmers Actually Do
If a design philosophy like SOLID were truly sound, its validity could be evaluated against the tangible tasks software developers perform every day. These core activities break down into writing the code, agreeing on the code across a team, reading the code—both because individuals did not author every piece of software and because original authors inevitably forget what they wrote—modifying the code, executing the code on hardware, and debugging it. While one might joke that "argue" is a more realistic term than "agree" since programmers constantly fight over conventions, the resulting acronym remains the same. Every single one of these items represents a real, tangible cost.
```mermaid flowchart TD accTitle: Programmatic Cost Framework accDescr: Diagram illustrating the components of software development and runtime costs, highlighting execution as the primary user cost and team activities as development costs.
subgraph DevCosts["Development Time Costs"] W["Writing Code"] A["Agreeing / Arguing"] R["Reading Code"] M["Modifying Code"] D["Debugging Code"] end
subgraph ExecCost["Runtime Cost"] E["Execution on Hardware"] end
DevCosts -->|"Impacts feature delivery & fixes"| UserImpact["End User Impact"] ExecCost -->|"Wastes time / compute directly"| UserImpact ```
Execution is the most vital cost of all: it is the direct computational tax paid on the end user's hardware. End users are ostensibly paying for the software, and shipping unoptimized, bloated products wastes their finite time. The remaining factors are development-time costs. They directly impact users as well, because protracted development cycles mean features arrive late and defect resolution stalls. While execution should take priority, all of these costs matter, and engineering should focus on minimizing as many of them as possible based on project weights. The software industry routinely executes massive, continuous A/B testing on customers, yet it stubbornly refuses to apply the same empirical scrutiny or metrics to the very engineering practices it preaches.
- Measurable engineering metrics already exist in daily workflows: tracking GitHub comment rounds prior to landing a bug fix, tallying meeting overhead, or timing the implementation of a specific feature. - Engineering leadership should not treat developer-time metrics as impossible to measure while treating consumer telemetry as trivial.
[32:21](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1941s) Navigators in Middle-earth: Broken Metaphors and Bad Tooling
Programming can be understood through the lens of exploration: an engineer starts from an arbitrary point, attempting to reach an unfamiliar, vaguely defined destination. Modern methodology hands this explorer wholly inappropriate equipment—the equivalent of handing an explorer a hammer and a tape measure instead of a navigational compass. In the physical world, an explorer would simply toss the useless hammer aside; in software engineering, beginners are actively instructed that the hammer is an indispensable navigational instrument, leaving them desperately holding it up to the sun in a confused effort to determine direction.
``` +----------------------------------------------------------------------------------------------------+ | THE FICTIONAL VS. REALITY DIVIDE | +----------------------------------------------------------------------------------------------------+ | Fictional Constructs (The "Middle-earth" Map) | Real-World Navigational Realities | +----------------------------------------------------------------------------------------------------+ | • Abstract axioms (e.g., Liskov substitution) | • Physical machine constraints | | • Ideological "clean code" assertions | • Clock cycles and hardware execution | | • Fixation on Middle-earth/Mordor map points | • Actual passage from South America to Africa| | • Unmeasured inherited assumptions | • Concrete verification of cost reduction | +----------------------------------------------------------------------------------------------------+ ```
Programmers are simultaneously fed maps of fictional territories. Theoretical rules such as the Liskov substitution principle pertain strictly to idiosyncratic, hypothetical language ideas rather than fundamental physical computation. As Casey Muratori highlights regarding this misplaced mental model: “Your Lord of the Rings might be a great story, but if you actually need to get from South America to Africa, it's not going to help you to be thinking about like where Mordor is on a map, right?” When young engineers grow up with no operational metrics to tether them to reality, their entire mental filter is tuned toward abstractions disconnected from their goals, producing out-of-control software by design.
[34:39](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2079s) The Compounding Trap of Unverified Base Camps
Engineers who enter the industry without experiencing constrained computing environments come to believe that sluggishness and monstrous scale are unalterable laws of nature. They resign themselves to the assumption that every application must inevitably span millions of lines of code, crawl at a snail's pace, and harbor endless bugs because they have never operated with the tools required to build software any other way.
```mermaid flowchart LR accTitle: Compounding Failures of Code Reuse accDescr: Illustration showing how building upon flawed, lost libraries cascades into bloated ecosystems and lost programmers.
A["Original Author (Lost)"] -->|"Builds flawed foundation"| B["Base Camp (Bloated Library)"] B -->|"Adopted as starting point"| C["Modern Developer"] C -->|"Inherits bad assumptions"| D["Ecosystem / Platform Bloat"] ```
This dynamic turns the sacred cow of "code reuse" into an operational hazard. In the navigation analogy, code reuse is treated as starting out from an established base camp. However, the predecessor who set up that camp was often just as lost, lacking an understanding of hardware realities. Consequently, developers adopt libraries, frameworks, and entire ecosystems engineered by people who missed the mark, turning their structural flaws into permanent launching pads. Instead of setting sail cleanly from port, engineers are dropped deep into a wilderness they cannot navigate, blind to their predicament because performance and software quality are never measured.
- Programmers raised entirely on unconstrained modern hardware cannot envision lean, performant alternatives because they have never been given the measuring tools to find them. - Whole platform ecosystems become compounding chains of unmeasured, inherited misdirection.
[36:19](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2179s) Grounding Software in Reality: Real Numbers, Not Aesthetics
Correcting the current trajectory of software development requires anchoring all discourse in the physical world. Rather than accepting dogmatic proclamations at conferences or adopting programming constructs on faith, developers must present rigorous arguments showing how a proposed change directly lowers a tangible cost metric. Subjective declarations about "clean code" must be abandoned in favor of empirical verifications.
> “The acronym SOLID should never be allowed to exist if it doesn't have like P-SOLID, like performance, right? Like there should have been something about how do any of these things that you're doing affect the actual run time of the program.” — Casey Muratori
Engineering claims must be backed by reproducible before-and-after evaluations:
- **Source footprint vs. efficiency:** It is pointless to boast about fewer lines of code if execution performance regresses; lower line counts must yield equivalent or superior machine execution. - **Measurable readability:** Instead of debating whether code looks clean, teams should track onboarding latency—verifying whether a new hire can parse an implementation and become productive in two hours rather than a full day. - **Hardware-conscious education:** Algorithmic theory has progressed precisely because it relies on concrete mathematical models and formal testing; the remainder of software design will remain stagnant until developers analyze real-world system behavior. - **Build-time insanity:** Developers must critically audit bloated systems, asking why a framework like TensorFlow should take upwards of four hours to build when the underlying computations do not warrant that degree of compilation overhead.
[39:57](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2397s) The True Origin of Bad Code and Fictional Metrics
Reflecting on why modern software systems degenerate into bloated, unmanageable codebases, Casey Muratori stresses that the industry must confront the harmful mental filters being drilled into programmers. Engineering culture needs to explicitly call out these methodologies and stop teaching dogmatic practices that generate objectively terrible, measurable outcomes—such as builds that take four hours to complete. While it might be tempting to search for an exotic or complex explanation, the fundamental problem is painfully simple: the software community has stopped measuring and discussing actual reality.
Instead of focusing on concrete software attributes, developers spend nearly all their energy discussing and optimizing for abstract, largely fictional qualities. Once an educational disconnect occurs, incoming generations of programmers grow up seeing only acronyms like SOLID, completely unaware of the underlying mechanical realities those principles were loosely attempting to address. Principles like SOLID were originally just one person's offhand rules of thumb, yet they are treated as gospel and taught as primary fundamentals rather than secondary heuristics subordinate to measurable hardware and project constraints.
```mermaid flowchart TD accTitle: Generational Shift from Real to Fictional Metrics accDescr: Diagram illustrating how original evaluation of real metrics was replaced over generations by dogmatic abstract rules.
subgraph Ideal["Ground Truth Engineering"] M1["Real Metrics: Build Times, Cache Misses, Latency"] M2["Heuristics & Rules of Thumb"] M1 -->|Informs & Validates| M2 end
subgraph Degenerated["Generational Disconnect"] D1["Fictional Metrics: SOLID, Dogma, Cleanliness"] D2["Bloated, Unmeasurable Codebases (4-Hour Builds)"] D1 -->|Directly Causes| D2 end
Ideal -.->|"Next generation loses context"| Degenerated ```
As Casey Muratori puts it: “I wish I had an answer that was more magical, but at the end of the day I really think that bad code just comes from that one simple failure, and that is we have stopped measuring and talking about what we actually want and we are almost exclusively talking about or measuring things that are largely fictional.”
- The industry routinely teaches rules of thumb prior to—or entirely in place of—measuring real-world engineering metrics. - Newer engineers inherit dogma without understanding the original problems those rules were intended to solve. - Measurable negative consequences, such as multi-hour compile times, are routinely accepted because teams prioritize fictional design ideals over practical performance.
---
[41:26](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2486s) Wrapping Up and the Upcoming Q&A Session
Bringing the formal presentation to a close, Casey directs viewers to the Kickstarter campaign for the graphic novel *Meow the Infinite Book Two*, created by Anna Rettberg and published via Molly Rocket. With the promotional campaign wrapping up and only about five days remaining before the Kickstarter closes, he encourages anyone interested in supporting the project to pick up a copy or two.
Casey also previews a follow-up video covering the Q&A session that took place immediately following the live corporate talk at Infura. To respect the privacy of the employees who attended, the video will not feature the original questioners directly; instead, Casey will summarize each question on a title card before providing his unedited responses. He signs off by inviting everyone to tune in for the Q&A the following day and wishing the audience fun with their programming.
As Casey Muratori concludes: “Until then, have fun programming everyone and I'll see you on the internet.”
## Notable quotes > [39:57](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=2397s) bad code just comes from that one simple failure, and that is we have stopped measuring and talking about what we actually want and we are almost exclusively talking about or measuring things that are largely fictional. — Casey Muratori
> [27:24](https://www.youtube.com/watch?v=7YpFGkG-u1w&t=1644s) If what I'm targeting is SOLID, I'm by definition not targeting the actual computer, right? — Casey Muratori
## Mentioned Casey Muratori, Anna Rettberg, Meow the Infinite, Meow the Infinite Book Two, Infura, Molly Rocket, Docker, TensorFlow, Stack Overflow, SOLID, Liskov substitution principle, Twitch, Kickstarter, YouTube
## Video description https://www.kickstarter.com/projects/annarettberg/meow-the-infinite-book-two
Q&A: https://youtu.be/cOcaj_cRBvE
Rebroadcast of an invited live lecture I gave to infura.io on https://www.twitch.tv/molly_rocket. The original had bad audio for the first few minutes, so I re-recorded and spliced it in for this corrected version. Otherwise, it is the same as the original live stream.
[Source](https://www.youtube.com/watch?v=7YpFGkG-u1w)