The New Era of Developer Workflows

KBall (00:06.936)
Who's gonna go first? It's a stare down.

Nick Nisi (00:09.821)
Yeah.

KBall (00:13.87)
All right, well, hello, welcome to the Dysfunctional Podcast where we start today dysfunctionally by looking at each other and saying, who's gonna start this conversation? We got Nick Neesee here and me, K-Ball, and we're gonna talk today about changes in our development workflows and what we are doing differently. It feels like, I don't know about what your sense is, Nick, but it feels like my dev workflow has changed more in the last six months than...

Nick Nisi (00:25.511)
Hoi hoi.

KBall (00:42.414)
probably had in the last in the 10 years before that, but I'm kind of curious what you're seeing.

Nick Nisi (00:49.757)
Same. Mine has definitely changed. I mean, part of that is coming back to reality where I can use Neovim regularly and have fun. But now that I'm back in Neovim, there's no way I'm moving to any of these AI editors that are not Neovim.

KBall (01:07.776)
All right. Whereas I've been whole hog on cursor, which has been like the thing that finally brought me into the VS code world. I have a love hate relationship with it. I hate the VS code part, but I do love a lot of the different things that you get from cursor in particular, their newest agent stuff with some of the latest models just blows my mind and I can share some like what my workflow looks like now.

There's no resemblance to the writing code that I used to do. But also their suggestions and inference stuff is just really good.

Nick Nisi (01:45.777)
Yeah, I don't know. Maybe as someone who has never even opened Cursor or seen what it looks like or observed workflow, I can tell you that you don't need that.

KBall (01:58.166)
I don't know. But what I'll tell you, so let me let me tell you what my an example that I just thought was amazing. And it just like kind of once again, it kind of blew my mind. So last Friday, I one of my teammates shared a paper about an interesting technique research paper interesting technique people were using for LLM agents. And they had this sort of internal thoughts model sort of chain of thought plus diary type.

technique that they were using. It says before you do an answer, like think about your answer, look back at how you've previously thought about things kind of. And they found in the paper that it led to sort of increased consistency and conversations and like some benefits. And I thought, Hey, I'm working on a tool that has an LLM conversational component. What if I integrated that? And so I fired up cursor and I opened up the agent and I said, Hey, I want to build a inner thoughts.

component, and we call it a middleware, that's going to go into our agent and take a look at this document and this document for how we design those middleware. And here's the agent I want to put it in. And I wanted to do these things. I wanted to put this in when we're running a prompt, and I wanted to pull that data back out again from the prompt and put it in the structure and write me a spec for what that would look like. And I did that in the agent with Claude37 Sonnet Thinking. And it

thought for a while and it goes and it looks at the files that I referenced and it searches a few more files and then it writes me a spec and I looked at the spec and I said, well, this is like 80 % here, but remove that, remove that, change this in this way. Did some of that by hand. And then I said, okay, good, go build it. And it built it. And I looked at it and like maybe did one or two tweaks, but that was about it. Fired up the dev server and tested it and it worked. And so it was like,

approximately 20 minutes to go from, just read this interesting research paper with a technique I want to try to I have a working prototype in my development environment that is running that implements this. my flow to get there was have a conversation with an LLM about writing a spec, review that spec and edit it, and then tell it to build it.

Nick Nisi (04:16.356)
Mm-hmm. Amazing.

KBall (04:20.802)
It just, kind of blew my mind. know, it's like, what is this world? Is this what writing software is? I think this is what writing software increasingly looks like. It's understanding your system enough and the documents in your system enough to point the LLM in the right direction. The same way you might like a newer engineer or junior engineer and say, okay, go and do this thing before you actually build it, write me a spec about how you're going to do it. So then I can review it and correct it and tell it where it's wrong and like make sure things make sense. And then just tell it to go build the thing.

Nick Nisi (04:22.684)
Yeah.

KBall (04:50.104)
And if you have good linters and tests in place, it can even self-correct. Like one of the things that's really fun to see is like, it'll try to build something and it'll be like, the linter's complaining. Hmm, let me look at that again. it didn't work because of this and this. Let me fix that, right? Like it'll just kind of go and spin on its own and figure things out. It's like, you have this like term vibe coding. I feel like vibe coding is the prototype version, but the production version is you integrate some amount of like,

specking and docs and review and you integrate guardrails like types and unit tests and all those things but gosh it's it's wild it flies

Nick Nisi (05:30.193)
Yeah, so I don't disagree with any part of that workflow, honestly. I am curious about it though, before I ask more deep questions. You said you were doing that with Claude37sonnetthinking. Does that mean like you're at Claude.ai and doing it all in there, or is this like in cursor or... Okay.

KBall (05:50.83)
It's it's in cursor. It's a little side window on the side of my right. If you imagine your VS code interface, which most people are familiar with. All right. Well, imagine your Vim interface where you've got the file menu on the left still and you have your main text window open a little pane on the right that is a conversational chat. And in that conversational chat, you can select, I want agent mode, which is the default now. And that's what I was using here. You can select which model.

Nick Nisi (05:58.972)
Nope, can't do it.

