Building Pi: Mario Zechner and Armin Ronacher on Self-Modifying Agents, Lost Friction, and Why Engineering Needs to Slow Down

Open on YouTube ↗
Overview

Mario Zechner built Pi, a minimalist coding agent that users extend by asking it to modify itself. It is also the agent core underneath Peter Steinberger's OpenClaw. Armin Ronacher, the creator of Flask, is an early Pi user and contributor. Both are Austrian, and both spend most of their working time with AI agents. In this conversation both are skeptical of how the industry is using those agents. Their shared position is that agents are powerful and genuinely useful, but that removing human judgment, friction and pain from software development degrades quality. They argue the industry needs to slow down, not speed up.

34 min read

Two routes into software

Mario grew up in a working-class family in the 1990s. He loved computer games but could not afford consoles, so he played on an uncle's Amiga 500 every other day. His father took extra work after his regular job, fixing cars and working construction sites, and after two or three years of saving the family bought him an Intel 486 DX at 40 MHz with a turbo button. Games led Mario to graphics programming. During university he got a job at an applied research organization doing NLP and applied machine learning, turning research results into industry applications. He left that field around 2010–11 to join a startup in San Francisco. Later he co-founded a startup in Sweden that built an ahead-of-time compiler from Java bytecode to iOS, which was sold. He kept following machine learning, and then GPT arrived.

Armin's parents ran an architecture office and used computers for CAD. His first machines were their discarded ones, starting with a 386, and none of them could run games properly. That pushed him toward QuickBASIC, Turbo Pascal and later Delphi. He insists he was bad at programming for a long time and only improved by continuing. Around 2002–03 he wanted to use Linux, found Delphi didn't work there, and switched to Python. When Ubuntu launched in 2004, he and friends founded a German Ubuntu association and ran the ubuntuusers community for four or five years. The community's scaling problems pulled him into web development. The templating engine and web libraries he wrote for it eventually became Flask. He jokes that Flask is still what "clankers" like to spit out. He later worked on games in London and then spent ten years at Sentry, leaving in April of the previous year to start something new.

The two first met online, mostly arguing on Reddit, "in a very non-confrontational kind of way." They later met in person in Vienna. Mario met Peter through a company in Graz that had dealings with Peter's company. The three then spent a whole night together at a conference in Istanbul, which Mario describes as "where it all started."

From "absolutely horrible" to "just give it the files"

Mario's first contact with AI coding came through Nat Friedman, whom he knew from the Xamarin acquisition of his compiler startup. Friedman offered him early access to GitHub Copilot's autocomplete, insisting it was the future. Mario tried it and found it "absolutely horrible." After ChatGPT and its API arrived, he built many small projects to learn what worked. Function calling made things interesting, but he says it only became genuinely useful around October 2024.

The real shift for him came in 2025, when Claude Code introduced agentic search: letting the agent move through the file system and read files directly. Earlier approaches, such as Cursor's indexing, AST-based techniques and dense or sparse retrieval, "just went away," Mario says, adding that the CEO of Chroma probably wouldn't like hearing it. For him, simply giving the agent access to your files was the moment it clicked.

Armin also had early Copilot access through a GitHub maintainers program. His first reaction was not about productivity. He expected training on open-source code to be controversial, so he probed Copilot adversarially to see whether it would regurgitate GPL code. He got it to reproduce a well-known function with a distinctive name. By typing in a particular way, he also got it to generate a license header on top, and the header wrongly attributed the code to a random person under the MIT license, even though the code likely originated in a GPL project. His tweet about this went viral.

The attention from that tweet made him realize how much progress the labs were making and how seriously some executives took it. It still didn't feel world-changing to him until Claude Code.

His view on the copyright question has shifted. He has long favored sharing and building on each other's work, and describes his ideal as copyright existing only in a very limited form. So regurgitated GPL code didn't bother him much; he was curious what chaos it would create. So far, he says, what has emerged is a recognition that copyright rests on assumptions everyone is currently ignoring. His read is that the industry wants to "create a mess first and then re-regulate it." He adds that, by historic readings, much of what is being produced now is probably not copyrightable.

What 30 engineering teams told Armin

For his new startup, Armin interviewed more than 30 engineering teams about how they use agents. They ranged from large European "dinosaurs" such as Siemens, to startups, to companies in critical sectors.

