Podcast

Podcast

Vibe Coding SimCity II: Injecting Chaos with Natural Disasters and AI Tools

With

Joe Holdcroft, Simon Maple

14 May 2025

Simon Maple and Joe Holdcroft
Simon Maple and Joe Holdcroft
Simon Maple and Joe Holdcroft

Episode Description

Simon Maple and Joe Holdcroft exchange AI-generated town simulators and challenge each other to add natural disasters—without previewing the code. Using Cursor and Windsurf, they try (and sometimes fail) to inject earthquakes, lightning strikes, and chaos. Along the way, they encounter context loss, build failures, brittle UI logic, and surprising wins. They reflect on how AI coding tools actually perform when modifying unfamiliar codebases, and what disposable code really means in practice.

Overview

In this episode of AI Native Dev, Simon Maple and Joe Holdcroft return for a chaotic continuation of their previous challenge. Having each created a town simulator app using BASE44 and Bolt.new, they now swap codebases and attempt to implement natural disasters using two different AI tools: Cursor and Windsurf. The twist? Neither developer knows what feature they’ll be adding until it's revealed live, and neither has seen the other’s code. The result is a candid, sometimes frustrating, and often hilarious exploration of how AI development tools perform in messy real-world contexts.

The Role of Disposable Code in Prototyping

This episode centers on disposable code: code written quickly to test ideas rather than built for long-term maintenance. Simon and Joe dive headfirst into modifying auto-generated, brittle applications, trusting AI to carry out changes on unfamiliar projects. Simon remarks on the benefit of BASE44 in building a prototype with minimal effort, noting, “I didn’t even look at the code.” This hands-off approach highlights the power of disposable code—how AI tools can generate working apps quickly with minimal developer intervention. However, the moment these apps require real changes or sustained iteration, cracks appear. The ease of creation masks fragility under the surface.

Challenges of Code Quality and Maintenance

The episode underscores the tension between rapid generation and reliable maintenance. Simon encounters repeated issues using Cursor to modify Joe’s app, getting stuck in feedback loops where the tool claims to apply fixes that never take effect. “Every time I was in that horrible, frustrating loop… it says it’s made it, but it hasn’t.” Joe, using Windsurf, sees a similar breakdown: linting conflicts, duplicated functions, and unclear working state. Both developers conclude that while AI tools excel at early prototyping, extending that code demands precision, validation, and patience—things often absent in disposable workflows.

The Importance of Context in AI Development

AI tools often struggle with contextual awareness, particularly when codebases are inconsistent or bloated. Windsurf, in particular, falls into multiple loops trying to fix ESLint issues it didn’t introduce, making repetitive and sometimes conflicting changes. Joe theorizes that Windsurf is analyzing its own diffs and erroneously flagging them as new bugs. Simon notes that context issues also affect output relevance: “It’s using that as context, so it would almost confuse itself a little bit with that potentially.” Without firm architectural boundaries and consistent naming conventions, AI tools lose track of intent, making reliable automation difficult.

Exploring Workflow Dynamics with LLMs

Simon and Joe both deviate from traditional workflows in this challenge. Neither reviews the unfamiliar code base; instead, they jump straight into issuing high-level prompts to modify features. This choice reflects a belief that the LLM can abstract away code understanding—until it can’t. As Joe remarks, “I’m not here to maintain this nice garden of code,” echoing a sentiment many prototype-driven developers share. But this blind trust quickly falters. Eventually, both revert to more manual strategies: inspecting UI, editing logic directly, and validating changes line by line—reintroducing human oversight as essential in the AI-assisted workflow.

The Impact of AI on Development Practices

Cursor and Windsurf offer different interpretations of what AI-assisted coding should look like. Cursor prioritizes speed and minimal friction—ideal for iterative prompting—but it struggles with large, compounding requests. Windsurf is more assertive and autonomous but overreaches, often rewriting massive code sections or enforcing strict linting prematurely. Both tools highlight AI’s current strengths and weaknesses: they are fast, flexible, and impressive in narrow scopes, but brittle and error-prone in broad or multi-step tasks. Simon sums it up: “Had I asked Bolt or BASE44 to do this from scratch, it would probably be more successful than asking Cursor to build on broken ground.”

Navigating Unforeseen Obstacles and AI Failure Modes

The devs encounter a variety of unanticipated challenges—many introduced by the tools themselves. Simon discovers that disasters resolve without the correct emergency services. Joe faces repeated compile issues due to out-of-order function declarations. Both observe that asking for multiple logical changes in one prompt results in partial or faulty implementation. Perhaps most revealing, both tools misreport what they’ve changed, making it hard to trust that fixes are actually present. Windsurf gets stuck in a lint-fix loop; Cursor repeatedly fails to update runtime behavior despite promising otherwise. The core insight: AI tools are fallible collaborators, and developers must expect and plan for this.

The Future of AI Coding Tools

As the episode winds down, Simon and Joe reflect on the current state and future promise of LLM-powered tools. They agree that today’s tools work best for generating greenfield prototypes but are less effective at building sustainable, editable codebases. Joe suggests these tools will shine most in one-off projects or when helping non-developers scaffold apps. Simon, despite his frustrations, notes how far the tooling has come, imagining how magical this would have seemed even four years ago. Both agree that tooling must improve in state tracking, context retention, and change validation to fully integrate into robust workflows.

Summary and Key Takeaways

In this feature-rich episode, the AI Native Dev team showcases the reality of AI-assisted coding in unpredictable terrain. Key lessons include:

  • Disposable code excels at rapid scaffolding but collapses under feature extensions without solid foundations.

  • Code quality and linting rules often conflict with AI-generated outputs, especially in multi-file changes.

  • Context loss in tools like Cursor and Windsurf results in loops, misapplied fixes, and broken logic.

  • AI tools must be scoped precisely; vague or compound prompts lead to inconsistent results.

  • Human intervention remains essential for debugging, validation, and steering complex edits.

Ultimately, the episode is a candid snapshot of where AI dev tools succeed, where they break, and how real developers adapt in the face of both magic and mess.

Resources

Base44: https://base44.com/
Bolt.new: https://bolt.new/
Cursor: https://www.cursor.com/
Windsurf: https://windsurf.com/editor

Chapters

0:00 - Welcome back: part two explained

1:00 - Cursor vs. Windsurf setup

4:00 - The edit: add natural disasters

8:00 - Simon: debugging with Cursor

14:00 - What “fixing” really looks like in Cursor

24:00 - Joe starts in Windsurf

29:00 - Windsurf gets stuck in a loop

33:00 - Debugging the debug loop

38:00 - Earthquake animation success

41:00 - Adding lightning strikes

46:00 - Destruction and population impact

51:00 - Final reflections: tool comparison + takeaways

Full Script

Simon Maple: [00:00:00] Yeah, Joe's town's very set up for natural disasters just because it's such a pessimistic town with the hospitals, fire stations, police stations.

Joe Holdcroft: What an easy job Simon must have had there, already had this all implemented, but not working.

Simon Maple: No less than I would expect from Joe. It's just full of bugs, not properly designed.

Joe Holdcroft: So maybe what I'll do is I'll just blindly accept everything 'cause I have such faith.

Simon Maple: One of my pet peeves with Bolt is as you start building the file and it gets to 4, 5, 600 lines, it takes an age to, to, if you wanted to change it one or two lines, it has to rewrite the whole thing out.

Joe Holdcroft: Earthquake frequency, 10% chance per day of an earthquake occurring, which in real life would be very scary.

Simon Maple: You are listening to the AI Native Dev brought to you by Tessl.

Hello and welcome to another AI Native Dev episode and this is actually a part two of our episode [00:01:00] following on from last week's episode where both Joe and I created a couple of applications. One using BASE44, one using Bolt.new from a challenge that Macey gave us to create a tiny town simulator application.

Now this time what we're gonna do this time around is we're gonna swap that application with each other. So I'm gonna use the creation from Joe, which was the tiny town simulator from Bolt.new. And Joe's gonna take my application that I created using BASE44. Joe is gonna try and make an alteration a new feature edition using Windsurf, and I'm gonna do the same to Joe's application using Cursor. The trick is, of course, we don't know what that feature's gonna be until Macey provides us to it live on the show. You don't necessarily need to listen back to the previous episode, but it's a great way of seeing these tools BASE44 and Bolt.new in action in creating the challenge applications to this state.

