← Back to Show Notes

Transcript: Coding with LLMs - Frank Wiles

This episode is sponsored by HackSoft, your Django development partner beyond code.

More on their services later in the show.

Hi, welcome to Django Chat, a podcast on the Django web framework. I'm Will Vincent,

joined as ever by Carlton Gibson. Hello, Carlton.

Hello, Will.

And we're very pleased to welcome back Frank Wiles, who should need no introduction. He is

a partner at RevSys. He was the boss of the Django Creators. You're former president of

the Django Software Foundation. We could spend half the show talking about what you've done,

but we're pleased that you're with us, Frank. Thank you for being here.

Hey, thanks for having me, guys. One correction there, I was not their boss.

Oh, what?

I was their co-worker. Yeah, I was their co-worker. I actually worked in a different

department.

Oh, right, because you weren't working on Python, but I thought you were doing Lisp, right?

No, it was Perl.

Well.

One or the other, one or the other.

You take a shot.

Oh, okay. So not the direct man, but you were there, but you're older than they are.

I'm older than them, and I had more ops experience, and so they would rely on me to help with

like performance things and database backup things and stuff like that.

Okay. And Jacob is still a partner. Jacob Kaplan-Moss is still a partner in RevSys.

Yeah.

Okay. Well, a lot to talk about, but maybe just, we were just, before we started filming,

admiring your setup, and you were mentioning, giving us a little bit of the history of the

designers on Django, because, you know, there's sort of three people who get credit, but there

were a lot of people involved, yourself included. What about on the design angle, right? Is this

more focused on the admin, or could you, you mentioned a couple of names that may be worth

a shout out in terms of.

Yeah. And I talked about like a lot of this history in my last DjangoCon talk.

Yes, we will link to that. Yep.

Yeah, that's a good one to link to, because it goes into much deeper detail. But yeah,

so when Django was getting started,

there was, you know, as most web shops had, somebody who was kind of focused on the design,

and that was Wilson Minor. And he was pretty much responsible for designing the Django template

system, like from the user API side of it. And then, you know, the initial website and the Django

admin, all of that original design. And, you know, it's held up for 20 years. I mean, we've,

you know, touched it up a bit here and there, and, you know, modernize some things. But for the most part, it's still the way it was 20 years ago. You know, and then after that, Brian Veloso, and then Adan Gazit, both had roles in kind of pushing design elements through Django in the early days.

Yeah.

When we were talking before, you used the phrase design BDFL, right? So the benevolent,

yeah, so there was, there was a brief time, there was a brief time where there was like,

you know, Jacob and Adrian were BDFLs of Django. And they sort of had kind of, I think it was

somewhat unofficial. But like, we sort of like, you're the design BDFL, we're gonna, we're gonna

defer to you on all design things. So the thing I wanted to pick up on that is, do you think we need

that again, or something similar? Because I saw, when I was fellowing, we'd get these design issues

come in. And we, and that was both on the website and on the admin, we'd be like, some of a bit

paralyzed, because we, you know, we're back endies, we've got this design neurosis, right? And no one

could kind of make a decision. But do you feel that if we had, if we could put one or two people

or three people in that, that kind of role, it would help us drive forward a bit?

I think it wouldn't be a horrible idea. But I don't know that we have that many design issues

that come up, you know, month to month. I think that if we had a group of designers who were

involved in Django in any capacity, and that we could kind of point to and say, hey, would you give

us a couple of ideas? And maybe the steering council could just pick up, here's two ideas

that, you know, steering council picks, right? I don't know if we really need a design committee

or anything. But it's not, it's not the worst idea for any, you know, by any means.

Well, I would say we could use a design slash marketing BDFL, you know, because

djangoproject.com, we don't need to go into all that. But there have been multiple attempts with

lots of time spent by very talented volunteers to update that. And yeah, I mean, what, you know,

because what is Django? It's the admin, it's the little rocket, and really, it's djangoproject.com.

And I think that's, that's what's kind of holding us back in terms of, you know, it looks like it

hasn't been updated in a while, because it hasn't. Well, it just got a bit of a refresh.

Okay, I'm sorry. Yeah, I don't, you know, yeah, people are working on it. But I hear you.

2025, or 2024, or 2023, you would, you know, change it.

Yeah, I don't know. I mean, on one hand, that probably means that we're more focused on

code and releases and features than, than, you know, Flash. But, and we're obviously succeeding

despite it. But, you know, that would definitely not hurt.

Well, it's like that uncallied Kenny Valley, right? It's not like as ugly as Simon Willison's

website where you go, oh, this is either a noob or like a pro, right? It's like somewhere in between.

That's, that's the problem. Don't be in between.

Yeah. No, I, I, I've often thought that I'm kind of surprised that, like, an up and coming designer

has not approached Simon about Dataset and saying, hey, like, I will, I will do this for you.

But like, I just want some credit, right? Like, I've always kind of wondered, because I mean,

Dataset works great. Like, it's fine. Like, but it's very, you know, designed by programmers.

Right. And, and, you know, I don't think I'd do much better. Right. But,

you know, but it's, it's one of those things where, like, I'm kind of surprised somebody

hasn't reached out. Maybe they have. And maybe it's like, you know, like, it's the features,

not the look. Right. But, but yeah. No, I mean, designs are obviously, obviously important. One

of the things, you know, that we've, as a community have gotten right is docs and, you know, that

they're readable at least. Right. Like, you know, that they, they don't, you know, they look good.

They're not just tech, you know, black text on white background that are organized well and searchable and all

those kinds of things. And that's, that's huge for Django's ability to get picked up by people.

And then, you know, we, we beat this dead horse, but, you know, the community is, I say, ultimately

what we got, right. I don't, I'm not going to put myself in the we there, but that others have

gotten right. You know, even looking around as much as it's nice to think, I wish we had a benevolent

dictator kind of thing, you know, look at, look at WordPress, look at material, right. Where you

have, you know, one person

can have whatever sort of mental health crisis they're having and just blow up an entire thing.

And absolutely. Yeah. So that's a root. And I think that, yeah, that's the danger, right. Like,

or even not even blow it up, but just lose interest or lose focus. Yeah. Lose interest or,

I mean, or alienate. Yeah. Right. There's, you don't have to fully, I mean, the material thing

is wild. I don't know if you followed that at all, where the, just like suddenly I followed the word

