The Bikeshed Pod

The Bikeshed Pod

By Matt Hamlin, Dillon Curry & Scott KayeTechnology
Download on the App Store

The Bikeshed Pod episodes

  • The Internet is On Fire
    Summary

    This is a grab-bag episode. Most of the news is bad: old software, weak keys, and patches that do not reach old versions. Some of the news is better: new personal agents and new browsers to try.

    RIP Arc (2023–2026)

    The Browser Company of New York is stopping work on Arc and moving users to its new browser, Dia. Scott is not happy. He will try Dia with the AI features off, because his work requires a Chromium-based browser. He also likes Zen, an Arc-style browser built on Firefox. Matt uses Dia at work and Helium at home, but he wants tab sync to iOS. He wants to try Yab ("yet another browser") for this. Matt says it is strange that the Atlassian CEO was a daily Arc user, but Arc still did not come back. Dillon defends Firefox. Matt says he would use Internet Explorer 8 first.

    REA: Reverse Engineer Anything

    REA is a skill that tells an agent how to reverse engineer any software. People used it to make open-source versions of the Adobe Creative Suite and to make game mashups: Steve from Minecraft in Elden Ring, and Skate 3 on a Call of Duty map. Model companies now block it, because it is close to the cybersecurity work they already restrict. Copies with new names continue to appear. Dillon asks a good question: when an agent does not solve a problem, how do you know if it was blocked?

    PHP: Two Critical RCEs

    PHP had two remote code execution vulnerabilities with CVSS scores of approximately 9.2 and 9.3. The timeline is not clear. OpenAI's Patch the Planet (similar to Anthropic's Project Glasswing) found related issues, and a person outside the embargo leaked the announcement early. This made the PHP Foundation release the fix sooner. US, Japanese, German, and Dutch officials told people to take servers down. The patches cover PHP 8.2 to 8.5 only, so older versions get no fix. HubSpot runs Java, so Matt's team is safe. Matt thinks of Wayfair's PHP monolith first. Scott remembers a former Wayfair leader who said PHP is "very malleable."

    Node.js and Next.js Upgrades

    The October Node.js security releases fix only Node 22, 24, and 26. Matt has local workloads on Node 12. Dillon's coworker must upgrade a service on Node 8. Dillon is upgrading four apps from Next.js 15 to 16, because Next 15 support stopped on October 21.

    eMudhra: The Private Key Was 4

    eMudhra, an Indian company that manages intermediate certificates, used very small numbers as private keys: 4, 11, 23, and others. All eight keys are less than 257. A simple script can find them in less than one minute. At Dillon's company, 20 people worked in one room for three days. A director said the internet is "on fire" and kept walking. Matt is on call, and he had to update a certificate bundle package. The only engineer who knew how it worked was laid off, so Matt used Opus 5.5 to help.

    GitLab's 10-Year Flaw

    GitLab had the same flaw in its software for approximately 10 years. The flaw gives attackers access to GitLab servers. Matt makes a joke about GitLab's "10 customers."

    Claude Duet and Personal Agents

    Anthropic announced Claude Duet, an always-on personal agent with memory, calendar, and email access. Other products in this space are OpenClaw, Hermes, Grok bots, Poke, Instinct, Meta's Muse, and OpenAI's Dots. Matt has a Dot named Bill. He made Poke reduce its price from approximately $35 to $2 per month, but then he cancelled it. The hosts ask if non-engineers will use these agents. Scott's dad still uses the URL bar as a search engine.

    Standup / Life Updates
    • Dillon has a new Keychron K8 HE keyboard.
    • Scott says Dillon's CTO wants to sit next to him. Dillon's company has not had a CTO for more than one year.
    • Dillon gets a call from his doctor during the recording, and Scott gets a page for eMudhra.
    • Matt and Dillon are both on call this week.
    • Scott talked to his computer before it was popular. Now everyone talks to their computer.
    • 35 min
    • The Heat Death of Software
      Summary

      Matt brings his own blog post to the table. It argues that software engineering is heading toward a kind of thermal equilibrium, where the structures we rely on today flatten out. Scott and Dillon test each of its three predictions, and they don't always agree.

      Remember Left-Pad?

      Before the predictions, a detour into nostalgia: the 2016 left-pad incident. A tiny npm package was pulled from the registry, and CI broke across the JavaScript ecosystem in a world before lock files. Matt is shocked his co-hosts don't remember it. Dillon notes that he was still in high school, and that it blew up mostly because it was "such a stupid library."

      Prediction 1: Open Source Dwindles

      Matt describes a range of libraries, from is-even to curl. Agents can already replace the small end. The question is how far up the range that ability goes in 10–15 years. Dillon points to maintainers who are drowning in vibe-coded slop PRs, which he says is "killing the fun." Scott wonders what happens to model quality if less good code goes public. He also worries that an all-proprietary world makes humans less useful when they move between jobs. Dillon's darker take: if open source dies, innovation might die with it, because AI companies will just own the solutions. Matt also brings up Google-style readability, which is really about comprehension, and asks how much of it survives when AI-written code goes straight to production.

      Prediction 2: Leaner Teams, No Junior Pipeline

      Junior hiring has dropped off a cliff and teams are shrinking. Matt worries that in five to ten years there will be no senior engineers left, because nobody got the chance to "fuck around and find out" as a junior. Scott says his team (14 or 15 people, "not humble bragging") is actually growing with ML engineers. He also calls out an AI-generated PR full of setState and useEffect that should have been lifted up a layer. Dillon calls the "you don't need juniors anymore" pitch a bad bet. The juniors he works with are "cracked," and companies that stop bringing in new people will slowly make themselves worse. On the human side, Scott finds talking to an agent all day draining ("Claude, cook"), while Matt has made peace with his role as a meat proxy.

      Prediction 3: Vibe Coding Your Own SaaS

      Matt's claim with the biggest economic impact: models are now good enough to generate something that LARPs as a product. For example, a Raycast replacement for a few dollars of tokens instead of $200 a year. Scott connects this to Wes Bos's AI yard-sale app and to the Neovim vs. out-of-the-box trade-off. Dillon names the catch: if you don't understand the code, you can't steer it. You hand the wheel to a self-driving car and it "turns you into a tree."

      You Wouldn't Vibe Code S3

      Matt ends on the post's counterargument, a play on the old "you wouldn't download a car" ad. Durable services like S3, EC2, and Cloudflare Workers are much harder to replace than a desktop tool. Every product has a moat. Raycast's is a stream. Amazon's is the Atlantic Ocean.

      Standup / Life Updates
      • The hosts defend starting the day with a white Monster after 30. Dillon brings up the old conspiracy theory about the logo (as a joke).
      • Matt has switched from Coke Zero to Diet Coke Lime and says he finally "understands Diet Coke."
      • Dillon stays on the Hydro Homies bus, which Matt says explains why his Whoop age is five years younger than his real age.
      • Scott is, once again, going to be late for standup.
      • 45 min
      • 42 Classes on One Div
        Summary

        A wave of teams dropping Tailwind for StyleX prompts a look at how the two tools think about CSS, where each wins on performance, and what "readable" means when agents write most of the code.

        Tailwind vs. StyleX: How They Differ

        Matt sets up the comparison. Tailwind is a utility-first library with prebuilt class names. StyleX has you write the styles yourself and compiles them into atomic utility classes. Scott compares StyleX to styled-components, Linaria, and Vanilla Extract: the CSS lives right next to your JSX, but the work happens at build time. Matt notes that HubSpot has started to adopt StyleX at the component library level. There, the compiler dedupes identical rules into shared class names, which is more atomic than tools like Vanilla Extract, where each style block becomes one class.

        Performance: It Depends

        Scott thinks Tailwind is still a bit ahead on build and compile speed. Matt has seen mixed reports. Some teams got a smaller JS bundle after migrating, because StyleX can merge commonly paired rules into one class. Other teams saw no change or larger output. In Matt's words, to quote Scott's favorite phrase, "it totally depends."

        Readability and the AI Angle

        One claim that teams make is that AI coding agents write StyleX better. Scott is not fully sold on it, but he likes that StyleX puts the real CSS in front of you. He thinks it is important to review AI output and to know modern CSS (he recommends Kevin Powell's YouTube channel). Dillon says he only adopted Tailwind because he had to. For him, AI-generated UIs with 42 classes on one div are unreadable. He would "die on the hill" that long Tailwind class names are bad, because StyleX is much closer to the CSS spec.

        Keeping Up With New CSS

        Matt asks how well each tool supports new CSS features. Tailwind has lagged because it has to ship new class names, and it is not clear how StyleX handles CSS it does not recognize yet. If these tools get in the way, he expects more people (or their agents) to go back to handwriting CSS.

        Who Maintains This Stuff?

        Matt mentions that Tailwind was acquired by Shopify, while the StyleX team at Meta is smaller than it was. Scott shares his spicy deets: he has heard that Meta runs an internal fork and that the open source version may depend on a single maintainer. Matt says that an internal/external split is normal for Meta projects (React was the same) and jokes that one person with unlimited agent tokens could be enough.

        Meta's Open Source Playbook

        Dillon thinks the community respects Meta's libraries because of React, which could help StyleX grow. Matt thinks that open source is Meta's way to build a larger hiring pool of engineers who already know its stack. Compare this with an unpopular in-house framework, like Tungsten (a deep cut for longtime listeners). Dillon wants a future episode about how React became so popular.

        25 min
      • All You Need Is a Router
        Summary

        The layer between your prompt and the model that answers it is turning into real infrastructure — and real money. Matt walks through what an AI router is, why Stripe and Ramp are both making moves in the space, and what routers look like inside a large org today.

        What a router actually is

        Matt defines the term for the AI context: a router takes one prompt and decides which backing model should answer it. Every major inference company already runs one, it just isn't talked about much. His example — send a prompt to Fable in Claude Code, hit a topic the model shouldn't handle, and the request gets quietly redirected to Opus 5 behind the scenes.

        Outside the big labs, a crop of startups sell a generic version: point your traffic at the router and it decides whether the request goes to OpenAI, Anthropic, or some other backend, based on your use case. The pitch to companies is flexibility — one subscription, many model types.

        The news: Stripe / OpenRouter and Ramp

        Two items on the table:

        • Stripe has either closed or is in talks on an acquisition of OpenRouter, the largest startup operating a router at scale, reportedly around $9 billion.
        • Ramp, a financial services company, is launching its own router as an alternative.
        • Matt's read on Stripe's motive: less about clever prompt-level routing, more about wanting a single gateway for all AI traffic and a single place to tune where requests go — offloading the infrastructure instead of juggling it internally.

          Dillon pushes back on the valuation. Taking a prompt and picking a model doesn't sound like a hard problem — "are they just using an agent to then... ask the agent, hey, what model should we use for this?" Matt suspects OpenRouter isn't doing much intelligent per-request judging today; it's closer to percentage splits and explicit model selection. A true judgment agent at the router layer is still costly and hard to run efficiently at scale.

          Frontier-model maximalists vs. fine-tuners

          Matt frames a split in the ecosystem that most people don't realize they're on one side of:

          • One camp believes the frontier models are good enough at everything — just throw it at Fable 5 or GPT 5.6 and move on.
          • The other believes a model fine-tuned for one narrow job (triaging error alerts, say) will outperform any generalist on that job, even if it's useless at everything else — at somewhat higher cost today.
          • Routers lean toward the second camp: they're what makes it practical to send specific requests to specific tuned models.

            Scott recalls this exact theory from his Fireworks days — that catch-all models doing everything were unlikely to be realistic, and the future was small, well-tuned models plus a router that maps the right prompt to the right one. His observation now: model tuning has largely been offloaded from businesses to the AI companies themselves, because tuning is a high-cost problem space. Companies just hold an Anthropic subscription and an OpenAI subscription instead.

            Spend, limits, and the shame board

            Dillon's practical want: pre-baked limits. At his job you can use Cursor, Claude Code, or ChatGPT, all as separate applications with different interfaces and no built-in caps — you find out you've used too much when someone tells you to chill out. He'd use expensive models more freely if he knew he had, say, a $100/week Fable allotment. Right now the ambiguity makes him avoid them.

            Scott's org is similar: no hard limit, just an occasional "hey, calm down." Dillon's team had a leaderboard of AI spend by name — his strategy was staying out of the top 10. Matt's verdict: "so it's like a shame board now instead of a leaderboard." Scott got pinged as an "AI leader" at his company and didn't believe it, noting some colleagues are migrating entire codebases and taking it to extremes.

            Routers inside HubSpot

            Matt describes the real setup: HubSpot runs a LiteLLM gateway deployed internally, with requests forwarded to OpenAI, Amazon Bedrock, or Base Ten depending on the model. Anthropic models go through Anthropic's enterprise offering instead. It covers both sides — engineers writing code and customers using Breeze, HubSpot's agentic surface — which lets the org control which model actually serves each request.

            A finding from that setup: plenty of people assume they need Opus 5 or Fable 5 or GPT 5.6 to get the best result, but when the model is obfuscated behind the scenes, they can't tell they're getting GLM 5.2 and rate the output as good enough. Matt's careful framing — the point isn't lying to your engineers, it's that routers give orgs sane levers over cost and model policy.

            Scott wonders where a routing layer would sit relative to Bedrock in his own stack. Matt's answer: Bedrock has a router, but a basic one — it honors the model you asked for rather than making a judgment call.

            Cursor auto mode as the mental model

            The clearest consumer-facing example: Cursor's auto mode, where you don't pick a model or thinking level, you just send the prompt and Cursor decides. Same pattern with subagents — Composer 2 for the main prompt, lighter models for scoped subagent work, which is how Claude Code spins up Haiku for subagents.

            Matt's prediction for the back half of 2026 into 2027: routers get bigger, driven by companies employing more AI while getting fiscally conservative about AI spend. Routers are the balancing point — cap the requests hitting expensive frontier models, send the rest to something cheap that does the same work for pennies.

            Hot takes

            Dillon's (self-described not-very-hot) take: he'd prefer routing be automatic, because "I don't think we should be spending our day bikeshedding over what model to use" — the name of the podcast, by the way.

            Matt agrees, but names the obstacle: engineers want to know the implementation detail and want to be using the best tool. Convincing them a cheaper open-source model is just as good for their problem is a hard sell against the branding.

            Dillon's actually-hot take: he doesn't trust the providers at all. "I use Opus, they're probably using Haiku... and telling you it's Opus, charging you for Opus." Scott laughs because he kind of agrees. Both suspect it's already happening — earlier in the episode Scott predicted providers would "route you to some crappy model that you don't know you're using and tell you it's a one-tier model."

            Standup / Life Updates

            Dillon — finished a long project that made him want to quit his job, mostly from burnout, which is now cooling off after some time away. He's been playing chess on a smart chess board that grades your moves as good, bad, or an inaccuracy in real time and highlights legal moves when you touch a piece. Played his first game on it with his wife.

            Scott — juggling five things at once, wrapping phase two of a project (his tech lead has replaced "phase one/two/three" with witty names). Fighting end-to-end tests that fail again every morning, and building a Buildkite CI pipeline to check against preview deploys instead of the current setup where everything fails in staging and never escalates to on-call. Calls it a nightmare. Heading to Portugal soon, and feeling re-energized after his own brush with burnout — he got to write some UI, which he doesn't do much anymore.

            Matt — a teammate just left, leaving him and his principal engineer on the team, with a possible merge back into a sister team. Outside work: Big Walk, possible game of the year, maybe the decade. The Modern Warfare 4 closed beta starts today, with DMZ returning in October. Heading to Bergen, Norway with a plan to eat a reindeer hot dog — a trip Scott and Dillon learned about live, and took as a personal insult.

            31 min
          • Skill Issue
            Summary

            Three engineers, three very different answers to the same question: how much of your workflow should live in a skill file? The episode moves from a plain-English definition to the org-scale version at Scott's company, then to the small personal skills each host actually opens.

            What a skill actually is

            Dillon starts simple: a skill is "really just blocks of text" for common tasks you ask an agent to do. Two shapes are useful — a specific workflow you want followed, or a specific tool you interact with. His example is Contentful: he taught one skill everything about migrations, publishing, and the API, and offloaded that behavior permanently. Now he never has to open a session with "hey, can you help me with Contentful?" and watch the agent go read the docs.

            Matt reframes it for anyone who has worked in ops: a skill is a runbook or a standard operating procedure, written down once and shared — except the reader is an agent instead of a coworker.

            When a skill earns its place

            Scott reaches for skills on repeat tasks: PR descriptions, deploy confidence checks, a UI review skill that drives Chrome, takes screenshots, and posts them to the GitHub PR.

            At the org level it goes much further. His company runs a skills marketplace per repo plus skills per project — multiple tiers of layers. Every unit and integration test is forced through a skill: a tag in AGENTS.md and the CLAUDE.md files invokes it whenever a test gets written, so the only way around it is writing the test by hand. The web platform team put real effort into making it robust, and Scott's read is that the forced path is a good thing because you get consistency out of it. Everything else is "choose your own adventure" — storybook stories, GraphQL, rebase-and-merge, title-tag migrations.

            Matt sits at the other end. He barely loads skills at all. His repetitive prompts are short enough to live in a clipboard manager, and pasting a snippet is faster than saving a skill and loading it into a session. His hot take: the value of a skill depends on the model and the harness — some combinations do the pre-programmed work just as well without it. He notes HubSpot had a skill-writing explosion a couple of months back that has since cooled off. Scott's counter is short: "that's not the experience I have" — his are battle-tested and very clear.

            The skills they actually use
            • Handoff / MyDocs — Dillon likes Matt Pocock's handoff skill for dumping summarized context to pass to a second agent, since telling one agent to do two things at once "gets everything really screwed up." He is not sure you even need a skill for it. Scott's version is MyDocs: write up everything we just said, drop it in a local folder, and categorize it as an RFC, a feature guide, or a plan.
            • Grilling with docs — Pocock's doc skill (the name keeps changing) asks Scott a million questions before writing anything high-level. He rates it highly.
            • Trio review — a code review skill from friend-of-the-pod Joe Boyle that spins up three sub-agents, each with a different personality, giving feedback at different levels. Dillon saves it for critical code; a simple feature does not need it.
            • ponytail — applies YAGNI to whatever you are building, looks for anything too complex, and suggests simplifications. Dillon says the recommendations are good.
            • anti-slop — Dillon Mulroy's project, a set of custom Oxlint plugins plus an agent skill. Matt kicked it off before bed and woke up to a -6,000 / +2,000 PR clearing useless comments and tests that assert a function returns true.
            • EOD / SOD — Dillon's end-of-day mind dump and start-of-day recap, which pulls from GitHub and Jira to connect the dots and doubles as a standup update.
            • Meeting notes — Matt's weekly scheduled task walks his work calendar and creates Notion notes per meeting, mapping email addresses to people. A skill beats a script here because it can handle a name it does not recognize.
            • PR descriptions, and the one prompt that fixes them

              Matt's whole PR-description prompt is: use ASD-STE100 Simplified Technical English. That is it. He finds the output slightly over-concise rather than verbose — the failure mode he sees from coworkers whose agents write PR descriptions that are "incredibly verbose and annoying to read." Dillon, who had never heard of the spec, said on air that he was about to run his tech spec through it. His company's PR plugin solves the same problem the long way: tell the agent not to detail every implementation choice, because "I used tailwind classes to move the div to the left" is not helpful to a reviewer who can see the diff.

              Beyond skills: harnesses and fleet-wide migrations

              Both companies are pushing past single skills into automated harnesses. Dillon's team has a workflow that cleans up a feature flag across many repos in one go — scan the repos, spin up tickets, execute them, open PRs, and pause for a human approval that unblocks the next stage. HubSpot has Mothership, built for scripted tasks like codemods across thousands of repos (they are, Matt says, "maybe infamously not a monorepo company"), and has recently added agentic missions that run a prompt across that same fleet. Matt flags a future episode: agents versus deterministic codemods, and where the line sits.

              Standup / Life Updates

              Light week. Matt's headphones kept dropping mid-record, so Dillon carried a stretch solo. Dillon fired off a live experiment — rewriting a tech spec in ASD-STE100 — and promised a verdict later. Scott's team shipped a natural-language end-to-end test platform built on aluminum, which he calls pretty cool. And the hosts agree there is enough left over for a follow-up episode on skills.

              Links
              • ASD Simplified Technical English — https://matthamlin.me/2026/august/simplified-technical-english
              • ponytail — https://github.com/DietrichGebert/ponytail
              • Dillon Mulroy's anti-slop skill — https://github.com/dmmulroy/anti-slop
              • Matt Pocock's skills — https://github.com/mattpocock/skills
              • 28 min
              • Tokenomics
                Summary

                The crew puts a name to a creeping anxiety: the cost of running AI models keeps climbing, and nobody can prove the value climbing with it. What follows is part economics lesson, part group therapy for engineers drowning in model choices.

                The Rug Pull Theory

                Scott lays out his prediction from the year-in-review episode: AI pricing was always going to soar. The $20/month plan was never meant to stay $20 — the playbook is to hype the tech, get everyone hooked, then raise prices once you're dependent. He draws the Uber parallel ("your ride's $6" turning into "$50 years later") and notes NVIDIA execs themselves saying models cost too much. Dillon's sharper framing: it's insane that this is a service where you pay for what you get regardless of outcome — the tokens are spent even when the AI goes off the rails.

                The Hidden 30% Tax

                Matt gets into the nitty-gritty: between 4.6 and 4.7, Anthropic changed the tokenizer, which effectively added a ~30% cost tax even though the model isn't dramatically better. This is why HubSpot has stuck with 4.6 rather than jumping to 4.7/4.8. Dillon's take: every new feature — like loops — is really just "a new way to burn tokens a little bit faster."

                Just Use Sonnet (and the Mixture-of-Models Future)

                HubSpot leadership made Sonnet the default, walking back the old habit of defaulting to Opus. Matt argues you can go surprisingly far on Sonnet. Looking ahead, he and Scott revisit the intelligent router / mixture-of-models vision (echoed on The Next Token Podcast), where queries get split to cheaper models that are "good enough." The blocker: there's no sane default for how to route, and every eval and benchmark is flawed.

                Guardrails, or the Lack of Them

                Contrasting notes on internal controls: HubSpot moved to the Anthropic enterprise plan and can hard-block models (e.g., a $0 budget on Fable requests so they auto-decline). Scott and Dillon's shops are still in an open trial period — the only "restriction" Dillon got was a Slack DM asking him to not use a pricey model as default. Dillon nails the meta-point: this is the epitome of the bikeshed — tabs vs. spaces, but now exploded into fifty variants. He just doesn't want to have to choose a model at all.

                Sharpening the Knife, Never Cutting the Steak

                The emotional core of the episode. Matt calls out the Twitter hype cycle — public figures claiming each new model "completely changed everything," two weeks apart — as people blabbering for views. The real problem: software quality hasn't meaningfully improved in ~two years, yet spend keeps rising. His metaphor lands: we're all at the whetstone sharpening the knife but never actually cutting the steak. On measuring value, Matt admits HubSpot has no real KPIs (just DORA/SPACE speed metrics), and Dillon describes a dashboard that literally divides tokens spent by PRs merged into an "efficiency rating" — which once crowned him top engineer for shipping 20 config PRs in a week.

                The Takeaway

                Matt's message of the day: be cognizant of how much time you spend whittling your workflow, and question whether you really need the newest new-fangled model. Scott still recommends experimenting, but in small enough chunks that it doesn't consume you. Dillon just wants to care less about which model he's using and get it out of his head entirely.

                Standup / Life Updates
                • Matt: Back from a summer break — got married, went to Greece, honeymoon, then returned to a funky, low-work week around July 4th. Next up: weekends of writing thank-you notes.
                • Dillon: Watching the World Cup (half of it looks like corruption), which reignited his urge to play soccer — subbed for a local league and lost 16-0 in 85° heat, tapping out every 5-10 minutes. Also burned out on a relentless demo cycle: vibe-code a demo, then spend the next week untangling the spaghetti-code knot for the executives.
                • Scott: Projects moving at work, a jam-packed two-day Seattle trip, camping in New Hampshire this weekend, and he hosted his first Fourth of July party with family — the start of a new tradition.
                • 35 min
                • Every E2E Is a Smoke Test: Page Object Models, Flaky Pipelines, and When Testing Is Actually Worth It
                  Summary
                  The High Cost of Getting Started

                  Scott has been writing a lot of automated tests at a bigger company than he's used to, mostly end-to-end and integration tests in Playwright (with past lives in Cypress and Selenium). His recurring theme: getting started takes three to four times the normal effort, especially on a product with heavy third-party permissions and multiple interacting applications where users may not have access to both. Playwright lowers the entry barrier, but rigorous permission-based flows are still intricate to set up.

                  Matt's counterpoint: the test harness matters more than the tool. Invest upfront in structure that makes flaky tests hard to write — e.g. preventing async operations from leaking between unit tests (a trick a former coworker used by tracking promises). Once the harness is solid, you can copy-paste-and-tweak tests quickly. He describes his own CLI's fixture-based end-to-end suite: run a command against a folder, assert the result against an expected schema.

                  Page Object Models: Abstraction or Indirection?

                  Scott's team enforces page object models (POMs, or "palms") — a class per page with private methods to locate elements and public methods to drive reusable actions. He's not sold: it adds a layer of indirection, and when two people build POMs in parallel they clash and drift into abstract methods that just re-wrap Playwright.

                  • Dillon had never heard of POMs and was Googling on the side — his instinct: start with reusable functions, then group them into a POM once they clearly belong to a feature.
                  • Matt frames the over-application as classic speculative generality / YAGNI — a good pattern spotted once and then mandated everywhere, even where a smoke test just needs to visit a page and check it's not a 400 or 500.
                  • The takeaway, delivered with a laugh: "We're supposed to disagree, but we agree." Login lives in a fixture (it spans pages); POMs make sense for genuinely repeated multi-step flows, not for every page by fiat.
                  • Smoke Tests First (and the Pushback)

                    Scott's crusade: smoke tests should gate code in the PR, not just run against staging after merge. He wrote ~200 smoke tests covering every page (including invalid routes) and hit friction from colleagues who argued "the end-to-end tests will catch it." His rebuttal: the e2e suite runs against staging, so a broken PR sits in master until an on-call engineer has to hunt it down and revert — killing a day's deploy. Smoke tests are cheap, fast, and fail loud before that happens.

                    The Definitional Debate

                    Dillon's framing lands cleanly: every end-to-end test is a smoke test, but a smoke test is the lightweight version — a quick "is the page rendering, no crashes" check. Bigger e2e tests cost more to run and, per Dillon, flakiness scales with scope: the eight-minute single mega-test that fails in a new place every time you fix it. Keep flows small, parallelize, and balance value against breakage.

                    The Test-Only Pathway Red Flag

                    Scott's team considered editing a GraphQL query to bypass the real flow just to make a permission-heavy test easier to write. Matt flags this hard: don't build implementation pathways that exist only for tests. You diverge the test path from the user path, then catch a sev later and wonder why the test didn't fire — because it was testing something else entirely. Related: drift between spec and implementation (real-time updating dropped for a refresh button mid-project) is what QA ends up flagging, and unit tests, not e2e, are usually the right tool for those small correctness nitpicks.

                    Hot Takes
                    • Dillon: Super valuable — "like having somebody click through your site while you sleep" — but a pain to get right, and they always get pushed to the end of a project when the end state is still moving.
                    • Scott: Valuable, but less is more. Test what's truly vital, co-locate tests so they actually get maintained, lean on smoke tests for fast high-level coverage, and reserve e2e for the most critical flows (login, purchases, final submit).
                    • Matt: You probably don't need end-to-end tests as early as you think — backfill that coverage with good metrics and real users until you actually do.
                    • Standup / Life Updates
                      • Scott: Launched the application at work — it went well — but immediately inherited backend ownership of permissioning: "I made one change to the shape and I own it for life." Phase two (better metrics and monitoring dashboards) got pushed down the pipe in favor of improving the automated tests first.
                      • Dillon: Mid-migration from Cloudflare Pages to Cloudflare Workers (not his main task, and he has to halt everyone's dev to do it). Just presented an hour-long tech plan for a bespoke e-commerce experience — landing, listing, product, checkout, cart — but with no design system it came out to 24 net-new components, a ~75-day estimate against a two-month ship date. Running a five-mile race at Harpoon Brewery in Boston tomorrow, gunning for sub-40 minutes.
                      • Matt: Team's in a "code red" — shipping fast under pressure, with open questions about whether they're building the right things and talking to their developer-customers enough. Spec'd out a way for humans and agents to give feedback via the CLI, including a post-session hook that has Claude review the transcript and report back on the tooling it used.
                      • 50 min
                      • The Parking Lot - 2
                        Summary
                        The "Everything App" Land Grab

                        The hosts riff on companies bolting adjacent products onto a core they're already good at. Google just announced a Whoop competitor (Dillon, who works at Whoop, notes the hardware looks better, the software maybe not, and that the device ships with an engraved jab at copycats — a callback to Amazon's short-lived Halo and the older Nike FuelBand). Whoop's own direction is a "health operating system" that links into clinicians and bloodwork — basically become MyChart — which drags HIPAA and product security into everything.

                        Meanwhile Uber is partnering with a hotel brand and Vrbo to sell stays, nudging into Airbnb's territory, while Airbnb adds car service. The group's read: these are mostly partnerships, not new builds — a cheap way to test a market.

                        Candy at the Checkout

                        Dillon's framing: companies treat lack of growth as failure, so they tack on extras "like candy at the checkout counter" to customers who never asked. That tips into enshittification — Scott contrasts annoying e-commerce upsells (button hidden where you don't expect it) with Airbnb doing it well by surfacing add-ons while you're already in a curious, planning mindset. Surprise stat: Uber ~$155B vs Airbnb ~$84B market cap, roughly 2x. Underlying tension: investors still want the 10x growth of five years ago, and it's genuinely harder to stay aligned and earn trust at scale.

                        "Because AI": The Cloudflare & Coinbase Layoffs

                        Both Cloudflare (~1,100, ~20%) and Coinbase (~2,000) announced layoffs framed around AI. Matt pushes back with an input → output → outcome framework (from a Twitter article): AI inflates input (more code) and output (more features), but neither guarantees outcome (more customers/revenue).

                        • Dillon: measuring AI success by PRs merged is measuring too early — "I could ship one PR a month but make the KPI skyrocket." Quality over quantity.
                        • Scott: cites a 2025 study suggesting people trust AI-built tools less, and that "AI" is becoming the new lazy excuse for layoffs that would've happened anyway.
                        • Matt: maybe layoffs are less about AI replacing work and more about removing red tape / stakeholders so things ship faster — which isn't obviously good, since friction sometimes improves ideas.
                        • Skepticism toward the "we'll replace all engineers" marketing pitch from a company that employs thousands of engineers, plus the Claude usage "rug pull" their friend Ian flagged and the inevitability of prices rising as demand grows.
                        • Context: most Cloudflare cuts were sales/marketing, with 600+ eng roles still open; severance reportedly runs through end of 2026 (~7.5 months); and this is the same company that once had 1M+ applicants and a sub-Ivy acceptance rate.
                        • RoboBun Out-Commits Its Creator

                          From Anthropic's Code with Claude conference (Dillon: five minutes was enough), the standout was Jared from Bun: their coding agent RoboBun has become the top committer to Bun in ~6 months, out-pacing Jared after four years of work. Scott presses on whether it's real work or minor package bumps — Matt insists it merges commits, opens PRs, and triages issues end-to-end (reproduce the bug, open a fix), in Zig no less. Best moment: CodeRabbit (an AI reviewer) flagged an edge case on a RoboBun PR, and RoboBun argued back that it didn't apply and closed the comment on its own PR. Also noted: Jared's 500+ comment Hacker News thread about a branch using Claude Code to migrate Bun's Zig codebase to Rust. Dillon's verdict: a new way Twitter tech bros flex their token spend.

                          Side Quest: Pi, the "Vim of Agent Harnesses"

                          Matt is surprised Scott isn't into Pi (pi.dev — or as Matt prefers to share it, shittycodingagent.ai). His pitch: a deliberately thin alternative to the Claude Code / Codex / OpenCode CLIs — minimal system prompt, basically two built-in tools (run bash, read a file) — that you customize to your own workflow. Scott finds it unnecessary for his setup; Dillon lands the analogy: it's Arch Linux, an "operating system for running agents" that starts with nothing.

                          Standup / Life Updates

                          The pod quietly passed its one-year anniversary about two months ago and forgot to mention it (~2,000 minutes of yapping logged). Jokes about a five-year mark, a 10-year live reunion in front of an audience of exactly three — their wives — and Seattle in two weeks, where they might record live.

                          49 min
                        • The Agents Aren’t The Only Ones Overworked
                          Summary
                          The AI Overwork Paradox

                          The article's core thesis: AI makes it easier to do more and harder to stop. Dillon frames the mechanism — agents get you 90% of the way, but that last 10% (the review) is where all the time goes, and the outputs pile up faster than anyone can clear them.

                          "It's cheap to get something into a PR"

                          Pre-LLM, you'd note something as clean this up later and ticket it. Now an agent spins up a PR on the spot. Dillon's open-PR count becomes the episode's running gag — 30 → 40 → 50 PRs, "a pile of dirty laundry I need to clean up." The group debates whether shifting context left into draft PRs is actually fine, or just deferred debt.

                          The compression problem

                          Matt's key observation: agents sped up the development part of the lifecycle, but planning and review didn't speed up — so they become the bottleneck. He argues his own burnout comes less from overwork and more from PRs sitting unreviewed while everything else stays just as slow.

                          Working in a silo

                          What used to be a conversation with a teammate — bouncing ideas, sanity-checking a plan — now happens alone with an agent. Matt: you become "a team of multiple teams of one," which may make the work feel less meaningful (and a little like "AI psychosis").

                          More productivity ≠ more reward

                          You're rewarded with more work, not more pay. The group lands on a rough 70/30 split (let the agent do ~70%, but look at 100% of the code), and Scott's bug-fixing tip: write the failing test first, then let AI fix it. Counterpoint from a Whoop director of engineering — the aspirational endgame is prompt → outcome → KPI check → ship with no human review. Everyone agrees: crazy, and not where we are yet.

                          The three-tier mandate

                          Matt's company (HubSpot) defines AI adoption in tiers: beginner (legacy workflow, tab-autocomplete, 90%+ code by hand), intermediate ("single agent operator"), and advanced ("tech lead of agents" — managing a swarm). Everyone's expected to hit intermediate by end of Q2, but there's no rubric and no guidance on keeping quality high. The hosts' worry: you're being graded on process, not results — "I want to make the button blue, but now I'm going to use 10 agents."

                          Throwing money on a fire

                          Token spend is its own theme: Matt cites reports of Uber burning its entire 2026 AI budget in Q1. Scott connects it to feature bloat — churning out a six-image carousel nobody uses and burning a million dollars in tokens to do it. Shareholders get faster output and don't care about process; the people delivering get squeezed.

                          Spill the SWE(et) Tea: TanStack Start's "RSC" Controversy

                          Matt launches a new drama segment ("I monitor the situation"). This week's tea: TanStack Start shipped what it branded React Server Components support — and the ecosystem pushed back that it doesn't follow the actual RSC spec.

                          • A truly spec-compliant component should drop into Next.js, Waku, or Matt's own in-progress framework and just work — but it won't drop cleanly into TanStack Start.
                          • The "spec" here means the Flight wire format plus the use server / use client directives.
                          • TanStack seemingly assumed the spec forces server-first defaulting (à la Next.js). It doesn't — that's a Next convention React recommends to avoid client/server waterfalls, not a requirement. TanStack instead leans on a homegrown createServerFunction RPC approach (runtime + compile-time macro).
                          • Matt's read: it introduces another fork in the ecosystem — reminiscent of the CommonJS/ESM schism — and given TanStack's reach (React Query, etc.), incompatibility will cause real fallout. He thinks they should stop calling it "RSC."
                          • But he doesn't fully fault TanStack: the React team bungled the RSC rollout — no clear public spec, "come talk to us in private," docs that say don't build a framework around it. That only rewards teams with a direct line (Next.js, who hired/worked alongside the React team).
                          • Standup / Show Notes
                            • New segment alert: "Spill the SWE(et) Tea" debuts — Matt's drama-watch corner.
                            • Running gag: Dillon's open-PR count climbs live on air, 30 → 40 → 50.
                            • Teased for next time: the Vercel drama (an employee reportedly storing passwords in plain text; Dillon's manager calling an "emergency migration off Vercel to Cloudflare") and the long-awaited Remix 3 — "we've been waiting six months."
                            • Bragging rights: apparently a top-7 software engineering podcast per "some SEO click-farm website." Goal: top 5. Reviews appreciated — share with a friend, an overworked coworker, or your agent.
                            • 50 min
                            • Plan Mode Sucks
                              Episode Summary:

                              Matt revisits a hot take from a year ago that he believes more strongly now: you shouldn't be using plan mode in your AI coding agents. The conversation lands on a more nuanced position — planning still matters, plan mode just isn't the right tool for it anymore.

                              The Case Against Plan Mode

                              Matt argues that plan mode in Claude Code and Codex has degraded over the past month or so. Where it used to ask a ton of clarifying questions, it now spins for 30 minutes and hands back a full markdown plan without ever pinging you for context. The on-rails experience has stopped doing the part that made it valuable.

                              Scott pushes back gently: plan mode still has a place, especially for big architectural changes where one-shotting will leave you with a context provider sprinkled across multiple files (his real example from the previous Friday). But he agrees the out-of-the-box version isn't the only way to plan, and often isn't the best one.

                              Planning ≠ Plan Mode

                              The real takeaway: planning the activity is still incredibly valuable. Plan mode the feature is just one — increasingly mediocre — implementation of it. The crew walks through the alternatives they're actually reaching for:

                              The Grill Me Skill

                              Matt surfaces the grill-me skill Matt Pocock shared (and Dillon dropped in the Discord): a one-line skill that tells the agent to keep asking questions until it actually understands what you're trying to build. Strong fit for feature work where you don't yet know the shape of the problem space.

                              POC-First Development

                              Dillon describes his current workflow on a big work project: POC the entire user flow first, then POC each piece of the flow before building anything for real. He's been using Superpowers (the most popular Claude Code skill) and its brainstorming sub-skill, which builds mock interfaces so you can compare options. He'd rather over-plan than have to tell a coworker "Claude thought it was a good idea" when they ask why something works the way it does.

                              The Plan / Build Spectrum

                              Matt frames plan mode and build mode as two ends of a spectrum where you actually want to land somewhere in the middle — exploring three or four ideas, spinning off agents to POC each, bringing findings back, iterating. He hasn't found a skill that nails this loop yet, and invites listeners with a working setup to share it in the Discord.

                              Plan Mode Is Still Great for Newcomers

                              Dillon's softer take: plan mode is genuinely useful when you're new to agentic tooling. It gives you a clear default workflow before you know what you actually need. You grow out of it as you discover the specific checks — codebase exploration, TDD, edge-case enumeration — you want before any code gets written.

                              Ask for Sources

                              Dillon's quick aside: when you're using the agent to learn something, ask it for sources. It'll mash concepts together, and being able to cross-check against the actual docs catches the seams.

                              Standup / Life Updates
                              • Dillon spent the week in northwest Arkansas (Fayetteville and Bentonville) for his brother's birthday and a baby shower for his niece, due in June. Bentonville was a surprise — Walmart HQ has turned the area into a brand-new, Apple-campus-tier hub since the company required vendors to relocate post-COVID. Cost of living roughly half of Boston, Onyx Coffee on the ground. He looked at the Walmart careers page.
                              • Scott completed his eighth powerlifting meet in eight years (with a two-year, two-month injury gap): 597.5 kg total at 82.5 kg bodyweight — 200 squat, 140 bench, 257.5 deadlift. That's a 1,317 lb total. He's 85 kg from the national qualifying total, or he turns 40 first and qualifies on the masters total he's already cleared. Also teasing some open source work he's "boiling down to a usable small chunk" — ETA four or five years per Scott; "what model are you using?" per Dillon.
                              • Matt has been ping-ponging across his personal tooling: gave up vibe-coding his own note-taking app, gave Notion another try, set up scheduled Claude Code tasks to summarize recent notes, and switched from Arc to Chrome specifically for the Claude Chrome extension and Cowork. Recording from a HubSpot meeting room during an onsite, with bachelor party planning in May wrapping up. And in the loudest beat of the segment: he had the agent build a library blending CRDTs, offline-first, RSC, and server actions — pulling from auto-merge, YJS, and Tanstack Query — and it dutifully reinvented Tanstack Query.
                              • 35 min

                              About The Bikeshed Pod

                              From the publisher's feed

                              The Bikeshed Pod is a weekly show where developers dive deep into the small but important details of software development that we all love to debate.