[{"data":1,"prerenderedAt":392},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fmin-maxer-trifecta":204,"\u002Fblog\u002Fmin-maxer-trifecta-surround":387},[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],{"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",{"id":205,"title":117,"authors":206,"badge":212,"body":214,"date":376,"description":377,"extension":378,"image":379,"meta":382,"navigation":383,"path":118,"seo":384,"status":385,"stem":119,"__hash__":386},"posts\u002F2.blog\u002F20251004.min-maxer-trifecta.md",[207],{"name":208,"to":209,"avatar":210},"Chris Towles","https:\u002F\u002Ftwitter.com\u002FChris_Towles",{"src":211},"\u002Fimages\u002Fctowles-profile-512x512.png",{"label":213},"Dev Tools",{"type":215,"value":216,"toc":369},"minimark",[217,229,234,241,247,253,267,280,288,292,295,301,308,316,320,323,329,340,346,352,356,359,366],[218,219,220,221,228],"p",{},"I have two hours free this weekend. Should I work on that side project, or play ",[222,223,227],"a",{"href":224,"rel":225},"https:\u002F\u002Flastepoch.com\u002F",[226],"nofollow","Last Epoch"," on Steam on Linux? The answer used to feel like a compromise - dev time versus downtime, productive versus \"wasting time.\" Now it's both. I'm building tools that help optimize my Last Epoch builds, which means every gaming session is also research, and every dev session scratches the same optimization itch that drew me to ARPGs in the first place.",[230,231,233],"h2",{"id":232},"three-favorite-things-never-enough-time","Three Favorite Things, Never Enough Time",[218,235,236,240],{},[237,238,239],"strong",{},"AI Development"," has become the puzzle that never gets old. So much to learn - it's the same dopamine hit as solving a complex architectural problem, but faster iterations and immediate feedback.",[218,242,243,246],{},[237,244,245],{},"Software Engineering"," remains the foundation. Building systems, designing APIs, managing state - this is still where I spend most of my professional time. The craft never stops evolving, and neither does the learning curve.",[218,248,249,252],{},[237,250,251],{},"ARPG Gaming"," is my relaxation valve. Specifically Last Epoch - the skill tree complexity, build diversity, and satisfying loot loops. It's mindless enough to decompress, deep enough to stay engaging. I've even got my amazing wife Danielle to play it with me, but I do have to manage her loot filters!",[218,254,255,256,261,262,266],{},"The traditional conflict: gaming feels \"unproductive.\" As someone who min-maxes everything (developer toolchains, learning paths, even my ",[222,257,260],{"href":258,"rel":259},"https:\u002F\u002Fgithub.com\u002FChrisTowles\u002Fdotfiles",[226],"dotfiles","), spending two hours grinding in an ARPG triggers the same guilt as fixing a CI\u002FCD build chain. It's entertainment, sure, but is it the ",[263,264,265],"em",{},"optimal"," use of that time?",[218,268,269,270,275,276,279],{},"The min-maxer's curse is that you can't just \"casually\" engage with anything. If I'm playing Last Epoch, I'm researching optimal passive tree paths from ",[222,271,274],{"href":272,"rel":273},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3EZclX7TpjI",[226],"Raxx's Bin Stash",", comparing gear affixes, calculating damage breakpoints. If I'm going to play, I'm going to play ",[263,277,278],{},"optimally",". My wife doesn't get it, but she humors me.",[218,281,282,283],{},"My Chrome Bookmarks bar has a folder with subfolders to even optimize my gaming time:\n",[284,285],"img",{"alt":286,"src":287},"","\u002Fimages\u002Fblog\u002Flast-epoch-booksmark-folder.png",[230,289,291],{"id":290},"the-trifecta-when-dev-work-becomes-game-research","The Trifecta - When Dev Work Becomes Game Research",[218,293,294],{},"Enter building Last Epoch tools - starting with loot filter builders, and maybe something more later.",[218,296,297,300],{},[237,298,299],{},"The concept",": Build practical tools that solve real problems I encounter while playing.",[218,302,303,304,307],{},"The satisfaction hits different from a typical side project. This isn't building a TODO app to learn a framework. This is building a tool that directly improves something I can test again—a really complex use case that ",[263,305,306],{},"happens to be fun at the same time",".",[218,309,310,311,315],{},"Like ",[312,313,314],"code",{},"SimulationCraft"," for World of Warcraft or Decursive back in the day. The last time I wrote a game addon was for WoW in Lua - a WoW addon called PallyPower to automate 5 min paladin buffs for our raiding team in Molten Core.",[230,317,319],{"id":318},"the-broader-pattern","The Broader Pattern",[218,321,322],{},"What if more developers found ways to combine their work and play like this?",[218,324,325,328],{},[237,326,327],{},"For Developers",": Stop building \"interesting technical challenges\" and start building tools that solve your real problems. The motivation stays high, the use cases are concrete, and the feedback is instant and testable.",[218,330,331,334,335,307],{},[237,332,333],{},"For Gamers",": Your optimization obsession isn't a distraction - it's fuel for learning. The same analytical mindset that drives build theory-crafting drives system architecture. ",[222,336,339],{"href":337,"rel":338},"https:\u002F\u002Fwww.youtube.com\u002Fshorts\u002F3wrV0dRkRmg",[226],"And that's pretty cool",[218,341,342,345],{},[237,343,344],{},"For Tool Builders",": Toy examples teach syntax. Real use cases teach judgment. Building tools for something you care about forces you to grapple with the hard problems - edge cases, data validation, performance optimization, hosting.",[218,347,348,351],{},[237,349,350],{},"The meta-lesson",": The best side projects don't feel like work OR play. They feel like both, simultaneously. You're productive and relaxed at the same time. You're learning and enjoying. You're solving problems and having fun.",[230,353,355],{"id":354},"the-best-part","The Best Part",[218,357,358],{},"When I boot up Last Epoch now, I'm not choosing between development and gaming. I'm doing both.",[218,360,361,362,365],{},"The insights I gain get better with every edge case I discover. My builds get better with every tool I create. And I actually ",[263,363,364],{},"relax"," while playing - because it's all progress. The min-maxer in me is satisfied because I'm optimizing two systems simultaneously. The developer in me is satisfied because I'm building real tools. The gamer in me is satisfied because I'm enjoying my favorite ARPG without guilt.",[218,367,368],{},"Three favorite things, one satisfying loop. That's the trifecta. On top of that, it stops me from working on work projects, risking my wife's ire for \"always working.\" God, I love her and my kids. And that's a win-win-win.",{"title":286,"searchDepth":370,"depth":370,"links":371},2,[372,373,374,375],{"id":232,"depth":370,"text":233},{"id":290,"depth":370,"text":291},{"id":318,"depth":370,"text":319},{"id":354,"depth":370,"text":355},"2025-10-04","How building tools for Last Epoch lets me combine software development, gaming, and guilt-free relaxation into one satisfying loop.","md",{"src":380,"alt":381},"\u002Fimages\u002Fblog\u002F20251004-1430-min-maxer-trifecta.png","Developer optimizing both code and game builds simultaneously",{},true,{"title":117,"description":377},"published","PzZ6NTgFzPgvRbhQGLMiIihql0EKBos4303ewDy-da4",[388,390],{"title":113,"path":114,"stem":115,"description":389,"status":385,"children":-1},"Tesla taught me something profound about business strategy: when you can't find the seams between components, you're looking at vertical integration done right. Here's why more industries need to pay attention.",{"title":121,"path":122,"stem":123,"description":391,"status":385,"children":-1},"Stop learning from tutorials. Start with the people who actually want to teach you - the library authors, researchers, and spec writers.",1776221196452]