press one with, yeah. And, uh, uh, just like, you know, it's just like everything you could do to,

to shoot your community in the foot, right. Like as, like as a master class, um, and someone who

up until that point had about as good a reputation as you can have too. Right. Which is why partly

why it's so strange, but yeah, I mean, I've never been a WordPress user really. And you know,

because early days they had lots of security and update early days and quotes there.

Well, yeah. Uh, and I have to use it for some stuff now.

Yeah. And I, I don't, you know, and I it's gotten way, way, way better. Like don't, don't get me

wrong. Um, but you know, I just never got into that world and all of my CMS needs, even with

clients have been, I've been able to do with Django and it was obviously home. And so like I, I wouldn't

look elsewhere. Uh, but, but yeah, I, I don't, I don't understand how, you know, well really anybody

powerful tech position that is making really good money for some definition of really good money.

I don't understand when they go for the money grab, right. If you know, just any pick large

tech CEO. I don't understand when it's like, oh, okay, this means I'm going to make 1% less money.

So I'm going to make this horrible decision. I just don't understand it. I, I don't understand

why they don't just retire and have boat drinks. You know, is, is that not because

there's the sort of, when you're so dissenters desensitized to the world that all that's left

is the graph or you can see as the graph going up or down and down is not acceptable.

I, I, I guess I get that on some level, you know, like I always wondered about like Bill Gates,

right? Like when he was at the height of, of things, I was like, why, why are you still

doing this? Why aren't you, you know, playing golf or whatever it is you enjoy. Right. Um,

and, and it turns out like, you know, I watched a documentary and read a little

more about him kind of personally. And what he enjoys is that thinking through

the problems. And I, and he basically structured his job and his role at Microsoft for years to,

he wasn't, he wasn't in HR meetings about 401k bullshit. Right. He was, he was just there talking

about like, what is the next, you know, what is the next focus and what is the cool tech that

we're doing in R and D and, and helping steer that. And I could see that still being fun. Right. Uh,

but yeah, I don't, I don't get when, when somebody's like, oh, well I could make 1% more

money and I'm already loaded. I just. Yeah.

I think you just go insane at a certain point with too much power and surrounded by yes,

men and women. I mean, I think we've seen, yeah, this is the history of the world, right? I mean,

so Carlton, you're the philosopher. What do you.

Well, no, well, okay. Well, I, I'm not gonna answer that. That's just, that's just crazy. I

wanna bring you back. But Frank, so you've got as long, as long of you of, of Django as you have.

And we were talking there about, um, you know, B BDF sales and the BDFL model,

perhaps going wrong at times. And Django's community model is

very strong, but sometimes we have not sometimes quite often we feel that we go too slowly because

of it. And it feels like there's a trade-off that like, you've got these two obvious models and one

of them, they've each Google got their downsides. Do you, are there obvious things that you think,

or not obviously are there things with your sort of long view of Django that you'd think,

do you know, we can speed up there. We can change that. We should, we can perhaps do this.

Yeah. I mean, there's definitely been points over time where it's like, oh man,

like, like, you know, like we've been discussing in the, on the steering council about elevating,

elevating the, the visibility of third-party packages. Anybody in the community knows that

half of Django strength is the ability to grab third-party packages to solve the problem that

you're facing or the, the, you know, something like Django storages to store files in S3,

for example, like, you know, that's one of those things that, you know, a lot of people are like,

why isn't this in core? And it, you know, it's so that it doesn't have to move slow,

right? Like just the, you know, the same kind of course where

things go to die, like from the, from the Python world, it's not quite true,

but there's no good reason that it has to come in. Right. Um, and so it's better to be out and,

you know, fellows can only do so much and maintain so much, but there's so many times

that I've run into people that they're like, they're unaware of that. Like they're doing

their own S3 file handling from hand by hand with Bodo because they don't just, they just don't know

Django storages existed. And, and, and they, they've never heard of Django packages or awesome

Django or jazz band.

Or any of the things that like everybody who's really plugged into the community knows and not

even really plugged into the community. I just mean like, you know, barely plugged into the

community. It's in the, you know, it's in the official tutorial now, like there's a link to

finally, finally, but yeah, I agree. I mean, it's yeah. Right. And so, so yeah. So like one of the

things the steering council is doing that Carlton and I are on is, is trying to help elevate that a

little bit, um, and making it a little more acceptable. There was always this feeling like,

well, we Django shouldn't pick winners.

Winners here. And I still think that to a certain extent, right. I mean, like we've got three or

four CMS solutions. I don't want to say that CMS solution. I want to tell you about my favorite. I

have the one I steer clients towards the others are fine. They're just, they're just not for me.

Right. Like I, I like certain features of this versus that I like, you know,

the amount of work I have to do to achieve what it is I want to achieve with different libraries.

You know, there's certain ones like Carlton, you maintain some that are great,

but I don't use because you're not allowed to not use them,

but, but there's, but there's a lot that, you know, I do use. Right. And so like,

it just depends on like what, you know, what kind of thing I'm doing. I don't do a lot of

form stuff because most of our projects of late have been API stuff. So I don't have a

lot of need for libraries related to forms. Um, you know, right. And, and, and so like,

that's, you know, that doesn't mean that they're bad. Like, and, and I, that doesn't mean that

everybody should

you react front ends, you know, by any means, but, but yeah, like just the fact that like we,

we all know that there's this handful of libraries that are the top for this category and this

handful for the top for this category. And if anybody asked us, we would list them off,

off the top of our head. The fact that they're not that visible to the wider community is I

think holding Django back a little bit. Um, because you know, like we were talking about

with WordPress, everybody's the thing about WordPress is you can get a plugin to do anything.

Nobody necessarily knows that about Django, right. As when they walk in the door.

Well, I've long thought since I need to do videos of like a third party Thursdays, because I, I mean,

part of it is, you know, those of us, it's like, we're like, it's out there, like we're doing stuff,

you know, like they're like the awesome Django repo that I'm, you know, manage with Jeff triplet,

um, your partner, we just hit 10,000 stars, you know, Django packages Jeff now runs with help,

um, gets a lot of traffic.

But yes, still a lot of traffic. Yeah. So people don't know about these things or even if they do,

they want some degree of curation, which makes sense. Right. You can't just go, you can't just

go by recency and stars. Um, and if you don't have, you know, a podcast where you can lob these