Nick Nisi (06:11.856)
Okay.

KBall (06:20.098)
you want it to talk to and you type a thing and you can add reference files to like point it at this context or this context and really like help direct it. But you type it and then it will go and it will sort of operate and show you what it's doing. It might just spit out some text. It might ask, hey, I want to create any like command line stuff it's going to do. It asks you to run it. So it asks for permission, but it might be like, I need to create these directories or I need to do this thing.

but it will go and it, because it's an agent mode, it like will do a thing and then it will, sort of assess itself and it'll keep going. And so like it uses the lint. It appears to use the linting in VS code, automatically to do it, but it will also sometimes like be like, all right, can you, you know, I wrote you these specs. Can you run them and run them? And it's like, that failed like.

Nick Nisi (07:01.511)
validate.

KBall (07:19.628)
Let me figure out why I'm gonna insert logging. Rick K run them again. Let's look at what that looks like. And it'll literally like insert the traces that it needs to figure out what's going on. It's banana pants.

Nick Nisi (07:31.592)
That's cool. Okay. Yeah, I'm on board with this for sure. I do it slightly differently, but also very much the same. I just use Claude code now to do that, which effectively does the same thing, but just from the command line. And I think I talked about this before, but I was blown away by just, you know, asking it to do something and then it broke a bunch of tests. And then I told it that and it was like, okay, how do you run your tests? And it just ran them and then did that in a loop until it fixed them and then continued on.

and cost me $4, but yeah. It's a pretty interesting way to do it. Now to get to the philosophical piece of this. You did say like, this the future of coding? Is it? Is this as fulfilling?

KBall (08:22.584)
So...

Nick Nisi (08:22.845)
Meaning meaning like like I know, you know You're gonna come out and say oh It gets me to the result faster and the results what matters and I I agree with that I would like playing I just uh, just played the last of us just now, um, like over the past week and beat part two finally because the season two is right around the corner and I don't know. I just got to thinking like Is this like like every time I got to something hard I just

I could just go and reset the encounter and I could do it again and Every time I get to something hard in code instead of like thinking deeply about it. I Might just go ask something to write it for me. And is that Is do I actually like rogue like games? Is that I guess where I'm coming from with this?

KBall (09:12.674)
Yeah, I mean, there's so many layers to this question, right? So one, there's like, what's the point? What are we doing? Right? Are we trying to achieve? Are we doing this as a job where we're getting paid to achieve some outcomes? Are we doing it as a hobby because we enjoy the craft of it? Are we combining the two? There are still people who do hand woodworking. I have not bought hand woodworked furniture in a long time. Right? And so like, there is a piece around that.

Nick Nisi (09:25.266)
Mm-hmm.

KBall (09:40.566)
I also do think actually there's a, like we use writing code for a number of different things. Sometimes we use it to achieve an outcome. Sometimes we use it as a way to try to understand what's going on, right? And it is my belief that at least right now and probably for the foreseeable future, if you're doing serious software that you expect to maintain and evolve over time, you still need to

create a solid mental model of how it works. Right. So the example that I chose where I was like, I just had this conversation with the LLM to do it. Like that worked because I knew our system and I was able to say, okay, I want it to look like this. It'll fit in in this place. Here's the correct documents to look up and do on that. And if I hadn't done that and when I haven't done that and provided context, it like goes off into weird places and left field and like creates slop that is not valuable.

Nick Nisi (10:11.718)
Of course.

KBall (10:38.19)
there is this sort of.

Nick Nisi (10:38.321)
Mm-hmm.

KBall (10:46.85)
there is a trajectory that it is getting better at figuring things out on its own. And that getting better is a combination of the models themselves getting better, but also the tooling around them, right? Cursor is developing its own set of prompting and techniques for here's how I search and index your code base. And here's how I look for what this is and what that is and all these different pieces. And so there is like, I was joking about this with my teammates where like there's sort of a world where it does all the...

that interesting stuff and we end up being the ones that are fighting with why won't Docker boot this image properly or why won't, right? Like we're the gophers for the stuff that's not well integrated and that blows as a job. Like I don't want that job.

Nick Nisi (11:17.328)
You

Nick Nisi (11:21.842)
Yeah.

Nick Nisi (11:29.917)
That's like when LLMs first came out and they're like when people started really playing with them and it's like look it can do a whole bunch of art but it can't do it can't do code very well or or like useful things and it's It's slowly getting there. But yeah, it's It's leaving the slop for us

KBall (11:42.657)
Yes.

KBall (11:47.488)
Yeah. So to me, think the hopeful angle of this is like, think of software as dreams made reality, right? It's like, I write software, because I enjoy understanding systems well enough to create solutions to them. And also that I like, I like making new things. I like making something that didn't exist before. And from what I can tell, once again, like

These things, they don't have judgment. They don't have human decision making. You still have to figure out what is the problem and what do you want to have happen. That hasn't gone away. What's gone away or is going away is a lot of the hands-on keyboard typing out these sort of Baroque syntaxes that we've learned over the years.

Nick Nisi (12:30.375)
Mm-hmm.