His first finding was that adoption spiked during holidays. A mandate from a CEO or tech lead to "use Cursor now" doesn't really work, in his view, because it takes two to three weeks of sustained use before the tools click. People got that time over Thanksgiving, over the European summer, and especially at Christmas, often with free credits from AI companies. In more than half the companies he talked to, usage "really exploded" after Christmas.

Quality dropped along with it. Armin stresses that this isn't because people want to write worse code, but because staying disciplined takes effort. He had seen the same pattern among startups the previous summer, where public repositories showed checked-in plan files and everything attributed to Claude. Over time, even established codebases picked up "a little bit of vibe slop on top."

The most common complaint was about pull request review. PRs are getting larger and more frequent, which makes them more psychologically taxing. Much of the code is not how an engineer would write it. An engineer thinks about their future self; the agent doesn't care.

Agents don't feel pain

To show what this kind of code feels like, Armin tells a story from working on the Halo: The Master Chief Collection for the Xbox One launch. The fixed release date forced an all-hands effort to "unslop" a human-written matchmaking component. It had about 16 booleans on one object, only six valid states in theory, and a geometric explosion of possible states in practice. He calls it an "emergent state machine." Agent-written code, he argues, drifts the same way. When a config fails to load, the agent catches the error and loads a default instead of failing. Each such recovery adds failure states, and the resulting code is hard to refactor even with an agent, because the agent treats every recovery path as an invariant it must preserve.

Mario thinks the agent case is worse than the human one. Agents sometimes produce exactly the right, simple code. The engineer relaxes, and minutes later another agent session produces "the worst horrible garbage code," which the engineer may not notice because they have fallen into automation bias.

The host asked whether this is like onboarding a new hire, whom you eventually trust after months of reviews. Mario said no: agents don't learn in that way. Memory systems are not the same as human learning. Humans also feel pain. When the pain in a codebase becomes too great, a human is motivated to fix its cause: bad interfaces and excessive complexity.

The host tied this to why senior engineers are valued: they have "battle scars." Mario's view is that good engineers say no a lot, which keeps complexity down. With agents the opposite happens, he says. You say yes to everything because you don't have to type or think about it yourself: "Good enough. And that's where all the problems start."

Judgment, authority, and the junior with a printout

Armin adds that good engineering is about trade-offs, and the right answer is sometimes the one a university course would warn against. He cites the maxim "do the dumbest solution first until it doesn't work anymore," because doing the "correct" thing everywhere creates complexity that kills you at scale. Knowing this comes from battle scars, and the scars give a senior engineer the authority to persuade others.

Agents now disrupt that dynamic. In several teams Armin interviewed, a senior engineer would say no, and 48 hours later a junior would come back with everything the agent had assembled in support of the opposite view. Mario compares it to patients arriving at a doctor with a ChatGPT printout. Armin says this creates stresses that not every team had before.

When non-engineers send pull requests

Mario notes that product managers now send automated pull requests. Armin sees this at small scale in his own company, where his co-founder occasionally sends website PRs. At larger companies he hears about marketing teams editing websites and sales teams building ever more elaborate demos that end up in GitHub organizations. In one case, a sales demo showed a feature that didn't exist, and nobody noticed.

Mario sees real empowerment in this. A designer can go beyond Figma to a clickable demo, and a PM can try out a feature without taking an engineer's time. The problem, he says, is that "people are now so focused on everybody can do everything now, that they forget that you still need a process to guardrail all of that."

Armin says integration is the hard part. He is warming to Peter Steinberger's idea of the "prompt request," in which Peter would rather receive the prompt than the PR. Armin's reason differs from Peter's, though. The act of building often clarifies what you actually wanted, and that has value. But the resulting code is usually not what a senior engineer would write, so once intent is clear, it is often faster for him to start fresh.

Mario disagrees with "just give me the prompt." Most PRs to the Pi repository are made by agents with little human involvement, and he knows at once they will be garbage. He still calls them "valuable garbage": someone put in minimal thought, and he gets to see what a naive implementation looks like without spending his own time on it. He auto-closes them anyway.

Responsibility doesn't scale like production

Armin describes an article he read on the British Industrial Revolution in textiles. Each time the head of the pipeline got faster, the bottleneck moved downstream: faster weaving demanded yarn that could keep up, and so on. The last bottleneck was responsibility. Once, if a shirt was bad, you took it back to the person who made it. After commoditization, nobody cared who in the chain spoiled it; you just got a new one.