questions to a guess, how do you, well, like you just, you just mentioned like having a, you know,

a third party Thursdays, like when I first. You know, got involved in using Django as a developer

and not just friends of the founders. Um,

one of the things that I found really valuable was, uh, Python module of the week. Yes. Um, the,

and, and it, it exposed me very, you know, slowly, but over time to standard library modules that I

didn't know that existed. And that's partly because I came from a Pearl world where there

wasn't that much of a standard library compared to Python, Python standard libraries, probably

four or five X, the size of pearls where at the time, see,

was way larger than the cheese shop way back then, right?

Right. And so you knew, you know, you always had a handful of third party packages in a Perl project where that just wasn't as common with Django or with Python, which is why like early Django had no dependencies.

Right. And still only has what just 304 ITZ basically.

Yeah. It just it's just a handful.

Yeah. Well, yeah, you just I mean, you need that kind of you need the interest.

OK, you can't give someone the interest, but you need that drip function.

Right. Like I've maybe I should maybe I should do a newsletter newsletter.

There's a year's worth of videos.

Django. Yeah. Yeah. Django app of the week or whatever.

Right. I thought about doing that a couple of times that I just sadly haven't had.

Yeah. Well, because I think and we could link to it, you know, on the forum.

I put a post. I've done some posts and Jeff has actually helped, you know, try to do some API statistics, which we can debate how accurate those are.

But, you know, some version of like top tens, I feel like that's a perennial thing.

Like I'd love.

I'd love to get, you know, just the top tens that people are using because I invariably find stuff that way.

Well, I'm like Carlton. I ended up talking about this a couple of weeks ago.

I've always had this idea of basically creating a FICO like score for software packages and libraries where.

Go ahead. Yeah.

Somebody, you know, somebody me in a small group come up with here are the factors that matter.

But the factors are kept close hold so that you can't.

Proprietary, baby.

Right. Yeah.

And not like in a way to make money off of it, but just in a here's the, you know, I don't know, the Frank score for, you know.

It's got to be called the Frank score.

It's got to be called the Frank score.

And that if you over time learn to trust the Frank score, then you can trust future Frank scores on other on other things.

Right. And I think that could be a way.

You know, like I haven't had time to do it, obviously, but I have some ideas of things like, you know, around velocity of of of, you know, issues versus pull requests versus releases, like things that are a little deeper, you know, downloads, obviously factor in there, not just stars, but like things that would be not impossible, but more difficult to gain.

You have like a six, eight factor model.

We could probably probably probably end up at this relatively the same place on that.

But that would be what you what one would do.

Right. And maybe expand it to other systems, too, right?

Like it doesn't not just Python or not just Django, but, you know, JavaScript and Debian packages and, you know, like Rust crates or whatever.

But, you know, JavaScript packages is a nice one because as a Django developer, what you want is the sort of the recommendation for JavaScript packages, which are kind of Django adjacent rather than dropping you right into the, you know, the pickle bat.

Yeah.

Well, and then like the other thing I think that happens, too, is often.

Often there's a new, you know, kid on the block that is dramatically better than the, you know, the status quo.

And many of us find it and use it and know and talk amongst ourselves.

This is so much, you know, this is and it's ready.

It's ready for primetime.

It's, you know, and but people are slow to adjust to it.

And I think one of the things that we wanted to talk about, like one of one good example of this is UV.

Yeah, let's do it.

You know.

Like, you know, tried out UV, like, you know, first couple of weeks, a little rocky, a couple of features I needed, couldn't use it for all projects.

But like very quickly, within a couple of months, we were switching most of our projects to it.

And now I don't even know if we have a project where I fully get to decide what's used that isn't UV.

And that's been in like less than a year.

Right.

Can you mention that?

Yeah.

Well, just a year.

It was February, February when it came out.

I've been doing my research, Carlton, because PyCharm has UV support.

And so at PyCon US, I spent the morning.

We're doing some stuff around that.

Now, of course, you know, support, we can make it better, but we have built in tools and I suspect other IDs will as well.

But I want to ask you, Frank.

So for a Greenfield project, sure.

One of the things is how do you decide, you know, switching over to it from a more legacy?

Project.

You must have some battle stories on that.

That's the thing is it really, it takes, you know, 15 minutes and we're switched over to UV and CI and everything.

Wow.

Hmm.

Right.

Like we had one project where there was like a weird wig.

We were accidentally and didn't even know it relying on kind of an old dependency resolution to get the packages we needed.

And that might have taken me half an hour, an hour to sort out that I need to pin this one, you know, like to figure out which is the best way to do it.

Is it the one that I, you know, the dependency of the dependency of the dependency that I needed to pin to not cause the test failure?

Like that took me a little bit, but like most projects, it's been put UV in front of your PIP commands in local stuff and in your Docker file and in your CI and you're done.

Well, and that's the thing is it's, you know, Charlie Marsh, the creator was making the point that it's, it's not just fast.

It's so fast that changes how you do things.

Like for example, things that were written, the CI, you can put into precast.

You can put into pre commit as like, as one example, I'm curious, are there any other ones like that, that you've found since you've, you know, been using it a bunch?

No, I mean, like we, we are using that one, for example, are you, um, I'm not using that all over the place.

Jeff just kind of tuned me into that, uh, a couple of months ago.

And so I haven't gone back and done that to some, some projects.

Uh, but yeah, it's so incredibly fast that like, you know, like I think it was, uh, Sebastian from fast API.

I said, he was like, I had to double check that it actually ran right.

Like, and, and that's, you know, that's, and that might've been for rough.

I might be getting that quote wrong.

That might've been for rough, but, but like, you know, that's, it is, it changes your workflow, right?

Like I, I went from, you know, like rough on save, right.

I, I run rough every time I, I save and I save habitually.

Yeah.

I, I use rough, rough to commit and just, yeah, I don't even think about it.

Yeah.

Yeah.

It's yeah.

I, I save.

Every time I stopped to think right in my editor five times a day and yeah, we're like five times a minute, but, uh, but yeah, no, I, I, yeah, I, I, I over save for sure.

But, um, uh, but I, I lost, I lost two weeks of work once and, uh, and I've never forgotten it 20, 20 years ago.

Oh man.

I, I still have my editor configured to create a timestamp backup of every save.

And so there'll be like four.

A minute, five, a minute of them.

But the number of times over the years that I've gone in, found the, found the version that had the exact thing that I deleted and saved me.