KBall (12:42.86)
I don't know, like I think so long as I'm still getting to like, like there's at least my experience of this is I still had to do a lot of, how should this fit in the system? How does that actually make sense? What is actually going on here that made it much more, that made it work. And that was, that was part of the important thing.

Nick Nisi (13:16.82)
there we go. Sorry, I don't know.

Nick Nisi (13:22.696)
They are.

KBall (13:26.028)
Alright, he's back. Well, I finished my thought even though you disappeared in the middle, so there's a coherent string there to cut on.

Nick Nisi (13:28.284)
Okay, good. They are digging up my yard right now to install Google Fiber. So I'm not mad by any stretch, but maybe that had something to do with that.

KBall (13:46.382)
All right.

to.

KBall (13:53.88)
think one thing that is going to go away is software engineers who don't think about what are the important problems to be solved. Software engineers who take a task definition and go and implement it. Why would I hire one of them? I can give the same level of task definition to Claude and it will make it happen.

Nick Nisi (14:11.846)
Well, you'll do it because you like the rustic, traditional way of doing things, right? That's why you buy handcrafted furniture. There'd definitely be a market for handcrafted software, right?

Nick Nisi (14:26.246)
No, I'm joking completely.

KBall (14:29.88)
I'm not sure they will.

Well, and I don't think I'd hire those people, right? Like, I think there's definitely room for hand crafting software as an individual, as a hobby to learn.

KBall (14:51.182)
I don't know. So I think there is a question in my mind, is like,

I do think the job, what you do most of the time as a software engineer is changing. And then there's a question to ask of, do you enjoy what the new version of this looks like? And that'll be different for different people.

Nick Nisi (15:09.35)
Yeah, I might push back a little on that. The job, like the job specifically. I think at a higher level you do spend more of your time learning, right? You're just constantly soaking up the new way of doing things, the new paradigms of things. A thing that I keep thinking of is very relevant to us and to me specifically. Like I'm very excited about TypeScript 7, right? It's going to be rewritten in Go.

going to be 10 times faster, is what they're initially promising here.

Nick Nisi (15:44.24)
Right. It's going to run JavaScript at the end of the day like it always does but the tools will be made faster and that might unlock some new tooling, right? But then also like new features in there like like I don't know I don't know where I'm going with this but like it's a thing on my mind of like Let's say a new feature is coming out into a language like like the pipeline operator, right? I've wanted that operator for a long time because

KBall (15:46.68)
to compile, not to run.

Nick Nisi (16:14.376)
I just like I'd like the syntax that it affords and it the way of restructuring my thinking to do that By the time we actually get it Am I gonna care because am I gonna be writing software at that low level to actually care? Am I gonna care about TypeScript 9 or I don't know whatever version of go they're on or C++ 38 or any of that probably not right it's gonna start becoming just like

an implementation detail that you don't care about.

KBall (16:51.67)
Yes and no, because I mean, I think one of the things that's interesting, and look, we started to talk about workflows and now we're talking about AI again, which seems to be a trend at the moment. But one of the things that is interesting is like to build maintainable software using AI tools, at least until now, the best practices of software development, right? Decomposing things well, testing, typing, documentation, all of those things.

make a big impact on the outcome of using an LLM to write software as well. And so some of these pieces like, know, operators that make it much easier to express certain types of useful concepts, I think will continue to have an impact on how software is written, whether or not the thing writing the characters is a machine or a human.

Nick Nisi (17:43.9)
Yeah, I can see that. I'm hoping so. At the same time, I'm going full hog into this as well. I'm not using like Cloud Code or Avanti or any cursor like thing day to day usually. I use that for extremely limited things, Cloud Code specifically. And it's mostly like, I just made this change. You go and implement a test because I don't want to write the test for it. And it does a pretty decent job. And I thoroughly

Review the code right? I don't want to I don't just like vibe code those out and not think about it Because I did let it go one time and it did It wrote a test and it mocked the the function that I was trying to test so obviously it passed So it is you know, very dumb a lot of the time I'm sure I've done that in the past what else for starting out and things. So yeah, it's it's a thing

KBall (18:33.944)
Test passed.

KBall (18:39.926)
I I've worked with engineers who do that too.

Nick Nisi (18:43.464)
But Yeah I'm having much more success with LLMs in in terms of just having conversations about code I'm a team of one right now and so I don't really have anyone else to to be bothering all day with questions or thoughts or like it's mostly like spilling out my ideas and trying to get it to Validate them and I like

have been tuning a prompt that I attached to it. Like Claude has this concept of projects. So like my project has a custom prompt to it where it's like specifically do not just go along with what I say. Challenge my assumptions. Look at it from different angles that I'm not thinking of. know, like things like that and trying to get it to really jog my memory rather, or my mind into thinking about the right solution rather than agreeing with my terrible solution. Then I go and present that and they're like, well, what are you doing? You know?

And I'm having a lot more success with that. It's also pretty cool in that I can almost tell within the first two or three back and forths with that particular chat whether or not this is going to be fruitful or not. Because it's very quickly either going to spiral into nothing or it's going to trigger me to write some better things. And then I do rely on it for a lot of the boring crufts, know, setting up, I don't know, setting up a

