The Winchester Mystery House Problem in AI Development
Speakers

Drew Breunig explores the intersection of cultural anthropology, computer science, and media.

At the moment Demetrios is immersing himself in Machine Learning by interviewing experts from around the world in the weekly MLOps.community meetups. Demetrios is constantly learning and engaging in new activities to get uncomfortable and learn from his mistakes. He tries to bring creativity into every aspect of his life, whether that be analyzing the best paths forward, overcoming obstacles, or building lego houses with his daughter.
SUMMARY
AI models are starting to act like appliances, locked into one narrow way of working, instead of the flexible infrastructure they used to be. Drew Breunig, an AI and data strategist working with the Overture Maps Foundation, joins us to explain why, and what it means for anyone building something that doesn't look like Claude Code.
Drew walks through his "Winchester Mystery House" idea: what happens once code gets so cheap to write that the only real bottleneck left is feedback. From there we dig into DSPy: signatures, the GEPA optimizer, and the brand-new Flex optimizer, which rewrites your code instead of just your prompt, complete with a real before-and-after on cost and accuracy. We also get into why so many AI-built apps and websites end up looking identical, the actual difference between an agent and a workflow, what Drew learned a year after shipping a code library with no code in it, and why he thinks the most valuable thing you can do right now is close the laptop and go talk to people.
TRANSCRIPT
Drew Breunig: [00:00:00] Sometimes it's not that big of a d- i- issue, but if your API calls feel or look similar to Claude Code, Claude Code will try to call Claude Code even though Claude Code's not there.
Demetrios: Let's pull this thread a little bit more on when you need your own harness versus when you can just pull off the shelf.
Drew Breunig: That's... It's, it's a great, a g- a g- So I think it's a journey and not like... I don't think there's a good answer yet. Yeah. Do I, do I have to threaten the, the model's mother or whatever? Like, you don't know what... All of these are weird tricks. Um, my favorite weird trick is someone was running JEPA against, um, their training, uh, uh, fitting their tasks to, to GPT OSS20B, and for some reason, every time they did it, the optimal prompt had the phrase, "Good luck," at the end.
Drew Breunig: We don't know why that worked, but it did[00:01:00]
Demetrios: What's probably the biggest AI news that has happened in the last week?
Drew Breunig: I think there's a couple really big things that are bubbling because there's just so much news. Um, so let's, let's go down them in order. The first is, I think, um, I think we're continuing to see a little bit of What I call, like, appliancing with the labs.
Drew Breunig: And I haven't written this up, but I think it was something I was actually talking about yesterday with Tim O'Reilly, which is- Hmm.
Demetrios: Little name drop there.
Drew Breunig: I know. It's, like, one of the only times I get to do stuff like that. Um, I was talking with him on his podcast, and I was talking about how Anthropic and OpenAI [00:02:00] are trading diversity in their models- Mm-hmm
Drew Breunig: for reliability.
Demetrios: Yeah. Oh.
Drew Breunig: And one of the ways they're doing that is that they're training the, their harnesses into the model. So I have a blog post and a study that I did, uh, with my friend Srihari, which you can find on my website, dbrunig, D-B-R-U-N-I-G, .com, and it's about system prompts. And we looked at system prompts of coding agents over time, and we looked at how they changed as models got released.
Drew Breunig: And they generally follow a cycle, which is a new model is released, and it gets a new system prompt, which looks similar to the system prompt but is generally shorter than it was previously. And the reason it's shorter is because it took all of the kind of errors and bugs that it spotted with the last model, and it trained them in during [00:03:00] post-training into the model.
Drew Breunig: So now you have this new model with a new system prompt, and then it starts to grow that system prompt because as it gets used, the product teams spot bad behavior. They spot that- The rough edges ... hey, it's not, it might, it might not be good at this, might not be good at that. It may be a little too proactive over here.
Drew Breunig: It may quote things too much over here. Let's add some- Or it just got
Demetrios: jailbroken on Reddit over here.
Drew Breunig: Yeah, whatever it may be. Like, you, you end up adding in these hotfixes to the prompt. Yeah. And as you add in those hotfixes to the prompt, that's, that's kind of how their development cycle goes, is the system prompt grows, and then when it c- while in the background, while they're training, and this is a little bit of, um, uh, uh, guessing, but we see the evidence that supports it, um, they train those rules into the model itself.
Drew Breunig: And the reason that you wanna train them in is 'cause it just makes it more reliable. Um- Hmm ... because you may have to repeat yourself 10 times in the system prompt, and you see repetition in all [00:04:00] the system prompts because these teams are fighting the weights. They're fighting the behaviors that have been trained into these models.
Drew Breunig: And so the system prompt grows, and then when the next one gets released, it's a lot shorter because now all of the interface, the API design of that harness, has been trained into that model. Now, on paper, if you're the perspective of the product team and your goal is to make Claude Code or Codex more efficient, more reliable, and more useful for your customers, this is great.
Drew Breunig: But it's a problem for the people who are building things on top of these models that don't look like Claude Code or Codex. Sometimes it's not that big of a d- i-issue, but if your API calls feel or look similar to Claude Code, Claude Code will try to call Claude Code even though Claude Code's not there.
Drew Breunig: Yeah. Your instructions, you'll have to fight that tendency. Mario Zeichner writes about [00:05:00] this a lot with, um, trying to develop Pi and make it work with, with Fable and make it work with Opus, and he ends up having to fight the models. And one of the things that I think this is interesting is this is the model growing from just kind of base level infrastructure to becoming the application itself.
Drew Breunig: You're basically training the application into the harness. Now, Tim, who has a lot more... has seen it all way more than I have, compared this. He said this feels like what happened during the web server era with Apache, which is there was a bunch of different competing web servers and they tried to grow into these really heavy vertical stacks.
Drew Breunig: And Apache just said, "No, I'm just gonna be the best web server I can be." Mm-hmm. "I'm not gonna try to grow into this big, heavy application stack. I wanna be just the best web server I can be." And it won because of that. It was just infrastructure. It allowed for freedom of building for people to imagine new things and build it on top of it.
Drew Breunig: And [00:06:00] this is something that I think is starting to bubble up, is these models are becoming more, increasingly more opinionated and tuned for reliability in agentic tasks and coding And that I think makes them potentially worse at other things, which is it makes them worse as infrastructure for building programs that don't look like the lab's harness.
Demetrios: Hmm.
Drew Breunig: I also think it makes them worse writers or other qualitative- Yeah ... tasks. Sonnet 3.5- Well, we've seen
Demetrios: that.
Drew Breunig: Yeah. Oh my God ... wrote way better than Fable. It's the biggest model in the world. I, and, and- Might have been
Demetrios: peak.
Drew Breunig: Yeah. And, and, and GPT-4o wrote better than GPT-5 five. Yeah. And so I, I think there's this little, there's this tension bubbling where, um, all the money is in coding right now, and so everybody's racing to that.
Drew Breunig: And the question [00:07:00] is, is, is that going to be compatible with the world-changing promise of a diverse big bunch of applications? Mm-hmm. And, um, so I don't think there's any one news about this, but I do think it has a lot of knock-on effects. Um, I think there, you see this story everywhere. Um, this week I've been doing a lot of front-end design work, and I was using Kimi for that, 'cause I just find Kimi has a little bit...
Drew Breunig: It's, it's a little, it doesn't fight you as much on the front end. It's not as opinionated- Mm ... on the front end. Mm-hmm. Because again, it hasn't, it hasn't been trained to follow this kind of reliable pattern, um, that Opus and Fable have. Um, and it also just talks better. It's not as over-trained it feels like.
Drew Breunig: And, and the same thing kind of goes for GLM. GLM is my, my daily driver in, in my, my agent that is my personal agent. And part of the reason for it is, um, because if you're doing the work of adding in all the context, it actually does as good or sometimes better job 'cause it [00:08:00] doesn't fight you as much. So I, I see this theme bubbling under.
Drew Breunig: I see it as a theme that relates to the open versus closed models. I see it relate to, um, the importance of harnesses, um, and when you need your own harness versus when you don't. Uh, the, the other big news this week, which I think is a great discussion point, uh, for everyone is, is the Steve Yegge post, um, yesterday about his new, um, harnesses building, uh, for his MMO, how Gastown was only for Gastown, now he's got something else.
Drew Breunig: And he's talking about how every application needs its own harness. Um, and so I start to wonder if, if the, the big labs are making models that are too much of appliances and not enough infrastructure. Mm. And, uh, that's, that's something I'm thinking about a lot, and I think there's a bunch of random news articles that touch on that.
Demetrios: Let's pull this thread a little bit more on when you need your own harness versus when you can just pull off the shelf.
Drew Breunig: That's... [00:09:00] So it's a great, a great, a great... So I think it's a journey and not like- I don't think there's a good answer yet. Like, Steve is at the forefront and he's, he's operating out in one of many possible futures.
Drew Breunig: And he's operating out in one of many possible futures that may become true, but it may not become true even for you, um, or it may not. Um, but he's spending almost $100,000 on tokens every month to build his MMO that, you know, he's got users, but he's the chief user of it. Um, and so this kind of relates to the piece I wrote.
Drew Breunig: The fear of, of, of always worrying about your own harness is, um W- what I call Winchester mystery housing. Um, I wrote a blog post a while ago that, that kind of circulated around, which is, I called it, um, "The Cathedral, the Bazaar, and the Winchester Mystery House." And the [00:10:00] premise, the, the classic Eric S.
Drew Breunig: Raymond piece about, um, the power of open source, the cathedral and the bazaar. And part of w- why open source emerged the way it did and why we were able to have a bazaar is, is because we suddenly had the internet, which allowed for coordination and feedback from massive groups of people. And that allowed us to build better software faster than a cathedral who, who, who had its kind of layers of bureaucracy that kept it from hearing what was hap- going on at the streets.
Drew Breunig: And so a lot of people kind of think "Cathedral & the Bazaar" is all about open source, but really it's about what enabled open source, which was more feedback and faster feedback- Hmm ... um, and manageable feedback. And now we kind of have the opposite problem, which is code is kind of free and the pace that you can develop it at is so fast, the [00:11:00] only feedback source that you have that keeps up with the speed or rate you're able to ship code is your own.
Drew Breunig: And so instead of a bazaar, you end up building a Winchester Mystery House, which if you're unfamiliar, the Winchester Mystery House is a tourist destination in San Jose that was a project, a hobby of the, uh, widow of the inventor of the Winchester rifle, the Old West rifle. So she had- Hmm ... a ton of money.
Drew Breunig: She wanted to be an architect, and so she just had no constraints. She could do whatever random projects she wanted on her house. She was hiring workers all the time. The work never stopped. And so the house is super weird and crazy, but it was exactly what she wanted. Uh-huh. But, and it was cool, but it was just this weird house.
Drew Breunig: And I see a lot of developers, Winchester mystery housing. I'm guilty of it myself, which is you h- you're just like, "Well, what if we did that? Boom, it's done. Okay, well, I can keep going." And so you end up building something that is really specifically [00:12:00] suited for yourself.
Demetrios: Well, so- When you start- Just to pause you there before we even- Yeah
Demetrios: hit on the harness piece. I've been thinking a lot about that and how we can make that native to everyone that we serve our applications to, and if there is a potential future where I have in my application some kind of a button where it's just like, you know, make this mine, and then boom- Yeah ... I can take whatever you're serving up to me as, "Hey, here is XYZ application"- But I get to make it mine even though it's- Yeah
Demetrios: it's your application you're serving to me, but it's so much easier for me to customize too, potentially, right? So- Yeah ... I don't know how that looks as a button or just as, like, me talking to it or generative UI in quotations, which I always find, uh, funny. But there's a future where we're all seeing a different version of the same application, right?
Drew Breunig: Yeah. And, and [00:13:00] I think, I think there's... Like, we have so much UX work to do, like, so much UX exploration to do. We have locked ourselves into this chat and voice path because it allows for the, the highest volume of detail among the people who know what they wanna ask for.
Demetrios: Yeah.
Drew Breunig: But a lot of people don't know what they wanna ask for.
Drew Breunig: Um, and, uh, you know, I remember writing this that, you know, the chat interface is a blank page problem. And I think that's- Yeah ... one of the reasons that AI doesn't have as much adoption as a lot of people think. It has tons of adoption, but there's still a lot of people who just are persistently will never touch it, and it's 'cause they don't know how to ask what they wanna ask for.
Drew Breunig: And I think we need to inno- in- innovate and figure out the UX beyond text and chat. So, like, does it mean spinning up emergent UIs that start from scratch? Probably not. But if I'm using Google Maps and I'm like, "Man, this one part [00:14:00] here is annoying and just doesn't work with my brain," I should be able to change that.
Drew Breunig: So I, I, I do think that's a vein that we haven't even really started to l- reconnoiter.
Demetrios: And the... Where I always get caught up as I'm thinking through this is then you're putting this very difficult friction on the user to have to tell you what they want. And we know- Yes ... from the past, like, the lore is that the user doesn't know what they want.
Demetrios: You gotta serve it up to them, and then they get magically delighted, and then they go and tell their friends, right? And so maybe there is some kind of a go-between where I don't have to say, like, "Oh, I'm gonna customize this app to make it mine," but I also am getting recommended, or I'm getting a different type of app because you already know enough about me through the traditional ML world or through whatever, like the AI world, and you can recommend me.
Demetrios: Or not, it's not even a recommender. That's [00:15:00] the weird part. It's just you're giving me something that you think I'm going to like more because of the way that I am or what you know about me. And- Mm ... so I know this is going way off from the conversation of the harness, when to build your own harness versus when to just use what they got.
Demetrios: But it is nice to pontificate on this type of thing because I have been thinking about it. Why is it that We have this traditional world where you're sitting with another person who's creating their app and you say, "You know what'd be cool? If you did this." But that would be cool for me. That wouldn't be cool for everybody.
Drew Breunig: So I'm gonna wrap this up into, into two themes that tie this all back. Um, the first is, is your point about the blank page problem. One of my favorite examples of this is this comes back to the diversity problem again and the problem that, that, that the labs have. Um-
Demetrios: Mm-hmm ...
Drew Breunig: which is, uh, when I wrote that...
Drew Breunig: I wrote [00:16:00] this blog post when, when OpenAI first launched their app store, the ChatGPT store, and I wrote that this was a response to the blank page problem, which is they had to address the audience that didn't know what to type in the box.
Demetrios: Yeah.
Drew Breunig: And when I wrote about that, um, someone reached out to me from, uh, one of the big image generator companies like Stable Diffusion and stuff like that, and they're like, "You have this 100% right.
Drew Breunig: I do consumer research for these people, and one of the things we find is we have a box that you can type anything your heart desires and get an image of it." Mm-hmm. And nine times out of 10, the user will just write a cat. Like the most boring thing. Like they just don't know how to ask. They just like do the most basic thing.
Drew Breunig: And it's so frustrating to Stable Diffusion or whomever who is trying to encourage and empower people is they don't even know how to ask, and so now it becomes a new problem you have to fix. It's not about can the model generate [00:17:00] more realistic or more, um, or images that follow instructions. The models have to account for the fact that the users have bad prompts.
Demetrios: Mm-hmm.
Drew Breunig: Now, how do you address that? I think this is the biggest challenge and one of the main reasons that the models are less diverse these days is because if you're OpenAI, to get someone... So to, to help people fix their bad prompts when it comes to image generation, what do you do? Well, what you do is you make the default.
Drew Breunig: You make- Amazing ... what it does- Yeah ... when you don't give it information A lot more instructed. You make the default better. And what's the result of this? The result of this is you are in Greece right now, you can go walk out your door, and I'm in Alameda, California, and I can go walk out my door, and we can go see the exact same style of flyer in front of every cafe that is the ChatGPT poster.
Drew Breunig: No matter where you are in the world, [00:18:00] it looks the same. And the reason it looks the same is because the mom-and-pop people who are running these businesses just type in, "Hey, make me a menu. Here's my name and, and make it have cats." And then after that, it looks the same. And that's why all our websites look the same, and that's why all our images look the same.
Drew Breunig: And- All the
Demetrios: presentations, the slides
Drew Breunig: Totally. Now, now transfer this back to coding agents. Coding agents, you don't... You may think, "Oh, but that's not an issue. Coding agents are, are wielded by engineers who know exactly what to ask for." And the reality is- No ... they're not. Um- No. Claude Code needs to work for me or you when we're putting in tons of context and being precise.
Drew Breunig: But I have a really good friend next door who's not an engineer, and he wants to build a web app that finds all the summer camps for his kids. And so he says, "Write me a web app with summer camps for kids. Add login- No mistakes ... go find more camps." Yeah. And it has to look nice. And so it uses the inter font, it probably has some purple, probably has some gradients.
Drew Breunig: Mm-hmm. It has [00:19:00] big numbers, short punchy sentences. Everything feels the same. And why does everything feel the same? Is because to grow your audience, you have to improve the default so that the people who don't know how to ask still get good results. And unfortunately- Mm-hmm ... that affects everyone, not just the people with the bad prompts.
Drew Breunig: Now, let's tie that back to harnesses.
Demetrios: Yeah.
Drew Breunig: The UX pattern you just described, which is, "Hey, I've got this app. Let me change it slightly." That is how Py works. So a good example is in Py, there is no backslash command for quit or forward slash. Like there's no quit. It uses exit. I don't know why Mario chose that, but it uses exit instead of quit.
Drew Breunig: And people will constantly file a ticket or create an issue or say, "Hey, I want quit." And he's just like, "You can just ask Py to do that, and it will do it for you."
Demetrios: Yeah. Yeah.
Drew Breunig: And that's why [00:20:00] Py is great, is because you can ask it to just, "Hey, tweak it." Um, uh, uh, one of my f- uh, one of the companies I really love, exe.dev, um, their CEO David just wrote an amazing blog post that I recommend to everyone listening called, um, Dev Tools Must Be Open Source.
Drew Breunig: And it's touching on exactly this thing, which is personalized software, the way it works is by making them open source. Suddenly you can change it. Now, let's tie this back to diversity and close this up. Yes. If your Pi harness is built for your application and it's different than mine, and my Pi harness is built for my application, and my neighbor's Pi harness is built for his application, suddenly all our harnesses are different.
Drew Breunig: How do you train that back into the model? How do you achieve the reliability that Anthropic and OpenAI are seeking? You kinda can't. Their strategy falls apart if [00:21:00] they don't own that. They can't become appliances. If we want to have a diverse world of harnesses, it probably is gonna require more malleable models that look like infrastructure and not like appliances.
Demetrios: Mm. Dude, you landed the plane. Bravo.
Drew Breunig: I can't believe I did that. It was scary for a bit there.
Demetrios: Trust me, I was there with you 'cause I was the one who took us way off course, but you somehow brought us back, and I appreciate it.
Drew Breunig: Yeah, I mean, as you said, like, what's the news? It's like I see this pattern everywhere.
Drew Breunig: Yeah. It's, it's, it's, it's may not have a news item now, but it's lurking under the, the, the, the, the tension between diversity and reliability is in the application, the, the applica- Uh, we need to verb that. Applic- Yeah ... applicationation. Whatever. Uh, uh- Yes. Yeah.
Demetrios: Applicationation.
Drew Breunig: Or applianceification. Like we need to- Yeah
Drew Breunig: something. Uh, [00:22:00] but it's infrastructure over, uh, appliances, I think is the theme.
Demetrios: Well, so walk me through what you're running right now. You mentioned that GLM is your daily driver, and you've got Pi as a harness. Or are you constantly sampling all of these different harnesses, and then have you played around with these meta harnesses?
Demetrios: So- Sure, yeah ... you've got the... And I know that before we hit record, you also mentioned that you've been playing a lot with DS Pi. Yeah. Like, give me the whole rundown, the rig rundown, and let's nerd out on that.
Drew Breunig: Sure. Let's, let's do the rig first, and then I'll talk about DS Pi 'cause it's a little separate, but, um, I think it's, it ties in.
Drew Breunig: Um, but, uh, so this is a Cambrian era, and, like, you're kind of always in flux, and I think everyone who is both curious about these and wants to get good at them has to balance the tension from, "I wanna go explore every new thing that comes out," and, "I need to get work done." [00:23:00] And everyone has two jobs. They have their day job, and then they have their, "I wanna, I wanna try this new thing that could make me way better."
Drew Breunig: Um- I think it's really important to read others and define the line of like, "Oh, I see this person who I trust doing this. I'm not gonna do it. I'll let them figure it out, and then I'll learn from them." Um, I think it makes going to conferences- Yes ... where we can talk about these things really important. Um- Mm.
Drew Breunig: You know, when I was at your conference, um, I love doing that because I get to talk to people who are, um... I think, uh, Kay at Shopify said it to me. He's like, "It's crazy. We all keep coming up with the same ideas." And I'm like, "Yeah, we're poking the same model at our desks by ourselves." Um, and so- And
Demetrios: then we come to a conference and we go, "Have you figured that out?"
Demetrios: And you go, "No, I saw it's doing that too." That's so wild.
Drew Breunig: It's great. I love it. And it's so important- Yeah ... to be social around this because what it does is it actually saves you time. It lets- Mm-hmm ... you kind of almost divvy up the work. Um, group chats, [00:24:00] find a good group chat of people experimenting with this.
Drew Breunig: Um- Amen. But yeah, I would say my, my loadout is in flux, but I think it's, um, in a good stable state right now, which is my default is Claude Code, dangerously skip permissions in the terminal, um, and I use, uh, superpowers pretty heavily, which- Yeah ... adds a lot of the structure. I like superpowers a lot. Um, and I, um, am a CEO, which means that I'm not always, uh, coding is, should be less of my time.
Drew Breunig: Um, and so superhe- powers allows me to structure that and kind of keep it off to the side and running. Um, and I can have that running while I then do all the, the, the laundry work that is required- Yeah ... from a CEO. Um- I really like, um, Kimi and GLM for front-end work, and the reason I like them is 'cause they're faster.
Drew Breunig: [00:25:00] Um, I find front-end work requires speed. You wanna be able to like, "Hey, tweak this there, tweak that there, tweak this there." Um, there's a, um, I forget who trained the model, but there's a GLM variant, uh, with vision-
Demetrios: For front-end. Oh, with
Drew Breunig: vision ... oh, they added vision. So it's, uh, um, and-
Demetrios: Damn ...
Drew Breunig: I've- That's cool
Drew Breunig: it's, yeah, it's really cool. It's a custom model. Someone added 5.2 with vision, um, and it is wild and super cool. Um, it is, um, uh, just a weird amalgam and I have a friend who hosts it occasionally and I'll just plug into that and just do lots of iteration. Um, uh, so anytime I'm using models like that, it's in Py.
Drew Breunig: Um- You mentioned your friend is hosting them. Are you renting GPUs sometimes too? Not that much. I, again, that's a rabbit hole I try to prevent myself from going down. I'm just using- Yeah. That's what I'm
Demetrios: always afraid of ...
Drew Breunig: I'm using Claude and I'm using [00:26:00] Fireworks serverless. Um, the other reason I like Fireworks is they have good data, um, agreements.
Drew Breunig: They aren't, they aren't training off my data, they aren't retaining my data, um, and so I can make those decisions. So like when K3 came out, I've been a Kimi fanboy since K2. It's one of my favorite system papers ever, is K2. Um, and, uh, but I had to wait for it to, to roll out to Fireworks, um- Yeah ... because of, of hosting and, and data governance.
Drew Breunig: Um, those are my two like coding agents. The other one that I really like is, um, I have a Raspberry Pi that's running Hermes, but based on how I use it, it could've been, uh, NanoClaw. Like it's not, like I basically just connect it to Slack and then I connect it to a bunch of accounts and I'm constantly building and replacing the skills with that.
Drew Breunig: And that has a bunch of essentially cron jobs, so it [00:27:00] does email triage, it does... I will task it with longer running research which may inform development elsewhere. Um, I have it gathering, you know, sentiment and customer research, um, and other random things. And I interface with that just through Slack.
Drew Breunig: It's just kind of an async agent that has access to context that I can pull in, and I spend a lot of time kind of tweaking how it acquires skills because that's really important. And that runs GLM. Why do you like to- GLM's good enough.
Demetrios: So why is that isolated over there with a Raspberry Pi and not just another agent on your own computer?
Drew Breunig: Uh, because one, it's kind of a, a sandbox. I had the Raspberry Pi laying around. Um, two, I have, um, multiple personal Rails apps that I host on that. Um, all my task management is in a custom app. All of my, um, [00:28:00] recipes, I, I cook a lot, um, are in a- Oh, nice ... custom app. And so having access to those things locally connected via Tailscale and then connected to my Slack that I can just hit on the go, um, is super helpful.
Drew Breunig: So I, I like that. '
Demetrios: Cause a lot of times I'm thinking about this and I don't know when to properly, like, just distinguish, hey, should this be its own thing separate here, or can I theoretically run it all inside of what I'm already using my Cloud Code with, uh, or my-
Drew Breunig: You d- you totally could. And, and this is actually, you just...
Drew Breunig: This is the perfect transition to, to DS Pi. Um- Uh, one of the things that I think is really important for us to recognize is the difference between an agent and a workflow.
Demetrios: Mm-hmm.
Drew Breunig: And an agent is Claude Code. An [00:29:00] agent is ChatGPT. An agent is, you know, Hermes most of the time or OpenClaw. One of the things during the OpenClaw era, I'll, I'll give you this example 'cause I think it's the best one, is, um, during the OpenClaw like Cambrian era where everyone was installing it, my favorite question to ask is I would meet people and I would say, "What are you using your claw for?"
Drew Breunig: Yes. "What, what's your, what's your favorite task?" I read that so many. I love that question. What's the use case? Yeah. And some of them were like some people pushed them really far and did really cool things. Um, and some people, you know, did other things. Uh, like but most of the tasks and were, were... And, and by the way, this was agent tasks, which is one of the reasons a lot of the OpenClaw enthusiasm seemed to die down is after cl- Anthropic kicked everybody off their subscription plans- Yes
Drew Breunig: it, it took the wind out of everything. Like only the people who were really committed, like connected, and part of the reason was is 'cause they were all using the biggest model. They were all using Opus 4.5 at the [00:30:00] time to drive it. It
Demetrios: was expensive.
Drew Breunig: Yeah.
Demetrios: Yeah.
Drew Breunig: And, and I, I... One of the things that I think is funny is, is when you're doing a, a task that you've never done before, it's great to have Opus there.
Drew Breunig: But if you set it up like a cron job and you keep doing it over and over and over again, you're basically, like to use a metaphor, you're hiring like a high, a McKinsey consultant that charges $2,000 an hour to mow your lawn. Hmm. Like there's a neighborhood kid who can mow your lawn, and you walk out and you give him crystal clear instructions, and then they mow your lawn.
Drew Breunig: You don't need to hire the McKinsey consultant. And I think as you use agents, both personal agents on like Hermes or OpenClaw or whatever, but also coding agents, you start to... It's important for you to start to understand which workflows or which, which tasks you're giving the agent [00:31:00] are no longer general.
Drew Breunig: They are workflows. We know how to do them end to end. So a good example of this is, um, uh, I have, or, or one, a friend of mine, my f- the one he was talking about that he loved, that he w- it was favorite example of OpenClaw, is, um, he rode his bike to the ferry in Alameda to go to his office in San Francisco.
Drew Breunig: And so what it would do is it would look at how long it took him to bike to get from the ferry to his office. It would look at when his first appointment was on Google Calendar. It would look at what the ferry schedule is. It would look at his Strava to know what his current pace is to figure out how fast it would take him to do the distance, and then it would calculate that all and tell him, "This is the last minute you can leave the door."
Drew Breunig: And what [00:32:00] is so funny about that is that is such a complex task when you say it like that. The first time you do it, use Opus 4.5 or Opus 5 to set it up. But after that, that entire task can be executed with code. Like, it doesn't need to be a model at all. It could be Haiku, or it could just be pure code because now we understand it.
Drew Breunig: We understand that the process is get your speed on Strava, got it, that's code. Next process, get your calendar and understand, you know, how fast you're currently biking and see we don't even have to fetch, you know, how long, what the route is to the ferry to your office. We know that. You do the same thing every day, and we just have to look at the ferry schedule, and then it's code.
Drew Breunig: And so harnesses or you as a human need to recognize when to... The phrase we like to use is crystallize. Mm-hmm. When you have a task, to crystallize it into either a job that can be done by a smaller model [00:33:00] or just code. And that's what I like DSPy for, by the way, is I don't use it to be a general agent, but I have a task I do on my Hermes account and, or my Hermes agent, where one of the things it does is it grabs all my to-do lists that I have to do today and, you know, reviews them, looks at the ones I didn't get to yesterday, looks at the ones that I have to get to today, looks at my calendar, and makes some judgments about when I should try to crack certain things.
Drew Breunig: I don't need GLM for that. I could be using a four billion parameter Gemma model with some good previous data and a DSPy program that basically just s- says, "Hey, accept these tasks, accept these overdue tasks, accept this calendar, and then this is the types of output data I want." And now that is a [00:34:00] consolidated, crystallized task that is not defined with natural language, it's defined with DSPy's signatures.
Drew Breunig: And DSPy lets me then compile that down to whatever model I want to run it on and see which one works for my needs. So for the uninitiated that are not familiar with DSPy, I think, and also even just, like, maybe you heard about DSPy
Demetrios: a few years ago because it was very popular. It had a moment of being like everybody was, "Wow, DSPy just changed how I think about things."
Demetrios: And there's so many different pieces of DSPy too that you kinda gotta wrap your head around, or maybe you use certain parts and you don't use the whole thing. I know that for me, one thing that I really loved was the prompt optimizer, or, uh, it's almost like this how it goes about optimizing the prompt is really novel, and I, I geeked out on that for a while.
Demetrios: But that's like one of 12 [00:35:00] parts of DSPy, right? So can you break down which parts you're using and how?
Drew Breunig: Sure. So, so I'm actually gonna break it down really into, to one conceit, which is DSPy's goal is that you can define your task, what you want your program to do, in a way that it's separate from the how, how that program is implemented.
Drew Breunig: And you brought up prompt optimizer, so I'll give you a good example, is let's use that task of I want to take all my to-do lists I have to do today, and I want to take all the ones I missed yesterday. It's a Python framework, so now I have, uh, uh, basically two inputs, current and overdue. They're basically just a list of items, so it's a list object.
Drew Breunig: And what do I want out? I want a, you know, descriptive short paragraph write-up that tells me how I did yesterday. Did I leave a bunch of stuff done? And, [00:36:00] uh, am I in the weeds? Do I need to set aside some time to, like, get this done? Am I gonna be working late tonight? Should I s- set those expectations? We can define those really clearly as crisp outputs, and we define those using a signature.
Drew Breunig: And a signature is just like a function signature. It's... has maybe a little doc string at the top that says what you want this to do, and then it has typed inputs and outputs. 90% of your function is that. It's not a natural language. DSPy will convert that into a boilerplate prompt instructions that it will send to whatever model you hook it up to.
Drew Breunig: And you call it like a function. You don't say, you don't use all the tweaks of like, "Hey, I am a expert to-do task manager. Please answer these things," and then I have to parse all the information out. No, I just call it like a function, pass in my to-dos, and what do I get back? I get my string [00:37:00] as basically an attribute on the reply.
Drew Breunig: Now, that's the task. Now, the prompt that DSPy generates is just kind of boilerplate. It's not, it's not that great. But for a big, um, for a simple task, that might be okay. But to your point about prompt optimization The other way we define our tasks is not just by writing the signature, but we also provide examples of what good looks like.
Drew Breunig: So maybe I might take a GLM in Hermes that has been doing this by hand for the last week, and I'll take all those traces and say, "Actually, these are all really good. Let me use these as examples of what the output is." And I'll load that into DSPy. Those are now my examples. Hey, if given these inputs, this is what good looks like.
Drew Breunig: And now I can train, and we call it compiling, by we have a process, different prompt optimizers. There's one [00:38:00] called MePro. The really popular one that's really powerful right now is, is GEPA, which is G-G-E-P-A. And what it does is it runs the program on those examples. It then hands it to a very large model and says, "Hey, how would you improve the prompt to do a better job at these things?"
Drew Breunig: And it keeps iterating, improving the prompt as you go until it reaches a nice satisfactory balance. And so that, all the things we had to worry about with prompt engineering, what example should we use? What, how many times do we need to repeat these watch words? Um, uh, do I have to put something at the top that says I'm a very special software engineer?
Drew Breunig: Um- Yeah ... uh, my, my favorite one is some- To place it
Demetrios: in latent space, right? I remember
Drew Breunig: those types of things. Yeah. Do I, do I have to threaten the, the model's mother or whatever? Like, you don't know what... All of these are weird tricks. Um, my favorite weird trick is someone was running GEPA against, um, their training, uh, uh, fitting their tasks to, [00:39:00] to GPT OSS 20 B.
Drew Breunig: And for some reason, every time they did it, uh, the optimal prompt had the phrase good luck at the end. We don't know why that worked, but it did. Um, and like you as a human don't need to worry about that. That is information you don't need. No. Like let a, let a model figure that out. Right. Now it's exciting...
Drew Breunig: What's exciting about this, Demetrios, is that D- DSPy has been around pre-ChatGPT, and every, as the models get better, or as they get weirder quirks, we, we, we launch new optimizers, or we launch new ways of executing your program. And the cool thing about this is that my task definitions are unchanged. So before prompt optimization, we had just, like, what we called in-context learning, which was figuring out what's the bootstrap, what are the examples we have to show it before we do it?
Drew Breunig: And so early optimizers were just example selection. [00:40:00] And so I would take my program, and it would figure that out. Then they got good at writing prompts, and we had several different prompt optimizers, and they could take advantage of that. But my task definition or my examples, they didn't change. And
Demetrios: then- And that's
Drew Breunig: where
Demetrios: you come in with the, the difference- Yeah
Demetrios: of
Drew Breunig: being able to separate it out. It's future-proof. Now, this is really nice timing because just yesterday, um, uh, we, um, uh, w- uh, there's a new version of DSPy that launched, uh, DSPy 3.3, and in it is a new optimizer called DSPy Flex. So you, you were at reference prompt optimization, and I talked about how JePA uses a large model to figure out what's the optimal prompt for whatever model you're using.
Drew Breunig: Could be small, could be big Flex is even cooler. Demetrius, it does, it not only lets you, lets the model rewrite the prompt, it lets the model rewrite the code of the harness. [00:41:00]
Demetrios: Oh, it
Drew Breunig: changes the whole
Demetrios: harness?
Drew Breunig: It changes the code. So to g- to give you an example of this. So we had a task that we were using, we were testing for this, and it was a task I had from a while ago, um, which was, uh, I had a big database of places, so in Alameda County, so stores, schools, restaurants, whatever.
Drew Breunig: And I had another data set of all of the Alameda County health scores. So, you know, the Food and Safety Administration- Oh, yeah ... they put like the A on the whatever. And so I wanted to merge these two things. And so this was, I had a, a DSPy signature that just said venue one, which had a name, an address, and that was it.
Drew Breunig: And, a- oh, and its latitude and longitude. And then I had venue two, name, address, latitude, and longitude, and that was, that was just a ty- a special type called a place. It was a custom data type. And then my output would be, are they the same place? Now, sometimes this can be really hard. They might have, um, so you might have a, a shopping center called Peachtree Shopping Center, and each store in there is called [00:42:00] Peachtree Grocery.
Drew Breunig: Another one's called Peachtree Mart. And like, it's a hard problem, way harder than you think. Um, or maybe there's two Starbucks that are really close to each other, but they're actually two different Starbucks 'cause there's so many Starbucks everywhere.
Demetrios: Yeah, you don't gotta tell me. We- Anytime you deal with data, it's way harder than you would think.
Demetrios: It's just like, "Oh, that's a simple-" So
Drew Breunig: much harder.
Demetrios: Right? Like- So- "... we could do that in a few minutes." No.
Drew Breunig: Yeah. And so here's the fun part about this. So I always used to use this as my JEPA example, my example of how prompt optimization worked. And, uh, you could basically show how you could take a really small model, like something you can run on your computer that's like 1.2 billion parameters, so like a, a, a gigabyte model, and it would work nearly as well as, you know, Sonnet.
Drew Breunig: And the way it would do that is it would rewrite the prompt, and it would be great. It would cover all the edge cases, and it would do all these things But we ran it with Flex. [00:43:00] And here's the great thing about this is it turns out, and this isn't surprising if you've worked with data, there's a big chunk of those places that you can just solve with a regular expression.
Drew Breunig: There's a big chunk of those places that, like, you can just compare the names, and if they're close enough and the address number's the same, great, we can solve it. And so we passed it through Flex. So the baseline accuracy was 90%, and it cost a dollar for 1,000 records, and it cost two seconds for, um, like, the mean latency.
Drew Breunig: Uh, we then passed it with just JEPA, so just prompt optimization, just writing the better instructions. It went up to 92.5 as opposed to 90, but the cost went up to almost $3 because the prompt is way longer now. We used Flex where it could rewrite the code It rewrote the code so that 75% of the comparisons could just [00:44:00] be handled in code.
Drew Breunig: So, and our accuracy went from 90 to 95%. I love where this is going.
Demetrios: No.
Drew Breunig: And it cost less. Oh my
Demetrios: God. Yeah, it's cents,
Drew Breunig: right? And this is-
Demetrios: It's, oh my God.
Drew Breunig: Yes. And this is the, this is the power of separating your task from your implementation. And so that this is a fast moving field, and as new thing comes out, you want to adopt it.
Drew Breunig: You want to try it out on a new model, a new technique. DSPy lets you do that. You as an enterprise or even just a programmer at home, if you want to have an application, spend the time to define your task and your examples, and as new stuff comes out and we'll ship it, you can just re-optimize it against that and you get to take advantage of everything in the market.
Demetrios: So am I right in saying that once you have this codified workflow, that's when you're throwing it into DSPy and you're really optimizing it and you're allowing yourself to say, "I know that I'm gonna do this repeatedly. Therefore-" Yeah "... DSPy is going to help me [00:45:00] separate out what I want done versus how I get it done, so that I know this thing, this end state is going to happen.
Demetrios: It's just that I don't have to worry about in two months when..." Wow, you know, back in the day, we had the context windows that were getting, they were doubling every time a new model came out and you're like, "Oh-" Yeah. "... I didn't have to hack around and try and create that really long context window. I could've just waited," right?
Demetrios: And- Yeah ... I've talked about this before about, like, that forward compatibility. You're basically protecting yourself against that type of future scenario by using DSPy. It's upside.
Drew Breunig: Yeah. Yeah. You get to keep pace. You don't have to keep reinventing your application every time a new model comes out. Some of the best agentic companies I know rewrite their agent every time a new model comes out, and this happens all the time.
Drew Breunig: Like, I mean, Fable and Opus 5 treat skills [00:46:00] completely differently. Like, skills are effectively broken. You have to rewrite them totally because they want very sparse instructions. And
Demetrios: so- And doctor doesn't work. I'm, like, we gotta talk to somebody because they're like, "Oh, just run /doctor and you'll be fine."
Demetrios: No, that's not true. Doesn't. Whoever said that, that's, like, fake news, 100%.
Drew Breunig: It's hard. It's hard, and so, like, this is... So, so am I advocating that you should spend the time codifying your task for everything? Let's use the coding agent example. No. But there are tasks that you do over and over and over again that you do.
Drew Breunig: So a good example of this is I still type prompts into Claude Code But you know what's really cool is, um, I have a, a PR review that is a DSPy RLM, because for a PR review, you kind of can start to specify that task and make it better over and over and gain example data, and that's something that rewards it, and it's a nice constrained task.
Drew Breunig: Um, [00:47:00] so like anything that's constrained, like so CI related things. Uh, the other thing I also like to use DSPy for is let me understand this entire code base and then write a skill for how to understand, like basically, you know, use it. I have a DSPy program for that. And the cool thing is, is as new things come out, we can just keep running the optimization and see what works best.
Demetrios: It's almost like Once you see them... 'Cause it's so funny with our language how a lot of times we will call agents really workflows. And so I wanted to just go there and be like, "Oh, so it's like each DSPy signature in a way is just like an agent." But no, it's really what you're saying. It's a workflow. You know what you're trying to get from it.
Demetrios: You don't need this exploration of the LLM going and trying to figure out what exactly is happening because it's already there, it's defined, it's [00:48:00] clear, and you can just optimize it with DSPy.
Drew Breunig: Yeah. A- a- and I think, and I think the thing that is, is really cool about, I love what you touched on, uh, about agents versus workflow.
Drew Breunig: Uh, w- we work, um, so my company Compound, and we're building around DSPy. Um, we, uh, uh, it's C-M-P-N-D.A-I, um, and it's Compound. And, uh, we actually work with researchers. We, um, fund some researchers in the kind of last mile systems design space in AI at CMU, MIT, and, um, uh, s- Skylab at UC Berkeley. And one of the researchers we work with at Skylab at UC Berkeley, Melissa Pan, has a great paper about this.
Drew Breunig: It's called "Measuring Agents in Production." Um, I suggest you Google it. It came out in December, but it's still s- hyper-relevant today. And she interviewed, like, a little shy of 400 different enterprise agent teams in production, and that was actually one of the th- first things she found is, like, [00:49:00] they call these agents, but they're really workflows.
Drew Breunig: Um, a- and that's okay. I think people want to, like, you know, be on the edge of these things, but there's so much work that we can automate as workflows that will make it reliable, which is the main thing that keeps enterprise AI from succeeding is reliability. Um, and also just deliver results. I think we should be looking for these workflow tasks that we can automate.
Drew Breunig: Um, and there's no shame in that. It doesn't matter that you don't have some free roaming agent that uses the biggest model in the world. Like- Yeah. ... let's get those big, little wins, man. I love those. Exactly. Sustainable AI.
Demetrios: Well, I wanna hit on something else that you've written about before in the past, and how you came onto my radar was this whole idea of, like, a library with no code, I think- Mm-hmm
Demetrios: was the-
Drew Breunig: Yes ...
Demetrios: blog post title, right? Yeah. And that was back in March, if I believe. Uh, right now we're in August. Uh, that
Drew Breunig: might've been [00:50:00] January.
Demetrios: Okay. So I found it in March, but yeah, you wrote it- Yeah ... in January. A lot has changed since then. How do you look at that now? Do you look at it as like, "Huh, that's a cool little experiment.
Demetrios: Didn't have legs"? Do you look at it as like, "I'm gonna lean into it more"? Or is it just completely irrelevant?
Drew Breunig: Um, so one of the things, um, uh, I'm very, very grateful you gave me the opportunity for because I think it's actually, uh, one of the best talks I've ever give was, um, at your conference, I followed it up, which was what did I learn from that?
Drew Breunig: What did I learn after a couple months? Um, and, and I think the, the main takeaway I had was, um, there's something we used to always say which is like, "All right, you've built an app, but until you launch it and you see how people use it and how it like sustains or breaks, you don't have a product." Like there's this idea of like if [00:51:00] you don't launch it, you don't have a product.
Drew Breunig: You just have like an interesting idea. It hasn't met the world and it hasn't met reality. I think there's a corollary to that for our age which is you have a spec. You wrote that spec and this is-- was the original thesis or the, the, the experiment I was playing with, with When Words, which was a library without-- an open source library without code, which is I'm just going to write an incredibly detailed spec that defines the behavior and I'm gonna release conformance tests in a YAML file.
Drew Breunig: And I can paste in a prompt and an agent will be able to use both of those things to implement it into a passing s- implementation in no matter what language you gave it to it. And we, we-- it worked for everything. I think the only thing it didn't work for is we tried to use it with, um, uh, uh, can I curse here?
Drew Breunig: Brain F, you know, that- Yeah ... that- Yeah ... that coding language. Uh, it, it used Python to wrap that whole thing. It cheated. Um, but um- Uh, [00:52:00] what I learned from that is, is a- after I released it, people had PRs. People submitted PRs. They're like, "Hey, you actually had an incompatibility. You had a test here and a line in your spec that don't match the rounding behavior.
Drew Breunig: They disagree." And we discovered this when we were trying to implement it and we, we didn't pass tests because we were following the spec. And, and that happened more than once. Um, and I think that's the thing that which is like if code is so cheap to generate When you write the code or you generate the code, you find things your spec missed.
Drew Breunig: And so I don't think a spec is real until you implement it, because implementing it, you learn more about your spec and you learn about decisions you didn't realize with you were there, that were there, the unknown unknowns. And that act helps you. And at that point, then you have a reference implementation, [00:53:00] and you should just ship it.
Drew Breunig: Um, and, and so I think that's the first big takeaway, which is you still gotta make the code because the code's gonna find things you didn't consider. Um, so I don't think we should be shipping open source libraries without code. Um, I think we should implement them in our, our code of choice, and then people can build on them however they want.
Drew Breunig: Um, the thing I do think was a good takeaway from the tests and the spec is even, is, is the level of where developers should be spending their time and what's the most important part of any application or project they're working on. And I spend so much of my time writing specs and going back and forth on exactly what I mean, and I spend a lot of my attention on, like, reviewing the tests and making it pass and dealing with all the things that may not have worked after the initial generation, and I spend almost none of my attention generating the code.[00:54:00]
Drew Breunig: We, we are operating around the edges, and what's really important is as you have products that you now have to support, where your, your, um, attention gets invested is setting up the systems that exist around the code that keep the code and the agents in check. And so while I-- that was a playful idea, this idea of let's ship a software library with no code, and there are some reasons that you may wanna do that.
Drew Breunig: There's, uh, uh, or what have you. Um, I think code is so cheap now, there's no point in not shipping it, and by shipping it, you learn more about how to build a better infrastructure around your application.
Demetrios: Man, I, I love how you learn that and this idea of as soon as you get something out there, it's, comes back to that feedback loop we were talking about at the beginning of this conversation.
Demetrios: Yeah. The faster you can get that feedback, the better it [00:55:00] is. I remember, this has gotta be five years ago now, I was talking to somebody in the MLOps community, and they were saying I don't... Or, or I try to get a machine learning model to production as fast as possible because- Yeah ... once it is in production, I can see where it's not working, and I can see- Mm
Demetrios: everything that it took to get that into production. And if- Yeah ... there is some kind of a bias or there is some kind of a problem with the model, I will then know. But you... It's all theoretical until it's in production, and it's kinda... It reminds me of this, like yeah, specs are all great, but until you write the code, it's theoretical.
Drew Breunig: Yeah. And, and I think, I think that's, that's the... That tests your thing. You're gonna find more things. And I think everyone kind of knows that, like for every skill. Like, you can come in with a plan, but until you start doing it, you aren't gonna find-
Demetrios: Yeah ...
Drew Breunig: the decisions that you haven't even [00:56:00] contemplated.
Drew Breunig: You can have the broad strokes and your goal, and I also think that matters a lot for product management these days. Um, you know, both thinking about it on my own team, but talking about it with others in product management. Like, we question the value. Like, you can have your vision, which doesn't change, but it doesn't make sense to really plan more than a month in ahead because you can ship so much in a month that like, like you're gonna learn so much in a month that you'd never thought you would ever come back.
Drew Breunig: Like, anyone who tells me they're like working six months ahead of time on very specific plans means they aren't leaving room for the vast amount of learnings that are gonna come back just based on how much they can implement in the first month
Demetrios: Ooh, that feedback loop. It's almost like there should be that planned rest and relaxation or just the feedback and trying to assimilate all of that feedback within your, your sprint cycle in a way.
Drew Breunig: Yeah. And I think that, that's, we have to, that's where we have to evolve these things. Like, how do [00:57:00] we, how do we talk more? Um, how do we touch grass more? Um, I really do think, um, like this is kind of like the irony of like product building these days is it's so tempting to just sit in front of agents all day and coach agents.
Demetrios: Yeah.
Drew Breunig: But that's actually really low value work. It's m- Mm. You, the really high value stuff is going out and talking to people who have the problems you want to solve and that cannot be solved by AI at this moment. And, um, and so like it really changes where I think people should be spending their time and I'm guilty of it as well.
Drew Breunig: It feels very satisfying to implement a feature on an agent but, um, going out and learning something new is, is magnitudes more valuable.
Demetrios: I joke about it where it's like this is the new dopamine. Like social media has got a competitor on its hands because have you ever had your... I think for me the [00:58:00] highest amount of dopamine I've gotten behind a computer was when I found something that I wanted changed on an open source product and I prompted an agent to change it.
Demetrios: It submitted the PR and then it got merged and I was like that is... First of all, it was ridiculously easy and so it's that quick hit of dopamine but it also made me feel like wow I'm, I'm changing the world here one prompt at a time.
Drew Breunig: Yeah. No I, it, it, it feels like that and, and I think then you get carried away and then you're building a Winchester Mystery House.
Drew Breunig: Yes. Yeah. Like, like then you're building a house that only you would imagine and I think, I think it's, it's really important to go out and, and get other people. I- that's why I'm thankful for my like my team. Like when I'm doing UI stuff it's easy to get carried away 'cause you just have all these assumptions of how you imagine people think it will work.
Drew Breunig: Yeah. And so much of like I will do stuff and then I will stop myself and I will like record a video of me walking through the UI for like a minute and a half and I will put it on [00:59:00] the Slack and I'll be like, "Please everyone watch this, um, and feed back and tell me what doesn't make sense to you. I'm going to step away for a day or two."
Drew Breunig: Mm-hmm. Um, because however long it takes for you to get and generate that feedback and get it from other sources is so, so valuable. Which is why it's so important to have as the best advice I can give for engineers these days is like have your communities where you chat, chat, like talk shop with people, um, because, uh, increase the surface area you have with feedback.
Drew Breunig: Um, it's, it's so valuable these days.