It's worth, it's worth having it.

Well, it's sort of like, like, you know, get branches being cheap changed how we all worked.

Like subversion creating a branch might be go get a sandwich on a, you know, large legacy project.

Right.

And, you know, and get makes it instant.

And so you create lots of small branches, um, and UV changes.

Yeah.

Like I'll just install stuff, you know, to play with it and then get rid of it.

And I'm not even concerned with how much time that's going to take.

Well, in some ID, I'm sorry, Carlton.

I'll one, one last point.

I'll just say some, you do yours.

Thank you.

Uh, some IDs as well, you know, pie charm is an example.

Uh, VS code has this, I'm sure others do have, you know, a local history kind of thing, which is basically like, you don't have to configure it yourself, but it will save a lot of things for you.

So that hopefully broadly speaking, losing, just losing stuff is a lot harder now than it was, you know, 20 years ago.

Yeah, absolutely.

Uh, the, the other, um, uh, aspect of that, I think is that like cycle time is super important to flow.

Right.

Um, I talk about this a lot, especially with clients that, you know, if you, you know, if your CI is two minutes, that's amazing.

That's great.

One minute, 30 seconds is even better.

And, and, and, and focusing in on that, right.

How long your tests run, right.

That ability to just iterate and try.

Let me try that.

Nope.

Let me try that.

Let me try that.

If trying something means 30 minutes, you just, you, you start to debate your choices.

You maybe pick the wrong one, right.

Instead of try all three, right.

Um, you, you, you, you lose flow.

You lose your place.

You, you know, naturally our brains.

Our brains are, you know, you're on Reddit all of a sudden, and you're like, how the hell did I get here?

Right.

You know, you're texting your wife, you're, you know, you're checking your total waste of time, whatever.

Yeah, no, no, not waste of time, but like you just get distracted because you know, it's like the, oh, we're compiling.

And so like, let's go get coffee, right?

Like that, that, that slows everything down.

And so if I can, you know, construct the scenario and iterate on it in, you know, increments of, you know, single digit minutes, I can just plow

through stuff, but if it's double digit minutes, I'm, I'm walking through stuff, right?

Yeah.

And getting in, like, you know, when you're working on something and you've got exactly the test that you need and you can just run it, run it, run it, change, run it.

Yeah.

Okay.

Problem solved in 15 minutes instead of all day.

Yeah.

Right.

Yeah.

No, absolutely.

Hacksoft is your development partner beyond code from custom software development to consulting team augmentation or opening an office in Bulgaria.

You're ready to take your project to the next level.

Well, and that was the, in the UI, okay.

I'm sorry, Carlton.

I'll just, this promise last one.

I was just going to make the point that in UI UX stuff, there was, this is back a number of years.

They did the research on, I forget how many, like hundreds of a second it was, but if the page took a little bit more on amazon.com, the percentage of people just like leaving when, you know, so just a clear speed, you know, and it just, yeah, just.

If it pauses you at all, you know, and I think it's even worse, worse as a programmer, because you're trying to be in a flow state.

You're trying to like have the tools take care of themselves, not get in the way.

Absolutely.

And, and yeah, I mean, I, I spent, you know, a large part of yesterday shaving a hundred milliseconds off an e-commerce site, right?

Like, and you know, and it's one of those things that, you know, people are like, oh, it's fast enough.

And it's like, eh, it can be a little faster.

Like, let me spend a couple hours here and shave that off because yeah, the research has shown you can feel a hundred.

Yeah.

Milliseconds.

Okay.

I'm done, Carlton.

Go.

Okay.

No, I was just going to swing back to the, so the example you hit was one of these cases where UV doesn't handle the sort of legacy resolving algorithm.

And what's interesting, you said you've only hit that once.

I mean, I wonder if like PIP itself could sort of use the much faster algorithm.

Yes, UV is written in Rust, but a lot of it is to do with the caching and the different algorithm that's used, not necessarily just the fact that it's in Rust.

And I wonder if PIP could sort of implement the more optimistic algorithm and only fall back to the legacy slow one if that failed.

Because I think there's performance being left on the table.

They did make a change.

Yeah.

Cool.

Yeah.

But I do, I do think that, like, I think they did make a change because there was a PIP change where you could say, like, use the legacy resolver in PIP a while back.

And I think I may have basically leapfrogged that problem with UV before.

You know, before, like, I would have run into it with PIP.

But, but you're right.

They may be able to do that.

And I would imagine, you know, they're going to strive for a little more performance parity with UV, but I don't think they're ever going to really get there because of Rust.

Right.

And, and I don't know, you know, sure.

I think we should always have some competition in tools.

Right.

Because it makes everything better.

But I think that, you know, for the foreseeable future, UV is going to win.

Um, you know, and, but the minute somebody comes up with something that's twice as fast and dart or whatever, like I'm going to, I'm going to use that, you know, uh, but I don't quite understand people's concern about the switching cost on this because I've yet to have the switch take more than an hour for large projects and microservice projects.

And like, I mean, like it does not take very long.

And then the other argument I've heard people make is that like, because it has some VC.

Backing like what happens when they pull the rug.

And, uh, I, I, I, I jokingly said on, on social media, I was like, well, then we'll fork it and call it the U and, and, you know, like, and run with it for a year before we really have issues.

And somebody will come along and maintain that or, or, or they'll come up with a new one and we'll switch to it.

And it'll take me another 15 minutes in years down the road.

Like, I mean, I don't, I don't expect Charlie and, and, and the astral team to do that.

Uh, you know, I think that they've got other ways to make money, but even if they were like the switching cost is so small, you know, it's not like switching from Python to rust or something.

Right.

Like this is a pretty small piece of the puzzle, um, to, to, of your stack.

Like it's a, it's a very important part, but it's a pretty small one to switch really.

Right.

Switching testing libraries would be weeks of work.

Right.

Uh, or switching from Django to something else would be weeks and months of work for most projects.

But like switching how you install your PIP packages, like just like moving to Docker, right.

Like might take you a whole day if you don't know anything about Docker, right.

It might take you two or three days if you know nothing about Docker, but like now I can move a project from not Docker to Docker in an hour.

Most of that's finding your template Docker file to copy across.

Exactly.

And knowing kind of, you know, like I already understand how layers work and what I need to do.

And that, that one time I ran into the lib G DAO problem.