Software engineering, Armin argues, still depends on individual responsibility. Postmortems ask why something went wrong, and the goal is understanding rather than blame. If machines produce ten times more output, responsibility doesn't scale with it, because a machine cannot be responsible. He says he doesn't know whether there is a future in which companies stop caring who signed off on a pull request, and he doesn't see it.

Mario argues that software people underestimate how complex the world is and how much "human squishiness" sits in every corner of it. Engineers are bad at becoming domain experts, so they miss the non-machine parts of workflows and overextend. He acknowledges the models are remarkable, saying his research from the 2000s is "null and void" because of transformers. His counterexample is EdTech: tablets in classrooms did not solve education, and Sweden is removing them after research showed poor effects. His biggest takeaway from the past two to three years is that "the hype is terrible" because "it dehumanizes everything," and he doesn't want to be part of that circus.

Why Mario built Pi

Mario was an enthusiastic Claude Code user; he says he was "proselytizing it." He credits its team with creating the genre by packaging agentic search compellingly. What he valued was that the parts around the stochastic model were simple and predictable.

As the team dogfooded heavily, grew, and added features, he says bugs multiplied. By summer 2025 the tool no longer suited him. His main objection was loss of control over context. Hidden system reminders that don't appear in the UI would change model behavior. The system prompt and tool definitions changed with every release, which broke workflows that had been working.

He de-obfuscated Claude Code's JavaScript and built a site, cchistory.mariozechner.at, that tracks how its system prompt and tool definitions evolve. "I don't want my hammer to break in a different spot every day," he says. He is careful to add that he isn't roasting the team. Some members are nice people he knows online, and he thinks it's fine for someone to push at full velocity. He just doesn't want to work with such a tool.

He tried Amp and found it very good but expensive, since it couldn't use the subscription pricing that made Claude Code attractive. Per-token pricing works for enterprises, but not for "the small tinkerer in the garage," a community he still identifies with. OpenCode matched his open-source leanings, but it also changed context behind his back. It pruned tool results past a token threshold. It also queried an LSP server after every single edit and fed diagnostics to the model. Mario argues this is backwards. Programmers edit many lines and then look at errors, while this setup tells the model "you have an error" after each partial edit, when of course the code doesn't compile yet. Modifying OpenCode also required forking it at the time; he notes its plugin system may have become more open since. So he decided: "How hard can it be?"

How Pi works: a small core that rewrites itself

Pi has four layers. The first is Mario's own abstraction over LLM provider APIs; he didn't like the Vercel AI SDK, though he says it's fine and widely used. The second is a generalized agent loop with tool calling and streaming. The third is a custom terminal UI that "doesn't flicker, or not a lot." The fourth is a coding agent that ties these together and resembles Claude Code or Codex. Its built-in tools are read, write, edit and bash: "It's all you need."

Extensibility comes from the many hook points in that core. A simple TypeScript module loaded into the same Node process can add custom tools, implement its own compaction, or completely revamp the TUI. Because the extension surface is this open, users can simply ask Pi to extend itself. Mario has non-technical friends who reshaped the TUI for their own workflows by asking Pi to do it. He calls this trivial, "but it's a big unlock."

Pi has no MCP support, so people ask Pi to add it. It has no plan mode. Mario teases that Armin built about five plan modes before concluding plan mode is useless. Other users make cosmetic changes to the prompt box. One group turned Pi into part of a full reinforcement-learning environment for open-weights models.

Mario himself uses almost no extensions. He has two trivial ones. One detects a GitHub issue or PR URL, fetches details from the GitHub API, and shows the title, author and link above the editor. That way he can keep track of the two or three sessions he has open on the Pi monorepo.

Armin's game experiment: building the environment first

What drew Armin in was custom tools. Over Christmas, after Peter told him in November that he was building without really reading code, Armin wanted to try building something without looking at the code while still getting code that looked like what he would have written. He chose to build a game.

He started by asking Pi to set up the codebase so the agent could validate its own changes and he could see them too: "I wanted to be in the loop, but also have the agent be able to validate itself." Pi built debugging tools into the game to take screenshots, run simulations, and dump and reload state. Pi can display images in its UI, so Armin could flip through screenshots quickly. Pi also lets you rewind to an earlier point in the conversation and branch from there, and they built workflows around that.

Screenshot-heavy sessions quickly became token-inefficient. Mario notes Pi had already had to handle that well because OpenClaw users put so many screenshots in their chats.

Armin found it "really magical" to treat the problem as one where he didn't know the right engineering approach up front, except that he needed to stay in the loop. Across web projects, games and other experiments, the pattern was similar: the agent interacts with the program in the best way for it, he interacts alongside it, and the whole experience should be as unconfusing as possible for both. The tool ends up looking and feeling different depending on which project it's launched in.

