
Discovering discovery coding (Friends)
Update: 2025-02-14
1
Share
Description
Fire up a REPL, grab your favorite Stephen King novel, and hold on to the seat of your pants! Jimmy Miller returns to reveal why, at least for some of us, discovery coding is where it’s at.
Changelog++ members save 9 minutes on this episode because they made the ads disappear. Join today!
Sponsors:
- Temporal – Build invincible applications. Manage failures, network outages, flaky endpoints, long-running processes and more, ensuring your workflows never fail. Register for Replay in London, March 3-5 to break free from the status quo.
- Augment Code – Developer AI that uses deep understanding of your large codebase and how you build software to deliver personalized code suggestions and insights. Augment provides relevant, contextualized code right in your IDE or Slack. It transforms scattered knowledge into code or answers, eliminating time spent searching docs or interrupting teammates.
- Notion – Notion is a place where any team can write, plan, organize, and rediscover the joy of play. It’s a workspace designed not just for making progress, but getting inspired. Notion is for everyone — whether you’re a Fortune 500 company or freelance designer, starting a new startup or a student juggling classes and clubs.
Featuring:
- Jimmy Miller – Website, GitHub, X
- Jerod Santo – GitHub, LinkedIn, Mastodon, X
- Adam Stacoviak – Website, GitHub, LinkedIn, Mastodon, X
Show Notes:
- That time Secret Service busted in Jimmy Miller’s door for hacking
- Blinkist
- Amazon.com: Tools Of Titans
- The best, worst codebase (Changelog Interviews #609)
- Discovery Coding
- Thinking outside the box of code (Changelog Interviews #552)
Something missing or broken? PRs welcome!
Comments
Top Podcasts
The Best New Comedy Podcast Right Now – June 2024The Best News Podcast Right Now – June 2024The Best New Business Podcast Right Now – June 2024The Best New Sports Podcast Right Now – June 2024The Best New True Crime Podcast Right Now – June 2024The Best New Joe Rogan Experience Podcast Right Now – June 20The Best New Dan Bongino Show Podcast Right Now – June 20The Best New Mark Levin Podcast – June 2024
In Channel
00:00
00:00
1.0x
0.5x
0.8x
1.0x
1.25x
1.5x
2.0x
3.0x
Sleep Timer
Off
End of Episode
5 Minutes
10 Minutes
15 Minutes
30 Minutes
45 Minutes
60 Minutes
120 Minutes


Transcript
00:00:00
[music]
00:00:15
Welcome to Change Log and Friends!
00:00:18
A weekly talk show about commit message confessions.
00:00:22
Thanks as always to our partners at Fly, the of the Cloud built for developers who ship, learn all about it at fly.io.
00:00:31
Okay, let's talk.
00:00:33
[music]
00:00:40
Well friends, I'm here with Samar Abbas, co-founder and CEO of Temporal.
00:00:45
Temporal is the platform developer used to build invincible applications, but what exactly is Temporal?
00:00:52
Samar, how do you describe what Temporal does?
00:00:54
I would say to explain Temporal is one of the hardest challenges of my life.
00:01:00
It's a developer platform and it's a paradigm shift.
00:01:03
I've been doing this technology for almost like 15 years.
00:01:06
The way I typically describe it, imagine like all of us when we were writing documents in the 90s.
00:01:12
I used to use Microsoft Word.
00:01:14
I love the entire experience and everything, but still the thing that I hated the most is how many documents or how many edits I have lost because I forgot to save or like something bad happened and I lost my document.
00:01:25
You get in the habit when you are writing up a document back in the 90s to do control as little every sentence you write.
00:01:32
But in the 2000, Google Doc doesn't even have a save button.
00:01:35
So I believe software developers are still living in the 90s era.
00:01:39
Where majority of the code they are writing is they have some state which needs to live beyond multiple request response.
00:01:46
Majority of the development is load that state, apply an event and then take some actions and store it back.
00:01:52
80% of the software development is this constant load and save.
00:01:56
So that's exactly what temporal does.
00:01:58
What it gives you a platform where you write a function and during the execution of a function of failure happens, we will re-select that function on a different host and continue executing where you left off.
00:02:10
Without you as a developer writing a single line of code for it.
00:02:14
Okay, if you really leave the 90s and build like a 2025, and you're ready to learn why companies like Netflix, DoorDash, and Stripe Trust Temporal as they're secure, scalable way to build,
00:02:24
invincible applications, go to temporal.io, once again temporal.io.
00:02:31
If you try their Cloud for free or get started with open source, it all starts at temporal.io.
00:02:37
So always convincing the customer support representative that you know probably more than they do about what we're talking about is always an awkward thing because you don't want to be a jerk about it.
00:02:51
But it's like, no, I've already rebooted things.
00:02:54
Like I've already done whatever's on your checklist there before you pass me on to the next person.
00:02:58
Like I've been there done that.
00:02:59
So please let's just dismiss with the pleasantries and can you please upgrade me to somebody technical?
00:03:05
The number of times that they've been like, can you please restart your computer?
00:03:08
Okay, I've restarted it.
00:03:10
Yeah, you know, it's like you plan for half a beat.
00:03:13
Yeah, you just pretend you're doing all of the things that they're telling you to do.
00:03:17
So that way you get through their checklist.
00:03:19
And like I totally get it, you know, they got a follow procedure.
00:03:22
But yeah, when you've done it like a few times, right?
00:03:25
And you're like, like what I ended up doing for this like dropping packets constantly is making a program that just ran and like had a graph of the percent of packet drop I was having a lot of time.
00:03:36
And once I could show them like, here's a chart.
00:03:40
That seemed to be convincing enough to like send it to somebody else.
00:03:45
Thankfully, the Unified Gateway does that, the UDM Pro.
00:03:49
Oh, yeah.
00:03:50
It does versions of that for no coding necessary.
00:03:53
Yeah, so here's my dashboard to my enterprise level home network.
00:03:58
Yeah, this was sadly a the way this apartment was set up.
00:04:02
We didn't even have a in unit router.
00:04:04
It was all like at the apartment level.
00:04:07
So I had access to nothing.
00:04:09
And that made it much trickier, because like if things went down, you couldn't just like unplug something either.
00:04:17
Like it was just I understand, you know, they wanted to be all fancy.
00:04:22
It ended up being way worse having, you know, wired ethernet throughout and all of that.
00:04:27
With a centralized router set up, it was just like, come on.
00:04:30
They at least actually did it secure.
00:04:32
I was I was surprised with that.
00:04:34
It was network isolated properly.
00:04:36
But my ISP is actually awesome.
00:04:39
I'm out here in the sticks and there's only one company that would run fiber to where we are.
00:04:44
And they were a small business provider.
00:04:47
So it was like residential fiber, but on a small business providers network.
00:04:52
And so it's kind of the best of both worlds because it's kind of retail pricing.
00:04:57
So it's all it's not like business pricing, which is always I think overly priced.
00:05:01
But I'm one person away from like a highly technical person who remembers me or has, you know, my case files available.
00:05:09
And so I can just get past the first person whose job is just to answer the phone and basically route.
00:05:13
The next person up is very good and knows what's going on and has my history.
00:05:19
And so it's been pretty awesome.
00:05:21
The hard part with the residential retail ISPs is like getting through the many layers of people.
00:05:26
They're going to redirect you to before you actually are talking to somebody who can solve your problem and knows how to.
00:05:33
It's nice to have a graph when you do find that person.
00:05:37
I think it's pretty, that's like a, basically a miracle that you have amazing internet in the sticks.
00:05:43
It is.
00:05:44
It's not a miracle as much as it is persistence of me demanding it.
00:05:49
For years.
00:05:50
It's like the only time I've been political in my life.
00:05:53
It took a couple of years.
00:05:54
I think maybe 19 months.
00:05:56
Because I was actually promised by my, the person that sold me this land that Cox cable internet was run to the property.
00:06:05
And I bought the property under that assumption that I did not do my due diligence.
00:06:10
I did double check.
00:06:11
I told them to double check to make sure it was true.
00:06:14
I thought that was due diligence, but apparently they can just double down on the Y.
00:06:18
And so I bought it under that assumption and built a house.
00:06:21
Three years later, moved out here and I'm like calling Cox to set up our cable internet.
00:06:26
And they're like, we don't have service to your area.
00:06:29
Like, oh, you do.
00:06:30
The person that sold me this land says you do.
00:06:32
And they're like, no, no, we do not.
00:06:34
And so I got a price on what it would cost to actually run Cox cable internet out to me.
00:06:38
It was like $65,000.
00:06:41
Wow.
00:06:42
Yeah.
00:06:43
Yeah.
00:06:44
So I tried to force them to pay that amount, the person that sold the land, and that didn't really work.
00:06:52
And so then I decided, well, I'm going to organize.
00:06:55
We have about 10 acreages in the area, all on like three circles.
00:07:00
And I found this great plane, shout out to great planes in Nebraska, great ISP.
00:07:06
And they're like, yeah, it makes sense for us to run fiber.
00:07:09
We had fiber around you, but not directly where you are.
00:07:13
We can get 10 households to like sign a contract that they will buy it for four years or something.
00:07:19
We'll go ahead and trench out to you guys.
00:07:21
And so I went around to my neighbors and got people to sign papers.
00:07:24
And I was very happy because all we had was DSL, those oversubscribed.
00:07:28
And they wouldn't even let me on it.
00:07:30
That's how oversubscribed it was.
00:07:31
So I was using, no, not Starlink.
00:07:33
Starlink didn't exist.
00:07:34
This is 2016, 2017.
00:07:37
I was using a Verizon wireless hotspot 5G, and I would tether to that even in a record the changelog.
00:07:44
And it was dicey, wasn't it?
00:07:45
I mean, there's times where it was so bad.
00:07:47
We could have never done this video first then.
00:07:49
No, never.
00:07:50
No, that would have been.
00:07:52
That is one of the big things that is awful is trying to do video on bad connections.
00:07:58
So, you know, I went knocking on doors and I'm like, please vote yes on this initiative.
00:08:02
And they're all like, of course, who doesn't want fiber to their house?
00:08:05
So, like, of course, it was the easiest cell of all time, right?
00:08:08
And so, that's how it happened.
00:08:10
So, 10 houses.
00:08:11
Yeah.
00:08:12
For your contract.
00:08:13
Yep.
00:08:14
I only got one no out of the old houses that I went to.
00:08:16
We don't use the unit around here.
00:08:18
They're kind of isolationists.
00:08:19
They're just like, leave us alone.
00:08:20
We don't want to talk to anybody about anything.
00:08:23
I'm like, this is just fast internet.
00:08:24
They're like, nah, we're good.
00:08:25
Okay.
00:08:26
Sorry for asking.
00:08:28
Send them a letter.
00:08:29
My wife's grandma lives out in the middle of nowhere and got a smart phone for the first time, like just a few years ago.
00:08:36
And she was like, she was telling Janice my wife, like, I found this thing on my phone.
00:08:42
And I don't know what it is, but it starts with the W and everything on there.
00:08:46
Just like anything I look up, it just tells me everything about it.
00:08:49
And Janice, do you mean Wikipedia with my guess?
00:08:53
Yeah.
00:08:54
Yeah.
00:08:55
Yeah.
00:08:56
Wikipedia.
00:08:57
And she's like, the original set of TPT.
00:08:59
Yes.
00:09:00
Exactly.
00:09:01
She's gang, gang is what she goes by.
00:09:04
She's like, gang, gang.
00:09:05
Do you know what Wikipedia is?
00:09:06
No.
00:09:07
It's the internet.
00:09:08
And she was like blown away that she had used the internet.
00:09:13
That's awesome.
00:09:14
The first time in her life that she knew she had used the internet on her own and like discovered it.
00:09:19
Which I just thought was, it's really funny now because she, she always got mad at people fact checking her.
00:09:24
But now she fact checks everybody.
00:09:26
There you go.
00:09:27
On Wikipedia.
00:09:28
Remember that website, let me Google that for you.
00:09:31
Did you guys ever use that one when I started with people?
00:09:33
Because they'd ask you a question that was just easily Googleable.
00:09:36
I feel like that's what the current crop of LLMs are.
00:09:39
They're like, let me Wikipedia that for you.
00:09:40
Like instead of going Wikipedia, you just ask them.
00:09:42
And they're basically just reading it to you, aren't they?
00:09:44
They're like, here's what Wikipedia says.
00:09:46
I've consumed it.
00:09:47
And I will now act like it's my information.
00:09:50
Yeah.
00:09:51
I absolutely hate the search feature in ChatGPT.
00:09:53
I have to constantly ask it, please stop searching.
00:09:55
I don't care what you're searching.
00:09:57
I just want to zoom in the memory here.
00:10:00
Because it's going to be higher quality than what you're searching.
00:10:03
Yeah.
00:10:04
It's too slow too.
00:10:05
I can search the web faster than you can search the web.
00:10:08
Yeah, exactly.
00:10:09
Fun times.
00:10:10
Fun times in the internet lands, you know?
00:10:12
Well, we brought you back, Jimmy.
00:10:14
We had so much fun talking to you last time here in your stories of secret service folk, knocking your door down.
00:10:21
Yeah, it was really great.
00:10:23
I'm glad that I got to come back on friends.
00:10:26
I will say friends are definitely my favorite episodes.
00:10:29
I like the free form content of friends.
00:10:32
I appreciate that.
00:10:33
Yeah.
00:10:34
Super excited to be back.
00:10:35
It took us a long time to do friends because we didn't think anybody wanted to hear just us chit chat with people as much as they wanted to hear.
00:10:41
The classic change log interview, you know?
00:10:44
But apparently, what do we know?
00:10:47
I think interviews, you know, they can be really good.
00:10:51
There are great interviews.
00:10:53
I've listened a lot of them on here that are great.
00:10:55
But I don't know.
00:10:56
After you hear enough interviews, sometimes it just does kind of get a little formulaic.
00:11:01
And it's like, I'm one of those people who just listen to a ton of different podcasts.
00:11:05
But I'm also not like a completionist about them.
00:11:07
I don't listen to every single episode of every podcast that I listen to.
00:11:11
And so I don't know.
00:11:12
It can break up that monotony.
00:11:13
If you have a bunch of different interviews and then you just get some like people hanging out chat.
00:11:17
It's just kind of nice, especially in like the background, right?
00:11:21
Because if people are hanging out chat and then you're just kind of listening in the background.
00:11:25
If you miss something, it doesn't really matter.
00:11:27
Yeah, it's lower stakes.
00:11:28
You know, that's why it's called like a weekend talk show.
00:11:30
Because it's like, you know, listen on the weekend.
00:11:32
If you miss a part, no big deal.
00:11:34
It's just another one of our stories that don't matter so much.
00:11:37
But I'm happy to hear that you like that.
00:11:41
Do you actually listen to podcasts while working or while coding?
00:11:45
Because I can't do that.
00:11:46
But a lot of people do.
00:11:47
It depends.
00:11:48
If it's actually something where I have to focus now.
00:11:50
If it's like I'm having at work to do some really tedious boring repetitive task that I don't want to do.
00:11:57
And I'm fine with getting distracted and taking 12 times longer than absolutely.
00:12:02
But yeah, if I'm trying to like really code, I cannot.
00:12:06
I've found myself like accidentally listening to a podcast and coding.
00:12:11
And like I just, you know, it was doing something else and then I like start coding something.
00:12:15
And I'm like, why am I so frustrated right now?
00:12:18
And it's because like there's two parts of my brains, like the linguistic part of my brain is like overloaded right now.
00:12:24
It feels like.
00:12:25
And so I have to turn off the podcast.
00:12:27
It's kind of like when you're reading a book and then you realize you haven't been paying attention for the last five minutes.
00:12:32
Like you're still reading it, but you haven't been actually with it.
00:12:35
That's how I get when I'm trying to code and I'm listening to podcasts.
00:12:38
I'm only going to be doing one of the two.
00:12:40
I'm not going to be doing both of them.
00:12:41
I can't.
00:12:42
I can multitask as long as one thing is like physical and the other one's mental, but two mental things.
00:12:48
One of my favorite things is to drive and listen to a book.
00:12:53
Like a long drive, not like a short drive, like an hour-ish, you know.
00:12:59
And then if you don't drive again for a while, you're like, man, that book is just sort of just still sitting there waiting for me to think of the long drive.
00:13:06
You don't finish it.
00:13:07
I've tried to do audio books and I found I can do nonfiction because I'm fine with missing, like moments, but I do the zone out thing whenever I have,
00:13:19
you know, if something gets my attention and if it's fiction.
00:13:22
Then I'm like, wait, what just happened in the story?
00:13:24
Like what is what is going on?
00:13:26
Or the only other time I do audio books is if like I'm at a company and some big wig is like you have to read this book.
00:13:33
It's so important and I really don't want to read the book.
00:13:36
I'll just get it on audio book and put it like two and a half X speed.
00:13:41
Blinkest, man.
00:13:42
Have you heard of Blinkest?
00:13:43
I'm not a sponsor, but I was a big Blinkest fan back in the day.
00:13:47
This is basically cliff notes for business books.
00:13:51
Oh, okay.
00:13:52
And so they distill down every business book and self-help and like non-fictional things.
00:13:57
Yeah, to 12 to 15 minutes of just the high points because that's pretty much how much information is in a two hour list.
00:14:03
Yeah, no question.
00:14:04
And so it's really good and of course you can deep dive if you want to.
00:14:08
But I actually was a subscriber of Blinkest.
00:14:10
It's like a, you know, 15 bucks a month kind of a thing like an audible replacement.
00:14:14
And I do a really good job with it.
00:14:15
I appreciate their product.
00:14:16
But I kind of got to the end of Blinkest as a subscriber.
00:14:19
And I was like, let's do all the top, you know, 50 business books that everybody says I should read.
00:14:24
Atomic habits, you know, how to win friends and influence people and just all that stuff.
00:14:29
And I got to the end and I was like, oh, I run out of Blinkest.
00:14:32
So I just canceled the subscription.
00:14:33
I'm sure there's more things now as people continue to write.
00:14:36
But that's a pretty cool service really.
00:14:38
That's a fascinating idea.
00:14:40
I just love it's almost dystopian in a lot of ways.
00:14:43
It is.
00:14:44
Here's all these things you're like, you know, have to do for something.
00:14:50
And you really don't want to do them.
00:14:51
So you're going to pay money monthly to like, you know, get the distilled versions.
00:14:56
Yes.
00:14:57
Yeah, man.
00:14:58
And I'm going to record a saying most business books aren't worth the read.
00:15:00
Even when somebody tells you that they are, there are things in there that are worth it.
00:15:04
But most of the time, like Adam loves these kind of books.
00:15:06
And he will tell me like essentialism for instance.
00:15:09
And he'll tell me like the most important ideas in essentialism.
00:15:12
I feel no need to go read that book at this point.
00:15:15
And Blinkest kind of does that if you don't have friends.
00:15:18
You know, I got Adam, you got big, we got big wigs telling you rates of that.
00:15:22
But it sounds like you need to do the commercial, you know, Blinkest.
00:15:26
Book recommendations if you don't have friends.
00:15:29
Yeah, that is a good one, you know.
00:15:31
But now you're given the hack to how to get to the end of Blinkest and cancel.
00:15:36
Right.
00:15:37
Blinkest.
00:15:38
I mean, isn't that kind of the problem?
00:15:40
All right.
00:15:41
Like that's why these business books are so padded out because they have to, you know, make it the value worth it.
00:15:47
Right.
00:15:48
Like you can't sell a blog post.
00:15:49
Yeah, exactly.
00:15:50
Right.
00:15:51
I have a blog post worth of ideas, but I have to turn it into a book length.
00:15:54
I have bought some very awkward, like I didn't realize it because I didn't look at the page count.
00:15:59
I've bought some philosophy books quote unquote that were actually just papers.
00:16:04
But they like took it and put it like really big font size and like shoved it into a very small book.
00:16:10
So like if you look at the paper, it's like a 25 page paper.
00:16:13
And then it's like a hundred page, but tiny book.
00:16:18
And it's like, why?
00:16:19
Why is this what I just bought?
00:16:20
I did not realize I was buying this.
00:16:22
This is awful.
00:16:23
You know, it's funny though.
00:16:24
I think it's packaging that matters though.
00:16:25
I think, you know, it may not get past you, but there's some people like, I got the book of this, you know, several manuscripts that was like a one page read basically.
00:16:33
And they're like, I got the book.
00:16:35
And it might motivate them to pick it up potentially.
00:16:37
Or it's like a coffee table thing or whatever.
00:16:39
That's true.
00:16:40
The packaging I think does kind of matter because I think here's an example.
00:16:44
Potential packaging is like, we've had this podcast for many years, right?
00:16:47
And people listen to this show.
00:16:49
Yeah.
00:16:50
And we have people that hang out in the loop that say, hey, I don't really catch you and have a YouTube channel.
00:16:55
Or you're going to turn this into a video first podcast.
00:16:58
I don't see the benefit of it.
00:16:59
How does that help me?
00:17:00
And, you know, to whip we say to use gilfuls way of speaking.
00:17:04
Yes, Silicon Valley to it.
00:17:07
We would say, well, there's other people out there.
00:17:09
They're like video length or video podcasts.
00:17:12
Right.
00:17:13
And so it may not be specifically for you, but it's packaged differently for somebody else.
00:17:17
And so because we've not taken the same audio podcast, somebody may not pay attention to because it's just audio.
00:17:24
We've taken the same product, repackaged it as a video podcast.
00:17:28
Right.
00:17:29
A vlog.
00:17:30
Maybe, you know, I don't know, a VOD.
00:17:32
We need to repackage it as a book.
00:17:34
Didn't Tim Ferris do that?
00:17:35
He took all of his interviews.
00:17:37
Of course, he's a genius of packaging, isn't he?
00:17:40
Yes, yeah, I think it is.
00:17:41
And he took all of his interviews off the Tim Ferris show and turned them into a book called I think like Tools for Titans or something like this.
00:17:48
And he took like, because these are long form interviews and he pulled out all like the tools they referenced and what they use and then like turn it into a book and repackaged it.
00:17:55
And I'm sure he sold, you know, thousands of not hundreds of thousands of not millions of copies of that.
00:18:00
So packaging is important.
00:18:02
I do think that's why a lot of people turn things into books because, A, now I'm an author.
00:18:06
Whether it's self-published or not.
00:18:08
For some reason, it's still cooler to be non-self-published.
00:18:11
Even though it sounds like mostly downsides besides the cloud.
00:18:14
And I'm an author.
00:18:16
I wrote a book and for that, like, that matters.
00:18:18
That's cloud.
00:18:19
And that's just packaging.
00:18:21
You know, Jimmy, take your blog posts because you've written some bangers now, man.
00:18:25
You've been writing some bangers.
00:18:27
Repackage those suckers, you know?
00:18:29
The future of quoting the book.
00:18:31
Yeah, I have thought about, like, you know, does this make sense as a blog post doesn't make sense of the podcast?
00:18:38
Like, do I want to do a solo podcast, things like that?
00:18:41
Yeah.
00:18:42
And I do think the thing that I don't like about the repackaging, I think it can work.
00:18:46
And I think like the video to audio to video.
00:18:49
I think that's an easy one, right?
00:18:51
But like podcast to book.
00:18:53
I think the translation often is real awkward.
00:18:56
Yeah.
00:18:57
Like, you actually really have to do the work because they're just different mediums.
00:19:00
I find the same thing is true.
00:19:02
Like, if you compare, like, a well-produced solo YouTube video versus a talk that someone gave remotely.
00:19:13
Right?
00:19:14
A talk that someone gave remotely, it is both cases.
00:19:17
They're just sitting in front of their computer, talking to the camera.
00:19:20
Right.
00:19:21
But, you know, one's more awkward than the other.
00:19:25
Yeah.
00:19:29
But yeah, no, I'm excited about this blog post.
00:19:31
I've had some good luck with people liking my blog post lately.
00:19:35
I spent like a few years trying to write blog posts and just like, have no clue how to write at all.
00:19:42
And like, what my voice was or any of that.
00:19:44
And then just recently, each blog post ever, and since the one you all invite me on.
00:19:48
I've kind of felt it better, right?
00:19:50
I'm finally starting to get there.
00:19:51
You're getting your voice and you're getting your roof.
00:19:53
Yeah.
00:19:54
And we certainly enjoyed this one.
00:19:56
Of course, the last one was the best worst code base.
00:19:59
Is that the name of it?
00:20:01
Yes.
00:20:02
Okay.
00:20:03
For some reason, I knew it was best worse, but I was not saying it was a code base.
00:20:06
It was a big hit.
00:20:07
And we had a podcast that we either named the same or similar, or talking to you about it, which was awesome.
00:20:12
And now, discovery coding.
00:20:14
Of course, you also had the being raised by the internet, which I think we kind of actually touched on in our last conversation.
00:20:19
Or maybe that was post-show, though we didn't talk about too much.
00:20:23
But discovery coding now, this most recent post of yours, is the one that we're all referencing.
00:20:28
I would like to talk about and unpack some.
00:20:30
Because on this particular one, I felt represented all of a sudden.
00:20:35
Okay, good.
00:20:36
This is like one of those things when you don't realize you are something until someone tells you.
00:20:40
I'm a discovery programmer.
00:20:42
Like, this is what I found out.
00:20:43
I didn't know there was a name for it.
00:20:44
Of course, there wasn't, I guess.
00:20:45
You're kind of, you're naming us.
00:20:47
And not shaming us, which is kind of the point of the post.
00:20:50
You know, name us, but no, shame us.
00:20:52
You know, we're not all as organized and outlining and think ahead.
00:20:55
And as I was reading it, we'll talk about the details, of course, and have you summarize as well.
00:21:00
But as I was reading, I was thinking about Leslie Lamport.
00:21:02
Now, there was an interview that you may or may not have heard that I did.
00:21:05
With a guy who would absolutely despise what you're writing here.
00:21:09
Because he thinks that you should absolutely think ahead, write everything down to all the math.
00:21:14
Think outside of the code.
00:21:17
And that's his soapbox.
00:21:18
And so I was thinking, Leslie would hate this.
00:21:20
But I'm kind of loving it.
00:21:21
Because I was kind of not jiving with Leslie's preaching, even though he's way smarter than me.
00:21:26
But discovery coding.
00:21:28
What is it?
00:21:29
How do you realize you do it?
00:21:31
And why should we not shame people for being like us?
00:21:34
Yeah.
00:21:35
So I was actually listing Brandon Sanderson, well known like sci-fi fantasy author.
00:21:40
He's got a lecture series on that he's put out for a number of years, but he's got the most recent one on like how to write sci-fi fantasy novels.
00:21:49
And I will probably never ever write any sci-fi fantasy novels, but they're fun to listen to.
00:21:55
They're really interesting to just kind of hear, you know, behind the scenes how he thinks about them.
00:21:59
And that's where he talked about this like discovery writer versus an outline writer.
00:22:04
Okay.
00:22:10
And this is where like Stephen King is really well known for hating outlines.
00:22:10
He thinks as soon as you've written an outline, you've like ruined the story because that is the story now.
00:22:16
And the story is supposed to come out as you're writing.
00:22:19
And so like he never writes outlines, he just sits down and writes.
00:22:22
And Brandon Sanderson's very much like the opposite bent to like he outlines all his books forever.
00:22:27
And so I was just thinking about, you know, listening to this lecture and thinking about like how much that.
00:22:33
Like this idea of discovery writing fits with how I code.
00:22:38
And I think that this is one of the things I I often find is like, I don't know, we're just.
00:22:44
As much as we love to talk about programming, we don't like to reflect on our actual practice much.
00:22:50
And I was trying to think like, is there anything that corresponds to this?
00:22:54
Like, have I read this anywhere?
00:22:55
And I tried to find something like surely somebody has written about it.
00:22:58
And I'm sure they have, but trying to find it was really I didn't I couldn't find anything quite like it.
00:23:03
So I just thought, you know what?
00:23:04
I need to write this down.
00:23:07
And I it was all done in like one sitting right after listing that lecture.
00:23:11
It took me like an hour or something to just write it down and put it out there.
00:23:14
And so it was great to hear the people.
00:23:16
So like, you know, the basics of it are really pretty simple.
00:23:19
It's when you go to write code, you don't know what you're going to write yet.
00:23:23
You discover what you're going to write in the process of coding.
00:23:27
Well, friends, I am here with a new friend of mine, Scott Deetson, CEO of Augment code.
00:23:37
I'm excited about this.
00:23:38
Augment taps into your teams, collective knowledge, your code base, your documentation, your dependencies.
00:23:44
It is the most context aware developer AI.
00:23:47
So you won't just code faster.
00:23:48
You also build smarter.
00:23:49
It's an ask me anything for your code.
00:23:51
It's your deep thinking buddy.
00:23:53
It's your stand flow, antidote.
00:23:55
Okay, it's got.
00:23:55
So for the foreseeable future, AI assisted is here to stay.
00:23:59
It's just a matter of getting the AI to be a better assistant.
00:24:03
And in particular, I want help on the thinking part, not necessarily the coding part.
00:24:07
Can you speak to the thinking problem versus the coding problem and the potential false dichotomy there?
00:24:13
A couple of different points to make, you know, AIs have gotten good at making incremental changes, at least when they understand customer software.
00:24:21
So first and the biggest limitation that these AIs have today, they really don't understand anything about your code base.
00:24:27
If you take GitHub co-pilot, for example, it's like a fresh college graduate.
00:24:31
Understand some programming languages and algorithms.
00:24:34
It doesn't understand what you're trying to do.
00:24:36
And as a result of that, something like two thirds of the community on average drops off of the product, especially the expert developers.
00:24:44
Augment is different.
00:24:46
We use retrieval augmented generation to deeply mind the knowledge that's inherent inside your code base.
00:24:51
So we are a copilot that is an expert and they can help you navigate the code base, help you find issues and fix them and resolve them over time.
00:25:00
Much more quickly than you can trying to tutor up a novice on your software.
00:25:05
So you're often compared to GitHub co-pilot.
00:25:08
I got to imagine that you have a hot take.
00:25:10
What's your hot take on GitHub co-pilot?
00:25:13
I think it was a great 1.0 product and I think they've done a huge service in promoting AI, but I think the game has changed.
00:25:21
We have moved from AIs that are new college graduates to an effect AIs that are now among the best developers in your code base.
00:25:30
And that difference is a profound one for software engineering in particular.
00:25:35
So if you're writing a new application from scratch, you want a web page that'll play tic-tac-toe, piece a cake to crank that out.
00:25:42
But if you're looking at tens of millions of line code base like many of our customers, Lemonade is one of them.
00:25:49
I mean 10 million line mono repo.
00:25:51
As they move engineers inside and around that code base and hire new engineers, just the workload on senior developers to mentor people into areas of the code base they're not familiar with is hugely painful.
00:26:03
Inside it knows the answer and is available seven by 24.
00:26:06
You don't have to interrupt anybody and can help coach you through whatever you're trying to work on is hugely empowering to an engineer working on unfamiliar code.
00:26:16
Very cool well friends.
00:26:17
Augment code is developer AI that uses deep understanding of your large code base and how you build software to deliver personalized code suggestions and insights.
00:26:27
A good next step is to go to augment code dot com.
00:26:31
That's a U G M E N T C O D E dot com.
00:26:35
Request a free trial contact sales or if you're an open source project augment is free to you to use.
00:26:42
Learn more at augment code dot com.
00:26:44
That's a U G M E N T C O D E dot com augment code dot com.
00:26:51
You discover what you're going to write in the process of coding does that.
00:27:02
Like to me that's just how it works, but to an outliner.
00:27:07
That sounds foolish, right?
00:27:09
Yeah.
00:27:10
Or not true.
00:27:11
But like those people are like, no, you don't like, okay, maybe maybe in the small, but not in the large or like you start to attack it from different angles, right?
00:27:19
Yeah, I think this is one of the things that's always been attention with me.
00:27:23
I've worked at a lot of different companies that have had different kind of cultures around formality.
00:27:29
And a few companies I've worked at in the company I'm at currently has been very big on like write ups, you know, you like need to have a design document before you go implement something.
00:27:41
What I recently did is, you know, we don't need to go in the details of what it was, but it's a hairy problem that we're dealing with, and I was told to go write a design document of how we could deal with this.
00:27:53
And I came up with four ideas, and I wrote about each of those ideas.
00:27:59
And we had a big discussion about it.
00:28:01
We had meetings about it, and we picked one of them.
00:28:04
We all agreed number three is the best option.
00:28:07
Let's go with number three.
00:28:08
So Jimmy, go sit down, go start writing a prototype of number three.
00:28:12
I got not even an hour in to writing the prototype of option three before I realized the whole idea was completely wrong.
00:28:20
As I like started writing the code, I was like, okay, well, I would need to do, wait, no, that doesn't make sense.
00:28:25
Hold on, I need to do, that doesn't make sense.
00:28:27
And like I realized that the way we can solve this problem was so much simpler, so much more elegant, and it was one of the options I had never even considered and would have never considered if I didn't sit down to write the code.
00:28:41
And so I think that people who don't discovery code would probably say that like, I think the problem that they have, and I've seen it,
00:28:52
you know, there's, we can talk about the problem with discovery coding.
00:28:54
There's lots of problems with it.
00:28:55
But the problem that outliners often have is that they're unwilling to do that last step.
00:29:01
They've come up with a solution.
00:29:03
It's actually a bad solution.
00:29:05
But since they have the outline for it, they're just going to finish it.
00:29:10
And maybe even they're going to ship it.
00:29:12
And then it comes runs into problems and they're just going to keep going and trying to fix it and fix it and incrementally change it and fix it.
00:29:19
And what I found is if you like kind of relinquish control a little bit, you let yourself let the code tell you where it wants to go.
00:29:28
You're paying attention to the code itself, especially in big complicated legacy systems, like we talked about last time, you'll discover solutions you just would have never thought.
00:29:38
So yeah, that's what I really recommend the practice because of that.
00:29:43
One thing it seems though, just looking from the outside or hearing this story is that it seems like the practice of the basic outline, which was the four different options that you could then explore led you to discover it was wrong.
00:29:57
So technically you outlined first to then code to discover the wrong problem.
00:30:03
Yes, so right.
00:30:04
Am I wrong?
00:30:06
No, no, you're not wrong.
00:30:08
I will say it took me a very long time to write those outlines to come up with the ideas, etc.
00:30:17
And I do believe and I have done it before where I didn't do that.
00:30:22
And I just started coding and I discovered it much faster, right.
00:30:26
You know the problem solution better than we do it.
00:30:28
Let's say for some reason you could have skipped, you know, the four outlines.
00:30:34
And you just went to coding and started thinking about the problem.
00:30:37
Could you have gotten to the solution you got to faster than the four outlines.
00:30:42
Yeah, the solution I got to was like totally out of left field.
00:30:45
Like it was not related at all to any of the solutions I had listed.
00:30:50
And it was only out of once I started being concrete.
00:30:55
I think this is the key that I think maybe is lost.
00:30:58
When people hear like discovery coding, they want to, you know, they just think you want to fly by the seat of your pants.
00:31:03
In fact, in writing.
00:31:06
You don't like this call it "pancing" because you're flying by the seat of your pants.
00:31:11
So they call discovery writing "pancing".
00:31:13
And I thought it doing "pancing coding" or something or "pancing programming", probably.
00:31:17
Well, when I come from "pancing" also is the same thing as "depancing" and it means you pull someone's pants down.
00:31:22
Exactly.
00:31:23
But that's all I know.
00:31:25
You guys like hear that?
00:31:27
I got you panced it.
00:31:29
I don't want to associate with that.
00:31:30
I like discovery a lot better.
00:31:31
Yeah, I was like, that sounds a little, you know, pejorative.
00:31:34
So like, let me, let me stay away from that one.
00:31:37
But the thing is when you, when you're staying in this kind of like high level outlining, you're not confronting the concrete problems that are in existing code bases.
00:31:49
So I think this is really useful when like there's already existing stuff and there's already existing problems.
00:31:55
And maybe it's less useful when you're starting from scratch.
00:31:58
I think that's the key insight is that the rubber hits the road faster.
00:32:01
Yeah, exactly.
00:32:04
That's really the key is like you can't, you have to leave the hypothetical, you know, area, space and get into the real world as close as we get digitally.
00:32:13
To really know whether or not solution ABC or D is even viable and you won't know that about any of those four until you've actually let the rubber hit the road and realize, "Ah, you know what?
00:32:22
I'm banging up against this.
00:32:24
I didn't think I was going to be, but now I am."
00:32:26
And the faster you can bang up against it, then you start searching for other things.
00:32:30
Exactly.
00:32:31
So it might seem like you're trying to like skirt, you know, process.
00:32:35
You're trying to like, you're just being lazy, right?
00:32:36
That'd be the accusation.
00:32:39
Like, come on, like I, Leslie Lampord or Daikstra, right?
00:32:43
It's like very rigorous.
00:32:44
We got to have formal methods.
00:32:46
We got to really think about this.
00:32:47
We got to prove things.
00:32:48
You know, I get that.
00:32:50
Like I have that bent.
00:32:53
Like I've played with making some like alloy models, which is like TLA plus with a competitor or whatever.
00:32:59
I like some other Lampord stuff as the TLA stuff.
00:33:03
Yeah.
00:33:04
Yeah.
00:33:04
I like some of that stuff, but I think often when we can replace process from actually doing,
00:33:14
with actually doing work.
00:33:15
And sometimes what you have to do to get something done is just start to doing it.
00:33:19
Right.
00:33:20
And let the system itself tell you the constraints that you really have.
00:33:25
And then afterwards, you can go write that document.
00:33:29
You can go make that proof.
00:33:30
You can go do all your formal methods.
00:33:32
You can impose your big type hierarchy so that you guarantee that illegal states are unrepresentable.
00:33:37
You can do all of the things, but you got to start with something concrete or else all of this is just theoretical and not practical.
00:33:45
It's kind of the opposite of flying by the city of your pants isn't it because you're actually being more realistic sooner.
00:33:51
I feel like that's just like, you know, playing fast and loose.
00:33:55
And that's more the world of the hypothetical.
00:33:58
I think somebody made up the statement architecture astronauts.
00:34:02
I think I first read it in DHH's writing, but I'm not sure if he coined it, which was really spoke to me because it's very easy in the world of architecture to just talk about and think about.
00:34:13
And maybe even try to formally prove a thing.
00:34:17
And in the real world, that thing is unviable.
00:34:22
Like it just happens.
00:34:23
And getting to that, to that dirt as fast as you can and start digging to me always made the most sense because when I try to do it the other way around,
00:34:34
I would waste a whole bunch of time.
00:34:36
Thinking that I had a solution and then I go and try to apply that solution and I'd be like, this doesn't actually work.
00:34:43
This is not going to work.
00:34:43
And now I got to start figuring something us out.
00:34:46
So I guess to me, it doesn't seem like flying by the city of pants describes it, but I understand why somebody might think that because you're not,
00:34:56
quote unquote, thinking up front, you're just like coding right away.
00:34:59
You know, a cowboy coding as they call it.
00:35:01
Yeah, I think the other thing that maybe is hard about this that I kind of have like some brief a size in is like our tools don't really support this style of doing things.
00:35:11
Like part of the reason why people would rather write a design document, then go into the code base and try to get some solution together.
00:35:19
It's like it can be really annoying to make changes in code bases.
00:35:23
It can take a really long time to find the right place to put something and then like you try to put something and you have this compile cycle.
00:35:31
Right, I know like I didn't even touch on it in the blog post because it kind of just like went behind my head.
00:35:46
But like if you wanted to do a clean build on that legacy system, when I first joined it was like 10 minutes, I think it got down to like seven minutes or something.
00:35:47
And trying to do even though that's not the like 24 hours, I've heard some horror stories of like, you know, having 10 minutes every time you want to make a change.
00:35:57
To like go explore something is incredibly slow.
00:36:01
And so what you end up having to do is try to plan all of this out ahead of time.
00:36:07
And one of the things I found just to be if you're going to try to do discovery coding, you have to spend that time up front, making tooling so that you can get a fast feedback cycle and you can start discovering.
00:36:20
And that just takes a lot of work to get to that point, especially if no one's focused on it.
00:36:25
Most of my discovery coding at a repal or try to what other like what would that look like if it's not like an environment ready loop that you can just program against.
00:36:38
Yeah, I mean, I definitely have a bias here because I programmed in closure professionally for like five to six years.
00:36:46
And closure has if you've never seen a closure programmer with a proper setup do their their coding it's definitely like the best out there in my opinion and live feedback.
00:36:58
So you know, they they talk about working at the repal, but what they don't mean is like a shell with a prompt.
00:37:04
They just have their editor usually emacs and you can evaluate any sub expression of any bit of code and it just kind of live evaluates right there in your editor.
00:37:16
So you can just start running like I would have a repal quote unquote open for a month that was the state of the whole system like it was the running system that I modifying on the fly so you just like re evaluating functions redefining things.
00:37:34
So I will say I now have a lot of things where I work on like big Java apps and I'll just hack in a closure repal in the middle of them.
00:37:42
That I can just like all right, well, I have I now have this nice little evaluation.
00:37:47
How do you do that?
00:37:49
How do you get a closure repal into a Java app like that.
00:37:52
So closure is on the JVM so it's actually pretty darn simple to have like it's like four or five lines of Java to just kind of you get the jar you shove it in you put in a few little things.
00:38:04
It's up a socket and then you just connect to it.
00:38:06
And now you have like the whole that whole JVM application you have all of the classes that are in loaded into the runtime you have everything that you can just start messing with.
00:38:16
And you mess with it in closure or you mess with it in Java.
00:38:19
And you mess with it in closure, but you can do all the Java interrupt.
00:38:23
If you don't have this, I know I have a friend, Brandon Bloom, he was did closure for a while and then he was doing go.
00:38:30
And he said his replacement for like the closure repal was making little tiny shell apps in go.
00:38:40
So like every single one of his like functions, you would like turn into a way you could just evoke it from shell and then like pipe things.
00:38:46
And so like you would like try to take the system and break it up into little bits that you could kind of like isolate and call and then combine those together to make like little interactive environments.
00:38:58
You know, I've I've hacked in my own fake little programming language for a second into a second.
00:39:06
Yeah, you know, especially now with like, you know, LLM's and stuff.
00:39:09
Well, the boss isn't looking, you know, yeah, I don't like ship it, right, just be clear.
00:39:14
Like it's for me, right.
00:39:17
It's for me, it's just like really useful in production, though, Jimmy, you know, that little backdoor just sitting there.
00:39:24
You can find, I think for most systems, you can find some little dynamic part of it, right.
00:39:29
You can find something where you can start messing with things, even if it's just like, you add a bunch of flags, like I remember in an early job, there was this like,
00:39:39
we went back and forth over and over again on this one form.
00:39:43
It had like 70 different states error states it could possibly be in based on like different combinations of stuff.
00:39:50
And it kept we kept having stories on like, well, if it's this combination, the error message should be that.
00:39:56
And if it's this combination, then the error message should be this and like, you know, over and over again.
00:40:01
So like, I just took that thing and configured it so you could like click on and off every single possible state and see the error message right away.
00:40:09
Like a little dev UI for it and just brought the person, you know, is in office.
00:40:14
So I just brought them over to my desk and was like, what do you want the error message to be right here.
00:40:19
And then clicked on the next button.
00:40:20
What about now?
00:40:21
And just like walked through all of it.
00:40:23
Right.
00:40:24
Nice.
00:40:24
And what, you know, what we discovered is like actually there's like four classes of errors.
00:40:29
You know, and we would have never discovered that had I not taken the time to make the system respond that way.
00:40:35
Kind of one part instinct in a way, you know, you got to feel how things work.
00:40:39
It's like a race car drive or even like these instincts that happen at, uh, at millisecond speeds that that only a super human can do when you drive formula cars kind of thing,
00:40:50
you know, not an exact one to one, but it's, it's a version of that where you got to sort of feel how the system works.
00:40:56
And you got to feel this response, this push and pull back and forth versus this outline.
00:41:02
I've got everything in control.
00:41:04
And I've plotted it out.
00:41:06
And boom, it's done.
00:41:07
It's just more organic, it seems.
00:41:10
Yeah.
00:41:11
And I think organic coding.
00:41:13
Boom.
00:41:13
There you go.
00:41:14
You already named it.
00:41:15
You don't have to name it.
00:41:16
No, you did.
00:41:17
I just say like or gigs kind of catchy.
00:41:18
Uh, that if I want to like, you know, become a consultant and sell it.
00:41:23
Right.
00:41:24
The next agile, right?
00:41:26
Or could be a good.
00:41:27
No, Jimmy Miller's pancing course.
00:41:29
I want to draw a couple corollaries here because it's the opening of your post.
00:41:39
Now we're in the meat of this.
00:41:43
We're in the, you know, the, obviously the practical matters of this.
00:41:46
But I want to zoom out a little bit on a couple other things, which is Stephen King.
00:41:51
You've drawn this corollary to him and his style of writing is everyone here from the West even King.
00:41:56
I assume you are Jimmy because you wrote the, the quote there for him.
00:41:58
Jared, do you know who Stephen King is?
00:42:00
I haven't actually read Stephen King, but I do know who he is.
00:42:03
I will tell you that I read Stephen King's it as a nine or 10 year old.
00:42:08
And if forever changed me as a human.
00:42:10
I don't know if it was for a good way or a bad way, but it definitely changed me.
00:42:13
So yes, I know Stephen King.
00:42:15
Okay.
00:42:16
Are you familiar with his writing style.
00:42:18
Aside from I read the quote from Jimmy's, but no, I'm not a Stephen King stylist, a studio.
00:42:25
I've only loosely investigated this and it's funny that you put this in there to me because I have a desire to be an author one day.
00:42:34
And I as of this morning, actually, as of, as of yesterday, I have two book ideas that I may eventually do.
00:42:42
Prior to yesterday, I only had one.
00:42:44
And now I have a brand new idea.
00:42:45
And I'm thinking about using the Stephen King method of writing books to get there.
00:42:49
And the corollary really is this idea that he's got two different style of people that he says writes.
00:42:55
And you've got the plotters, which is like the outliners.
00:42:58
And it's funny.
00:42:59
You call the the panzers that you've got this terminology because the other writer style he has is called the pants.
00:43:07
Ders P at P and S T E R S.
00:43:11
I don't know why I don't know the theory behind the name pansters.
00:43:16
They read on instinct.
00:43:17
They go where the writing takes them kind of thing.
00:43:21
And I'm I'm really curious to go down this path because he's got this plan.
00:43:27
He's like, you know, I'm also a discovery coder.
00:43:32
Having a plan is kind of like cool.
00:43:34
I have an idea and a vision, maybe, but like in the tactile, I'm just like hit the ground, see what works and push back against the system and see what I like and don't like got a concept of a plan.
00:43:46
Yeah.
00:43:47
It's not, you know, this Jared, I'm not telling you ideas.
00:43:49
I'll tell my dude, I got an idea.
00:43:52
Okay.
00:43:52
It's not fully formed.
00:43:53
Just just work with me here.
00:43:55
And I bring that rubber to the road right away.
00:43:57
And I'm like, here's here.
00:43:58
Here's everywhere that's going to fail.
00:44:01
Sometimes like, you know what?
00:44:02
Actually, well, actually, I'm just getting sometimes I think it's a good idea.
00:44:06
But a lot of times I'm like, here's why that's not good.
00:44:09
Yeah, discovery.
00:44:11
But he's got a method.
00:44:13
And I can paraphrase some of it, but it's really short.
00:44:15
He's got three steps.
00:44:17
Okay.
00:44:18
Right every day.
00:44:20
Murder your darlings.
00:44:21
Oh, yes, productive writing environments, no internet, no phone, no TV, just a laptop, water, tea, hydration, and music.
00:44:33
And he likes metal.
00:44:34
So Stephen King writes to metal.
00:44:36
Really?
00:44:37
Yeah.
00:44:38
Those are his three steps to getting into a mode to write is this habit of write every day.
00:44:45
This habit of when you go to write, it's in an environment that's suitable for writing.
00:44:50
And like I said, no internet, no TV, music is all you can have there.
00:44:55
And what I've discovered is he gets into flow state quickly.
00:45:00
And so I kind of want to bring up those steps and talk to you about that.
00:45:04
And I suppose I'd imagine flow state, right?
00:45:07
Cause you're kind of feeling it.
00:45:08
You can't get into that deep immersed feeling of what it is until you kind of get to this place where you can sort of be in a trance.
00:45:15
Let's just say trance and dental coding.
00:45:19
What do you think, Jimmy?
00:45:20
Do you follow those three steps to success?
00:45:23
I definitely don't follow those three steps in a sense of like I don't maybe I do code every day.
00:45:30
Not as a particular habit.
00:45:31
It probably does just happen, happen most times by happenstance.
00:45:36
I do really like programming.
00:45:38
I do often do it for fun, you know, my spare time.
00:45:41
But I definitely have internet when I code.
00:45:46
I go to coffee shops, most of my coding.
00:45:50
So like the opposite of like a very distracting environment.
00:45:54
So you're lucky then you can even get it done.
00:45:59
I enjoy I find I'm much less distracted by having that constant like background stuff going on.
00:46:05
Then I am often focused in I've never I've always been of two minds about flow state.
00:46:10
I think when I was younger, I definitely think I had flow state type stuff quite a bit.
00:46:16
Where I would stay up to like for a coding and like not realize the time and I still do have moments of that.
00:46:25
But I think most of my coding doesn't happen in a flow state.
00:46:29
I don't know that I can achieve a flow state very well.
00:46:33
I get very distracted very easily and jump back and forth between things.
00:46:37
What I found, but I do think that there's a lot that's good about the general advice like one of the things I found that I've been really struggling with over time is start,
00:46:47
you know, to stop starting and start finishing right to actually push through on a project.
00:46:53
And one of the things that has been really helpful for that is being willing to make tiny incremental changes, even if I'm not feeling it.
00:47:02
And I think that's part of this, you know, writing every day, right, like some days you're going to write like a ton.
00:47:08
Some days you're not going to feel it at all and you're only going to write a little bit and I have found that to be super useful of like sometimes I'll not be feeling coding at all.
00:47:17
But I really want to make sure I actually get I'm building a programming language right now and I really want to actually get it so it's good.
00:47:24
So I'll just spend like 30 minutes fixing one small little bug or cleaning up a comment or whatever.
00:47:29
And then I find myself like three hours later still working on stuff.
00:47:34
I actually do fly is right.
00:47:36
I mean hours will go by if you're in that kind of a Jimmy that's called a flow state.
00:47:41
Okay, maybe maybe it's a flow state.
00:47:43
It's your it may be your version of a flow state.
00:47:45
It's not the 4 a.m.
00:47:47
coding flow state of his youth.
00:47:49
I guess one of the things I always think about with flow state is like the things people always compare to him.
00:47:55
Maybe I'm just misunderstanding it is like when you're like kind of grooven with music.
00:47:58
I don't know if either of you play any instruments, right?
00:48:01
But like I play bass and I haven't really played it in a while, but I play bass guitar and I played stand-up bass as well in orchestra.
00:48:08
And in that you like kind of do like you're kind of captivated by the music.
00:48:13
You're really not thinking about where you are, what you're doing.
00:48:16
You're just kind of playing.
00:48:18
And that is not a feeling I get much with coding.
00:48:20
Would you describe your feeling as effortless momentum?
00:48:24
No, it's always very effortful.
00:48:27
Very, very effortful.
00:48:28
You've broken heart over there, gosh, Jimmy.
00:48:30
Okay, maybe your flow state is different than people's states.
00:48:33
Yeah, I mean, usually the things that I'm when I'm doing this stuff, I guess in my spare time, especially it's stuff that's like way beyond.
00:48:41
I'm trying to find things that are beyond my current ability.
00:48:45
So I'm often like confused and finding it hard, right?
00:48:49
Like the language I'm writing is, you know, compiled straight to machine code.
00:48:53
So like I had to go like I wrote my own like compiling to machine code and then I'm learning all over the like, you know, intricate bits and parts and it never goes smooth.
00:49:04
Let me rephrase it then.
00:49:07
Is it seemingly effortless on the task to stay task like to stay on the task?
00:49:15
That's what I'm talking about.
00:49:17
You're trying to solve the problem.
00:49:19
I think that's what momentum is suggesting there is that it's your effortlessly on the task of the problem you're trying to solve.
00:49:26
Versus like Shiny Object YouTube here, somebody cough up there, you know, I mean like you're on the problem and you're sort of iterating towards what, okay, next hurdle,
00:49:36
next hurdle, next hurdle.
00:49:37
And then it's two hours later.
00:49:39
Yeah, no, I would agree with that.
00:49:40
And I do find that like the biggest problem I have is coming off of that, like trying to transition out back into real life.
00:49:47
It takes like quite a while, you need a buffer there, you need like a little cool down.
00:49:53
Yes, exactly.
00:49:54
During the pandemic, this was a problem because you know, I would usually go to coffee shops and do stuff.
00:49:59
And I would like kind of have a built-in buffer.
00:50:01
And then during the pandemic, I couldn't and I find that like when I was done with work, I had to commute.
00:50:07
So I would just go on a walk around my neighborhood for like 20 minutes and then come back.
00:50:12
Yeah, my brain was all cleared.
00:50:14
So yeah, maybe maybe I'm just like a overestimating the what the flow state has to look like.
00:50:20
You've romanticized it.
00:50:22
Yeah, exactly.
00:50:22
Yeah, you think you get to.
00:50:24
Yeah.
00:50:24
Can't quite achieve that greatness.
00:50:26
That's that's for those other good discovery coders, you know, the good ones.
00:50:32
Yeah, yeah.
00:50:33
Well, I have another way to scribe in it, which I think is apt.
00:50:36
I just think of it as being locked in.
00:50:39
It takes it takes a while to get there.
00:50:41
But finally, whatever combination of environmental impacts and time and your and your brain.
00:50:48
Mail to a point that you're locked in on your current problem or your current task, like Adam says.
00:50:54
And everything on your focus and everything else is kind of secondary or just disappears for a little while while you're actually putting all of your thought into that one problem.
00:51:04
And yeah, you may be struggling through that because it's a hard problem.
00:51:09
Some of us Jimmy just focus on the easy stuff, you know, life's good.
00:51:12
The bar low, you know, you can just limp over it.
00:51:16
But locked in, I think is when I picture for flow state is like everything else kind of melts away for a little bit and you can just push forward.
00:51:25
Yeah, I think if I'm if I'm trying to bring this back to discovery coding and be maybe a little bit pedantic, I do would say if I'm trying to defend my own notion.
00:51:34
I'd want to separate those two things, right?
00:51:36
I think you can do discovery coding and not get into flow state.
00:51:40
And I bet you there's a bunch of outliners being like, but the outline is how I get into my flow state, right?
00:51:46
Because I know everything I'm working on and that's what like lets me get rid of my distractions.
00:51:53
No, I would definitely agree that these are different things.
00:51:56
Yeah, but I do think it can lead to that.
00:51:58
Well, Jimmy, while you're defending and differentiating, you also take some time in the post to differentiate discovery coding from bottom up design or bottom up coding or whatever.
00:52:10
Yeah, versus top down.
00:52:12
How do you distinguish that as being different than this?
00:52:15
Yeah, so the way I understand, you know, top down design, bottom up design is bottom up is, you know, you're trying to build these kind of little Lego pieces, right?
00:52:24
You're trying to get something that's interconnectable.
00:52:27
You're not immediately solving some specific problem.
00:52:30
Instead, you're making the building blocks to solve lots of problems.
00:52:35
Top down kind of the opposite, you know, I think the classic top down is like, you start with your main method.
00:52:42
You're like, I'm going to have this object and it's going to have this method and the method doesn't exist yet.
00:52:48
So I put an empty method body and then that method, it calls these methods.
00:52:52
And you know, you kind of try to solve the problem, taking like as you scope, you know, top down, you scope in on the details and you fill them out, right?
00:53:01
And when I mentioned discovery coding to a coworker right before I wrote it, he was like, oh, top down versus bottom up.
00:53:11
And I was like, no, that I get where you're coming from.
00:53:15
But like, at first, I was like, maybe that's all I've, you know, I've just reinvented the wheel here.
00:53:19
Just coming up in a new day and for that a little moment of crisis there.
00:53:22
But once I thought about it, it's like, no, I think this is usefully different because I think you can go into a bottom up approach.
00:53:30
With kind of that lampport-esque, you know, setup, you come up with a little calculus, you come up with a little algebra problem.
00:53:37
You'll see hascolars do this kind of stuff all the time where they, you know, come up with all these little parts that they're going to compose together.
00:53:44
And you like pre-plan ahead of time, how you're going to do this.
00:53:47
And then you, you know, compose them up, you go start coding and doing this.
00:53:51
And what I wanted to emphasize with discovery coding is this like kind of emptying of your mind of a solution.
00:53:59
That's what I really think is the mark of discovery coding is that you're not just approaching code, trying to solve some concrete issue.
00:54:11
You actually might not even have a like problem or a bug or anything like that in mind.
00:54:17
What you have is attention.
00:54:20
People are not happy with how this thing is working.
00:54:22
There's like all sorts of issues with it.
00:54:25
There's this bug over there.
00:54:27
There's this performance regression here.
00:54:29
There's this like ugly code there that every time we touch it, it kind of breaks.
00:54:34
There's some security issue over there.
00:54:37
Like you're just coming with like a whole slew of situations.
00:54:41
And you don't know what you're going to end up coding at the end of it.
00:54:44
You're just trying to make it better.
00:54:46
And so you approach it not with like, hey, you know, maybe if I tried this, it will work.
00:54:51
Instead of approaching it like, okay, given all this circumstance, all this problem that's going on, where can I first like make a change in the system?
00:55:02
Like that's how I approach it is like, where can I like poke at the system?
00:55:05
Like, maybe it's just, I don't know how that subsystem works.
00:55:08
And I know it's had lots of problems recently.
00:55:11
Maybe I make a little debug interface that just like prints out the state every time it changes.
00:55:16
And I start looking at that and I like, oh, wait, what's that?
00:55:19
Why is the state changing this way?
00:55:21
And I'm like, okay, well, how does it relate to that thing?
00:55:23
And you're just starting to connect dots so that you can come up with like, what am I going to do next?
00:55:30
And I think that's you can end up the result of that process might be a top down approach, might be a bottom up approach.
00:55:36
It might be you go right a doc, but it's that process of discovery.
00:55:41
That's why I like discovery coding because you are trying to learn something you're not trying to do something.
00:55:48
Well, there's no shortage of AI tools out there, but I'm loving notion and I'm loving notion AI.
00:55:55
I use notion every day.
00:55:57
I love notion.
00:55:58
It helps you organize so much for myself.
00:56:01
And for others, I can make my own operating systems, my own, you know, processes and flows and things like that to just make it easy to do checklists,
00:56:12
flows, etc.
00:56:14
It's very complex and share those with my team and others externally from our organization.
00:56:20
And notion on top of it is just wow, it's so cool.
00:56:24
I can search all of my stuff in notion, all of my docs, all of my things, all of my workflows, my projects, my workspaces, it's really astounding what they've done with notion AI.
00:56:35
And if you're new to notion, notion is your one place to connect your teams, your tools, your knowledge so that you're all empowered to do your most meaningful work and unlike other specialized tools or legacy suites that have you bouncing from six different apps.
00:56:54
notion seamlessly integrates, it's infinitely flexible and it's also very beautiful and easy to use mobile, desktop, web, shareable.
00:57:03
It's just all there.
00:57:05
And the fully integrated notion AI helps me and will help you to work faster, write better, think bigger and do tasks that normally take you hours to do it in minutes,
00:57:18
even seconds.
00:57:19
You can save time by writing faster, by letting notion AI handle that first draft and give you some ideas to jumpstart a brainstorm or to turn your messy notes.
00:57:30
I know my notes are sometimes messy into something polished.
00:57:33
You can even automate teased tasks like summarizing meeting notes or finding your next steps to do notion AI does all this and more and it frees you up to do the deep work you want to do.
00:57:45
The work really matters.
00:57:46
The work that is really profitable for you and your company.
00:57:50
And of course, notion is used by over half of Fortune 500 companies and teams that use notions and less email, they cancel more meetings, they save time searching for their work and reduce spending on tools.
00:58:02
Which kind of helps everyone be on the same page.
00:58:05
You can try notion today for free when you go to notion.com/changelog that's all over case letters notion.com/changelog to try the powerful,
00:58:17
easy to use notion AI today.
00:58:20
And when you use our link, of course, you are supporting this show.
00:58:23
And I think you like it because you're listening.
00:58:25
So that's awesome.
00:58:26
Again, notion.com/changelog How do you get started then?
00:58:36
Like you said, it begins with some version of attention.
00:58:38
You have tension out there somewhere in the system.
00:58:41
And so when you start your day as a discovery coder, do you?
00:58:47
Are you just trying to learn how the system works kind of thing or you're starting with that tension where you've got a C or a slew of different problem sets that you're just trying to figure out why that's happening.
00:58:58
Yeah, I do think you got to start with this like curiosity of understanding the system.
00:59:02
I think a lot of times, especially in day jobs, it's very tempting to just solve problems, you're handed or solve bugs that someone reported.
00:59:13
And like you can do that if you're a reasonable programmer, you can do that without understanding how the system works almost at all.
00:59:19
You just look at like the isolated little part, you see that one variables off and you try to recreate the behavior.
00:59:25
But like where this always comes from is like you want to have a more holistic understanding of the system.
00:59:31
And you're doing whatever it takes for you to understand that for me,
00:59:41
it's often making a visualizer.
00:59:46
So I when I write the well, it was really like almost marketing to try to get the job at Shopify working on Ruby's jit compiler.
00:59:47
I spent a little weekend hacking in a live view of all the code that got jitted into Ruby.
00:59:55
So I just kind of shoved a web socket in the middle of Ruby's jit compilation and started sending code and graphs.
01:00:03
And then I made a little web interface.
01:00:05
You can see this on my, I guess it's on my Twitter.
01:00:07
There's the only place I really posted this, which you know sad.
01:00:11
But anyways, yeah, so you can see that where like it's like as you're in like IRB in Ruby and your typing code, you could see like code start compiling and like graphs of it.
01:00:23
That's cool.
01:00:23
And that was like how I started being able to understand this like basic block version.
01:00:28
I had read the paper on basic block versioning, which is the technique, why jit Ruby's jit compiler uses.
01:00:34
I had read the paper on it.
01:00:36
I had looked at a bunch of stuff, but it all just didn't make sense to me until I made that visualizer.
01:00:41
And I didn't have like complete answers, but I started asking the right kinds of questions like when do multiple versions of blocks come up and why it all started because when I tried to visualize it,
01:00:52
I just had assumptions.
01:00:54
And then when I really tried to visualize it's like, wait, why is my code break.
01:00:58
Oh, oh, this isn't unique.
01:01:00
There's multiple of these.
01:01:02
And I didn't realize that it's things like that.
01:01:03
So it might not be visualizing it for you.
01:01:06
It might be something, you know, it might be making a big bulleted list.
01:01:10
It might be whatever, but the goal is to try to understand some aspect of the system that you didn't understand before.
01:01:17
And only then do you move to this like, and now how do I solve a problem?
01:01:22
What problems are there to solve?
01:01:26
Compare that to test driven development.
01:01:31
I have never, I've never, it's just, I just, I don't understand people who look, I feel like the people who love TDD have to be outliners.
01:01:40
And if they tell me otherwise, I'm just confused.
01:01:43
Okay.
01:01:46
I want to like it.
01:01:46
I think it can be good.
01:01:47
When I'm writing a parser, I often do kind of more test driven development, do you think?
01:01:52
Because it's really easy to be like, hey, I want this thing to parse.
01:01:56
Right.
01:01:57
Right.
01:01:57
But usually I only do that in a language that's not like closure where I can just like immediately evaluate and see what it parses to.
01:02:04
And usually my test don't even have assertions.
01:02:06
They're just glorified repuls.
01:02:09
So if you need repuls and Java, just write a test and run it and put a break point.
01:02:15
But I don't know.
01:02:17
I guess, you know, it would be a question for people.
01:02:19
If that's the tool that really helps you discover things, great.
01:02:24
I've never understood it.
01:02:26
I asked because I've, I'm not a an urgent TDD here, but I definitely have used it for that purpose.
01:02:36
And maybe you, and then I just fall back on the tests as regressions and like, then I just have this little asset that I can hold on to as long as it's useful.
01:02:47
Where I'm using the test really to explore more than I am to define the way something works, but I'm trying to explore a solution.
01:02:55
Perhaps as an API, perhaps it's a technique, etc.
01:02:59
And so I use the test for that reason, kind of set up my self and environment that I can just play in.
01:03:04
And yeah, I will basically use pry if it's Ruby or even a liquor has pry, which is a lot like you're saying, like get a repel right here with the whole world around me and just play.
01:03:15
But then I'll just leave the tests in because now they're like this little thing that goes green and I can prove I didn't break anything later.
01:03:21
But I'm not, I don't TDD at all the time or for everything, so I'm not like strict on it, but I have found it to be useful for discovering things.
01:03:29
Yeah, I think that's an interesting one because I guess when I think of TDD, maybe I'm thinking a little bit more, you know, purist of like you have.
01:03:36
Yeah, yeah, yeah.
01:03:37
Yeah, I'm not, I'm not purist.
01:03:39
I do write the test before the code, though.
01:03:41
So I think about as TDD, like my test is driving out my implementation a lot of times, but in this case though, wasn't it that there's existing code that you're writing new test for?
01:03:52
Or there's existing little bit of both a lot of times, I'll be writing the test for new uses of the same code or a modifying code extending.
01:04:04
So it's not always green field, but a lot of times it's for new code as well, you know, but the test comes first and then I write the code that makes the test work out.
01:04:13
So when you do this, do you find that like you write the test kind of with like your given expectations and then like it turns out, oh, the system doesn't work the way I thought, is that kind of the goal of writing these tests?
01:04:25
Sometimes, yeah, that will be well, that usually happens more with an existing system that I'm trying to understand versus one that I'm currently building.
01:04:34
So there's kind of two contexts ones like using to be a lot of times modifying a world that exists and it's already gnarly and so discovery is like top of mind.
01:04:44
Oftentimes, I already have most of the system in my head.
01:04:47
And so now I'm extending it, changing and I'm making assumptions and make sure those assumptions are true or not.
01:04:53
And so that's the discovery.
01:04:55
And then I'm of course, like testing out the code that I'm adding to the system as well.
01:04:59
So I just a little bit different mindsets there, I think I've only ever come into a system like you remember your best words code base conversation like I've had one of those that I was just comparing it to the whole time,
01:05:12
but mostly because I didn't rescue projects for a while.
01:05:15
We'll be on rails rescue projects contract years ago.
01:05:19
But most of the time, the systems that I'm working on aren't so unknown to me that I need to do too much discovery, except for I'm trying to discover a solution perhaps to something new,
01:05:30
you know.
01:05:31
Yeah, I do think discovery coding probably is more valuable in those context where like the system is too large for you to keep in your head at one time.
01:05:42
Or like there's an external system that's, you know, complicated enough that like, you know, you can keep your system in your head, but like the interactions with that other system are complicated enough that it's like,
01:05:55
wait, what is happening with all of that over there.
01:05:59
Right.
01:06:00
And so like I do think those are probably the points where I found it, at least for me, I found it to be most valuable is when like, I mean, even for, you know, code that I wrote all myself, like I said, I'm building this programming language,
01:06:12
but I'm interacting with like machine code and how it works and, you know, what's, and I don't have that full understanding of like the details of arm and how these things are supposed to work and when you have different flags set and et cetera,
01:06:26
right.
01:06:27
And that's the point where I find these things really interesting either where you don't have the system all in your head or you're like interacting with something that's chunky and difficult.
01:06:37
Is every time you sit down to code a discovery coding session, like because you are a discovery coder is all you do discovery coding.
01:06:46
I wish it could be, I find it younger it was I find it the most enjoyable right when I can I like coding and when I can't I hate it describe like give me the version that you don't like.
01:07:00
Yeah, it's, you know, usually happens at work because otherwise you just wouldn't do it right so you have some change that somebody else has come up with the details of how you're supposed to implement it and they handed to you and tell you to go implement it.
01:07:15
Or you have this bug that like yeah you know it exists and you should be fixed but like in order to fix the bug now there's like 1200 breaking it tests.
01:07:27
You know integration test and you got to go fix all those integration tests and you're just sitting there kind of doing wrote work right like so much of the day job of programming is the unsatisfying parts of it.
01:07:41
And if you can what I try to do is I try to sneak in discovery coding into some of those bits I try to use them as an excuse to like under oh there's a bug in this part of the system.
01:07:53
Yes, I could just fix it by changing that one line that's obviously wrong but what if I were a more junior developer and didn't just immediately know that that one line was wrong.
01:08:02
How about what would I do oh I would go learn all of this stuff right about this part of the system and discover that that one line was wrong.
01:08:10
So I'll try to use it as an excuse and because I think it you know again you could think it's maybe a bit self indulgent but I think it pays off I've had so many times where me knowing a part of a system that I didn't have to know strictly speaking paid off in the long run for the company.
01:08:26
Is there an example of that where you knew that one line was the fix and you went and discovered that it was that plus.
01:08:34
Yeah I'm not sure if I can if I have like a good concrete example I do think you know the thing I talked about with in my article about how I mentioned I think I did I debugged one problem for like two years.
01:08:53
And it turned out to be this like bug in some third party system where we turned off a caron job but I was told over and over again when I was solving this problem to stop debugging it and just go write some quick hack that will fix the side effects.
01:09:12
And it turns out that that root cause of that bug was actually the root cause of 30 separate bugs that we had in the system that were action at a distance all complicated all weird and had I listened and done what I was supposed to do by my boss telling me to do it.
01:09:29
We would have never solved all 30 of those problems we would have only solved a handful of them and so like I knew the quick fix for each of them but only by like being willing to go I want to understand this whole system I want to go and dive into.
01:09:43
Gil foils code I almost said his real name Gil foils code and see all of his craziness yeah I like by the really feeling that that pull that's how I was able to solve all 30 of them at once instead of duplicating my effort every single time.
01:10:00
Now did you go into your boss's office that day and pick up a microphone and then drop it right.
01:10:07
I found general advice to more junior programmers if you do something really great but someone told you not to do it just don't tell them you did it.
01:10:16
I found I used to brag about those things and I so personal satisfaction you know you get to tell a cool story on a podcast exactly found my drop your boss.
01:10:26
People said I've been disobeying you for two years exactly people don't usually like it even if it paid off it just makes them feel like they were stupid.
01:10:35
Usually the outcome right that like you're and you're trying to show them that they were stupid you said not to do this and I did it and look at all the stuff that paid off.
01:10:44
So you just keep it a secret just keep doing it just keep solving the problems basically you know if you can live to tell another day or live the discovery code one more day.
01:10:53
Yeah don't do what you're told do it's right but what if you're wrong and you never figured it out after all those years if you do enough discovery code with enough eyeballs all buzz your salad yeah exactly just open source your code of the world and somebody will find it for you.
01:11:12
That that's good advice you know if you're in a company and you have a problem just open source all their code and then someone.
01:11:19
I know somebody who did that one time and it really and well someone just like posted a bunch of company's code okay okay okay I can tell you I can tell you okay oh my gosh it's been so long so thought about this but this is one of the stories I won't name names let's just call them Dinesh.
01:11:40
It's gilful sidekick the nesh got a side gig to and I'll say our main gig okay the nesh got this sketchy side gig where we were building out a system and in our in our main thing our consultancy we were building up this template let's just say and you want to keep improving that and that temple was open source.
01:12:07
But then in the side gig we were doing some things that would make the template we did in the open source better so we wrote the code for them but decided to move that code over here last day we I mean the nesh did this.
01:12:21
I didn't know that and we had a company together and it turned into a legal situation it was bad.
01:12:31
And it was that it was the one time I was fired because of somebody else's stupidity basically and so the nesh open source mail says code wow.
01:12:44
I mean it's simple boilerplate stuff it's not like you couldn't rewrite it differently but it literally was copy and paste it like it was line for line the same and the company found out and they were upset and they were the kind of people that you don't mess with.
01:12:59
The kind of people that the moment they find they're not like oh you're fired it's more like oh you're fired and here's my attorney and they're calling you right now and don't ever talk to me again because now you talk to them.
01:13:10
Wow yeah so that's why it was the Italian mafia.
01:13:16
You know what I would never mess with again even imagine the story a little nervous.
01:13:20
Oh no.
01:13:20
I'm going to get a cease-and-dissist from all over.
01:13:24
LCs buffered from that but I mean like that doesn't exist anymore that's been that book that book is closed is very scary because I've never been involved.
01:13:34
I'm not a sketchy guy you know.
01:13:37
Let me tell a similar story that's lower stakes because it's college.
01:13:41
I had a group project one time four of us in a group and this is for like a management information systems project a whole bunch of writing no coding very like all outlines you know no discovery.
01:13:53
And one of my teammates they just assigned you partners you know and there's four of us and he's like don't worry about it guys it's like a semester long project I got the whole thing taken care of I'm just going to do it.
01:14:06
And I was lazy and young and not very discerning I thought awesome you know check it off my list I've done for the semester on that particular project.
01:14:15
Well the end of the semester rolls around we all get dragged into the teacher's office guess who plagiarized their entire project me alongside three other people because the one guy who's willing to do the whole project just plagiarized it.
01:14:29
And man that was a rough day for us you know guilty by association by negligence.
01:14:35
That's why I was not long as you got dragged into that when your partner made a really bad decision you were you're hitched up to it man you know.
01:14:46
We live we learn yeah going back into discovery coding I'm curious how it works from sessions I imagine like you said you had that ripple open for a month or whatever.
01:14:58
How does it work or how do you get back into what you don't call flow what I might call flow okay how do you get back into that zone let's just say.
01:15:06
To be effective back into discovery mode from yesterday's session to today's session like what do you do to get back into that groove.
01:15:15
Yeah this is something that has been evolving for me for quite a while I watch occasionally watch Jonathan blow.
01:15:22
To his live coding on twitch I don't know if you're all familiar braid the witness he or two games that he made he's a he's also making his own programming language Jai.
01:15:34
He's a very talented programmer like braid in the witness where I'll built from scratch and he's working on a third game now that's also the game engine was built in his language that he's.
01:15:47
You say braid yeah braid and the way I play that one yeah if you haven't played the witness I definitely highly recommended it's a kind of a puzzle game almost kind of like a spiritual successor to miss in some senses just in that like it's a beautiful environment that you walk around kind of has that little feeling but very different in terms of like the actual game play.
01:16:08
Really great game really like honestly it's it's a little bit of more like an artsy kind of game so definitely like recommend spending some time playing it.
01:16:18
And he does these live streams and he's just like he I will just go ahead and say I don't agree with all of Jonathan blows opinions I always say this every time I mentioned Jonathan blow because he's like he can be a little rough around the edges at times.
01:16:32
But watching him program is really interesting and one of the things that he gets to do that's very different from what I get to do in my day job is work on very long time scales.
01:16:42
He's building this game for like a decade right and these code bases are evolving very slowly over time and he leaves these very like non professional like I'm not saying like they're like rude or anything they're just like very personal comments in his code base all this time they're not trying to be.
01:17:01
For generic programmer to learn what this codes about their for him their personal notes scattered throughout the code base.
01:17:09
And when he comes back he like can read these comments and actually like understand where his thoughts were.
01:17:17
At that time and this is something I've been trying to evolve I was very much alike comments are bad if you have comments you should just like rename your methods better.
01:17:26
That was kind of like what I grew up believing in programming and I've gone gone the opposite direction where especially to like get back in the session I will always try to end each session writing one of those comments to myself.
01:17:41
I will try to write like on it or I could how do you write this yeah it's mostly just like stream of consciousness like every problem that I'm currently feeling every bit of code that's ugly I try to like write it down of like I don't like this.
01:17:55
I don't like this I don't like that this is working this isn't I need to solve this problem here's my current theory of what's wrong.
01:18:02
That kind of thing right because usually I have to end the set coding sessions very unsatisfied where I haven't solved the problem that though these comments.
01:18:10
Wherever my text editor happens to be open at the time or I have a big to do and I also dot md and I also have a thinking dot md that I have in this repo where I just like put stuff.
01:18:24
I don't care if they're like ugly I can always delete them later you know that they don't have to stay around but that's how I try to end these sessions and I found it to be so helpful because I'll come back and I can hear like my own frustration and voice.
01:18:39
Not like professional you know this method does these things like I just kind of ignore those kinds of comments where if I see my own writing I end up paying attention and getting back into that head space much more.
01:18:53
Especially frustrations that's the biggest one for me because I'm very it's very easy to jump back into being frustrated.
01:19:00
Yeah I want to talk about this more but I want to mention an idea that you just gave me like is there the concept of personal comments in a code base.
01:19:10
Because I mean that maybe think like I would love like drops in comments that are like that let's just say you know like like John does but I don't want to read those comments they're for me but I want them in the code where the crap happens let's just say you know is that concept this exists out there I don't think so.
01:19:27
No this is a tool I've wanted to build for a while I also am working on my own text editor at some point or other and that's one of the features that like is a killer feature to me like I want to be able to decorate code with my own notes and make sure it works across revisions that's the only thing that you have to be careful about right is like how do you make it so that even if someone goes and changes all this code it like properly anchors the right places.
01:19:54
Yeah that should be built into an editor for sure yeah exactly like leaving your own trails and then you could even like not only just leave your own notes that are for you.
01:20:02
You could like make your own notes as like a guided tour of a code base and handed off to people.
01:20:09
Right so you get like collections of notes and then you could have shared notes like I think this is we we have way we don't you know use our metadata enough I know that get has a notion of notes but everything I've looked at it it seems like people are saying don't use it it's not good but there is something built in to get the like get notes that you can put stuff on.
01:20:31
I will also leave big commit messages that are just my personal big dumps of thought yeah commit message close to get to that I would like about it seemed like you're saying is like maybe john's practices.
01:20:42
With them being littered everywhere is that they're where the problems are where the angst is that or even where the satisfaction might be like it good bad ugly whatever might be it's where it should be so when you come back to that place it's like oh.
01:20:55
And the reason why I should this questions like how do you deal with sessions is going back to Stephen King one thing he does is when he sits down for the day like his daily routine.
01:21:03
His his process is reread the previous I think it's like X chapters like two chapters chapter and a half so he's very much a discovery writer.
01:21:14
If you want to keep the the brand discovery going and so when he sits down for a session and this guy is notorious right like Stephen King's written 60 plus novels 20 20 200 short stories I mean he's well renowned as an effective writer that's skilled and has done a lot and he's written really great stories.
01:21:35
What do you like them are not subjective but you know this idea to drop in like these notes in different places and or to actually to come back to the session with rereading where you left off at these notes is like if I'm back here and line 120 well 120 is where I'm going to begin this process of it but here's the Harry monster I had forgotten about but now that I revisit where I went you know my.
01:22:04
My my Ram is full with what's what's the come yeah I think that's a very important thing to get back into that context I like the idea of going back and reading I think it would it would be interesting to like make yourself a tool that just like looks at your last session of your get history or whatever and let you you know play it out but like a nice narrative of like what changed.
01:22:26
But you can even like summarize it or whatever using LLM or something but I do think these comments kind of serve as that because going back and reading all your old code I mean sometimes you'll spend a few hours and you make like four lines of code change right right I was going to say sometimes nothing gets in the get right yeah I spent a long time and I've got nothing to show for but doesn't make progress yeah you just debug like that's what I spend a lot of my time doing especially like when you're working at look with lower level stuff right you're just like trying to debug something that's gone wrong.
01:22:55
And writing down all of those theories is yeah definitely the key so I like that I like the the Stephen King stuff I might have to look into that even though I don't plan on writing a novel.
01:23:08
I don't know there's something interesting about learning how people do do these things yeah I mean he's he's one of me to follow in regards to that but I think you practice a lot of what he does.
01:23:20
I mean environment wise and not calling it flow and stuff I think it's cool I think it's cool I'm curious though if you did this personal note stuff like how that would actually work out because it seems like a really good thing that you can do but doesn't really belong in the code forever like some things might some things might not you know because he explain it like maybe it's documentation maybe gets distracted documentation and there's a lot of a lot of potential for this idea yeah I think you have to get it so that it like the biggest thing I worry about with it is the UX which is why like when I'm thinking about building my own editor makes it much easier like you could try to do like a VS code plugin.
01:24:09
For it or something or you could try to do just like I even thought about building a command line tool version I have an idea for you sorry yeah great what if it layered on top.
01:24:19
Yeah you know like you know we're lying 120's at as an example he's 120 before what if you had an overlay that was on like your database is on top of this the coding database.
01:24:30
I don't know if I would suggest that you write your own editor unless you're like you're just die hard because wow like getting people to change is.
01:24:37
Oh I don't plan on anyone else using it.
01:24:40
Okay yeah this is my editor literally.
01:24:45
Yeah so one of the things I'm thinking of that I think makes this a little harder is like you want some things to be based on like line 120.
01:24:55
But you want other things to be like attached to this function or attached to this loop or attached to and like when do you decide that those things if someone renames the function right.
01:25:06
How do you surface that note again.
01:25:11
Do you is it like any like that's those are the kinds of questions that I'm unsure about is like as the code based changes especially if it's not just you making the changes.
01:25:20
How do you keep your notes attached to the right points and surface them in a way that you can see them.
01:25:25
It's kind of like carrying about the the signs on a road that doesn't exist anymore you know like do you need to know there's a hairpin turn on a road that doesn't exist anymore kind of thing like if somebody deletes the code for example well what if they just like move the functions are around right.
01:25:40
Right rearrange rename you still want that comment.
01:25:44
But you don't want it online 120 you now want it online for 20 right.
01:25:48
Oh yeah I lived in apartment for 20 I just have to put this out for for I've lived in an apartment that was apartment for 20 right across the the hallway from me was for 21 no way.
01:26:06
And those people smoked weed like no other and they definitely stole our sign and we have to have a special sign for 20 yeah we had to have a special sign that was not removable easily like all the other ones.
01:26:24
Yeah so that they would stop stealing our sign we ended up giving a nickname ourselves we ended up giving them a nickname which was the 421 of these.
01:26:36
That's good I like that but yeah I was very frustrating to have them constantly stealing our sign like come on guys like what I like the idea of this.
01:26:47
This sign stealing this personal this personal notes in the code base I don't know who you need to talk to Adam you need to talk to Nathan Sobo and get him to build it in the Z because somebody with an actual editor that's like once differentiating features like that's a pretty cool differentiating feature.
01:27:02
They've got the horse power to actually think through all these any gritty things these UX things and maybe they'll build it and then we can just use it because we're not going to use Jimmy's that's for sure.
01:27:15
I do think you could do this as a separate thing where the way I've thought about doing it if you want to kind of go like the low five route right like don't try to make this real nice is you.
01:27:25
You write comments like normal in your normal text editor but you just give them like a little bit of prefix that says like personal like you do to do or whatever.
01:27:34
And then just you run a command line script that will take them out before you commit things right.
01:27:41
So you write all the only problem is you might forget right yeah it's just too manual yeah but like if you want to prototype this that would be the way I think you could start doing it.
01:27:50
And then you can put them back in and then what you can do is you can get those semantics of like how do you you attach it to a function to stay on the line what if code changes across commits how do you show these things etc.
01:28:03
Yeah, you can also build a standalone app for it that like I was thinking of an extension yeah which stores which reads all the notes out of some like get ignored file which is like personal notes dot into your whatever and in that file is where you actually store the notes.
01:28:20
And there's somehow linked to a file name and a line and then obviously you can get fancier from there and so when you boot up your editor or start your project or whatever it's going to take that.
01:28:29
File parse it and put them in and then whenever you save a file it's going to like take them out or make sure they aren't actually in there but they're going to look like they're in there as far as I got as we talked.
01:28:39
The other thing that would make this cover a solution for this we can't just make up some the other thing that would make this a lot easier is if you kind of got rid of this text based approach to programming right maybe go for something like I don't know if you are familiar with the unison.
01:28:55
So unison is a language that is being produced right now they have like a unison cloud and all of this and the idea behind it is your code base itself is a big immutable database.
01:29:08
So when you make a function you don't store it as like like you say you have map right you don't store it as the function map as like this is the name and this the text I have you store the hashed contents of that function and map is just metadata on top of that hash of the AST that you wrote.
01:29:28
And so your code is all completely immutable and it's all content addressable and so what you could now do is you could have very easily hey I want to write a note on this map function right because it's this hash here's my note attached to this hash and what they do when you like refactor and maybe you know someone publishes a new versions is instead of having to be like here's this version of the library and I just get all the latest.
01:29:56
You actually see like oh they changed map from hash one to hash to do I want to accept the new map thing okay every you know everything that in my code base that's pointing to hash one now I change it to point the hash to if you have this kind of setup it would be very easy to attach these kinds of notes as metadata.
01:30:17
And so you know maybe we're just like these are all the kinds of things that these like more futuristic ideas of programming could unlock for us very trivially and we're trying to shove it all on the text and that's why we're running up against these problems.
01:30:31
Right the I would call the ones that lose their home so to speak let's say you do accept that change just call orphans they're just orphaned away from its previous and maybe there's and if it has a visual or not but some sort of snapshot of where it was like here's before this change accepted it was in it was online 120 it should have been online for 20.
01:30:53
But it's online 120 and this is how line 20 was when the note was captured yeah you know some sort of before and after state but you've accepted it and now it's orphaned and so doesn't sort of get visualized in the the editor and that actual line 120 more anymore because that world is not changed yeah that's a good point you could and then you maybe you have some actions to be like you know hey take this orphan and move it down to where it needs to be like you kind of have to you know manually keep it up or whatever if it can't automatically figure it out but that that seems to be.
01:31:22
And you might be like hey this doesn't matter anymore because yes it's like you know maybe orphans are actually the ones that are easy to delete.
01:31:28
Yeah but you get just like a little you know a little icon little thing that gives you like a count no offense of orphans of course of orphans true orphans.
01:31:35
Yeah my brain did say oh if it's orphans you have a little like icon of like a crying child.
01:31:41
Oh god.
01:31:42
No don't do that.
01:31:49
Don't do that.
01:31:49
I was going to start singing the son I'll come out tomorrow.
01:31:49
I like this idea a lot.
01:31:50
I really do I feel like this needs to exist.
01:31:52
I feel like this is like the next frontier or one of the versions of it because I think there's some stuff in that it's just like really good for the folks like you and Jared and me is like the discoverers that you kind of like want to use your own bread crumbs and not everything is public especially whenever you're like that.
01:32:11
It's feelings it's objective.
01:32:13
It only matters.
01:32:13
It really only matters to you so like your peers may actually reject these comments anyways that they were true comments in the public code base.
01:32:21
Yeah you could probably offend some people too you know like accidentally like not could you write something completely rude but you're like I don't understand this code you just frustrated at the time it's like this is all garbage.
01:32:31
But it's pertinent for tomorrow's session because if you want to pick up where you left off you got to put it down raw you can't like all it was amazing today.
01:32:39
And this function is just so beautiful.
01:32:42
You're not going to leave that in there for the long term though you're talking about things that you understand or things that you don't understand that are long term that you might come back to.
01:32:50
Not my stream of consciousness from yesterday I assume Jimmy after you consume that and you're back at work going like that comment can go away because now you've refreshed your mind and sometimes they do sometimes they don't you know sometimes it's like he keeps the stuff he's oh yeah I don't know no no left behind I'm a digital hoarder for sure.
01:33:10
But you know sometimes it's like you leave these notes knowing that like trying to tackle that problem right now might be a mistake and you need to like remember that context so like I was I built a register allocator that was all really bad.
01:33:27
And you know I was building it for my language but it worked it worked for everything I could find and I left a big comment about all the deficiencies with it and how I thought it was probably going to break.
01:33:38
And it was until months later that I got code complex enough in my language that broke the way I was doing register allocation that I went went back to register allocation and read that comment again that was kind of this like frustrated like why am I doing this why does this all.
01:33:52
That I was finally and then I like left at the bottom like you should probably if you run into bugs just actually go read the paper on linear register linear scan register allocation and actually understand it and this last weekend that's what I did I read the paper I actually understood it I implemented it and now that bug went away.
01:34:12
But like had I not left that for myself that's good stuff like that's a good comment you just check that you check that in right you just look in there for yeah it's my personal project so I can check anything and but like for work stuff I you know I wouldn't leave that in there for your and if it was work code.
01:34:27
I would have to clean it up and make it professional right and then it would lose some of the juice.
01:34:32
Those I can usually I can usually hide those in commit messages I've had coworkers message me and go oh I didn't know commit messages were for rants because they'll like go like three paragraphs and then all of a sudden I'm ranting about the problem.
01:34:47
Usually people don't read those you can get away with it but I feel like a professional courtesy for leaving those when you have to do a hack.
01:34:55
Because someone eventually is going to get mad at you and they'll look at who wrote the stupid code and then hopefully they see a big long commit messages they feel better.
01:35:03
That could be your next blog post you can go through some of your old commits and pull out spicy comments and I'll be like we're taxi cab confessions over the show on HBO.
01:35:13
It's like commit message confessions by doing Miller.
01:35:16
But I do think this personal I agree I agree I agree Adam I think this personal notes told would be really nice I do think you could probably build it as a plugin on various editors without too much effort.
01:35:27
I think there's some there's some UX things you got to think about and some problems so you know VCs want to I'm joking.
01:35:34
I'm going to save any of our listeners want to solve a problem out there in the world here's a problem you could solve.
01:35:39
So at least three nerds appreciate it.
01:35:51
It's got some it's got some legs man good I'm glad to hear I think so reminds me of Phil notes I got a friend of mine who just like swears about Phil notes he literally keeps.
01:35:52
The Phil notes notebooks that kudal partners came up with years and years ago.
01:35:57
He keeps one of this back pocket and it's like his field guide to everything.
01:36:02
And he you know it's place in time where he's at who's with note and he pulls this thing out like it's his his own personal reference because it is.
01:36:11
And he pulls it out constantly to like reference it for whatever.
01:36:15
And he keeps that he keeps them all it's kind of like that but in the digital for a code base.
01:36:20
I have a little dog whining at me give me one second to grab her.
01:36:24
This can be on the podcast for not it doesn't matter but if I don't grab her she's just going to keep whining at me it depends on how you grab her you know.
01:36:36
There you go.
01:36:37
Oh Jared.
01:36:38
Oh I was thinking like right a neck you know like we can't put that up there well you know.
01:36:44
He's strangling his dog on the oh hey he's back what's what's the pup's name this this is lemon.
01:36:52
Lemon like the fruit.
01:36:54
She's a lemon good I thought he said the linen like the.
01:36:59
No no no lemon like lemon's a good name yeah she's a lemon beagle that's her coloring so nice.
01:37:05
She thinks it is 30 minutes later than it is so she thinks it's dinner time but she's wrong.
01:37:11
See my pup back there on the couch.
01:37:13
Oh no I have oh yeah he's covering but I see now yeah.
01:37:17
He's right there.
01:37:18
Nice.
01:37:19
He's he he makes a little appearance everyways hopefully he's sleep and he's just hanging out.
01:37:25
Yeah she thinks it's time for food but she's she's very wrong but the problem is when my wife's home she's not as consistent at the time.
01:37:34
Yeah so you know she's I get it she's confused it's fine.
01:37:39
So when will discovery coding become more than this blog post like it's got I think this has got book potential it's got branding potential.
01:37:47
Yeah it's like agile but you know like in terms of its ability to change things.
01:37:54
I will admit that I haven't thought at all about about anything beyond the blog post but you know it's nice to hear.
01:38:02
When your programming language can come out then.
01:38:05
That I am I am working on that it's a very long it's a very long endeavor I'll say that have big ambitions for it.
01:38:14
What's it called it's called beagle actually.
01:38:17
Yeah I can get a little mascot that does hurts.
01:38:21
Yeah I call it linen.
01:38:23
But yeah so it is called beagle it's a it's a dynamically typed language which I know is like controversial right now you know for me.
01:38:32
I like them it's functional and the goal is for it to be fast and multi-threaded you know those multi-threaded very direct thing I think all of our.
01:38:43
That's the problem like all of our dynamically typed languages right now are a little too old.
01:38:49
All the popular ones you know they're great I don't have anything bad to say about Ruby Python JavaScript.
01:38:55
But they all kind of are from an era where we we learned lessons since then one of those lessons in my opinion is multi-threading is good.
01:39:03
And if you want to really like use all of a modern computer you need it so I'm starting with that from the beginning and then the other thing is like VMs are really really complicated and trying to like after the fact patch on.
01:39:18
Jit compilers and all sorts of things just takes either a lot of money in the case of like node and V8 and all of that or just a lot of time and effort you look at what Ruby and Python are doing.
01:39:29
I started with just compiled a machine code from the start.
01:39:34
And you know it's proof of concept it's very early days but what kind of machine code like specific right now I just have it working on my Mac so it's arm but making an x86 back end won't be too hard.
01:39:49
But it's like definitely in the like hobby project stages right now but I have you know I just you know I have multiple garbage collectors that are plug and playable like I have a generational garbage collector a copy and garbage collector.
01:40:01
It has namespaces has closures it's like I've gotten some real code in it now it's finally at that stage I've written like 2000s of 2000 lines of code in the language itself.
01:40:12
So you know it's it's getting beyond just toy which is fun very cool.
01:40:17
But it's it's way you know I'll probably never finish it but I'll just make it the one level of ridiculous why I have this language is because I built it I have a blog post where I built an editor in rust that's that is up there and I talk about all the problems with it and then I built a second editor in rust that I still haven't written the blog post for where I made all of the plugins wasm and you could like live hot you could like hot code with wasm and hot.
01:40:41
With wasm and hot reload all of the plugins and like the whole actual editor part was in these wasm plugins and I absolutely hated it because like wasms cool but it's not meant to do hot reloading constantly.
01:40:56
And so I went and built a programming language just so I can go build my editor.
01:41:01
So it's so the editor and language will ship at the same time it's all levels of ridiculous and I don't expect anyone to ever use it but I've learned a lot I highly recommend like just go reinvent the wheel and build stuff that you never going to ship.
01:41:15
It's great.
01:41:16
They always say don't do that you're saying do he's counter culture yeah yeah this is okay this is a blog post that I will write at some point soon which is I think we have over indexed on the values that are good for our day job and start applying them to our everyday life when we're coding.
01:41:37
And I think this is a big mistake that we're doing in your day job it's often not good to reinvent the wheel.
01:41:44
You should just pull that well used library that everyone knows don't go make your own front in framework use react use you know whatever you felt whatever you want to have like fine I'm not going to be partisan here.
01:41:57
But in your day to day life when you're coding yeah reinvent the wheel use your own framework do whatever you want because like all of those values are made for the company.
01:42:09
They're made to make money and if that's not your goal is your goal is to learn and have fun we need to ignore all those values that we just shove it on.
01:42:19
I agree with that man that's that's the living you know like some people want to that it's almost like the safe road you know to to not reinvent the wheel is the safe road.
01:42:27
But it's not the road that you go down to learn how a system works or why how you would even do it in the first place is just there's so much learning in that.
01:42:36
That's why I love to to home lab personally like I get to solve problems that I don't even have it work let's just say.
01:42:43
I'm I'm manufactured problems like a great thing and then as a result I'm like well dang that's stupid why is it worth like that you know.
01:42:53
But now I know and I've got my own documentation that's bifurcated away from the code base which is like come on Jimmy solve that problem you know.
01:43:02
Yeah yeah that you just probably great like the personal code base you know personal notes I'd also love to take notes on other people's code bases right you're trying to solve some problem with your home lab.
01:43:13
And you're like you know digging into some open source server and it has some weird bug in it like just take notes for yourself yeah.
01:43:20
It kind of should be it should live in the repository should like yeah yeah yeah like you should it live in the repo I know we're like we're like product designing this now but I even want it to possibly be public.
01:43:34
Well I think if it doesn't have to live in the repo if get hub is always get hub and some URL get up dot com slash whatever dot get exists.
01:43:45
Then you can always assume that will exist and you could build that that layer on top assuming that truth is there and that foundation remains the same the API may change a little bit you can always.
01:43:56
You know ebb and flow as a result but if that remains a truth that we developers live in.
01:44:02
Then you could build that system on top yeah I think going to the get shots to make sure that like you know the points in time that for sure I think is a no brainer.
01:44:11
And I think I mean I think maybe you should have an option that you store it in your get you know in like using get notes or whatever right.
01:44:19
But I would also want to be able to be like nah that one was too spicy I don't publish that at all.
01:44:26
Like oops I made that one public.
01:44:29
Exactly like I don't want that you know or you like you know you push publish it encrypted in the thing right public.
01:44:36
Private key sign.
01:44:41
I don't know.
01:44:41
Come on don't do that.
01:44:41
Are you sure you want to drop this spicy thing.
01:44:42
Yeah yeah.
01:44:43
Publicly you know maybe you can have shared ones as well and you can host those as like text files in the repo.
01:44:48
There's all sorts of ways you can do it.
01:44:50
Well there's your SaaS plan right there so yeah that's good don't let people posted it in the repo at all.
01:44:55
So that way it's as a service.
01:44:57
That's right.
01:44:58
I use the cloud as a service.
01:45:05
You got to control the data.
01:45:05
And then you get my ever note and that's your plan.
01:45:07
Bam.
01:45:08
Does ever know is ever not still.
01:45:11
I don't know.
01:45:12
It was huge back in the day.
01:45:14
It's okay.
01:45:16
It doesn't still do what it used to do or they've pivoted like 12 times or something.
01:45:20
I think I don't know firsthand.
01:45:22
I recall seeing somebody talk about how they still use ever notes.
01:45:27
And I think it was actually the guy.
01:45:29
No, I don't know what it was.
01:45:31
It was somebody promoting obsidian and using is a second brain.
01:45:35
And I think they were like talking to somebody that was coming from ever note.
01:45:39
And yeah, it still exists and it's kind of the same.
01:45:42
I hadn't heard of ever note in a long time until I just said it.
01:45:45
Yeah.
01:45:46
Is that anything anymore.
01:45:47
I remember when it came out it was all exciting.
01:45:49
Oh yeah.
01:45:50
OCR for you was pretty much the reason right.
01:45:58
Yeah, like you take pictures and snap it in there and it would OCR it and tell us the first like consumer app that would do that.
01:45:58
Plus that I cool elephant icon that really got it going.
01:46:01
And speaking of that like chat GPT will well OCR very well.
01:46:07
I was just doing that.
01:46:08
I mean, I was on a I was messing around and for whatever reason I just didn't have my laptop near me and all I had was the machine that I was messing with.
01:46:17
Monitor keyboard mouse, etc.
01:46:20
and my phone.
01:46:21
And so I like I'm at the command line deal with some stuff and I can't go to the internet because I don't have another computer all I have is my phone.
01:46:29
So I would like to take my phone out take a picture of the screen.
01:46:32
Here's this issue.
01:46:33
Throw that in chat GPT and it's like oh, it would read it as if it was like the terminal.
01:46:38
It's the coolest thing ever.
01:46:39
You know what else does that now quick time player.
01:46:42
Is that right?
01:46:43
Yeah, you like are watching a movie and maybe the credits are rolling you can just like select the credits and copy paste.
01:46:49
Yeah, Apple has a pretty much all text and images.
01:46:52
It's really funny because it used to be like sending screenshots was one of the most frustrating things anyone could do.
01:46:58
And now like I found things where like I can't select that text.
01:47:01
Oh, wait, I'll take a screenshot of it.
01:47:03
And now I can select.
01:47:04
And now I can't.
01:47:05
Yes.
01:47:06
I just did that today actually I just did today a couple times like let me screenshot this so I can select the text.
01:47:13
Yeah, too.
01:47:14
Life really is getting easier after all.
01:47:17
So one thing I noticed with this discovery coding though is that you've described it.
01:47:22
You've prescribed it, but you haven't defined how to begin like if there's someone up between like dude I want to go down this road.
01:47:28
I think on this kind of maybe they already are.
01:47:30
But like you know, I want to discover discovery coding.
01:47:33
How will they do it?
01:47:34
How do you begin?
01:47:35
Yeah, I think that might be a good you talked about, you know, what how do I take it out of this blog post?
01:47:40
That's a good follow up.
01:47:41
Maybe that I can do.
01:47:42
But you know, I think I think the key.
01:47:46
The key to get into discovery coding is to be willing to not have a solution in mind.
01:47:54
I do think that that is easier said than done.
01:47:57
I think it's very, very tempting anytime you're approaching programming problems to come with solutions.
01:48:04
And I don't know, it sounds almost silly when I say it, but like I found that to be the number one thing that stops me from finding the good solutions is that I already have a solution in mind,
01:48:17
even if it's just in the back of my head.
01:48:19
And as I'm going and doing this, I will just automatically go towards that solution.
01:48:24
So step one, clear your mind, meditate on no solutions, right?
01:48:30
Step two, I really think is ask questions.
01:48:34
Ask questions about the code base, about the problem, about whatever it is that is this situation you're in and try to find the answers for those.
01:48:43
And if the answers are frustrating defined, if like it just takes too long to find them, build a tool that makes it really easy.
01:48:51
And if you start there, the process of discovery coding will start becoming the easy default, because every time you want to have an answer,
01:49:02
you already have tools available to you to help find that answer and that ends up being like your inspiration for how to continue.
01:49:10
So like try to, the goal is to try to make it easy to discovery code, because if it's not, you're never going to do it.
01:49:16
You kind of have to like, you know, do the hard work up front.
01:49:21
Like I strap it in my language, I, I had a bug.
01:49:25
I had no idea what the bug was literally none.
01:49:28
When I was running code, all of a sudden, it would start returning data that like was not even like part of the struct that I had or whatever, it was just like all of a sudden arbitrary data.
01:49:39
And every time I would run it, it would be consistent.
01:49:41
So I was like, OK, I clearly have a bug somewhere.
01:49:44
So I spent all of my time building my own really terrible compiler explorer or Godbolt clone.
01:49:53
If you haven't used compiler explorer, check it out.
01:49:55
It like takes you, you give it code on the left and on the right, it spits out assembly and it shows you how it connects between the two.
01:50:02
So what I did is I've made my code, my intermediate representation, IR, and then machine code that was disassembled on the right.
01:50:10
And I made it so like, when I hover over it, it shows me the IR and then it shows me the machine code and it's an awful tool.
01:50:16
Like it's the worst like put together thing I've ever written, but it worked, right?
01:50:21
It worked.
01:50:22
I got it so that my program output that and I looked at it and I was like, now I will be able to discover the bug.
01:50:28
And I looked at this tool and I kept looking and the bug was not there.
01:50:35
And what I learned is that the code that the tool was showing me and the code that was actually running were two different bits of code.
01:50:45
And what I realized is that when I'm writing code to memory, I wasn't keeping track of the offset properly and I was rewriting over code I had already written.
01:50:59
And when I looked at the fact that this tool showed me that like, no, the code's perfectly fine.
01:51:03
Everything's great.
01:51:04
And then I compared like what the distance, like the actually in memory and what the tool was saying.
01:51:10
I was like, and immediately I knew like where that bug was, right?
01:51:15
I like had discovered something about my system that I wouldn't have discovered.
01:51:19
I could have, I didn't even know what the bug to begin with was I had no idea.
01:51:22
And I was like, I want to have something that will immediately show it to me.
01:51:27
And then I learned a lot about how my system worked by doing that, even though actually it didn't show me the bug.
01:51:33
It showed me the absence of the bug, right?
01:51:35
And that was like the funny part.
01:51:36
But now since then, I've used that tool every single time.
01:51:39
Like now I have a tool readily available to me where anytime I write something and it's wrong, I can go look at how does it match up.
01:51:47
And that helped me with my register allocation.
01:51:49
Like now it becomes the default place to go.
01:51:52
Love it.
01:51:55
I think that's a good note to end on.
01:52:06
I love that note.
01:52:07
Such a good note.
01:52:07
Build your own discovery tools so you can start to discover other tools and bugs for sure or non bugs and it'll still help you.
01:52:09
That's right.
01:52:10
The absence.
01:52:10
I would have stopped right there, Jimmy.
01:52:12
I would have been like, see, there is no bug.
01:52:14
I'm going to bet.
01:52:16
I just proved that there is no bug.
01:52:21
That's right.
01:52:22
So why why keep telling me that is not working.
01:52:24
I think that's that's the real method you discover that you're perfect.
01:52:29
And that there are no bugs in your code.
01:52:32
That's discovery coding.
01:52:34
Yeah.
01:52:35
Bye friends.
01:52:37
Bye friends.
01:52:40
All right.
01:52:40
That's change log for this week.
01:52:43
Thanks for friends in with us once again.
01:52:46
Are you a discovery coder or more of an outliner?
01:52:49
Do you like Adam's personal code comments idea?
01:52:52
Are you up for building it?
01:52:53
Let us know in the comments.
01:52:55
Yes, every episode of the change log gets a dedicated thread in our totally cool, totally free, zoolip community, which you can join and you should join,
01:53:05
I think, at changelog.com/community.
01:53:08
Thanks again to our sponsors of this episode.
01:53:11
Please support them because they support us also because they have awesome products and services.
01:53:16
Thanks to fly to temporal to augment code and to notion.
01:53:21
And thanks as always to break master cylinder the best beat freak in the verse.
01:53:26
Thanks BMC next week on the change log news on Monday.
01:53:30
Tale scale co-founder David Krosha tells us how he's using LLMS while programming that's on Wednesday and on Friday at MNI review and analyze the news.
01:53:40
Just the two of us.
01:53:41
We hope you'll be there too.
01:53:42
Have a great weekend.
01:53:43
Like and subscribe on YouTube if you dig it.
01:53:46
And let's talk again real soon.
01:53:48
[MUSIC]
01:53:58