Like that, that, you know, that kind of stuff that like that, that is, you know, that is because I, I do this a lot.

Right.

And I do this a lot for lots of projects where most people have a project or two that they change once or twice a year.

So it probably feels harder.

Uh, but honestly, like it's really not, it's really not that big a deal.

Most of these, these sorts of changes.

Right.

So God, I, so, so you, um, said you were still mainly doing Russ, uh, rest APIs and, you know, um.

React front end in front of that.

Is that, that's still the case.

You haven't swung into the HTMX world.

And not as much, um, the, the rest of my team, um, uh, does that more, uh, mostly because most of my team doesn't, doesn't know JavaScript very well.

Um, and so it's, it's much easier and, and it depends on the project, obviously, like, you know, uh, we've talked about this, like we have some projects where, you know, there's, you know, it's a large site, a hundred thousand lines of code.

There's seven elements that kind of need that.

that reactive slickness to it that HTMX can provide.

htmix perfect for that sort of thing or even just a little bit of vanilla javascript right like

that's perfectly acceptable for those kinds of projects and it's the sort of projects that

members of my team that don't know javascript can do or i can jump in and do those little bits right

um but then we have other ones where it's like i've got you know it's a it's a full flow full

fledge desktop app but in a browser and those you know and so far in my experience are easier for me

to do in react at this point and you know i'm sad to say that i'm almost faster with jsx these days

than i am django templates which really surprises me but i still occasionally get tripped up on

something in a django template that years like i remember from years ago oh yeah i remember you

gotta do that and then like but it'll trip me up for it'll trip me up for five minutes right and

uh where like i just i'm in flow with jsx these days so like i've moved my personal blog

to astro

yeah simply because it's a it supports mdx which is marked down with jsx components in it and that

seems to be the sweet spot for me and and like simple blog like website okay so from that

perspective what's because um you know one thing that always comes up as well is uh django's front

end story or lack of front end story and you know if you're just using it it's all the old-fashioned

django way static files does everything you maybe got django compressor to you know compile combine

um from a react as from a react kind of point of view what what integrations or what things would

you like to see that you know help django integrate with the more you know next js astro react worlds

i i think we've already got it really um you know django webpack loader django v basically take care

of it um you know if you're starting a new project definitely use vt uh vjs um it's a bundler and

transpiler and does all the all those pieces for you that's much much simpler and it's a lot more

than webpack um but just as powerful and quite a bit faster honestly um most of our projects have

moved from webpack to vt um as the next time we need to touch them um and it's install a django

app toss it in installed apps load a django template tag in your base template and that

you're integrated like that's it like there's no there's other more to do so i don't know that we

need any tighter integration than that except maybe you know if

five years down the line vt is the de facto only way to do that in the javascript world which i

would find hard to believe any one thing to be the de facto way maybe that gets pulled into core just

because it you know it's a small project right it's not it's not going to be a large lift to

maintain uh but i think that we really dodged a bullet as a framework not picking one because

the javascript ecosystem has moved so fast right like if if we had to pick a framework that was

going to be fixed um um what was before uh react that um oh no no that's css um no that's css um

oh it's driving me nuts i keep wanting to say no no i keep going to say bootstrap it's not bootstrap

it's um yeah but i just had to move somebody off of it a couple years ago but um we'll find it

backbone thank you

backbone was was the hotness around the time this kind of started talk you know in a jquery

and like let's bundle these let's make a better front end story and we'd still be having to

support backbone um which basically no one uses um and then moving off of it would be oh well

now i've broken you know like i can't upgrade to django you know 2.2 because it doesn't support

backbone anymore you know and and we'd be playing that game

every couple of lts releases as as javascript changes right and even as much as i think you

know there's merit to bringing htmx in i think that we might look in 10 years assuming django

still around you know knock on wood but that we'd be we'd regret that decision right and and like i

said the integration is is small it's it's like i don't know it's sort of like should we bring uv

into django like it you know we're only going to work with this

like i don't think we need that i think that you know a couple of good blog posts a couple of good

doc posts you know pages in the documentation of how to do this and show that it's 15 minutes and

you're running i don't know that we need again it's that lack of messaging more than the actual

what's actually there yeah all right i'm gonna give you some messaging tell me about cube anypod

because you just released this let's go yes so

it's my it's my second real kubernetes related cli tool written in rust the other one is called

kube secrets um it's a little tool that removes an annoyance i have with working with kubernetes

all day um and that is you know one of the benefits of kubernetes is that your your pods

which are one or more containers that run together um have very randomized ish names

and so but you often want to just pop into one of them and check is the django setting set to what i

think it is right like i've set the environment variable i'm pretty sure that you know but i want

to pop in and double check you just hit a url that doesn't exist right well yeah that's one way but

um yeah yeah but like you know that's the sort of thing i'm talking about like i just need to pop in

i need to run this this

i need to do a management command that you know resets some some situation or or does some batch

processing or something that i need to do and so the first thing i have to do is say tell me the

list of the current pods and then i have to cut and paste one of those to pop into it um we also

have a pattern we use with uh just the command runner to exec into a pod take a snapshot of the

database copy it local and restore it into our local compose environment because often

it's very convenient to grab a copy of production bring it local to debug a certain situation

instead of trying to you know scaffold that situation's data correctly to debug it and that

also i need to know a pod name to exec into it to take the back up and bring it down um and so that

finally annoyed me enough that i built a little tool that just you give it a string prefix of the

deployment or staple set that you've got there and it comes back with any one of like the first

pod name it finds and or execs you into the first pod that it finds and so it's a little bitty tool

uh but it's one of those that i probably do that 10 times a day and so it's you know now that it's

one easy command and not two or three commands is is very nice um you know there's other tools that

make some of that a little easier sometimes like k9s if you're doing kubernetes and you don't know

k9s uh definitely look that up it's it's like top for kubernetes um gives you a super easy

access to getting a shell in a container or getting the logs or seeing the definition of

the pods yaml um seeing memory and cpu statistics and things it's a great little window into your

kube cluster um but yeah that's one of those uh it's also a clod uh success story um i know enough

rust uh but it would have been a lot easier if i had a little bit more experience with that but

it would have been a lot easier if i had a little bit more experience with that but it would have

been a lot easier if i had a little bit more experience with that but it would have been a lot easier

it would have been a lot easier if i had a little bit more experience with that but it would have been