But like I say, you don't need to watch them to enjoy this episode. Now, there will be a [00:02:00] lot of screen sharing happening as Joe uses Windsurf and I use Cursor. Like I said before, you don't need to, if you're only listening via the podcast like Apple Podcast or Spotify and so forth, and you don't have access to the visuals, we will be narrating what we're doing so you'll better hear the things that work the areas that we have problems with.

And at the end, we'll have a nice comparative talk about what worked and what didn't with all the various tools. But if you are watching on YouTube. That is probably the best way to watch the episode as you'll be able to see exactly what the tools are doing on the show, but you'll enjoy it both ways.

Here we go into the episode. Enjoy it. He's got a copyright. He added a copyright at the bottom.

Macey Baker: He's got a copyright. I know.

Simon Maple: Oh, all these things.

So looking at

this, it actually looks surprisingly similar to what I created. I think he was just as blasé with his, did he write five, five words as his first prompt?

Macey Baker: He actually didn't. He didn't. No it's many more than that.

Simon Maple: That's interesting that we actually have very similar outputs in terms of the kinds of [00:03:00] things with happiness, population, residents looking at it. He has residents, but he has no roads. He has no industry. His world, his town is just basically a place where people live and have incidents, whether they're police incidents, fire incidents, or hospital incidents.

That's Joe's world.

Macey Baker: That's not fair, there's a community center.

Simon Maple: There's a community center where people can have incidents together as a community. All right. Cool. Cool.

Macey Baker: Exactly.

Simon Maple: So I think we're I think we're ready for our next session, right? Our next feature.

Macey Baker: Yes. So I am gonna give you an edit. Joe is gonna have the same edit to make on your code. But again, this is about your imagination mostly.

Simon Maple: Okay, thank you very much. We only have one envelope so yeah. So Macey's Macey's handed me another envelope. Let's see what I need to change. Add natural disasters: at least two.

Okay. [00:04:00] I think this is this is something which is very reasonable. Very easy to add, actually, particularly with Cursor. What's Joe using? Joe's using Windsurf.

Macey Baker: Joe's using Windsurf, yeah.

Simon Maple: Yeah, so I think that'll be quite similar. My gut feel is I could have done this easier from BASE44 actually with such a change.

So that's interesting. Although that said, yeah, Joe's town's very set up for natural disasters just because it's such a pessimistic town with the hospitals, fire stations, police stations. Okay, so let's just, let me familiarize myself first of all with Joe's, very basic UI here.

Oh. I need more money. Do I? Okay, so I can add maybe. Okay. I can add two houses, a hospital and a fire station. So we don't have enough for general amenities. This reminds me of Basingstoke, where I'm from. But let's, let's leave that. Oh, look, I can just advance, I can just keep advancing like that.

Macey Baker: Where are you getting the money from?

Simon Maple: Cause I dunno. That's a good point.

Macey Baker: So who works at the fire station?

Simon Maple: Yeah, that's true. So this is, [00:05:00] I'm gonna add a bunch more things and hopefully I'm hoping there'll be some some state, which is, i'm not sure. Probably not. I'm gonna have to do this every time, aren't I?

Okay. Alright. First thing I'm gonna do is change my budget and so let's go to Cursor. I'm actually probably, do I start with understanding how the code is organized? Do I even bother looking at the code or shall I just jump straight in? I can see some obvious things. Okay. You have a cell, obviously a game board with various cells, a number of game controls, which are advance day and things like that.

So I probably, actually it's surprisingly reasonable, reasonably easy just to.

Macey Baker: Do you feel that way? 'cause it's very similar.

Simon Maple: Possibly, very similar to mine. Possibly, but I feel like it's just probably the naming of I'm very used to actually the way Bolt kind of structures, the way it does things.

Macey Baker: Which is how, like, how is it different?

Simon Maple: No, it's not different. It's very similar to how I expect it to be or how would it be different if I was to [00:06:00] build it, it's it seems very reasonable. I guess perhaps it shows how many games I've probably tried to build with Bolt.

But to have that Gameboard, Game Controls event system. Okay, so maybe this is interesting, it's got an event system. Oh no, this is just this isn't a natural disaster event, is it? That's just something happens on the board. Okay. So I guess what I wanna do is, first thing I wanna do and I'm actually looking forward, straight away using Cursor.

The one thing I'm looking forward to is just the speed at which things can change completely different to obviously BASE44. So I'm just gonna say, first of all give me, I dunno, 15,000, 15,000 budget to start with. And actually I'm doing this via Cursor where actually I pretty much could just, could just do this myself, but because I'm not familiar with the code oh, actually no, I probably want a ton more.

Let's actually just send that to 25 myself. Okay. Next thing I'll,

Macey Baker: That's really nice. Sorry, just to point out that it's like actually just listed for you the cost of things.

Simon Maple: Yeah, that's true actually.

Macey Baker: Good [00:07:00] context. Yeah. Extremely relevant to the change you're making.

Simon Maple: Yeah, that's very true actually.

And 25, even looking at it, let me see if 25 is the default. Six, actually what I'll do is I'll ask, I'll also say, I'll say set the game board up with the default five houses, plus one of each of the building so that I have a initial template, actually I'll say set the game board up randomly.

Yeah. Yeah. Just so it's slightly different every time. But now I can have some natural disasters that I don't, I assuming this is, this will be reset every single time. It actually, it's set it up, not randomly at all. It's set up randomly the first time.

Macey Baker: The few, yeah. It's like just so much easier for me to parse than the prototyping tools where things just happen.

Simon Maple: Yeah. And actually what I, yeah the one nice thing that I like here is, typically with Bolt, I assume BASE44, I don't actually even [00:08:00] look at the code with BASE44, I assume it's gonna be the same where it just rewrites the entire file. One thing I really hated with Bolt, one of my pet peeve with Bolt is as you start building the file and it gets to 4, 5, 600 lines, it takes an age to, to, if you wanted to change one or two lines, it has to rewrite the whole thing out.

Why I love this kind of, I don't even know what's changed at that point. So I love this. So I can accept that, oh, it set me in a population of a hundred. Nice. Going back to 15,000. Oh I'll accept that. Interesting. I'll accept that. Welcome to Tiny Town, your starter. Oh, look at that.

Because I guess it's my starter. I've got a starter town. It's interesting though, because it's very much understanding what I want.

Macey Baker: That's true. Okay. It's not totally off.

Simon Maple: So let's let's restart this.

Macey Baker: Oh my God. Did you see that, that call out?

Simon Maple: What is this? A music event is being organized at the community center at three four. Oh, okay. It's zero indexed it. So that's why. So that's actually four, five.

Macey Baker: Is it flashing? Oh my gosh.

Simon Maple: You see that? Yeah. Yeah. So for those, just watching this, an emergency's [00:09:00] happening and it's a music event is being organized. I dunno how I need to respond other than buy a ticket. Oh my response was that it happened music event was happening and it was a great success.

Interesting. Okay.

Macey Baker: I'm glad you contained that emergency.

Simon Maple: Yeah. I dunno if the police were involved in, or the fire station were involved in that emergency. Okay. What happened? Why is that not resetting my town? Okay. Oh, I do, I need to build that again. See, I'm not a very good Java scripty person.

Macey Baker: No, I don't. I feel like preview is a bit different as well.

Simon Maple: Oh really? Oh, do I just need to do an NPM run from here? Now that it's built, let's just do a preview.

Macey Baker: So can I ask what kind of natural disasters are you considering?

Simon Maple: See, I'm thinking back into Sim City, so I wanna see the what was the, wasn't there like an alien attack or a massive alien attacks?

Let's go for the, let's go for the pure natural disasters. So let's go flood or fire or that kind of stuff. Okay. It hasn't added my stuff to the starters, my starter stuff. Yeah. Yeah. So let's add some stuff in. Oh, [00:10:00] actually that's not really helped. Let's say, okay, I want a natural disaster, disaster to occur. Actually, no, let's just say randomly. It should occur on average once every 10 day and five days, just so we don't have to wait too long.

Macey Baker: This is a horror town.

Simon Maple: Yeah, absolutely. So it's gonna create a random natural disaster system. It's gonna modify the advanced day in the chaos manager function to include the feature.

Okay, fine. 20% of chance, oh, it's doing them itself. Look a wildfire, which is severity eight, a health emergency, seven and a crime wave. Each disaster is randomly assigned to a building in your town. Perfect. A disaster becomes a, disaster affects town stats. Impact disasters will affect your town's happiness, safety. Disaster will add an element of challenge and unpredictability to your town. Okay, so it's done that.

Macey Baker: There is something that I feel should be [00:11:00] included, but I wonder what you think.

Simon Maple: Go on.