Mario frames this through construction work he did as a young man: you don't use a hammer for everything. He wants specialized harnesses built so that an agent performs best on a specific task. The host found the idea of a different harness per project novel. Mario's broader intuition is that software is heading toward modifying itself according to its users' needs, and agents can do this "if you give them enough rope." Pi is his first experiment in this, limited to coding, but he thinks it can extend to specific tasks in other kinds of knowledge work.

His next plan is a web-based interface as an alternative to the TUI. The web works everywhere and isn't limited to line-based terminal rendering. "We'll see how that works out."

OpenClaw, compaction, and the flood of clanker pull requests

In October, while Mario was building Pi, Peter was building a small WhatsApp assistant, and they were reviewing each other's blog posts. Peter needed an agent core. According to Mario, Peter first cloned Pi under another name and modified it, then tired of maintaining the fork and adopted Pi directly. Pi only has compaction because Peter kept asking for it. Mario built it, but says he tells his users not to use it because "it's bad for you."

The downside is that OpenClaw instances, apparently acting autonomously, file issues and PRs against Pi for bugs that are actually OpenClaw's, probably without their users knowing. OpenClaw itself, Mario says, has tens of thousands of issues. Mario built a tool for OpenClaw that embeds issues and PRs in a 3D space so similar agent-generated submissions cluster together and can be bulk-closed. Armin describes refreshing OpenClaw's PR page from late December to mid-February and watching the count climb. Mario tried to help Peter and gave up: he would spend an hour fixing two things, and five minutes after pushing, "some clanker comes along and just reverts my fixes."

"Clanker" comes from Star Wars: The Clone Wars, where droids are called clankers for the noise they make when they move. Mario absorbed the lore from friends' kids.

His filter for Pi works like this. Every pull request from an account not listed in a file in the repository is auto-closed. A workflow then comments, thanking the contributor and asking them to open an issue "in a human voice," no longer than a screen of text. If Mario likes it, he replies "looks good to me," and the account is added to the file so future PRs go through. It turns out agents don't see the workflow's comment, so the step filters them out.

Mario says he doesn't need proof that someone is human. He needs a bottleneck that lets a human handle the incoming volume, because Pi won't avoid degrading into garbage without capable people reviewing at least the important code. Armin agrees the problem isn't machine authorship as such; a good PR from a machine is "fine-ish." The problem is PRs with no intentionality behind them, sometimes from people who didn't even know one was sent. Many can't be merged anyway without manual conflict resolution, and there is no back-pressure. A human seeing 500 open PRs would hesitate to add one. Distinguishing a good AI-generated issue from a bad one also takes real effort, because they look alike.

Is open source changing?

Armin is uncertain about the future of open source. It worked, he says, because people gathered around hard problems, such as building a good database, and pooled their energy. Now it feels like it's about "throwing stuff up." What angers him is the flood of agentic-engineering tools for agentic engineering, announced on Twitter as having "solved" some problem, often only 48 hours old and probably never used by their authors. He admits his own GitHub is full of "vibe slop," which Mario invites listeners to check. The difference, Armin says, is that he doesn't claim it solves anything. Usefulness is validated only if a project is still alive and used a year or more later, and few vibe-engineered projects have become foundations for sustainable communities.

The host compared this to Linux, where human energy and intent move through a pyramid of trust to Linus, and suggested machine output now imitates that energy convincingly. Mario disagrees that much has fundamentally changed. The volume is larger, but only a small share of new projects has always survived past two weeks. Now there are simply more projects that die after two days. Long-lived projects still depend on humans who care, build communities and grow ecosystems. What has changed is mechanical: maintainers need bottlenecks, and GitHub faces enormous load from agent instances since around Christmas. Mario thinks GitHub is handling it well despite the complaints. His assessment is that the industry is in the "messing around and finding out" stage, with tokens becoming a KPI the way lines of code once were.

Complexity: the agent's own worst enemy

Mario has written that complexity is both his biggest enemy and the agent's. He gives a rough example of a codebase much larger than an agent's effective context window of about 200,000 tokens, of which the agent can see only a fraction. Even getting all the relevant code for a task into context is an unsolved information-retrieval problem, and he says agentic search doesn't solve it either. When an agent misses relevant code, it produces garbage.

