[{"data":1,"prerenderedAt":303},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fremove-the-leaky-abstractions":228,"\u002Fblog\u002Fremove-the-leaky-abstractions-surround":299},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224],{"title":5,"path":6,"stem":7},"You do not have time to not have tests","\u002Fblog\u002Fyou-do-not-have-time-to-not-have-tests","2.blog\u002F20211217.you-do-not-have-time-to-not-have-tests",{"title":9,"path":10,"stem":11},"Migrate Vue 2 with Vuetify and Jest to Vite and Vitest","\u002Fblog\u002Fmigrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest","2.blog\u002F20220109.migrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest",{"title":13,"path":14,"stem":15},"I am a Dark Matter Developer","\u002Fblog\u002Fi-am-a-dark-matter-developer","2.blog\u002F20220626.i-am-a-dark-matter-developer",{"title":17,"path":18,"stem":19},"Why using Conventional commits is useful","\u002Fblog\u002Fusing-conventional-commits","2.blog\u002F20240623.using-conventional-commits",{"title":21,"path":22,"stem":23},"Why you should make a toolbox repository","\u002Fblog\u002Fwhy-you-should-make-a-toolbox-repository","2.blog\u002F20240630.Why-you-should-make-a-toolbox-repository",{"title":25,"path":26,"stem":27},"Apache Airflow Part 1 - Why and Goals for a near Serverless ELT","\u002Fblog\u002Fapache-airflow-part-1-why-and-goals","2.blog\u002F20240710.apache-airflow-part-1-why-and-goals",{"title":29,"path":30,"stem":31},"Oh My Zsh on your server","\u002Fblog\u002Foh-my-zsh-on-your-server","2.blog\u002F20240711.oh-my-zsh-on-your-server",{"title":33,"path":34,"stem":35},"Fire tablet and YouTube Kids","\u002Fblog\u002Ffire-tablet-and-youtube-kids","2.blog\u002F20240714.fire-tablet-and-youtube-kids",{"title":37,"path":38,"stem":39},"Using Ollama and Continue as a GitHub Copilot Alternative","\u002Fblog\u002Fusing-ollama-and-continue-as-github-copilot-alternative","2.blog\u002F20240723.using-ollama-and-continue-as-github-copilot-alternative",{"title":41,"path":42,"stem":43},"Debugging Local Packages Made Easy with pnpm","\u002Fblog\u002Fdebugging-local-packages-with-pnpm-link","2.blog\u002F20250422.debugging local-packages-with-pnpm-link",{"title":45,"path":46,"stem":47},"Two Weeks with Cloudflare AI and Tools","\u002Fblog\u002Ftwo-weeks-with-cloudflare-ai-and-tools","2.blog\u002F20250509.two-weeks-with-cloudflare-aI-and-tools",{"title":49,"path":50,"stem":51},"Adding Prompts to VS Code - How I Learned to Stop Worrying and Love AI Context","\u002Fblog\u002Fadding-prompts-to-vscode","2.blog\u002F20250528.adding-prompts-to-vscode",{"title":53,"path":54,"stem":55},"My Best Practices","\u002Fblog\u002Fmy-best-practicies","2.blog\u002F20250607.my-best-practicies",{"title":57,"path":58,"stem":59},"Creating my own CLI Tool - Towles Tool","\u002Fblog\u002Ftowles-tool","2.blog\u002F20250607.towles-tool",{"title":61,"path":62,"stem":63},"Software Development Best Practices & ITIL","\u002Fblog\u002Fsoftware-engineering-and-itil-best-practices","2.blog\u002F20250612.software-engineering-and-itil-best-practices",{"title":65,"path":66,"stem":67},"Voice to Text","\u002Fblog\u002Fvoice-to-text","2.blog\u002F20250622.voice-to-text",{"title":69,"path":70,"stem":71},"Setting Up ComfyUI - A Better Alternative to Fooocus","\u002Fblog\u002Fcomfy-ui-setup","2.blog\u002F20250628.comfy-ui-setup",{"title":73,"path":74,"stem":75},"Voice to System","\u002Fblog\u002Fvoice-to-system","2.blog\u002F20250705.voice-to-system",{"title":77,"path":78,"stem":79},"Tips for Claude Code","\u002Fblog\u002Ftips-for-claude-code","2.blog\u002F20250713.tips-for-claude-code",{"title":81,"path":82,"stem":83},"Review That AI Code: Why I Read Every Line Generated Code","\u002Fblog\u002Freview-that-ai-code","2.blog\u002F20250720.review-that-ai-code",{"title":85,"path":86,"stem":87},"My Context Engineering Journey: From Dev Scripts to AI Collaboration","\u002Fblog\u002F20250803-1.my-context-engineering-journey","2.blog\u002F20250803-1.my-context-engineering-journey",{"title":89,"path":90,"stem":91},"Context Engineering at Scale: Enterprise Lessons and the Future of Development","\u002Fblog\u002F20250803-2.context-engineering-at-scale","2.blog\u002F20250803-2.context-engineering-at-scale",{"title":93,"path":94,"stem":95},"Check That Your Tools and Linters Do Not Burn Tokens","\u002Fblog\u002Fcheck-that-your-tools-and-linters-do-not-burn-tokens","2.blog\u002F20250806.check-that-your-tools-and-linters-do-not-burn-tokens",{"title":97,"path":98,"stem":99},"Markdown + AI: The Communication Protocol That Changes Everything","\u002Fblog\u002Fmarkdown-plus-ai-the-communication-protocol-that-changes-everything","2.blog\u002F20250814.markdown-plus-ai-the-communication-protocol-that-changes-everything",{"title":101,"path":102,"stem":103},"Finally: Type-Safe AI in Production (And Why I'm Here For It)","\u002Fblog\u002Ffinally-type-safe-ai-in-production-and-why-im-here-for-it","2.blog\u002F20250819.finally-type-safe-ai-in-production-and-why-im-here-for-it",{"title":105,"path":106,"stem":107},"Dotfiles: Masterpiece or Late Stage Picasso?","\u002Fblog\u002Fdotfiles-masterpiece-or-late-stage-picasso","2.blog\u002F20250822.dotfiles-masterpiece-or-late-stage-picasso",{"title":109,"path":110,"stem":111},"Beyond API Wrappers: Building State-Driven MCP Servers for Long-Horizon Agent Orchestration","\u002Fblog\u002Fbeyond-api-wrappers-mcp-servers","2.blog\u002F20250907.beyond-api-wrappers-mcp-servers",{"title":113,"path":114,"stem":115},"Why Vertical Integration Wins: A Software Engineer's Case for Owning Your Stack","\u002Fblog\u002Fwhy-i-bought-tesla-model-3-vertical-integration","2.blog\u002F20250928.why-i-bought-tesla-model-3-vertical-integration",{"title":117,"path":118,"stem":119},"The Min-Maxer's Trifecta: Building Tools for the Game You Actually Play","\u002Fblog\u002Fmin-maxer-trifecta","2.blog\u002F20251004.min-maxer-trifecta",{"title":121,"path":122,"stem":123},"Read The Source: Learning by Cutting Out The Middleman and RTFM","\u002Fblog\u002Fread-the-source","2.blog\u002F20251010.read-the-source",{"title":125,"path":126,"stem":127},"The Exponential Shift: Why AI Progress Feels Different Now","\u002Fblog\u002Fthe-exponential-shift","2.blog\u002F20251015.the-exponential-shift",{"title":129,"path":130,"stem":131},"Plan Mode for Your Problems, Edit Mode for Claude's","\u002Fblog\u002Fplan-mode-problems-edit-mode-solutions","2.blog\u002F20251019.plan-mode-problems-edit-mode-solutions",{"title":133,"path":134,"stem":135},"AWS Aurora DSQL Looked Perfect Until I Needed the Connection String","\u002Fblog\u002Faws-aurora-dsql-postgres-serverless-authentication","2.blog\u002F20251028.aws-aurora-dsql-postgres-serverless-authentication",{"title":137,"path":138,"stem":139},"Switchback: Browser History for Your Thoughts","\u002Fblog\u002Fswitchback-second-order-reasoning","2.blog\u002F20251205.switchback-second-order-reasoning",{"title":141,"path":142,"stem":143},"AI Pairing: Notes to Self","\u002Fblog\u002Fai-pairing-notes-to-self","2.blog\u002F20251216.ai-pairing-notes-to-self",{"title":145,"path":146,"stem":147},"I've Been Sleeping on Zellij","\u002Fblog\u002Fsleeping-on-zellij","2.blog\u002F20251229.sleeping-on-zellij",{"title":149,"path":150,"stem":151},"Implementing a Ralph Wiggum Loop: The Secret is Session Markers","\u002Fblog\u002Fimplementing-ralph-wiggum-loop-for-autonomous-ai-coding","2.blog\u002F20260114.implementing-ralph-wiggum-loop-for-autonomous-ai-coding",{"title":153,"path":154,"stem":155},"Goodhart's Law Ate My Context Window","\u002Fblog\u002Fgoodharts-law-ate-my-context-window","2.blog\u002F20260119.goodharts-law-ate-my-context-window",{"title":157,"path":158,"stem":159},"Claude Code's Hidden Multi-Agent System Is Real","\u002Fblog\u002Fclaude-code-hidden-multi-agent-system","2.blog\u002F20260124.claude-code-hidden-multi-agent-system",{"title":161,"path":162,"stem":163},"Free Printable Math Sheets for Kids — Number Chart, Skip Counting, Multiplication, and More","\u002Fblog\u002Ffree-printable-number-chart-and-coin-sheets","2.blog\u002F20260214.free-printable-number-chart-and-coin-sheets",{"title":165,"path":166,"stem":167},"We Are Near the End of the Exponential","\u002Fblog\u002Fnear-the-end-of-the-exponential","2.blog\u002F20260214.near-the-end-of-the-exponential",{"title":169,"path":170,"stem":171},"Free Printable Language Arts Sheets for Kids — Sight Words, Parts of Speech, Homophones, and More","\u002Fblog\u002Ffree-printable-sight-words-and-grammar-sheets","2.blog\u002F20260215.free-printable-sight-words-and-grammar-sheets",{"title":173,"path":174,"stem":175},"Interactive Code Execution with Artifacts","\u002Fblog\u002Finteractive-code-execution-with-artifacts","2.blog\u002F20260215.interactive-code-execution-with-artifacts",{"title":177,"path":178,"stem":179},"Free Printable Telling Time Worksheet for Kids — Clock Reference & Practice Sheet","\u002Fblog\u002Ffree-printable-telling-time-worksheet","2.blog\u002F20260216.free-printable-telling-time-worksheet",{"title":181,"path":182,"stem":183},"Claude Code Skills: Teaching AI Your Playbook","\u002Fblog\u002Fclaude-code-skills-guide","2.blog\u002F20260221.claude-code-skills-guide",{"title":185,"path":186,"stem":187},"Building a Multi-Agent Loan Approval System with Human-in-the-Loop","\u002Fblog\u002Fmulti-agent-loan-approval-human-in-the-loop","2.blog\u002F20260225.multi-agent-loan-approval-human-in-the-loop",{"title":189,"path":190,"stem":191},"The Inception of AI Infrastructure: Bottlenecks All the Way Down","\u002Fblog\u002Fbiggest-bottleneck-scaling-ai-compute","2.blog\u002F20260313.biggest-bottleneck-scaling-ai-compute",{"title":193,"path":194,"stem":195},"What I Tell Teams About Claude Code","\u002Fblog\u002Fwhat-i-tell-teams-about-claude-code","2.blog\u002F20260314.what-i-tell-teams-about-claude-code",{"title":197,"path":198,"stem":199},"The Hardest Part of AI Isn't the AI","\u002Fblog\u002Fthe-hardest-part-of-ai-isnt-the-ai","2.blog\u002F20260327.the-hardest-part-of-ai-isnt-the-ai",{"title":201,"path":202,"stem":203},"Claude Code Hooks: The Capability I Left on the Table","\u002Fblog\u002Fclaude-code-hooks-capability-left-on-the-table","2.blog\u002F20260401.claude-code-hooks-capability-left-on-the-table",{"title":205,"path":206,"stem":207},"Claude in a Box: Trying Computer-Use on My Laptop","\u002Fblog\u002Fclaude-computer-use-in-a-box","2.blog\u002F20260418.claude-computer-use-in-a-box",{"title":209,"path":210,"stem":211},"MCP Apps: We Spent $100B on AI to Bring Back the Iframe","\u002Fblog\u002Fmcp-ext-apps-claude-desktop-developer-mode","2.blog\u002F20260505.mcp-ext-apps-claude-desktop-developer-mode",{"title":213,"path":214,"stem":215},"I Couldn't Give Up Ghostty, So I Put It Inside My App","\u002Fblog\u002Fi-couldnt-give-up-ghostty-so-i-put-it-inside-my-app","2.blog\u002F20260710.i-couldnt-give-up-ghostty-so-i-put-it-inside-my-app",{"title":217,"path":218,"stem":219},"We're Not Asking Enough of These Models","\u002Fblog\u002Fwere-not-asking-enough-of-these-models","2.blog\u002F20261004.were-not-asking-enough-of-these-models",{"title":221,"path":222,"stem":223},"How the “I Can't Clap” Videos Get Made","\u002Fblog\u002Fhow-i-cant-clap-gets-made","2.blog\u002F20261021.how-i-cant-clap-gets-made",{"title":225,"path":226,"stem":227},"Remove the Leaky Abstractions","\u002Fblog\u002Fremove-the-leaky-abstractions","2.blog\u002F20261030.remove-the-leaky-abstractions",{"id":229,"title":225,"authors":230,"badge":236,"body":238,"date":287,"description":288,"extension":289,"image":290,"meta":293,"navigation":294,"path":226,"rawbody":295,"seo":296,"status":297,"stem":227,"__hash__":298},"posts\u002F2.blog\u002F20261030.remove-the-leaky-abstractions.md",[231],{"name":232,"to":233,"avatar":234},"Chris Towles","https:\u002F\u002Ftwitter.com\u002FChris_Towles",{"src":235},"\u002Fimages\u002Fctowles-profile-512x512.png",{"label":237},"AI",{"type":239,"value":240,"toc":283},"minimark",[241,259,268,271,274,277,280],[242,243,244,252,253,258],"p",{},[245,246,251],"a",{"href":247,"rel":248,"target":250},"https:\u002F\u002Fx.com\u002Fboristane",[249],"nofollow","\\_blank","Boris Tane"," said ",[245,254,257],{"href":255,"rel":256,"target":250},"https:\u002F\u002Fboristane.com\u002Fblog\u002Fthe-software-development-lifecycle-is-dead\u002F",[249],"the software development lifecycle is dead",". I don't know where this is going. But with the models getting more capable every few months, the whole stack starts to look like a liability. Every layer we added to save developer time was a tax on the machine, and developer time isn't the expensive part anymore.",[242,260,261,262,267],{},"I'm not a Rust developer. My ",[245,263,266],{"href":264,"rel":265,"target":250},"https:\u002F\u002Fgithub.com\u002FChrisTowles\u002Fscribed\u002Fcommit\u002Fd7c69730e5bb19c43daed54a2cf4d31885726e20",[249],"first Rust commit"," was May 12 of this year. Didn't matter, the model can write it. So now I'm trying to figure out what sits between my app and the pixel, and which of those layers add value and which ones I can just remove.",[242,269,270],{},"The best example I've got isn't mine. zero is my brother Patrick's repo, and I only started helping with it last week. Instead of stacking more workarounds on the raster pipeline, he skipped it and went straight to a pure-Vulkan path tracer in Rust, ReSTIR for the lights and DLSS Ray Reconstruction to clean up the frame. You don't get there by tuning the old layers.",[242,272,273],{},"There's a game on top of it too, but that's his to show. 740 commits in, the moon casts real shadows and you can look through a door into a level four and a half kilometers away.",[242,275,276],{},"A pixel is still just electrons, though. The part I keep coming back to is the next step: going from the hardware to actually moving atoms. Robots, printers, machines that build things. I'd bet the same rule holds there, the fewer layers between what you want and the motor that does it, the better. I haven't figured that part out yet.",[242,278,279],{},"Same goes for the org. Management layers are leaky abstractions too. Four meetings a day that should have been an email is the org version of a shim on a shim. Those layers were there to coordinate hundreds of people writing code by hand, and now a small group can prompt out what many companies shipped over their whole lifetimes. There's not much left for them to do.",[242,281,282],{},"Strip it down to what the hardware, and the people, actually need. Small teams go fast, always did.",{"title":284,"searchDepth":285,"depth":285,"links":286},"",2,[],"2026-10-30","I don't know where this is going, but as the models get more capable the whole stack starts to look like a liability. What sits between my app and the pixel, and what can I remove?","md",{"src":291,"alt":292},"\u002Fimages\u002Fblog\u002F20261030-remove-the-leaky-abstractions.png","The title \"Remove the Leaky Abstractions\" beside a stack of layers, from intent at the top down to hardware at the bottom. Every layer in between is struck out in red: middle management, 4 meetings a day, framework, ORM wrapping a wrapper, shim on a shim, raster pipeline hacks, driver shim.",{},true,"---\ntitle: 'Remove the Leaky Abstractions'\ndescription: \"I don't know where this is going, but as the models get more capable the whole stack starts to look like a liability. What sits between my app and the pixel, and what can I remove?\"\ndate: '2026-10-30'\nimage:\n  src: \u002Fimages\u002Fblog\u002F20261030-remove-the-leaky-abstractions.png\n  alt: 'The title \"Remove the Leaky Abstractions\" beside a stack of layers, from intent at the top down to hardware at the bottom. Every layer in between is struck out in red: middle management, 4 meetings a day, framework, ORM wrapping a wrapper, shim on a shim, raster pipeline hacks, driver shim.'\nauthors:\n  - name: Chris Towles\n    to: https:\u002F\u002Ftwitter.com\u002FChris_Towles\n    avatar:\n      src: \u002Fimages\u002Fctowles-profile-512x512.png\nbadge:\n  label: 'AI'\n---\n\n[Boris Tane](https:\u002F\u002Fx.com\u002Fboristane){target=\"\\_blank\"} said [the software development lifecycle is dead](https:\u002F\u002Fboristane.com\u002Fblog\u002Fthe-software-development-lifecycle-is-dead\u002F){target=\"\\_blank\"}. I don't know where this is going. But with the models getting more capable every few months, the whole stack starts to look like a liability. Every layer we added to save developer time was a tax on the machine, and developer time isn't the expensive part anymore.\n\nI'm not a Rust developer. My [first Rust commit](https:\u002F\u002Fgithub.com\u002FChrisTowles\u002Fscribed\u002Fcommit\u002Fd7c69730e5bb19c43daed54a2cf4d31885726e20){target=\"\\_blank\"} was May 12 of this year. Didn't matter, the model can write it. So now I'm trying to figure out what sits between my app and the pixel, and which of those layers add value and which ones I can just remove.\n\nThe best example I've got isn't mine. zero is my brother Patrick's repo, and I only started helping with it last week. Instead of stacking more workarounds on the raster pipeline, he skipped it and went straight to a pure-Vulkan path tracer in Rust, ReSTIR for the lights and DLSS Ray Reconstruction to clean up the frame. You don't get there by tuning the old layers.\n\nThere's a game on top of it too, but that's his to show. 740 commits in, the moon casts real shadows and you can look through a door into a level four and a half kilometers away.\n\nA pixel is still just electrons, though. The part I keep coming back to is the next step: going from the hardware to actually moving atoms. Robots, printers, machines that build things. I'd bet the same rule holds there, the fewer layers between what you want and the motor that does it, the better. I haven't figured that part out yet.\n\nSame goes for the org. Management layers are leaky abstractions too. Four meetings a day that should have been an email is the org version of a shim on a shim. Those layers were there to coordinate hundreds of people writing code by hand, and now a small group can prompt out what many companies shipped over their whole lifetimes. There's not much left for them to do.\n\nStrip it down to what the hardware, and the people, actually need. Small teams go fast, always did.\n",{"title":225,"description":288},"published","fvg9V-YVfCpj_SGh8n2hag1ZDUWFcKHfA9p8k3Va7GA",[300,302],{"title":221,"path":222,"stem":223,"description":301,"status":297,"children":-1},"Claude Code agents write the songs, Suno sings them, a GPU script times every word, and each video is a three.js scene drawn from the audio clock. The whole chain, with real data from The Steep Part.",null,1793413001786]