Macey Baker: It should spread. Oh yeah. It's not responded to. It should be spreading

Simon Maple: the disaster, disaster should spread to neighboring.

Is that the US spelling? I'm being really kind to our listeners. That's the US spelling. Yeah, that is the US spelling very kind to the neighboring, neighboring buildings or closest buildings. I guess if they're not neighbors kind. It depends on the thing, right? If the fire is spreading, probably the houses should disappear, but then if it's like a crime wave, maybe they just don't make you any income.

Or something like there's gotta be like a consequence.

Yeah. Let's keep it, I'm gonna keep it simple for now, just to see if we can create a disaster and have it spread and then we'll do both impact and resolution.

Macey Baker: Luckily, Simon's a professional.

Simon Maple: I know, right?

Macey Baker: Profesional vibe coding

Simon Maple: Can you tell I was a, a coder before years ago. Okay. What's it doing there?

Macey Baker: Wow, that was speeding.

Simon Maple: It's, it is, this is what I love [00:12:00] about this. Like for me, there's two types of AI tool. There's the type of AI tool that does a lot, which, and you don't care and you care more I guess about overall accuracy. No, it's not even that.

You do care about more accuracy there because you're not gonna look at the code as much. Whereas here, I wanna review it. So speed is an important thing. So it's doing closest building or neighboring buildings, which is fine.

Macey Baker: Closest building and neighboring buildings is a bit weird to separate, in my opinion.

Simon Maple: I yeah, there actually, there probably is no need, is there?

Macey Baker: That? Yeah. I feel like there's a little tendency there, but fine if it works.

Simon Maple: Let's see if it works first. And then we'll actually no. I care about code now. I feel like I, I'm in the code now, so I want to do that.

Actually, is that bad to start actually, don't need, you don't need closest and neighboring buildings and closest should suffice because because if they're neighboring, they'll be closest anyway. So let's, we'll save this rebuild, I guess if [00:13:00] that's the, if that's the thing we need to do.

Okay. Let's rebuild please. I'm sure people will tell me if I don't need to do that, but I'm a Java developer myself, so this is just hurting my brain to

Macey Baker: feels like the path of least resistance

Simon Maple: To do this. Yeah, absolutely. This is the classic Maven Clean Maven Build, Maven install oh gosh.

I clicked twice. If I respond to emergency, do you think it'll say it's been a great success?

Macey Baker: Yeah. The, yeah.

Simon Maple: Oh no, it is reso, it's self resolving.

Macey Baker: Oh, thanks to the nearby hospital. It says,

Simon Maple: oh look. Oh my God. Again, there are illnesses happening where my buildings aren't.

Macey Baker: Oh, this is a

Simon Maple: respond to emergency.

Okay.

Macey Baker: Too soon. So let's let's go. If there is a fire, it's just going to be a disaster because you have no fire departments.

Simon Maple: Oh, good point. Let me carry, lemme carry that on then.

A wildfire,

Macey Baker: respond

Simon Maple: fire under control, but response was slow. Okay. [00:14:00] No, see, that's not much of a consequence, is it? Let's fix this. It's not. So let's say disasters, first of all can only occur on buildings that exist empty spaces cannot have disasters. Then let's say, I'm gonna do this just as all as one prompt.

Disasters can't be auto resolved. The user must perform an action to fix the issue. The relevant disaster recovery service, recovery service must be present to, to resolve the disaster. For instance, a fire needs a fire station on the map to be resolved.

Macey Baker: Now, could you build one if it wasn't there during the fire?

Simon Maple: Yeah, could do. You had, [00:15:00] that's a real, that's a very realistic way of dealing with things. If there's a real fire, we'll just have to wait the six months to build a fire station and then we can put the fire out.

Macey Baker: Yeah, that seems reasonable to me. That has such LLM logic behind Yeah. Have an LLM build a town.

Simon Maple: I dunno what your experience is with thing, particularly with Cursor, but things like this whereby I'm actually asking for three very different changes to happen in real life. I would probably ask for one at a time and make sure each one is happening as I would like.

But given I have, I think three, four minutes left, this is kinda like how I would do this. And do you know what? I'm just gonna blindly accept everything.

Macey Baker: Yeah, I agree. Okay. I wouldn't necessarily, it's interesting though, 'cause when you're working on real software, deciding on the things you want to be changed and the way that you want them to be changed is the bulk of the work.

Simon Maple: Yeah. Yeah.

Macey Baker: So it's interesting.

Simon Maple: The other thing is I've asked it to, by default, add buildings for me, it hasn't done that. I'm just lost. I'm still doing it manually.

Macey Baker: Yeah. It's lost it [00:16:00] somewhere along the way.

Simon Maple: Yeah. So let me add, let see. Let's not add a

Macey Baker: residence is ready to party.

You have four people. You don't know what's supposed to.

Simon Maple: And let's add a community center. A crime wave has hit the town. It's,

Macey Baker: oh my God,

Simon Maple: it's happening across two buildings. Let's not respond to it. Let's, oh, I can't advance the new day. So I have to respond. I've told you I can't. That's interesting.

It's it's resolved it. So a couple of things I want to do resolved, but I

Macey Baker: can't, it shouldn't be able to because I didn't have a police station.

Simon Maple: Yeah I was able to resolve a crime. I wonder if it's gonna take me literally here or whether it's the, assuming this is the app. I was able to, yeah. I was able to resolve a crime without a police station.

This should not be possible. Also, I want to advance to next day, even if a disaster is in [00:17:00] progress, please start disasters in one building only 'cause did you notice it? Did it across two buildings? And that annoyed me. Sorry. Very interesting. Yeah. So I've made some changes and we'll see.

Macey Baker: Now you have a little bit of an advantage with this edit because Joe already,

Simon Maple: So he, did he intentionally add disasters?

Macey Baker: He did not intentionally add disasters, but he did add the concept of events.

Simon Maple: I see. Okay.

Macey Baker: So you are benefiting from that system.

On the other hand, his code was a lot more buggy.

Simon Maple: Oh, really?

Macey Baker: So I think you've had more trouble in these little iterations.

But interesting that you've got a little leg up.

I think we'll see how he goes.

Simon Maple: Oh no, I still forgot to add these residents. So let's add a few buildings. In fact, I'll add a few more as well. Let's advance right. A [00:18:00] crime wave is hit the town. I'm still not able to.

Macey Baker: Oh, it's in the community center.

Simon Maple: Oh, interesting. I'm still not able to advance the next day.

Okay, so let's respond. I feel like this is really frustrating now.

Macey Baker: Yeah.

Simon Maple: This is what I have experienced in the past whereby I've, I continually have to ask again and again for the same thing.

Macey Baker: It's like it just tops out at some point. Yeah. At some point you're no longer able to make progress and it seems like that's true across tools, even.

Simon Maple: Yeah. It's interesting actually. It's saying removed the find closest buildings and that functions as they're no longer needed. They absolutely are still needed. If I was to do this properly, I would probably make much smaller changes.

Macey Baker: Yeah.

Simon Maple: At a time. So yeah, this hasn't been successful. I thought this would be much more successful than it is.

This hasn't been as successful as I think it could have been because I think I would probably ask it to do much smaller things and validate that it's doing it. I think had I have asked Bolt or [00:19:00] probably BASE44 to do these things, it would probably be more successful at doing them. Interesting.

That's my gut feel.

Macey Baker: Yeah.

Simon Maple: I quite fancy trying that afterwards, but yeah, I feel like I've failed at this at this second, at this second.

Macey Baker: See, I think you've done fine. Like you, you have made some interesting changes. Yeah. And I always think back to four years ago, imagine showing someone this technology.

Simon Maple: Yeah.

Macey Baker: Of course. That's not, that's not what the people wanna talk about.

Simon Maple: Yeah.

Macey Baker: But it's still, it's amazing that you didn't touch any code here.

Simon Maple: No.

Macey Baker: You took prototype code from a different tool.

Simon Maple: Yeah.

Macey Baker: You like rocked it and made some and debugged it and made some, pretty fundamental changes.

Simon Maple: Do you know from a confidence point of view, I feel way more confident. I felt way more confident at the start of this session

Macey Baker: Yeah.

Simon Maple: Than I did, than I do now. I felt oh wow, this actually works. Yeah. Whereas now I look at it and I feel oh, actually none of this is truly working. And I think what possibly would've been better. Not so [00:20:00] much having a plan of action necessarily, but I would want, what I would probably initially do is create some quality plan. Yeah. And I would wanna make sure that every component is doing what I need to do. 'cause the problem is I'm trying to build on something that isn't stable right now.