Allow a boilerplate or whatever or implementing it mostly and then I just go and tweak it to actually be good So I am relying on that but I still am in the the more manual like you're gonna do it in your window and then I am going to be the sanitizer that Properly brings over the things that should be brought over and I am not a hundred percent on board yet with it Going and making changes even though you know, I have getting everything and I can revert

It's still not fully running in there.

KBall (20:45.336)
I find, for example, in the cursor example, the fact that it will make changes in a diff style interface so I can go through and line by line be like, this is what changed, approve this, approve this, what the heck were you doing? Reject that. Like that is much more useful to me than the like, I have a huge block of code over here that I have to copy and paste and figure out what's changed and what hasn't. But that's just me.

Nick Nisi (20:46.973)
Mm-hmm.

Nick Nisi (21:04.272)
No, and that's a good thing too. And maybe it's because my only interaction with that has been Claude code and Claude code keeps you very mindful of just how expensive it's getting. I mean, it's like, you know, 30 cents here, 30 cents there. But like in my mind, I'm just like, what? I can't spend that. It was just ridiculous, right? But I did actually find a tool called code MCP. And it's really cool that this is where things are going with this. But this is a

This is a tool that runs an MCP server locally and then it gives you a Claude code like interface so that I can use it as if it were Claude code. But instead of actually hitting Claude with an API key and doing all of that, the MCP talks to Claude desktop and just sends the questions over there. So it's just part of my monthly pro plan.

KBall (22:02.028)
Yep. So bringing this back around to workflows, we've talked a little bit about sort core coding workflows and how ours have shifted. It sounds like mine has maybe shifted a little more dramatically, but yours has also shifted a fair amount. What else have you been changing in your workflow recently?

Nick Nisi (22:11.592)
Mm-hmm.

Nick Nisi (22:18.144)
I am, well, I've been getting particularly excited about some tools and they are explicitly not AI focused. I don't know if we're allowed to talk about that anymore.

KBall (22:35.852)
I think that's even more exciting to talk about. I'm so sick of AI and I'm partially because I'm using it literally every day and spending every day trying to figure out how to make it behave reliably and better, which is cool. And that's like cutting edge where we are, but like also let's talk about some like good old boring tech.

Nick Nisi (22:41.927)
Yeah.

Nick Nisi (22:48.52)
Yeah, so let me ask you a question in your workflow in cursor or or in a command line or wherever you need to find something you need to find all instances of this word and it's not necessarily like Something that you're gonna Just use like the LSP to go find or like find all references or anything like that. What do you do? Get grep, okay And that's it. Okay, so just

KBall (23:15.33)
Git prep, git prep or grep minus R. Yeah. If I'm not in a Git repo, yeah. I'm old school. I mean, if it's really complicated, maybe I'll use the regex version. You know, got to use that learning from back in the day when I've mastered regular expressions, but.

Nick Nisi (23:18.478)
vanilla grip.

Nick Nisi (23:30.194)
like pearl dashy something and then go from there.

KBall (23:37.976)
But honestly, for most things, git grip, and maybe it's a git grip and a pipe, could often, well, if I've got a lot of stuff, I'll pipe it over to Vim and then go explore it in Vim, or pipe it to a text file and then go explore it in Vim. But that's what I do.

Nick Nisi (23:49.766)
Nice. Okay, that's fair. That is mostly what I do, but I While I don't alias grep, I do effectively replace grep like in Vim. There's a grep command And you can have it like just type colon grep with lowercase G meaning it's like a built-in and Then you can just go I've replaced that so instead of just calling grep it calls rip grep, which is a rust Improvement on grep if you've ever used like AK or the silver surfer

Or one of those it's effectively that but written in rust And it's very fast and it's very good and has a good configuration file So you can add your own like file types and stuff but the main thing that it gives you over grep is like I can filter based on specific things so I can say like You know grip all typescript files And I can explicitly like ignore spec files like I added that as a custom thing so find only in source files and then do this and it will give me like

I have it set up in my config to show me like the line that I'm looking for and then it shows me like a couple lines above and a couple lines below so I see like a Syntax a little bit of where it's at and I can get an idea of the code that I'm actually searching for You follow following so far

KBall (25:11.234)
Yeah, I mean, when you were just talking about excluding things, I'm like, that's just a pipe, right? You do minus V and pipe it. But the surrounding syntax is actually quite cool.

Nick Nisi (25:16.956)
Yeah, you do like like with this you do it's RG for rip grip and I do like RG dash T and then I can do TS and then I would do dash capital T Which is like the inverse of of that and I would say spec and that spec is like I have it defined as like any JS or TS file that has dot spec before it or dot test before it So it'll just ignore those And then I can just search for something, you know, can search for the word foo

And that's pretty cool and it works most of the time and I've used that for years in starting with ACK and then eventually ripgrap. I kind of skip the whatever s sg was that silver server? No, I don't know Anyway, I found a new one and I'm absolutely loving it. It's Because what's what's the main problem? Can you think of one main problem when you're searching for like I don't know calls to a function?