it would have been a lot easier if i had a little bit more experience with that but it would have been

taken me all afternoon if not all day to get it right um and then i thought you know i'm gonna do

this in python but like let me just try clod with rust and about 30 minutes later it was working

and about 30 more minutes i had it polished and then i spent about an hour on you know the read

me and the docs and and uh and then clod helped me set up the github actions to do the the multi

architecture build for linux intel and arm

and windows and just automate that as part of the release process so if i push a tag it builds and

releases binaries for everybody um which was great and so yeah at two hours i had my tool and that's

just amazing because ask you then about llm jobs enjoying using clod and you know they make a big

difference right yeah they do um in in you know used smartly they're they're not perfect right

you gotta you know you need to be able to do it right you gotta you know you need to be able to

have tests you need to you need to kind of understand what it is you're trying to accomplish

um they do hallucinate things uh but often it's very apparent you know they're you know they're

trying to pip install a library that doesn't exist something like that you know like and and

you can quickly say oh no no use this library and then it's no longer confused right um i find them

super useful 90 of the time about 10 of the time i'm just like i get frustrated i know what

i need to do and i've tried to prompt twice and it's you know what it's going to take me 15 minutes

but i'm just going to i'm just going to code this part because i know what needs to happen right but

where i found it'd be super useful like quad desktop um for i am confused about this situation

like i i i see this i'm getting this error message i think that's this but blah blah blah

and it comes back with an answer usually in an area that i'm not super familiar with like i had

an fm mpeg issue converting some video for a client that i was getting this weird header error

out of fm mpeg and uh and then i had no idea what was going wrong and what it ended up being was

the file name suffix was telling me it was one codec but the file was actually a different codec

so somewhere in my code or my stack it was appending a suffix that didn't match and so

i was telling it to convert from a to b

and it really wasn't a and that and you know and it just didn't give me a good error message saying

hey you you said this was webm but it's actually mp4 right instead it just said you know header

error at byte zero you know something something and i'm like what and and it worked for 300

of the 306 users that had done it that day but those six had a problem and i

just was sure it was something deeper than that right and so i overlooked it

but it quickly said like double check the file type and i'm like yeah let me do that i pulled

it down it's like oh this is an mp4 you know probably saved me two hours of debugging by

just like a perfect example because the the the api on that or the user interface on that is so

big that no human could ever master it was you know an lm could be like no you need these options

well i find it i find it really great for like these tools like any pod that thing i've always

wanted but i haven't found a saturday afternoon free enough you know that i felt like spending

building it i can often build it in 30 minutes a really rough version not one i would release

to others but something that does what i need real quick in a in a virtual environment on my laptop

maybe that maybe never even makes it to github right like just a throwaway tool

and you know i i get a lot of situations with clients where they're like they'll give me an email

that says hey we we noticed there's this problem with these 93 records

here are the uuid primary keys of them and i have to like cut and paste them into something

turn them into a python list to go fix them right and i can take the whole email

select all paste it into claude say hey see those uuids turn them into a python list for

me and two seconds later i've got a python list and then i can cut and paste that into my shell or

or whatever you know into my code and and take care of it from there and if nothing else it's

saving me some carp right like you know like i just just put in quotes you know i can do it with

my editor i can do the regex that'll put quotes on the front and quotes in the commas on the end

and like i can do it pretty quick i've done it for years but i can't do it as quick as an llm yeah

good uh in mythical man month there's this um graph where it's like works on my machine and

then to get it into a product it's like times three and to get it into something you can actually sell

times three again whereas if you just want that down the bottom you can get it done you know

you you don't need all those refinements oh yeah well even just thinking about thinking about like

i know what options i want i know what defaults i want i don't have to think through or provide

a way for you to do your defaults carlton like i can just do what i want the way i need it

only taking into consideration my scenario you know like i can hard code things to a

kubernetes cluster name that you could never do in a tool you know in a real tool in the real world

right it's in a real tool yeah yeah i find it cool i was just going to say i find them fantastically

useful for those you know finding a missed comma or dumping in a whole bunch of stuff and i guess

yeah i was trying to think about it it's sort of error checking that for whatever reason other

error tools that we have don't pick up you know the framework doesn't pick up or python doesn't

pick up and so hopefully that's something where i remember back when i was way back getting started

you know if i missed a comma or something that could be days of my life and now you know even

for a beginner i think that's a very appropriate use case to just dump it in and see what it spits

out because it's they're they are so good at spotting those things well and as a rubber ducking

debugger right like we've all had that experience where like we're just not sure what's going wrong

and we end up talking to a colleague about the problem and maybe even they don't even

say anything about halfway through our conversation we come up with what the possible answer is

but this is somebody i can talk to about it at two o'clock in the morning

if i'm up with some insomnia right and you know yeah hey claude you know what are you doing you

know but select chatty mode

yeah yeah exactly but you know and and you know and then tools like aider i'm a big fan of aider

at this point um because i can talk to a lot of people on the internet and i can talk to a lot of

people on the internet and i can talk to a lot of people on the internet and i can talk to a lot of people

on the internet and i can talk to a lot of people on the internet and i can talk to a lot of people on the internet

and i can talk to a lot of people on the internet and i can talk to a lot of people on the internet

because i can really control what context

because i can really control what context

because i can really control what context goes to quad

goes to quad

goes to quad that helps focus the answer i get back

that helps focus the answer i get back

that helps focus the answer i get back right like here's the model you need

right like here's the model you need

right like here's the model you need here's the view you need here's the test

here's the view you need here's the test

here's the view you need here's the test you need like

you need like

you need like write me another test but that checks

write me another test but that checks

write me another test but that checks these two scenarios

these two scenarios

these two scenarios do it in the style of the existing tests

do it in the style of the existing tests

do it in the style of the existing tests that are there and it basically spits

that are there and it basically spits

that are there and it basically spits out a test like i would write it using

out a test like i would write it using

out a test like i would write it using the fixtures that i've provided and

the fixtures that i've provided and

the fixtures that i've provided and everything and i don't have to do much

everything and i don't have to do much

everything and i don't have to do much to it

to it

to it um and it's great and it costs you one

um and it's great and it costs you one

um and it's great and it costs you one cent sometimes yeah jeff jeff is going

cent sometimes yeah jeff jeff is going

cent sometimes yeah jeff jeff is going on and on about this to me and