And so I feel like I would need that to be fully stable. And then we're giving Cursor a hard time here, perhaps. And it's not Cursor that's necessarily causing a bunch of these problems. It's actually that the base, the platform that I'm building it on this initial code base, and this is no, no less than I would expect from Joe.

It's just full of bugs, not properly designed. And I feel like I would need to, I would need to bolster a lot of those components. I'm really mean to, to Joe aren't I. We're gonna, I need to bolster a lot of those to make sure that they're better. More resilient.

Yeah. And then when I ask Cursor to do stuff, it would actually have a far better chance of being able to do those things.

Yeah. That's my gut feel. But I still love the interaction I'm having here. It's just the frustration of going from this, yeah. The death loop of do [00:21:00] this. Sure. I've done it. And then you go to a production or production, but you get to the run environment and guess what? It's still not done.

Macey Baker: Yeah. Great attempt. Let's get Joe in here to to work on your code.

Simon Maple: Let's get Joe. Yeah. Can I stay in here while that happens? Yeah, you can. I can. Awesome. Awesome. Here we go.

Macey Baker: Hello Joe. Welcome back.

Joe Holdcroft: Thank you.

Macey Baker: We have got Simon's project up and running. We learned something about BASE44 just now. Which is what?

Joe Holdcroft: Which is the, it seems to use itself as a, like a data store which is an interesting approach. But we couldn't figure out how to get authentication working

Macey Baker: so super closed system. Like it was really hard to get this to run locally without authenticating to BASE44, which is

Joe Holdcroft: yeah, it seemed to wanna send you back up to their app which sort of defeats the purpose of working locally.

And then when it did that, it gave an error, which I assume is because the authentication was kicked off from my local copy, which their servers didn't wanna accept. Interesting setup. So we did some prompting within BASE44 to try and detach [00:22:00] itself from itself and remove authentication.

And so far this has seemed to be successful.

Maybe we did something wrong. Who knows?

Macey Baker: Some similarities off the bat to your town,

Joe Holdcroft: yeah. Super interesting. So I've created a town here called Joetown and really fascinating to see obviously I don't know how Simon prompted this, but fascinating to see that we've ended up with similar elements like treasury is a word that I didn't use in my prompt at all.

Macey Baker: Yeah.

Joe Holdcroft: Interesting to see that it's arrived here also. And yeah, the happiness meter all very similar, the same grid format, but I see there's some additional features that I don't have. Also this sort of day iteration is automatic I noticed, which is a nice touch. Simon's got roads and a key thing here seems to be that he is got properties of each of these things.

So some things are gonna make people happier. Some things are gonna cost money, which is interesting. I didn't really, I think in mine, if it worked, money would just go up. There wasn't any cost to anything. So it's potentially a [00:23:00] bit more realistic, you could say.

Macey Baker: Interesting how they. Like to me, like just the grid setup is strikingly similar.

Joe Holdcroft: Very strange. I didn't prompt for a grid necessarily. I dunno if Simon did, but interesting. But it almost seems like we've got the same number of items in the grid as well. So there's some something around like under specifying your prompts, it's gonna fill in the same gaps and more often than not, it's gonna fill in the same gaps even across different tools, which is interesting.

Macey Baker: We have got for you an edit request. Okay. And I'd like to see where you take this.

Joe Holdcroft: Okay. Macey's giggling, which makes me feel nervous.

Macey Baker: The ceremony of the envelope.

Joe Holdcroft: Add natural disasters. At least two. Super interesting. 'cause that was part of my original game, so it'd be quite fascinating to see how Simon's dealt with this.

Macey Baker: Yeah. I feel like Simon had a bit of an advantage because you had added the concept of like events.

Joe Holdcroft: Already did it.

Macey Baker: On the other hand, the code was in different states.

Joe Holdcroft: Interesting. [00:24:00] So it has, doesn't seem to have the concept. Oh no. There is a hospital, there's no fire department. So what kind of natural, I guess the natural disasters are going to impact the happiness score and the treasury.

So things that make people sad and make us lose money.

Macey Baker: What else is there, would it affect the population?

Joe Holdcroft: I guess it could negatively impact the population. So yeah maybe there's a, I guess a health outbreak is a natural disaster. You could have that could, resolve itself over time, but maybe initially just something that has an immediate impact to happiness or treasury. Maybe something a little more approachable. What's gonna make people unhappy? Oh, what if there's like a, an earthquake that destroys some of the buildings?

Macey Baker: I love that.

Joe Holdcroft: Interesting. All right, let's just start with that initial, initial brief.

Macey Baker: And you're using Windsurf for this and you haven't used it before.

Joe Holdcroft: Using Windsurf? Not used it before, no. Just to get the project set up here I am a regular Cursor user though, so this looks reasonably familiar. So I'm not even gonna look at any of the code. I'm just gonna say maybe [00:25:00] I'll give it a bit for brief.

This project is a tiny town simulator that maintains a treasury amount, happiness score, and users can place different buildings in the town that impact these figures as days progress. Probably don't need to explain it. It can read the code and understand it, but there might be a layer of indirection here.

So I'm just trying to steer it a little bit. I want to add a system whereby natural disasters happen at random intervals. I wonder how it will interpret random intervals.

Macey Baker: Random, yeah.

Joe Holdcroft: In the code I want to be able to easily adjust how often these occur. To start with, there is only one type of natural disaster, which is an earthquake that affects a subset of the grid.

Any building in this subset of the grid [00:26:00] gets destroyed and the following day it disappears.

Macey Baker: Oh, interesting.

Joe Holdcroft: Seems reasonable. So then like it'll have some I'm expecting it to have some sort of broken state like the building is destroyed and then the next day it's gone and it's cleared the way.

And you can put a new building there if you want.

Macey Baker: Nice. I feel like it will, I wanna see if it knows to affect happiness and treasury also. Interesting. Yeah. I feel like we'll figure that out to be honest.

Joe Holdcroft: So I'm not expecting it to affect treasury. You could say clearing the stuff away is gonna cost money.

But you've already spent the money on the building and the building's gone now.

Macey Baker: Oh yeah, that's true. You could say it

Joe Holdcroft: costs more money.

Macey Baker: That's true. Yeah.

Joe Holdcroft: Happiness. I would definitely expect happiness to go down. I would expect the population to go down because each of these buildings has, it has five people in it has 20 people.

Macey Baker: Yeah.

Joe Holdcroft: Maybe they're not all home.

Okay. So I can see it's got some stream of thought here. I'll help you implement the natural disaster system.

So we're getting past the safeguards of these LLMs, which is good. So first it's doing a bit of exploration. It's interesting. It's just saying, let me read this file, let me read this [00:27:00] file. Which is on the one hand it's nice to see the, the thought progression. Yeah. But on the other hand, it doesn't help me in any way.

I guess it makes me feel more confident that it knows what it's doing. So based on the code base exploration, I understand that we need to add a natural disaster system that can randomly trigger earthquakes, implement logic. Okay. So it's just said why I said back,

Macey Baker: oh, was it? I didn't even realize it was still working.

So we've been doing this for a little bit.

Joe Holdcroft: So yeah, so it spent a bunch of time just figuring out what to do and then it said, what I'm gonna do is what you've asked me. So it's created a new file, naturalDisasters.js, which is a great file name, earthquake frequency, 10% chance per day of an earthquake occurring in real life would be very scary.

Macey Baker: I feel like I'm back in San Francisco

Joe Holdcroft: and this code seems, yeah, probably reasonable. There's a loop in the loop which looks fun to work with.

Macey Baker: Has it like, has it stacked? A bunch of changes on top?

Joe Holdcroft: I'm confused. Yeah, I'm a bit confused by this diff it seems 'cause it looks to me like it's keeping all this code and then it's removing,

but this is [00:28:00] at the top of, this is like the imports. This is the top of the file.

Macey Baker: It's just rewritten it and the diff is horrible.

Joe Holdcroft: It's yeah, possible. So maybe what I'll do is I'll just blindly accept everything. 'cause I have such faith, I'm gonna ignore all the lint errors. 'cause I notice when I imported this, there was a huge amount of lint errors, which is a nightmare.

So it's still working actually. Yeah. Interesting. So it's in some sort of iteration loop here. 'cause it's saying now I'm gonna modify it to visualize the earthquake. Now I'm gonna fix some issues. Now I'm gonna fix some lint issues. So maybe what was happening, I was viewing a diff that was out of date and it was changing in an unpredictable way.

Macey Baker: Oh see that's I don't know how user friendly that is.