For example, like if you needed to find everywhere where you call this one specific function.

KBall (26:24.13)
Yeah, so there's a couple different challenges, right? So there's names that overlap, right? Names where you have, if I'm calling a function and I have another function that's like that with arguments or something like that, right? Like that has extended. That's probably, I'll start with that. Is that what you're thinking of or you have another main problem?

Nick Nisi (26:37.704)
My solution might not fix that but the one that I'm thinking of is like formatting and whitespace or Multiple arguments like you multiple signatures for it Yeah, so that's like a big pain is like, you know because prettier is running automatically And I don't care about what it produces his output because I just trust it Is it like wrapping arguments to the next line? You know, is it is it gonna be difficult to find?

KBall (26:54.528)
Yeah, fuzzy, fuzzy matches essentially.

Nick Nisi (27:07.74)
the function call specifically for that because of some weird line wrapping or whatever. Well, I found a new tool and it's called AST Grip and it is, you pass a pattern.

KBall (27:23.414)
Ooh, because I was going to say you want you kind of want a semantically aware grep and AST grep is actually exactly what I want.

Nick Nisi (27:27.74)
Yes, so so what you do with that is you pass it a pattern so I can pass it like a call to a specific function and inside the arguments I could just put like I can just put like a variable like dollar sign arg or whatever and be like these are all the args that are gonna be passed to it I don't care what they are match around them and It's going to find not things that match that string that I provided directly But things that would match the AST that that string produces

for that language. And so it can be on whitespace. It can have comments in the middle of it. It can do whatever. If it matches that AST, it's the abstract syntax tree. It's going to return that as a result. And that is absolutely amazing. And I love it.

KBall (28:18.574)
Okay, wait, so tell me more about this first off. So is it language specific? Like this is specifically for going through TypeScript or does this work across languages or like?

Nick Nisi (28:22.5)
It works across languages, which is also really cool. can specify a language, you can filter it and say, I only want this language or this language. And it does only work on like a subset of languages, but they have docs on like adding your own as well. I haven't looked into it that deeply. But another cool thing, and the thing that actually got this on my radar was not, you know what I need? A new rip grip replacement, like yet another grip. That's not what got this on my radar.

What got it on my radar is my fascination with ASTs and with code mods, like building those because that is like...

Nick Nisi (29:11.368)
I think I'm back.

Nick Nisi (29:18.62)
Yes, my fascination is with ASTs and code mods and specifically like writing code that writes code or modifies code at scale because I can think of lots of problems with that. I'm looking at one at work right now and what I've done in the past...

KBall (29:19.054)
There he is. I lost you at your fascination with ASTs and code mods.

KBall (29:50.99)
That was kind of amazing.

Nick Nisi (29:51.137)
Don't.

KBall (29:54.424)
I don't know what happened, but it came out as what I've done in the past. Rawr! And I thought that was like what you were going to do. Yes. Yes. I heard that as a like what I've done in the past. And I was like, this is going to be great. Like what is that?

Nick Nisi (30:00.999)
You heard that?

Nick Nisi (30:09.911)
I did that after my screen like in my browser went black and it just said no internet connection and I'm like I thought you were gone for sure so

KBall (30:17.902)
It was amazing. If you could include that somehow, maybe it's just in a blooper, right? But what I've done, you can start what I've done in the past and then later, we were having internet bloopers, we were having internet conditions. What I've done in the past, rawr!

Nick Nisi (30:22.807)
I'll try. I don't know

Nick Nisi (30:35.031)
Well, I have been running audio hijack this whole time to capture everything locally so this is good But yes what I've done in the past for for Creating code mods is like just been old-school. I want to use the TypeScript compiler API and go there but Some of the problems that I'm solving right now at work are not TypeScript specific. I need to change Jason

KBall (30:43.618)
Okay.

Nick Nisi (31:04.733)
or YAML or TOML or Ruby or name your language here. And the TypeScript compiler API is kind of not good at those other languages. I don't know why they should focus on that. But AST-Grep works across all of those. And it has like a node API so that you could write scripts with it. And not just for grepping, but for replacing. That's the cool thing is like here is a string, like a function call.

KBall (31:34.198)
It's a code mod tool is what it is you're saying. Well, can you write a string replacement or can you write an AST based replacement? So it's actually just like functionally then translating. You could use the same thing to translate in all these different languages.

Nick Nisi (31:35.019)
Yeah, exactly.

Nick Nisi (31:46.891)
Yes, but it has DSL for writing that to where like when I'm doing this with like JS code shift or the TypeScript compiler API, I'm thinking about this in terms of notes. Like I'm looking for a literal expression that matches this and then kind of keying off from there and getting its children and things like that. This has like a string based DSL where I give it like, I'm looking for a function called it looks like this and it passes in whatever arguments.

capture the arguments that it's passing and I'll rename the string to this or the function to this and then pass the same arguments to it. And it's like way simpler of an API to think about rather than having to become an expert on AST specifically and the specific types of nodes that you're looking for and the types of properties that those nodes are gonna have and then replacing those. So that's really cool. like traversing an AST is one thing, swapping out.