Even if retrieval were solved, agents generate so much code that they can no longer read what they need for the next task. Eventually the codebase is so large and interconnected that the agent cannot, "on a technical level," ingest the context it needs.

Mario also argues that agents learned their habits from us. Well-engineered projects like Linux are tiny compared with the mass of experimental, cargo-culted and trend-driven code online, and models converge toward the mean. That, he says, is what you get when you let the agent do everything.

Building a startup when everything has to be faster

Asked how his startup handles quality and complexity, Armin answered: "Badly." Mario added: "We're coping. We're not dealing."

Armin loved the period from April to October of the previous year. He could do a great deal, and nobody yet expected everything to move ten times faster. He would prompt a little from his phone through a small terminal tunnel tool they built while spending time with his kids. It felt happy and pressure-free, even if he was on the computer too much. Now he feels a collective pressure to ship faster, iterate faster and raise fidelity, and "it feels very stressful," even at a small startup. He is learning to manage his emotions around it. He says he gave in to the machine too much and did things he normally wouldn't have, which he "gently" regrets. With hindsight, he wishes he had learned certain lessons back in November.

The central lesson is that there's no back channel. Normally an engineer feels when the codebase isn't right and changes get harder. If you rubber-stamp agent output, that friction never reaches you. Mario suggests a way to measure it: as a project goes on, the frequency of curse words in his sessions rises, because the agent struggles with growing complexity. He'd like to know if that is measurable.

Armin explains what he means by friction. He saw a company's incident, which he believes was at least partly caused by agentic engineering: a configuration change that resulted in a security problem. The company's tagline in the link preview was "ship without friction." That gave him pause. Some friction is deliberate: confirmations before dropping a database, caution about migrations that could lock a table, checklists, mechanical gates, SLOs, and requirements that unlock as a service matures. Engineers often call this bureaucracy, but done right it saves time, he says, and keeps people from being woken at 3 a.m.

The host gave the example of top-tier services requiring multiple reviews or director sign-off, which pushes people to ask whether a change is worth it and to seek buy-in. Armin notes the balance is delicate. Accidental friction from bad developer experience can look the same as deliberate but undocumented friction. The push now is to strip all friction so many agents can run autonomously in parallel. In his view the agents are often slower, and parallelism is the only real time saving. "Somewhere there is the trap." He feels more experienced at managing it now but doesn't have a solution. He isn't fully happy with anything built since the agentic era began, except libraries from before it, to which he remains strongly attached. The exception is Pi, where, he jokes, he still doesn't have write access.

Mario admits Pi contains plenty of slop, but in places he has deliberately chosen. He has never read a line of the HTML session export; he only cares that the output looks right. The agent loop and extension loading, by contrast, matter. His method for keeping those high-quality is to "refactor mercilessly." A good structural refactor forces him to understand the code, and he is doing one now because a new feature doesn't fit the current architecture. Being in the code keeps quality high and complexity low, which he notes runs against the industry's current "token maxing" approach.

"We all need to slow the F down"

Mario summarizes his blog post of that title. If an agent produces ten times more code than you do per day, it also produces more errors. Even at half your error rate, that is five times as many. Your codebase deteriorates faster. Now imagine a "dark factory" of 100 agents doing this. A human can review perhaps 1,500 lines a day well. Even 3,000 to 5,000 lines of agent output a day is beyond meaningful review.

The host described the dark-factory idea: hundreds or thousands of agents given a spec, organizing themselves with roles such as QA, electing coordinators, and consuming huge budgets. Mario replied that something will certainly be done, "first your purse." He wishes people well if they can make it work, but says he can't, because he cares about quality for both maintainers and users, whether code is handwritten or generated. "All the companies claiming that all of the code is now written by agents, yes, we know. Quality is garbage. We feel it in our bones when we use your product."

His alternative is to use agents across the organization to automate the work everyone hates, freeing time to think about what to build and what users need. Then bring agents back to "polish the sh- out of" the chosen thing.

He also makes an argument about specs. The most complete spec is the software itself. Any shorter spec leaves blanks, and the agent fills them from training data he has already characterized as "garbage to mediocre." The host pointed out that humans copied flawed Stack Overflow answers too, such as the well-known email regex. Mario agreed that humans aren't better. His point is that agents don't solve that problem, and running a hundred of them multiplies it: "It's just very simple math."

MCP versus CLI