Joe Holdcroft: Yeah, it's a bit hard to tell what exactly is going on here.

I guess I'm just watching it. It's explaining

Macey Baker: well but that's almost the problem. It's like it's drawing your attention to these things because it needs a human in the loop, but it's also not ready yet.

Joe Holdcroft: Yeah. Like I can't do anything here. Like it's still going. This is make a cup of tea territory,

Macey Baker: oh, it's trying to fix the lint error.

Joe Holdcroft: Trying to fix the lint errors, which might seen as there were [00:29:00] so many, initially it might just send it down a,

Macey Baker: it might be a disaster. Does it still compile?

It looks like it's.

Joe Holdcroft: It currently is. It was in a broken state a minute ago.

Macey Baker: To be fair, like if it takes 10 minutes and then it makes the code beautiful,

Joe Holdcroft: I could, yeah, it's nice that, if I was like rapidly prototyping something here, which is the aim I would like to be able to say, hey, don't worry about linting and stuff so much.

Yeah, I just wanna get something working. It's maybe a little over ego, like a junior engineer that is really keen to impress, which is cool. Finally finished. So it said random earthquakes can occur at the end of each day, 10% chance, random area of the grid, two to four cells in size.

It should up, increase the upper band of that to make it more fun. Oh, visual feedback with a shaking red overlay. That sounds like fun. That's cool. The system, it very confidently says the system is now complete and working, which I'm really interested to find out if that's true. You can adjust the earthquake frequency and size.

So 10% chance, let's. We can't we actually don't have a progress to the next day, do we? 'cause that happens automatically.

Macey Baker: Oh no, [00:30:00] don't tell me.

Joe Holdcroft: Yeah. So it's doesn't look very much like it's working. I'm gonna try restart the server.

Macey Baker: Has it nuked

Joe Holdcroft: it? It seems like the natural disasters impacted it actually worked larger than expected.

But interestingly what has actually changed here okay. It's added a bunch of stuff to this town grid thing for dealing with

Macey Baker: Yeah.

Joe Holdcroft: The cells and clicking on the cells. Okay. It's added an animation for the earthquake effect, which I really want to see.

Macey Baker: Does it need an npm install, maybe? Has it done anything brand new?

Joe Holdcroft: It hasn't changed the dependencies as far as I can tell.

There's a package of lock change, but that's just 'cause I installed.

Macey Baker: Oh, okay.

Joe Holdcroft: NPM installed the code seems there's nothing standing out. And curiously, there's no errors, any front end errors.

Cannot access handle end day before initialization simulator jsx.

So I'm into debugging territory now so that error appears, oh, there's a diff. Do I need to accept all [00:31:00] of this? Accept all,

Macey Baker: oh,

Joe Holdcroft: just blindly accept all. I assume that it just made the changes 'cause it did seem like it's made some of the changes at least.

Macey Baker: Yeah. No, I'm with you. I didn't see that.

Joe Holdcroft: And this doesn't,

Macey Baker: although weirdly it didn't give you a compilation error or anything.

Joe Holdcroft: No, I'm somewhat confused now 'cause it seemed on the one hand I had to accept stuff and on the other hand it's already accepted. This is now not showing a diff,

Macey Baker: but it's in the changes,

Joe Holdcroft: but it's a brand new file. Okay. So we're still getting the same error. Still simulated jsx. So I'm just going to go to simulated Jsx and ask this thing too.

There's a frontend error coming from this.

Macey Baker: Yeah, no, it also says here, right above the chat, zero files with changes and yet there are a lot of diffs showing there's a lot happening in the working tree, which seems like, is that true or not?

Joe Holdcroft: Yeah. I'm a bit confused about the state of and this is an interesting thing about these kind of editors, is you almost have, like on top of git, there's now like a new layer of working copy.

It's [00:32:00] like a change that's been suggested. And my understanding of those things usually is when you accept, it becomes part of your change that you can, that's in your working copy and then you can commit and there's some internal state management. But that does not appear to be working well.

Yes. So that does, seemed like a reasonable fix for the error. I'm slightly alarmed that it's changed so many other things as well. Okay, I know here's the fix for this bug. This is interesting. It says, here's the error, this is why this happened, so I'm gonna fix it. And then it says, oh, I see the issue.

So are the two issues or has it fixed it twice?

Macey Baker: Yeah, that's confusing.

Joe Holdcroft: It says very confusing stream of consciousness and it just seems to be taking upon itself to make unsolicited changes which may be for the better. But with these kind of thing, I'm trying to like scope down the the scope of each change.

So what it could maybe do if this doesn't work is start again with a smaller brief. Like maybe ask it to write this kind of style file for dealing with a part of it. And then I could like layer on the UI part and layer on the other part. But that's me like [00:33:00] adapting the workflow to help the LLM I suppose.

Macey Baker: Yeah. I think it's not a bad shout though, but I also don't think that you asked for anything insane. It wasn't like, no, it wasn't like a list of five things you wanna change. It was just like, add the concept of this and sometimes we see at work that when we're overly prescriptive, it actually has the reverse effect.

It's this is over specified and that will also make for a bad program. And I don't feel like you did that. You let it do its thing. Yeah. You gave it an open-ended thing and it's it seems to really be struggling.

Joe Holdcroft: And this is the point I think of these, this kind of workflow, right?

Is it can edit multiple files and hold like a bunch of context in its in the window a single time. And I wouldn't expect to have to break the problem down into, unless I was very opinionated about what the design should be. Yeah, I want to have this file for managing this stuff and this file for managing this stuff.

I would expect that it could fill in the gaps and get it working. I wonder if it's getting tripped up because there's so many linting [00:34:00] issues. I wonder if I just remove the ESLint and say, look, I don't care about linting.

Macey Baker: I think that's a good idea. And just for people listening like this, it really is in a bit of a loop.

So it's now said, I see the issue.

Joe Holdcroft: Yeah, I see the issue. I see the issue. I see the issue

Macey Baker: edited simulator. Search code based for the same function. Then again, I see the issue now we have duplicate declarations. I feel like we

Simon Maple: barely got started here. So I've deleted the ESLint config in the hopes that this will make the editor understand that I don't care about linting and I've canceled this confusing loop.

I don't know if I can change, if I can clear this context window. Okay. Start a new conversation. Where do we get to,

Macey Baker: we didn't get terribly far with that.

Joe Holdcroft: Okay. So we're gonna try and fix this again. So in simulator,

Macey Baker: so now we're asking for help to like actually fix this.

Joe Holdcroft: Just fix this one button,

Macey Baker: which we introduced because our thing still isn't rendering, which is sad.

Joe Holdcroft: Exactly. If this does a better job, then it might be that if we'd done the original amend after we deleted the ESLint [00:35:00] config, then that would be good. But it is curious that BASE44 has generated an application with quite an extensive ESLint configuration, and the code that it has made is not compliant with that ESLint configuration by any means necessary.

There's a bunch of lint errors that it it is so raises the question of what's the point?

Macey Baker: Yeah, why even add it? But then also because it's such a closed environment, I'm sure in their case, like they just don't, it just gets general. Maybe it's like a leftover artifact. Yeah. They obviously don't suffer with the same issue,

Joe Holdcroft: no, but it's like I, maybe they're opinionated that this is a good thing to have in a project to keep it clean, which is true, but only if you actually write code in that way,

Macey Baker: yeah, exactly. Why give us more work?

Joe Holdcroft: Okay, so it seems to found itself in a loop. Again, I know it says a duplicate declaration of handle end day in the file.

I see that handle end day is defined twice. Okay. So I feel like I might need to intervene here and do some manual fixing. 'cause it might not even be that.

Macey Baker: I have a suspicion about what's going on here that I can't [00:36:00] necessarily prove. But I think what might be happening is it goes through this loop, it finds something that's wrong, fixes it, then analyzes its own diff and then is like there's two declarations of this.

Joe Holdcroft: Oh, interesting.

Macey Baker: Yes, because you have just written a new one.

Joe Holdcroft: You did that? Yeah.

Interesting. I'm,

Macey Baker: it seemed, because it does seem to be upset about its own diff, which is a real issue and at this point it's like, why don't I just manually,

Joe Holdcroft: I'm gonna see if I can manually fix this.

Macey Baker: Get rid of one. Yeah.

Joe Holdcroft: Basically this function handle end day, it's called here, but it was defined further down, so I'm gonna make it the first of these blocker functions.

Macey Baker: Nice

Joe Holdcroft: possible that's introduced more bugs, but let's see.

Okay, so same thing with handle delete building, which is frustrating. So it's got the order of these things wrong. It's a pretty basic thing, but