Nodes for other nodes is a whole nother thing and it's a pain. So I really appreciate that.

KBall (32:48.248)
Well, I feel like this probably also does solve my problem of things that look the same but are different, right? Because you're actually able to, you're looking at it semantically. You're not just looking at it as a text string.

Nick Nisi (33:00.085)
Yes, it's not it's not going to match on like a In a comment where you said foo It's only going to match on a function call and not even like the import of the function but like the function call Specifically because that's what you're matching

KBall (33:18.35)
All right, so that's a new addition to your workflow. I might need to check that out. Though I will say once again, going back into my, who needs actual software using LLMs for everything? Like telling the agent, hey, go and rename every instance of this somewhere. It works reasonably well. It's not perfect, but if you've got good linting on your project, it'll work well.

Nick Nisi (33:39.515)
yeah, see this is a code mod that I'm looking at shipping to others to run. And I can't trust that they can run AI agents anywhere, let alone whether they have them. a simple, what, it's a couple of lines of, as a node module, very easy.

KBall (33:57.558)
almost certainly cheaper to run as well.

Nick Nisi (34:00.279)
Yes.

KBall (34:03.118)
Actually, one thing that I was talking with somebody who was doing code mods and they said, yeah, you don't actually want to use the LLM to do the code mods. You want to use the LLM to write the code mod tool and then run the code.

Nick Nisi (34:13.685)
Yeah, and ASDs are very well documented. So LLMs know, like you can ask, like give your JavaScript or whatever your source to the LLM and say, write me a code model that can find this and replace it with that. It will do a really good job of getting you very close.

KBall (34:31.906)
Nice. Any other big workflow changes for you recently?

Nick Nisi (34:37.847)
I also have like my entire way that I interface with my Mac has changed. I might have talked about this before, but it's so nice that I want to talk about it again and it's aerospace. This is a an i3 like tiling window manager for Mac and it's very advanced and it will frustrate you to no end when you first start using it.

but now that it's just like become muscle memory for me, I'm so scared of this upcoming like rumor about Mac and iOS about the big rewrite and design rewrite that it's gonna break aerospace that like for the first time I might not upgrade on day one because this would destroy me if it stopped working. And specifically like it's not that, everything is perfectly tiled and you know this...

browsers taking up half the screen and my editors taking up the other half perfectly every time. It's not that it's that you can define workspaces and you like you have that in Mac where you can like swipe three finger swipe or four finger. I forgot what it is between like multiple desktops and have everything separated like that. That's not good enough because if I need to get from the first desktop to the last desktop, I have to swipe through all of the other desktops or go up and then then find you know, it's a lot but when I have

all of my development environment stuff on the D desktop and I just have to hit alt D and I'm there and when I'm on a call and I need to quickly switch over so I can unmute and I just hit alt Z to get to the zoom desktop because that's where my zoom automatically goes and when I need to get to my productivity desktop or slack and email and all of the other stuff that's not actually productive I hit alt P and I'm there and then when I need to quickly switch between them

Just do it and it handles like multiple monitors very well so I can say like take the pdes top and put it on my left monitor and always keep it there I can lock it so it never can leave that one and It's so nice that everything is where I need it when I need to jump to something boom. It's there

KBall (36:51.79)
that I've always been terrible about like window management and things like that on my Mac. I mean, I think I'm actually just terrible in general about adopting tools and workflow tools, which is why it's kind of impressive to me that I've actually shifted everything. Like I just lived in Vim and TMUX land for forever. And so it's amazing that anything has shifted, but I don't know that does sound nice. Like I can't tell you how many times I've done the game of all right, which.

Which window is the meat window in? Like, where am I? Where am I talking?

Nick Nisi (37:24.651)
Yeah, it's it's so good and there's other there have been other ones for Mac that have come out there's like ya buy and I can't remember the amethyst I think is the other one Ya buy was the one I looked at before and I quickly gave up on it because for any advanced features you had to turn off system integrity protection on your Mac which like if you're on a corporate Mac not gonna work right you can't you just can't do it and so I didn't like that but

Aerospace does it all and when it's navigating you between multiple desktops all of the other desktops They're not magically put somewhere else or hidden They're down in the bottom right corner and they're just like way down to where you can't see them But they're there and that's where they're at and so it doesn't actually break any anything else that you're doing like if you Are you if you're familiar with like command tabbing to get to slack or to get to whatever?

That all still works when you get over to slack. It's just gonna change you over to the desktop that has slack on it or the workspace that has slack on it And so I'll be there and you can do that and you can quickly use alt tab to or a command tab to navigate through that you can use alt tab to navigate through it you can use raycast to Open like to use the launcher to get to something like it doesn't it's additive and it doesn't like force you into that but it is gonna force you in in terms of like

I'm going to control where things are on the desktop and how much space they take up. So that is something to get used to and can be annoying. But you can also like configure everything in a Toml file and just say like, for me for example, one password is always a floater. It will never take up space. It will just float on top of other windows. Same thing with messages. Same thing with like different windows from like Raycast and things like that.