on the socials. I just sorry, Carlton, one last one. I just so what how exactly do you have it

set up? Because right, like you, people can use these within IDEs, you can use the desktop app,

you can use the web app, you can

CLI it up, you know, assignments, tools, like what's your particular poison?

So a little bit of all of it. So if it's the random question, like that FFmpeg thing,

I'm called desktop. I just paste the error in and say, this is what I'm trying to do.

This is, this is the error I'm getting. Can you give me some hints as to what maybe the problem

might be? And, you know, it spits back some stuff and maybe there's a follow-up question or two,

right? And I just kind of have a thread about that. Sometimes it's just, I forget the, the,

the best way to iterate through a list of lists. Can you show me an example? And it will spit out

a little example that I can basically cut and paste into my code. If it's, I'm writing a test

or I'm wanting you to add a feature to, you know, some code, I'm probably using Ader to do that.

And then a little bit of like Pydantic AI.

Or something like, like Simon's LLM tool. If I'm building something that's a little more

reusable, right? Like one of the things that I often, when I write a blog post for whatever

reason, it'll take me an hour to write the blog post. And then I'll spend an hour agonizing about

how to summarize it for the tweet and for the, for the meta description tag. Like what's the,

you know, like it'll take me almost as much time to, to do that.

As to write the post. And so now I ask Claude or Chad GPT, here's the post, give me 10 headlines,

10 tweets, 10 summaries of this. And I kind of pick and choose from there. Oh, I like that wording,

but maybe not that whole sentence. Like, let me put those two. And then I'm done in five minutes

or 10 minutes instead of an hour. And, and so I have that. And it's worth it to avoid the agony,

right? Right.

It is interesting, like the, the cutoff for when, you know, so we have, you have a monthly

subscription and then when are you willing to pay, you know, pennies, dollars? Yeah.

I, I, I think, I think people would be very surprised how little it costs. So when I first

started using Ader, you know, and Claude, they gave me $5 of free credit or whatever. And I

thought, okay, well, I'm probably going to burn through that really quickly. So I threw 20 bucks

in and then I was using Ader and it even shows you like, how much was this last prompt? How much

have you spent this session? So you can kind of keep track of, of what's happening. And then I

ran into an API limit and I saw something Simon had said that basically people who spend more,

get a little bit higher API limits. So I threw another a hundred bucks in

that was in December and Mike, so 125 total from December. And I think I'm down to like

118.

$15 of credit, right? Like now I'm not using it eight hours a day or anything,

but I'm probably using it at least 30 minutes a day, if not an hour on the Ader API side where

you're paying. Right. Um, and like, I'll have, you know, any pod cost, it was worth it. Right.

Right. It was a dollar. I got the tool I wanted in an hour for a dollar. Right. Um, now is it

the best rust?

In the world? Absolutely not. Right. Could I dry it up a little bit? Absolutely. I even had it go

through and cause it was really not dry, uh, the first version. And so I had to dry itself up a

little bit. And, uh, but still I see some stuff in there that I'm like, oh, okay. Like this should

really be a function that just takes a workload and like, you know, but like, I'm just going to

leave it. Like it's, it's like 600 lines of rust. Like I don't really care. Right. Uh, it does the

job. Um, and also I had to get home to dinner. Right. And so.

You know, maybe, maybe someday I'll, I'll, I'll pick that back up, but, but yeah, like some of

the things, you know, like we're, we're really approaching a time where you can build real

software in a day for 10 bucks. Right. If you're an experienced programmer, I'm not trying to say

that in a way that like, right. That's, that's me prompting along, right. Knowing exactly what I

want, how I want it architected. It's just, it's saving me from the, oh, I missed a comment.

Uh, the agonizing of what am I going to name this function? You know, like it just puts it there.

And then I look and I'm like, you know, that's a perfectly appropriate name, right. Or it's not.

And I change it. Right. Um, that variable message, you know, that, that comment is confusing. Let me

change it or it's wrong. You know, um, I, I can focus on the parts that the higher value stuff,

right. Just like we don't, I don't write code and assembly. Right. Um, I could like, you know,

I learned it at one point.

Enough to build a little dumb calculator. Right. But like, I wouldn't want to work in that all day.

I'd be doing something else. I'd be a lawyer or something. I don't know. But, uh,

that, you know, that's the low level and, and, and, but the higher, the higher level of stuff

still takes thought and effort and experience and everything. And, and, you know, my, I don't

care if quad gets three times as good as it is right now. My wife is not going to build great

software with it. Right. Perfectly capable of building those throwaway tools that work for me.

Right. Um, but, but for, uh, you know, you, you know, the, the idea that anytime in the next 10

years, Amazon is going to have, you know, 10 high school kids and they're going to maintain

Amazon software is just insane. We have it in the U S government at the moment.

It's working really well so far, as we can see.

Just jokingly here. It seems like there's a good empirical experiment going on for years. They've

said less government. Well,

they're testing that and everyone else is just going to sit back and see, you know, it's the

name of science. Yeah. I mean, it is, it is an experiment. Um, this may be one that we look back

on as, and, uh, and, and things should have been an illegal experiment, but, uh, like, you know,

you know, like we've, we've experimented on people, uh, you know, in ways that weren't ethical in the

past and, uh, have learned from it. And I think this is going to be one of those case studies in

the future of how not to do things. Well, likely the thing that I'm hopeful for with these LLMs,

is to, is that, you know, they open up, um, kind of, let's call it automate the boring stuff with

Python or build a job blog with Django level skills to almost everyone is, you know, and they're not

quite there yet. And, uh, you know, the, the blog won't quite work or the script won't quite work

first out of the thing, but there'll be an awful lot of people that have access to basic software

skills, which currently don't, that's going to be a major change. I mean, you know, I've been around

for a while. I'm kind of old. I've been around for a while. I've been around for a while. I've been

old for, for a techie, uh, at this point. And, uh, you know, when I was in middle school,

I was the computer nerd because I knew how to use a word processor. And in high school,

I was the Uber nerd because I knew about the internet and I had an email, right?

And those things are my, my kids have that stuff now. Right. And it like, you know,

they're doing it on an iPad and it's second nature. Like those are just day-to-day tools.

For 98% of the Western, you know, they're downloading VPNs and they can, you know,

they're doing all this stuff. Well, maybe, you know, but that, I mean, that's a, that's a little