Okay. All [00:37:00] right. I think we're back.

Macey Baker: Oh, we're back.

Joe Holdcroft: We're back. Okay.

Amazing.

Notable that, that took me like two seconds to just fix myself. I was interested in getting the LLMs to fix it for me.

Macey Baker: Yes. Very notable. Okay. What state are we in now? What are we expecting to happen?

Joe Holdcroft: We're expecting that there's a 10% chance each day of a earthquake happening, so perhaps what I should do is raise that to 70% to actually test where this is happening.

I'm gonna make that 80%.

Macey Baker: Yeah. I can immediately see Joe's gone straight to the code to do that because I think we're,

Joe Holdcroft: I don't trust the LLM anymore.

Macey Baker: Feeling a little cagey about the chat.

Joe Holdcroft: Yeah. So yeah, I'm expecting it said there's some shaking animation, which I'm interested to see if it's done a good job.

Macey Baker: Yeah.

Joe Holdcroft: I'm gonna put some more buildings. What's the cheapest building? A small house?

Macey Baker: Now the, remind me, the earthquake is meant to happen like in couple of squares, right?

Joe Holdcroft: Yeah. An area between two to four squares of assuming squared.

Macey Baker: Okay, I see. So you've kind of battle shipped your houses. Yeah. To catch the earthquake.

Joe Holdcroft: I've spent all [00:38:00] my money here but it should be an 80% chance, so I could change it to a hundred percent chance to really keep things moving here as well. Okay. 100%. Oh, that's nice. It suggested the comment that was a very fast autocomplete. Okay, so when this day ends, there should be an earthquake somewhere.

Macey Baker: Okay. Five.

Joe Holdcroft: It's quite alarming.

Macey Baker: Yeah. I'm nervous.

Joe Holdcroft: Interesting. And the animation is actually pretty, it's pretty good. LLMs are pretty good at generating CSS animation code, it turns out.

Macey Baker: Yeah. I'm actually impressed by that. And it it scared me.

Joe Holdcroft: So that's a good measure of success though.

Macey Baker: I'm impressed.

Joe Holdcroft: But it somehow managed to hit an area of the map where I don't have any buildings, which it's quite impressive.

Macey Baker: I thought you did have one there.

Joe Holdcroft: Oh, maybe, maybe. I thought I didn't, unless it disappeared immediately in that midnight, I didn't see it. Okay. Everyone pays special attention now.

Macey Baker: Okay. I was looking at happiness and it went down only 1%.

Joe Holdcroft: Oh, interesting. Is that just because happiness just generally [00:39:00] goes down over time, though?

Macey Baker: I think it does. Wow.

Joe Holdcroft: There's a story there about life.

Macey Baker: Simon coded it, so

Joe Holdcroft: we'll chat about that at the end. Oh, there we go. Yes.

Macey Baker: Oh my God. Yeah.

Joe Holdcroft: So it did,

Macey Baker: house disappeared.

Joe Holdcroft: The house disappeared. It did, if I was nitpicking, the house disappeared immediately. I was expecting it to be like broken for a day and then disappear but that doesn't really matter.

Macey Baker: It didn't have its broken state. Now what happened with your money? So happiness definitely went down.

Joe Holdcroft: Happiness went down. Is it going down all the time? We should check. Money didn't go down, but I think you can imagine a world where that kind of makes sense. Like the cleanup costs, we can maybe factor it in. I would be bankrupt now. Did population change what we'd have these take so this is 20 and then this is.

Macey Baker: Everyone focused on the current stats.

Joe Holdcroft: This population should be 40, which means that the earthquake didn't kill anyone, but they're now unhoused. Oh, I see. But I didn't prompt it to be murderous earthquakes. So that seems fair.

Macey Baker: Okay. Here comes another

Joe Holdcroft: [00:40:00] happiness went down again, unclear whether it went down just because of the day, but I have changed it to a hundred percent.

Macey Baker: You gained money, which I think that's definitely wrong.

Joe Holdcroft: I think that's just because these buildings earn me money every day. Oh yeah,

Macey Baker: okay fine. So your rate of money is going down.

Joe Holdcroft: Yeah, it's very true.

Macey Baker: But the actual treasury isn't being affected. Fine.

Joe Holdcroft: Very true. Very true. Okay, so we've got some natural disasters, but that does say at least two, I've only got one type of natural disaster.

Macey Baker: What's one you could add in two minutes.

Joe Holdcroft: What about, rather than it being like one of these burns down, what if it's like a lightning strike that is like a single square,

Macey Baker: A single house.

Joe Holdcroft: A single square gets hit and Yeah, it's like battleships, right? And then it'll be interesting to see what new like design it comes up for this.

Okay. So yeah, let's see. I'm gonna commit this stuff.

Macey Baker: Oh, smart real developers.

Joe Holdcroft: Conventional commit there as well. Cool. Alright, let's start a new chat. Add a new natural disaster for lightning [00:41:00] strikes. A lightning strike affects a single square on the grid. And if there is a building in this square, it gets destroyed. Happiness goes down when lightning strikes.

And it goes down more if a building is destroyed, I'll let it figure out what numbers it likes.

Create a cool animation for the lightning similar to the one we have for earthquakes. Make the frequency of lightning configurable. I would be interested to make it not just happen at the end of the day, but to happen throughout the day. But I don't want to overload at this point.

Macey Baker: Yeah, I feel like our trust is fragile with this thing.

Joe Holdcroft: Yeah,

Macey Baker: unfortunately. And I'm gonna be watching it like a hawk. 'cause last time it just seemed to mess everything up and took ages.

Joe Holdcroft: I think it got in a really confused little loop didn't it. So it's examining the existing natural disasters implementation even though it just wrote it, [00:42:00] but it is a new chat.

Macey Baker: Yeah. Again, like the context management for these tools I think is fascinating.

Joe Holdcroft: What an easy job Simon must have had there, already had this all implemented but not working.

Macey Baker: Yeah. I'm curious, I want him to tell you about some of the things that he did 'cause a different approach as well. This is like a reasonable approach, I think what it's doing here.

Joe Holdcroft: Yeah. It seems credible so far what it's done here. This component is getting really big and complicated, so I think it's likelihood of confusing itself is high.

Macey Baker: Oh, I can see it's.

Joe Holdcroft: Made this a bit more generic.

Macey Baker: I can see it's animation it's chosen, a 'fade in' Yeah.

Joe Holdcroft: Yeah. Faded in and out. By the looks of it, it does look like it's got less confused than it did last time so far.

Macey Baker: It does feel like it's got, has got quite a bit less to do now.

Joe Holdcroft: That's true. It's already got all the scaffolding. It's got concept of random disasters.

Macey Baker: This always seems to be taking longer than expected.

Joe Holdcroft: It's interesting that it said yes to itself. It's in this like weird sort of [00:43:00] speaking to itself mode. Oh my god, you're nice. I need to check. Oh yes, we do need to do that. Okay. It's made the changes. I can't be bothered to read all that, but now

Macey Baker: we need to remember to accept.

Joe Holdcroft: I'm gonna blindly accept it, but again, I noticed that it's already in my working copy. I don't think accept actually does anything other than tell Windsurf that I'm happy with it. Whereas I imagine reject would revert these files. So again, that's

Macey Baker: it's not committing it.

Joe Holdcroft: Not committing. It is making the change to the file, so it appears in my working copy.

Macey Baker: Yeah.

Joe Holdcroft: But so accepts, I think is like a, no, op doesn't do anything. It just allows this to understand that I'm happy. Okay. So there's no errors, which is good. I'm going to increase the chance of lightning to a hundred percent. Oh, I've lost some more buildings actually since we last looked at this.

But I don't have anywhere near enough for any interesting buildings.

Macey Baker: But can you increase the buy more houses speed of the day?

Joe Holdcroft: Oh, interesting.

Macey Baker: To be like, I'm searching 60 seconds.

Joe Holdcroft: Oh, yeah. 60, isn't it? Lots of things are 60.

Macey Baker: Yeah. Is it obvious?

Joe Holdcroft: Time left.

Macey Baker: Oh, here we go.

Joe Holdcroft: [00:44:00] But I think that, yeah, there's a magic number that's used in a few places.

Macey Baker: Oh God. I hate when they do that. That's a really common, like LLM thing

Joe Holdcroft: it did an earthquake.

Macey Baker: Okay.

Joe Holdcroft: I need to reduce that to. 0% chance. Okay. Let me go into simulator and I'll tell what, I'll do that in a new chat just in case.