They'll just be floaters all the time. And you can quickly switch like toggle things to be floating or not, which is fine. But like you can also heavily script it to when this action happens. Like when I open up terminal, move it over here. Do that.

KBall (39:47.438)
I wonder, like there's a piece of this that is connected to something else that I've been thinking about, which is just sort of going back to a thing we talked about early on in this conversation about just feeling like we have to be learning constantly. I wonder, like one of the promises of making software easier to write, which is what a lot of these changes are, is you can have very customized software. can have very stuff. You can write your own

Nick Nisi (39:59.211)
Mm-hmm.

KBall (40:15.67)
world. can script all of your, you know, if you have a window manager, you can script it up yourself. You can do all these things. You don't even have to understand it very much, right? Maybe it's got it's like LLM guidelines and you can open it up in cursor and say, all right, script it so that this is here and that's there. And this is there. Don't have enough to understand what's going on. I feel like there's like a human behavioral lab adaptation limit. Like how, how do you keep yourself learning those things?

adjusting your workflow, taking the time to figure out, I want these things pinned over here and that over there. Like, I just feel like my brain taps out. It's like you worked for eight hours or you worked for six hours. Like you don't, you're, you're done. Don't think about customizing your laptop, right?

Nick Nisi (41:06.933)
Yeah, that's how I relax, I guess. I don't know.

KBall (41:12.48)
you have an evolutionary advantage over me, that you relax by doing that stuff. And my brain's like, da fuuuck, why are you doing that now?

Nick Nisi (41:21.193)
It's it also like it's like a periodic thing or like a seasonal thing too because like for the last two weeks I've just when I have free time It's like I'm gonna go play it the last of us and get through that mostly because I wanted to do it over the show came out but like yeah, I haven't been doing that and and then like I have other obligations like like contract work and things like that that I need to get done and So I actually just made my first commit and

more than a month to my .files today. And I felt pretty good about that, but I've been neglecting it for a while.

KBall (42:06.766)
I don't have anything else.

Nick Nisi (42:07.351)
Yeah

Nick Nisi (42:11.575)
I will ask one one question to bring us out. Have you played with raycast at all? No

KBall (42:20.27)
I keep hearing that name and I keep not actually doing it. I also was hearing about granola. I wanted to try granola, which is like note taking. And here's the thing, like coming back to, don't like spending time on updating my stuff. Like I downloaded granola and it's like, your version of Mac OS is too old. You can't do this, right? Because if you update Mac OS, you're going to end up spending

Nick Nisi (42:25.847)
It's

KBall (42:49.932)
hours getting your development environment working again, or at least I always end up doing that. So I don't and it's out of date and you know, then I can't use the latest and greatest. So someday I'm going to upgrade from like, what is my Mac right now? From Mac OS 12.7 Monterey. I'll bring it up to date at some point.

Nick Nisi (43:13.675)
No, 12.7?

KBall (43:18.731)
that's what it claims. 1276.

Nick Nisi (43:22.935)
For reference, I'm on 15.3.2.

KBall (43:26.988)
Yeah, but you know stuff's gonna break now when I update it.

It always does.

Nick Nisi (43:34.871)
I can't even compute. don't... Mac OS come... a new version comes out like 16 will come out and like the next day I'll be on it.

KBall (43:42.796)
and how many things break when you do that.

Nick Nisi (43:44.597)
mostly zero.

KBall (43:47.094)
Okay, I don't know what I do differently then, because every time I update my Mac OS, like my dev environment breaks, like are you using Homebrew and other things to install stuff?

Nick Nisi (43:56.023)
Yeah, I've got it all scripted. I can go from from brand new computer to full dev environment in 20 minutes.

KBall (44:04.792)
That's probably the difference because you've spent the time investing in your tools. I don't have the brain space.

Nick Nisi (44:12.279)
You do it's the time. yeah, the brain space. I suppose.

KBall (44:18.83)
I find myself fundamentally constrained by mental energy, not time more than anything. Like I have lots of time that I could in theory be working on that. And my brain just nopes out and it's like, no, go read a book or go run and play soccer or do something else that doesn't require thinking about technology. I mean, in some ways I feel like I'm not meant to be an engineer because my brain doesn't like

Technology is not relaxing for me, it's work and I run out of space for it.

Nick Nisi (44:52.791)
That's fair. I feel like that sometimes too, for sure.

KBall (44:59.328)
Also, my Mac is freaking out probably because it's running 12.7 and has been up for 62 days and Riverside is just like freaking it out.

Nick Nisi (45:11.639)
Dang, 62 days. I don't think I've ever gotten that.

KBall (45:15.694)
That's because you update your OS.

KBall (45:21.4)
I'm seriously, right? Like I, my system tends to be very stable because I resist updates like that because they destabilize it.

Nick Nisi (45:32.759)
I can't imagine what things you're vulnerable to from a security standpoint.

KBall (45:41.88)
There is that though, almost nothing. It's pretty much all in the cloud. Like there's not much that I'm doing locally, but yeah.