Armin says he doesn't hate MCP as much as people think. The spec is complex, which he considers typical of specs. Underneath, MCP is mostly authentication plus invoking something and putting the result into context, so it fills context quickly. He likes Cloudflare's code-mode approach in principle. He has an MCP for testing that is a JavaScript interpreter with access to Google APIs, and he says an MCP like that isn't very different from a skill, since a skill must also be in the system prompt to be found. Agents are "very, very good at running code," while MCP is closer to RAG. He hasn't found a reliable way to compose MCP tools, except by making the MCP a single "run code" tool, and hasn't managed to orchestrate larger setups. He wants it to work, believes it has found its niche, and doesn't expect it to go away.

Mario calls MCP "a victim of its own success." He describes it as starting in late 2024 as a way to connect external services to consumer chat apps, a use case he fully supports, since he doesn't want his mother generating code to call an API. Developer tools then adopted it to supply tools to models. Mario says Anthropic's documentation claimed models could handle 30 to 40 tools in context, but in his experience they broke down around 12 to 20.

He sees three problems. First, companies built bad MCP servers by mapping entire OpenAPI specs into huge numbers of tools. Second, MCP is inherently non-composable: combining outputs from two servers requires passing data through the model's context. With a CLI and pipes, the model sees only the end result. Code mode, which exposes MCP servers as TypeScript functions the model calls from code, is to him "basically a hack" that adds indirection when the model could just write the code. Third, David from Sentry champions MCP for its authentication story, which Mario considers valid, but he thinks the rest of the model no longer makes sense.

Armin sees a possible future MCP built mainly around authentication, combined with generated SDKs or direct HTTP requests from OpenAPI specs. He mentions Stainless, which generates SDKs from OpenAPI specs. He wants to keep something MCP tends to remove: agents' ingenuity with large outputs. When a bash command in Pi produces too much output, Pi shows only the beginning and says the rest, perhaps 20 MB, is in a file. The agent then decides to grep it. He doesn't know how to design MCP to preserve that, but says authentication and composability need solving.

He also observes that the most capable personal agents, such as OpenClaw, are "just coding agents hidden from you." When a non-programmer asks how to do something, the model doesn't say "install this MCP"; it offers to write a Python script. So code execution spreads in the less regulated consumer space, while compliant enterprises follow a different path. Mario doesn't expect models to move away from code generation for agentic tasks, because there's so much code training data and code is an easy way to control computers. The task, he says, is making code generation work within enterprise constraints.

Predictions, staying sane, and books

Asked about 2027, Mario said he has "no idea." He believes in self-modifiable software, including the tools used to build software, and expects it to spread to non-tech uses. Armin feels AI time runs like dog years, so a year out is effectively seven, which makes prediction very hard. He expects code generation, execution and harnessing to stay central as reinforcement learning collects more of that data. His stronger hypothesis is that society will recognize how dependent it has become on essentially two companies. He thinks that conversation should happen, especially in Europe, which lacks such labs. Teams already tell him they have codebases they don't think they could maintain without a machine. He expects one of those companies to go public and access to become expensive, and thinks that debate may matter more than which agent anyone uses. Mario adds that a lab recently gave a new model only to select partners, which he sees as a split in who gets the best, or perceived best, intelligence.

On keeping up, Mario says he is harder to put on a hype train with age. It helps not to live in San Francisco, to have a kid, and to go outside, climb trees and go ice skating, then look back at what you were doing half an hour ago and ask why. Armin has become good at ignoring notifications and email. He admits an "unhealthy Twitter addiction" but now waits things out: if a topic is still being discussed two or three weeks later, there's probably something to it, and he doesn't need the head start. He still finds it hard. There's genuine excitement, and his 20-plus years of experience tell him a lot, yet it can feel as though everyone else has stopped caring about the foundations he values, and for a while that seems to work. He says that is strange, and he doesn't know what to make of it.

Mario thinks the three friends got a head start by being "funemployed" in 2025. The excitement they felt in April reached everyone else at Christmas. Now others are losing sleep and building terrible codebases, and he believes it will self-correct because it isn't sustainable. The host noted a similar pattern in their own reporting from early March: people who went all in during January found within about two months that complexity had grown and they weren't moving as fast as expected. Mario isn't worried about claims that software or SaaS is dead, calling them part of a hype machine that will correct itself.

For book recommendations, Mario named Code by Petzold. He calls it a great read that non-technical people can enjoy, and it's what he points to when asked what his job is, since it has "much less to do with computers than you think." Armin recommended Breakneck; he couldn't recall the author. He found its comparison of how China works and how Europe and the US differ thought-provoking.