Macey Baker: Okay, cool. I like it's making some change. It seemed to grok that immediately, I feel like the issue before was just, it was a complicated thing that we asked. I wonder if Windsurf like do they specifically advertise that they're better at targeted changes rather than sweeping changes?

Joe Holdcroft: Interesting. Not sure.

Macey Baker: 'Cause I would say Cursor's pretty good at sweeping changes.

Joe Holdcroft: I must admit it's not really part of my workflow so much, like doing these like big, add this feature kind of thing in the, in my day to day, I'm more kind of thinking how I'd break down the problem and give LLMs smaller problems. 'Cause I'm working in a code base I'm much more familiar with and there's established patterns and things like that

Of course, maybe i'm [00:45:00] missing a trick there.

Macey Baker: I wouldn't say so. I'm sure you're making like much more targeted changes and you're able to explain with some precision, whereas this is there's no tests, there's no rubric. It's just,

Joe Holdcroft: oh, okay. Let's see. Aha, there you go. There's lightning. It's decided to impact two squares by the looks of it.

Macey Baker: It has, it's picked two squares. The animation is cool.

Joe Holdcroft: It could be that the logic is only one square, but it's got the size of the thing wrong, I suppose, it would be difficult for us to test that. I've only got enough money for two more houses. I believe I just saw in the code actually that I think this is in local storage, so I might be able to I'm gonna give it myself a lot more money.

Macey Baker: Oh wow. Oh, is that how you do it?

Joe Holdcroft: Fantastic. Cool. Let's go spending! Interesting that it thinks, it thinks the power plants take up four, but it only visually takes up one. But I like the idea of a building, being able to take up more space. That's cool.

Macey Baker: Yeah, I think that's a cool detail.

Joe Holdcroft: Put some parks around. Interesting that we might need to put a little [00:46:00] exception for parks lightning shouldn't destroy an entire park. Or maybe it will.

I guess it depends on the,

Macey Baker: that's brutal. It seems to be your style. Why is happiness so bad? Oh, it's 'cause of the power plants. Ah,

Joe Holdcroft: yeah, yeah,

Macey Baker: yeah. Bad news.

Joe Holdcroft: And there's lightning every night.

Macey Baker: They just had 50 earthquakes in the road.

Joe Holdcroft: This town is having a real tough time.

Macey Baker: Starting to rebuild though would be such a shame if

I wonder how, I

Joe Holdcroft: wonder if there's a minimum cap on the happiness. My happiness is at zero. I've got 0% approval rate in this town, which is fair enough.

It's mostly power plants. One, one poor house, two houses.

Macey Baker: You weren't elected. So there we go.

Oh, there goes the lightning. There we go. Alright. So did something get destroyed?

Joe Holdcroft: There wasn't anything in that gap by the looks of it, but assuming that it works I'm pretty happy with it. There's 70 people living here, which. I dunno where they're all gonna live. 'cause there's two condos and one house. Ah, said index. Always fun.

Macey Baker: They should honestly leave. Yeah. This is, that's my [00:47:00] opinion.

Joe Holdcroft: This is not the kind of town you wanna live in, I think.

Macey Baker: No, but I will say, Joe, I think you, you nailed it. You did two natural disasters.

We had a bunch of faff, didn't we? But we did. You did it. Congrats.

Joe Holdcroft: Thanks.

Macey Baker: Good job.

Joe Holdcroft: Thanks. Thanks. That was good fun.

Macey Baker: Okay, let's bring Simon back here and debrief.

Joe Holdcroft: Sounds good.

Macey Baker: That was so fun. So you guys ended up with projects that I feel were pretty similar. But you took very different paths to get there, and importantly, you used two new tools each, which is crazy.

Yeah. How did you find them?

Simon Maple: I really enjoyed BASE44 actually. As a Bolt user I saw a lot of similarities. I felt like BASE44 got me to what I wanted much, much quicker.

Although, to be honest, watching the way you had to take my code and all the dependencies that it required into BASE44 was actually really frustrating. But I really had a good time with BASE44 and in generating the, like doing the prototype. How about you?

Joe Holdcroft: It was good [00:48:00] fun. I found the sort of zero to one like going from a short little brief into a pretty useful and well designed app was quite impressive. It's a bit like Uncanny Valley in that it's a bit like an IDE, but a lot of the IDE functionality isn't there.

So I found myself like going to use things like command click on something, but that's not working, which is a bit weird. But I guess maybe I'm a bit more of a power user. I definitely imagine it as something that would be helpful the next time a friend or a family member ask me, oh, can you help me make this app? There's something for that.

Simon Maple: Disposable apps, disposable code. It's very nice for sure, for that kind of use, for sure. And I saw you struggled a little bit with oh wow. I'm looking at your screen. There's lightning happening all over the place, so it's terrible to see.

Joe Holdcroft: Yeah I have created a poor, very poor town. They're having a real hard time.

Simon Maple: How about with Windsurf? I've not used Windsurf, I typically stick, stick with Cursor. Just 'cause I used it a fair amount.

Yep.

How about you then with Windsurf? What do you, how did you like that as a power Cursor user yourself?

Joe Holdcroft: Yeah, yeah. Pretty similar, a lot of the same kind of concepts. They were coming up with like fun names for the chat thing going on in the sidebar, but the [00:49:00] interaction model feels very similar. I'd say that I probably used it in a way that I wouldn't normally use Cursor, like in my day-to-day work, for example where I'd, think about something, break the problem down and scope the changes a little more localized.

Whereas here I was just, I don't know the code base, I don't want to understand it. I want you to implement this whole sweeping feature. So maybe a bit tricky to compare them but yeah, I found the management of the state of my changes tricky to figure out.

Like at what point is it actually editing the files on disc and at what point is it showing me a suggestion of something that it will edit, which I think is a common problem that they also have in Cursor that's exacerbated if you're working on a big problem and it's taking a long time, I can't also be refactoring something else because then I have a mix of a bunch of different things going on, and that makes my commit history a nightmare. Alright.

Simon Maple: I found Cursor, as a Cursor user myself. I wasn't learning anything new per se in, in doing this.

I found it extremely hard to take it to that next level and to actually build on top of it because every time I was in that horrible, frustrating loop where it's I wanna make a change. It says it's made [00:50:00] it, but actually I'm seeing further problems or the same, the same output.

Interesting. And then I'm constantly in this loop of, actually this didn't happen. Can you fix it? Yeah, I've fixed it. Oh, it's still a problem. Can you fix it? There's still the problem. And that was very frustrating. But that's the classic prototype, quick fix issue.

Joe Holdcroft: Maybe that is a bit of a difference with Windsurf because it did seem to want to try and fix problems.

And actually that in itself became a problem. Yeah. That the app that you delivered had an ESLint configuration, but a lot of the code had loads of violations of that ESLint configuration. So my interpretation was that Windsurf was getting in a loop of, oh, I notice all these lint issues.

I'm gonna fix them. I notice all these lint issues, I'm gonna fix them, even though it hadn't introduced them. Yeah. So it's nice that it's trying to respect the configuration of the environment and keep things clean. But yeah it was a particular case where it confused the hell out of out of Windsurf and we had to remove the ESLint configuration entirely so that it stopped trying to keep it at this quality bar that it wasn't at originally.

Macey Baker: I felt a little bad Joe, that I think [00:51:00] in both cases you got maybe the short straw. It's very hard to say about these tools, but Simon was able to get to a working prototype basically immediately in BASE44, and he really didn't spend any time debugging in BASE44 in fact you did not even look at the code.

Like we, we looked to see that it was there.

Yeah.

But did not read it at all. There's just no need whereas Joe immediately got into this, asked for virtually the same thing, right? But immediately got into this death loop

and

Simon Maple: you'll love my first prompts as well. Because I I started writing down some ideas of these are the things that I think we need.

I'm thinking Sim City, and I was, then I got to the prompt and I'm just like, I was about to type in a whole bunch and I'm like, actually no, there are five words I need. And it was the exact five words Macey wrote on the, a true brief. And it came back with this it took a while and I was getting a little bit worried, it took, in fact, Macey you probably saw both, I think BASE44 in my experience with Bolt, took a lot longer than Bolt would've done if I prompted it in [00:52:00] exactly the same way. But once it did come back, it was, I'm gonna say solid from the point of view that as a prototype app, it worked. And clicking around didn't actually create too many issues. It just worked.