Nick Nisi (45:47.095)
Yeah, that's the thing. I never run backups on anything. Like I don't run. I don't have local backups at all. The only thing, yeah, I literally have nothing because the important things are in iCloud, like my photos, and they're backed up or they're in Git and on GitHub, synced to GitHub. like that's why I could destroy my computer and be back up and running in under a half hour for sure.

KBall (46:14.976)
The only exception for me for that is the dev environment, right? Like all the different things that need to be installed to run stuff.

Nick Nisi (46:24.383)
You do have that scripted or you don't? Ooh.

KBall (46:25.208)
But I don't know. I mean, most many of the repos, like they know how to install themselves and things like that. But like, I don't have the all of my dependency libraries that things depend on or whatever scripted. What version of homebrew packages are there? Any of that? Probably should. That would be valuable.

Nick Nisi (46:46.635)
Yeah.

to at least back up your cursor rules file.

KBall (46:52.078)
It lives in the repo. Anything that lives in the repo is good, right? Like I don't have a problem with that. And like it's probably fine. I don't know. Maybe this weekend I'll upgrade my OS and then I can time myself how long till I have a working environment and I'll come back and tell you.

Nick Nisi (46:55.209)
Okay.

Nick Nisi (47:10.227)
no, I don't, I'm scared of that. You'll be totally borked and then you'll come back just ranting at me.

KBall (47:16.587)
Hahaha

Nick Nisi (47:17.591)
you

This version of iDVD doesn't work anymore and I blame you.

KBall (47:27.896)
Could be, could be.

Nick Nisi (47:28.737)
Ha ha.

KBall (47:31.17)
But you know, if anyone ever feels like they're dysfunctional because they don't update their software at a good time, you're in good company.

Nick Nisi (47:40.865)
Yeah, I don't think that there's I just do it for the like usually it's like I get in the hype of like WWDC features and I guess I want that whatever it is and being in the Apple ecosystem is nice because you get You know the features that are shared to the phone as well Like I don't know I have message whatever or photos whatever So it's less about my dev environment specifically

KBall (48:00.02)
Yes.

KBall (48:05.912)
That's

Yeah, and that all seems to work. Plus, I mean, maybe I don't need a dev environment anymore because I'm just running everything through the LLM. Who knows? That's a lie. You actually, you really need, like, to get it to work well, you've got to have the LSP and all the linting working and everything nice. Otherwise, it doesn't get the guardrails and the feedback loops that it needs.

Nick Nisi (48:29.943)
I'm calling it here this time next year You're gonna be all about how you just sit at an empty desk with nothing but an Alexa on it and you go

KBall (48:41.472)
I can't do, I don't do the voice stuff yet, but maybe I should. I don't know. mean, I think there's, I have almost quit the tech industry like five times. So, you know, we'll see.

KBall (48:56.29)
But it's fun times. Things are changing very quickly in kind of a positive way. I'm also still trying to get my Riverside to show me your face again, because it is, I can hear you and it's all working, but the UI is frozen. So hopefully this is making it up to you OK.

Nick Nisi (49:13.911)
Well, now that I know you're on Mac OS 12, I am surprised it ever worked.

KBall (49:23.329)
I'm telling you. Well, the thing I got to do now, I think, is reboot. And maybe it won't come back up, and I'll have to upgrade the OS. see.

KBall (49:34.766)
All right, anything else we want to talk about today?

Nick Nisi (49:37.975)
No, think Yeah, we're both We're both on to to something we're not we're Staying on Mac OS 12 when it comes to how we develop So that's good. I think that we're keeping up with it. And I think that there's there's still a lot like it's still very much in flux right now

KBall (49:50.572)
Hahaha

KBall (50:00.426)
gosh, and it's uncomfortable, right? I don't know, maybe it's more comfortable for you because you're used to investing in your tooling, but the level of change in how this stuff is working, it's exciting, but it's also extremely disturbing.

Nick Nisi (50:15.957)
Yeah, and I'll close by just saying that it's also unbelievably exhausting because it's the non-determinism of it. It's like, I know the problem I have to solve. Is the AI weather going to be good today or is it going to be bad? And I'm just going to have a bad time trying to rephrase things to properly get what I want. And that is exhausting.

KBall (50:21.016)
Yes!

Nick Nisi (50:44.567)
All right, well, you awkwardly opened it.

KBall (50:46.498)
I can't hang up. I can't hang up because the studio is frozen. So, you you're going to have to end this.

Nick Nisi (50:50.775)
I was just getting to that in an equally dysfunctional way as the the intro so Thank you cave all for hanging out and I will catch you next week. Maybe on a new version of Mac OS

KBall (51:07.246)
Keep me accountable. I gotta be out of version 12 by at least 2026.

Nick Nisi (51:13.897)
I will say that I think based on what you said your uptime was, it was 62 days. So this time next week, you will be at 69. Nice. And we're out.

KBall (51:25.486)
Given the experience I'm having with Riverside, next time this week I'll be at like six, but you know. All right. Cheers.

Nick Nisi (51:31.584)
All right.

The New Era of Developer Workflows
Broadcast by