more advanced, but like, you know, you know, word processing, email, searching Google, using,

using basic internet things is, is just table stakes for most jobs at this point. Right. And

I do, I think you're right. I think in five or 10 years, you know, or maybe even faster than that,

a little bit, things like I'm going to build a little bit of software to generate that report.

Because I want to show my boss this report in this fashion, much like people have gotten really

good at Excel. They're going to be able to do that, but against, you know, the data warehouse

without necessarily having to have somebody like us give them the data or massage it in some way.

There's just going to be, they have a read-only connection to the data warehouse and they're

going to play with Claude until they get the answers they want. And I think that's going to

become day-to-day business. Which unlocks, you know, who knows what, but yeah, good stuff.

Yeah. Well, and also it frees us up to do higher value stuff, right? Like, I mean,

there's a lot of times where I'm spending 30 minutes to just get somebody data in a CSV

and the way they need to consume it. That's a one-off that that's not a, this is now a feature

in the product and I never have to do it again, but it's this one weird scenario where they need,

you know, this certain data for this certain time range because of this certain bug or situation or

whatever happened. And, you know,

I'm the one with the quick, easy access and I can do it.

It's an awful expensive way to generate a bit of CSV, right? If you look at it objective.

Exactly. Yeah. Yeah.

Well, Frank, we're close to that time in the show where I have to hand you the magic wand

and tell you, change something in Django. What would it be?

Ooh, I probably should have thought about this.

Anything, anything goes. This, this is something. And I mean, we'll just put aside your

steering wheel.

You're wearing council hat. You're all of the hats that you've worn. It could be something

trivial, but, um, I, this is an idea I've had for a long time. And I, and I think that we may

want to spend a bit of time focused on a couple of very specific performance use case things,

and specifically caching the user model, um, as part of the sessions,

and auth system, not just caching the session, but caching the whole user model, because in a,

in most businessy apps, you're always logged in and you are doing that database query on every

single page, every single API view and removing that sometimes removes a third of the database

queries on that page. Right. And it's, it's fast and it's fine. But like, I think if we

had a backend that was the auth backend, that was more like cache DB for sessions, I think we would

gain, you know, 10% closer parody to faster web frameworks with that one little bit.

It'd be nice if Django could brag about a performance win for a change too. Right. As

everyone else does with synthetic benchmarks and all the rest, I'm sorry, Carlton, but it's true.

It would be nice.

You're going to fire me up now. You're going to fire me up now. Like, okay,

so.

So let's, let's compare the bed, the bed Django example where you haven't optimized at all,

and you've not brought in caching and you're pulling the user model every query and let's

strip it out. So it's equivalent to the others. And then let's see how fast base handler is

compared to your whatever handler you've got. Oh, they're more or less the same. Why? Cause

they're doing the same thing. Oh, sorry. Okay. So gross.

Yeah. I mean, yeah. Plus or minus a couple of function calls. Like they're very, very similar

in the core. Yeah, no, absolutely. And, and, but I'm also obviously, you know,

often surprised at like the performance differences between things. Um, it's really hard. Like

I, I would like to think I have a really great kind of sense for such things, but I would

not have guessed the, the level of impact that Pydantic for serialization would have

had to your average Django rest.

Yeah. No, I mean, yeah. Right. I mean, that's, that's the, that's Ninja's secret sauce there

for me. Um, is nested serializers in Ninja are damn near free.

Right. Where they're terribly expensive in DRF. Um, and so we avoid them in most of our projects

because they're fairly expensive. And you know, it's like your API goes from a hundred milliseconds

to 600 milliseconds and just doing something nested. And that's with select related prefetch

related, all taken care of, like just as best as I can optimize it, it's still slower. And you just

switch over to use Pydantic for your serializer and it, you, you gain hundreds of milliseconds.

And that,

you know, users feel that and it scales better and you save on cloud costs and there's knock on

effects of all that.

I mean, it's the, the, the modern serialization. It's, so it's Pydantic gatters and caters message

spec, like these options, they're just a world apart from, you know, the field space approach

that we had a decade ago.

I'm just shutting a quiet tier because I just finished finally the five X update to

my Django's for APIs book, which is focused on Django rest framework. And I'm well aware that

the next update.

Yeah.

I mean, I, I don't think anybody really goes wrong using DRF, right? Like, but I don't think that like

for me often, and it's, it's my situation, it's not everybody's situation, but for me, performance

often matters, right? Like a lot of this stuff that we do is at pretty, pretty high scale. And so, and,

I have not started an API project with not Ninja after I started one with Ninja, right? And so I

don't think I'll be starting a new DRF project. Um, but there are situations where I would, right?

If we're working with a team that has long and deep DRF experience, and they don't have a huge

performance concern, it's internal tooling or something like they have modest performance needs,

and they're very comfortable with DRF.

I'm not going to

make that whole team learn a new thing unless they want to, right? Like, I'm not going to be like,

no, no, you must like, there's, you know, this is the only acceptable answer. It's, it's, it's, it's

more nuanced than that. And that's, I think, true of everything, right? Like if I, if I consult with

a company and they have deep, deep JavaScript expertise and everything's built in express and

everything's pretty much working, I don't try to switch them over to Django. I help them with their

performance issue and we move on. And, you know, um, we might, you know, rib each other a little

bit about our choices of frameworks and, you know, and, and all good and all good fun.

But like, you know, the, the right tool for me, uh, is, is not always the right tool for you,

uh, especially when it's a large company.

Yeah. I can't think of wiser words to finish on than that.

Absolutely. So Frank, thank you again for coming on. Thank you. We've had a, a run here of steering

council people. We've had, uh, Emma, Lily, Frank, the only one, the only one we're missing is Tim

recently that we've had.

Yeah. We had Tim just before Christmas. So, so, you know, that's true. I mean,

Frank hasn't been on for five years, so.

We've been doing this for six. We've been doing this for six years. So yeah.

Wow.

Well, thank you for, thank you for taking the time, Frank, we will have links to all those

things. People should try out your projects.

Absolutely. Thanks for having me guys. And, uh, I'll see you again in five years.

You'll see me in five years to see Carlton in a month for his, uh, or a week for the steering

council. Yeah. But, uh, Django chat.com and, uh, see you over next time. Bye-bye.

Bye-bye.

This episode was sponsored by Hacksoft, your Django development partner beyond code.

Learn more about their services in the link in the description.