I think, I'll have to look back at it, but I think I probably used five prompts or fewer to get it to this point, which is surprising. It just kinda just took a large amount of time and I was like given the prompts that Macey gave me was so short, I kinda like pretty much hit that within the first prompt that I gave BASE44. Yeah, the problems, I guess if we think about it from the team point of view, unless everyone's using BASE44, it started putting, adding in auth, it started adding in its own kind of persistence layer. And it wasn't perhaps I, in hindsight, I would, I would potentially kinda add from the start, don't add your own authentication.

Don't add your, don't use your own persistence models. In fact, for those listening, I did have to, I did have to go offline and make my own changes to say use local persistence and things like that. Yeah. So that you could continue. [00:53:00] So very interesting.

Joe Holdcroft: Yeah, there's a bunch of that kind of lock-in out the gate with BASE44.

And I think with these kind of things, they work well when you're not super opinionated on, you, you have a great example there. You wanted some sort of town simulator, but you weren't super opinionated about the features that it had. And in some ways that's really helpful to like, think creatively to expand the scope.

But if you're coming to these stores with a strong idea of the kind of thing that you wanna build and exactly how you want that to look and work, it's a bit of a different story.

Simon Maple: And it's interesting actually. So did your environment use local persistence or local,

Joe Holdcroft: I dunno, because I couldn't get the state management to work.

Simon Maple: Gotcha. Interesting.

Joe Holdcroft: I think it was just like it like within memory essentially. So if you refresh it would lose it. Yeah. But I can't quite remember. And it was unclear because it wasn't working.

Simon Maple: Yeah. Because I was surprised actually thinking about it wouldn't use Supabase, which is actually, say for those who aren't familiar with Bolt, Supabase, Netlify are the zero friction paths to do these kinds of things.

So it, although it wouldn't be a similar lock in, in terms of the same BASE44, I'm [00:54:00] surprised it didn't just try to go, oh, do you wanna use Supabase as your persistence layer and things like that.

Joe Holdcroft: Yeah. Yeah.

Simon Maple: I was quite surprised at how fast we could get to this prototype, particularly with BASE44. I was quite surprised at how hard it was to get further with Cursor with your environment.

Hitting that many problems. Interesting. But yeah, I think there's been a fair amount of magic on show today.

Joe Holdcroft: Were you able to get mine, my state management working?

Simon Maple: To be honest, similar to how I've experienced your code in the past where I wasn't able to progress your application any further than what they much you had.

Joe Holdcroft: So that is unfortunate. Yeah. Yeah.

I'd say that's because I didn't hand write it, but yeah. Yeah.

Macey Baker: Something that's interesting that when we were imagining what we do for this episode, we imagined that you both would do this and neither of you did this, and that's ask Cursor or Windsurf or whoever for an overview of the code. Yeah. How, what is this and how does it [00:55:00] work? Interesting. Both of you had the exact same process, which was like maybe a little impeded in your case, Joe. But it was to get the thing running without really looking at the code, without examining any more than he needed to.

And then just diving into the edits, there's really I just, we didn't anticipate necessarily that would be the process. Thoughts?

Joe Holdcroft: It's interesting workflow wise, like in a code base, I don't really care about the quality of it and I need to make quick changes. And I like, I'm just here to add features, not to maintain this nice garden of code.

Why do I even need to understand it? If the, if I can get the the LLM to do the changes for me and I can validate that they at least seem to work in the browser, it's enough for this exercise.

Simon Maple: I agree. And I think actually it was probably for the sake of brevity that I didn't think about it too much in terms of, I actually thought as well, I was talking with Dion actually while you were doing yours, and I thought, actually what I'll probably do straight away is I'll ask Cursor, tell me about this

But actually, once I got there, I just thought, I just, I don't need to, I just know what I want to do and probably, we're all under [00:56:00] time pressure, so we'll probably do something similar even in a real world situation to some extent. But but what I really liked in your example was you tried to give it context to the very first thing that you did was describe what the application did, which is really interesting.

I'd love to kinda understand maybe, with and without that, if it would actually have done it differently. Had that just assumption that use this app as your context. You should already know this in more detail than I could provide you with.

Interesting. And it's fun how you were trying to tell it what it was doing, given that you hadn't even looked at the code as well. So you were doing it from a very high level of trying to explain to it when it probably knew it better than you did at the time.

Joe Holdcroft: Very true. It seems crazy, but my rationale was that it can see the code, but it can't like, see the interface, so I wanted to like, give it a little bit I wanted give it some eyes intent almost. Yeah. Here's all this code, what's the point in it? What is this driving? Yeah. I have no no data on whether that helps or not. It just intuitively like I'm working with this thing that's blind to one whole aspect.

Yeah. Yeah.

Macey Baker: So I have a final [00:57:00] question for Simon. So towards the end of Joe's prototyping, he did something unrelated to the functionality of the app which was designed to maybe throw you off course a little bit. Can you, do you have any guesses as to what that was? Was it obvious?

Simon Maple: Designed to throw Oh, I see. He desi he did something to his app that was designed to throw me off course. Interesting. I can't think of anything that would throw me off. What did he do?

Joe Holdcroft: Oh, did it did get scoped down. It did get scoped down quite significantly. Oh really?

Simon Maple: No, I can't think. I can't think, what was it?

Joe Holdcroft: I felt bad. So initially my first instinct was to ask it to make the code as illegible by human as possible. Oh, turn into something that looks like compiled code.

Simon Maple: Yeah.

Joe Holdcroft: But considering the app wasn't even working, I thought that was a really unfair handicap. Yeah. So instead I asked it to replace like, function and variable names with funny and misleading names. Ah. And we were right pushing up on time here and I don't think it did a good job.

LLMs, maybe not [00:58:00] great interpreters of the word funny.

Simon Maple: But that's almost a little bit dangerous 'cause it's using that as context, so it would almost confuse itself a little bit with that potentially. For sure. Interesting. I thought you were gonna name the town Basingstoke and I completely missed it, but that's interesting.

Joe Holdcroft: That's an even better idea.

Simon Maple: I jokingly said I was gonna obfuscate the code for you at one point you, but no, which is fine anyway. 'cause neither of us really looked at the code anyway, apart from yeah. You were having those various troubles with that, with Windsurf.

Joe Holdcroft: I wonder how, whether that would've thrown the LLM off if it is it's dealing with super obfuscated code.

Yeah. Or whether it would just be able to figure it out. Yeah.

Macey Baker: Yeah. I have to say as choice, like one of the choices it made was renamed the variable initial state to initial chaos.

Simon Maple: Yeah. Oh, I did see that.

Macey Baker: You were like, oh initial chaos is, and you just didn't even know

Simon Maple: It did clock. And I thought, oh my God, if I bring this up, would it sound stupid? But there was something in my mind where it's like, initial chaos? Why would there be Yeah. That's it. That is really interesting. Yeah. I'm gonna have to, yeah.

Macey Baker: Maybe not the [00:59:00] funniest twist.

Joe Holdcroft: No, I did want to push that a little further, but running outta time there.

I

Simon Maple: should have done it in another language. I should have said, change everything to French or something. Yeah. Awesome. That was fun for me. We hoped to time box this in an hour. We did it in just over three with lots of tweaking and stuff off air. Thank you everyone for listening. This is a very different style session to to, that we normally do. We hope it was interesting to you. We hope it was good fun to introduce maybe one or two new tools across the four that we showed today.

And yeah. Thanks for watching and listening and tune into the next session. Thanks very much. Bye for now.

Thanks for tuning in. Join us next time on the AI Native Dev brought to you by [01:00:00] Tessl.

Subscribe to our podcasts here

Welcome to the AI Native Dev Podcast, hosted by Guy Podjarny and Simon Maple. If you're a developer or dev leader, join us as we explore and help shape the future of software development in the AI era.

Subscribe to our podcasts here

Welcome to the AI Native Dev Podcast, hosted by Guy Podjarny and Simon Maple. If you're a developer or dev leader, join us as we explore and help shape the future of software development in the AI era.

Subscribe to our podcasts here

Welcome to the AI Native Dev Podcast, hosted by Guy Podjarny and Simon Maple. If you're a developer or dev leader, join us as we explore and help shape the future of software development in the AI era.

THE WEEKLY DIGEST

Subscribe

Sign up to be notified when we post.

Subscribe

THE WEEKLY DIGEST

Subscribe

Sign up to be notified when we post.

Subscribe

THE WEEKLY DIGEST

Subscribe

Sign up to be notified when we post.

Subscribe

JOIN US ON

Discord

Come and join the discussion.

Join

JOIN US ON

Discord

Come and join the discussion.

Join

JOIN US ON

Discord

Come and join the discussion.

Join