Django Chat

Deploy on Day One - Calvin Hendryx-Parker

Episode Summary

Calvin is the co-founder and CTO of the consultancy SixFeetUp. We discuss developer experience from day one, Kubernetes as a feature, real-world usage of AI and agentic tooling, typing in Python, the junior developer pipeline problem, and more.

Episode Notes

πŸ”— Links

πŸ“¦ Projects

πŸ“š Books

πŸŽ₯ YouTube

🀝 Sponsor

This episode is brought to you by Six Feet Up, the Python, Django, and AI experts who solve hard software problems. Whether it’s scaling an application, deriving insights from data, or getting results from AI, Six Feet Up helps you move forward faster.

See what’s possible at https://sixfeetup.com/.

Episode Transcription

Will (00:00)
Hi, welcome to another episode of Django chat. I'm Will Vincent with Carlton Gibson. Hey, Carlton.

Carlton (00:05)
Hello, Will.

Will (00:07)
And we're very pleased to welcome back Calvin Hendricks Parker from Six Feet Up. Hey Calvin.

Calvin Hendryx-Parker (00:11)
Thanks

Will, it's nice to be back here.

Carlton (00:12)
and welcome

back on the show.

Will (00:15)
So we were just discussing last time you were on, you were making the pitch for this ⁓ Scaff Kubernetes approach that you have that Carlton is especially hesitant about. So maybe give us the context and then we'll dive.

Carlton (00:26)
No no

Calvin Hendryx-Parker (00:27)
Wow, we're really, really, really jumping right in, like with both feet. Here we go. Let's do this.

Will (00:32)
All right, so tell us, give us

a quick refresher of what it is and then we'll talk about ⁓ how it's been going. Cause I think this was, you know, at least a year, maybe two years ago since you came on.

Calvin Hendryx-Parker (00:38)
Sure. I mean,

this has been a journey since at least 2018 for us when we kind of started doing more Django-based work is figuring out what the developer experience should be like for folks joining a team, getting on a project, starting from fresh. What does a greenfield project look like for a Django developer? And there's been lots of attempts, I think, out there in the community. And we've taken what we thought were some of the best pieces from here and there and combined them with our own.

opinionated framework for how we think Django development should be done. My goal has always been for a developer to get a new MacBook or a framework laptop or whatever in the mail and I'd love to see them commit changes within an hour of like turning it on. ⁓ Yeah, yeah, totally.

Will (01:22)
I mean, this is the dream even anywhere, like every startup,

every new company. Yeah, it's hard to do.

Calvin Hendryx-Parker (01:28)
But I think we've done it. I honestly believe that the framework we put in place with Scaff. So Scaff is a scaffolding tool. It's been built on the shoulders of giants. Obviously, we're using Django as one of the example apps in there. But we actually started ⁓ creating many different ⁓ apps now that we've moved over to Copier as a framework. it used to be using ⁓ Cookie Cutter under the covers.

And so was a little more monolithic since we have moved over to copier in the last year and a half. And that's allowed us to actually modularize and start building some other pieces alongside it that now give us the ability to do a AWS serverless scaffold implementation or a wag tail scaffold. What we've been typically doing has been the Django full stack app, which is the one I talk about kind of the most, because it's got the most complicated sets of opinions built into it. And it's kind of built towards developers who are working on

Will (01:59)
Interesting.

Calvin Hendryx-Parker (02:22)
maybe more sophisticated projects where you need, you know, you've got a mail service. Like, so we've got Mail Hog on the backend for developers, but maybe when you're deploying, you're using simple mail or SES on Amazon, or you want to use Mailgun or some other third party service where you've got an API and integrating mail into your app, or you've got, you know, RedisCache or Valkey, and now you've got Postgres on the backend. And so it's bigger than a kind of one-off, you know, toy that you've built to...

to demonstrate something locally, but we want that same experience, whether it's local, and you're in your sandbox environment, or you're off into your production environment. That's been a key ⁓ bit for us is how do we make ⁓ day zero really a deployable event that I could ⁓ build out a Scaff project green field and literally type Scaff Deploy and have it build out that infrastructure into a target environment, whether it be Amazon or GCP or Digital Ocean, I don't care.

And that, that, that I don't care piece for the, where I put it, it's part of what drove some of the decisions behind choosing something like Kubernetes. And so I know I can see Carlton already bristling a little bit around that, that choice. You're not nodding, nodding.

Carlton (03:31)
No, no, no, I'm nodding, I'm nodding. Everything you've said all makes total

sense to me so far. you d-

Calvin Hendryx-Parker (03:41)
Because that is levels of playing field. Something to think about. I've come from the same journey many of you have. I mean, I say many of you, I mean, even the people who are in the audience. I was a person back in the day who would build his own kernel because I needed to turn on some specific device driver. But today we don't think about the Linux kernel. don't.

Compile kernels anymore those just work for me out of the box I or I use my Mac because it just works like the I don't care about the kernel my OS Almost in the same breath I don't care about the orchestration layer of my containers at this point because it blends into the background There are really great developer tools right now that are enabling us to have that same experience whether it's local or in a cloud or in a Machine sitting beside my desk. It's like tilt. For example has enabled a lot of that ⁓ ease of use ⁓

for me in the Kubernetes world. I was resistant, very resistant to containers up until about 2020. And that's when, well, there was something that happened in 2020, some event, big things went on, but we moved virtual and that's when we built the LoudSorm platform to do Python Web Conference as a personal passion project. And at that point I picked like, do I deploy as quickly as possible? It's my own thing. It's what SixFab is building.

Will (04:44)
Yeah.

Calvin Hendryx-Parker (05:00)
We're not beholden to any other customers, their processes, their policies, whatever it is. I said, we're going to try containers. We're also going to try things like serverless. So we deployed it initially on Fargate using basically an AWS managed service for running containers. And it was wonderful because I didn't have to worry about how it scaled and how it operated. But I was locked into a platform and there were edge cases here and there. I always go back to Zen and Python.

And if you think about Zen of Python, the simple is better than complex, but complex is always better than complicated. These serverless platforms, these platform as a service pieces, they can get complicated. They seem simple on the outset, but you're learning some new CLI. You've got some set of constraints you don't know about because it's hidden behind some wall of abstraction.

Will (05:34)
Huh. Yeah.

Calvin Hendryx-Parker (05:49)
And even if you write plugins to, ⁓ say for example, Django simple deploy, you're now still dealing with different abstractions and different sharp edges along the way. I find that complicated. Kubernetes, some people may call it complex, but it is the complexity you need now. And it fades away and becomes simple because of other tools we wrapped around it. That's kind of my base thesis for this. And so I was very hesitant to go into containers, but I immediately saw the value of it.

They are the way to distribute applications in a repeatable way. In any place I want to put them, I can just throw a container. mean, in Amazon, you've got 21 different ways to run a container. And there's a reason why is because it's a great way for developers and non-developers like data scientists, anybody who writes code, they know they can deploy code easily using container. So then the next logical step is how to orchestrate those containers and how do you do the same thing locally that I would do in my production environment.

Will (06:42)
Yeah. It does require, I'll just say one thing and then you and Carlton can carry on the conversation, but it does require, you need a good computer to run Kubernetes on top of everything else. Am I right about that? Cause I recall, know, Docker, especially Docker like it was like two, you know, I guess I'm really dating myself, but was out of reach for many regular laptops back in the day. ⁓ so as much as I like got super excited about it, I realized for my, you know,

Calvin Hendryx-Parker (06:57)
Possibly, possibly. ⁓

Will (07:12)
Students, let's call them a lot of more like I can't run. I can't run Docker in a meaningful way. Yeah.

Calvin Hendryx-Parker (07:13)
Yeah, right. If you got four gig of RAM, you're having

trouble in any way. But there's two things I think that Kubernetes can unlock here on the local environment. And it still requires Docker, because you're still running containers in some way. if you can run, originally we've developed Scaff with the kind.

Kubernetes distribution in mind. So for those of don't know, Kind is a way for Kubernetes developers to run a local Kubernetes in a Docker containers using Docker's Docker desktop or Orb stack or whatever local container runner you want to use for developing on Kubernetes because it's basically a full Kubernetes distribution that runs as the nodes run as containers. And you can run a single node container very simply. And so that enables you to run

a one node, one container, Docker based Kubernetes distribution. There is a even lighter weight version of this. ⁓ If you're familiar with the various distributions that are out there, when we deploy kind of full blown, we use Talos Linux typically, which is like a full Linux distribution that has no SSH into it. It has a control plane running and as a Talos control plane running, you only interact.

with it over APIs, you cannot SSH into it. again, limiting security vulnerability surface area. But TALIS is again, a full Kubernetes distribution. It's powerful, it's great, and it gives you kind of peace of mind from a security standpoint. The other way we typically deploy Kubernetes is using K3S. So K8s is a very lightweight version of Kubernetes that can meant to run on the edge, single node, multi-node, but it has made some concessions.

around how it runs certain things. So for example, the control plane doesn't use etcd. It just uses a simple lightweight SQLite database under the covers. There is a K3D version, which is basically K3S on Docker. So run a single container with all these lightweight compromises. So you obviously sacrifice high availability, but I'm on my local machine. I don't care. What I care about is compatibility with the control plane, being able to run kubectl commands, being able to run tilt.

Will (09:17)
Hmm.

Calvin Hendryx-Parker (09:22)
and be able to run the same things I'm running locally that I would run in the cloud, but do it in a way that's not requiring so much system resources that is bogging down my system. I mean, it can actually run live reload of Django inside Kubernetes containers. So as you type code and your IDE auto saves, you're automatically getting reloads, hot reloads in the Kubernetes cluster on your local machine. So it feels very local, feels very native to people who are like, I want to run, just run server.

know, in develop mode locally, that is what you're doing. is, and it runs very, very fast and with again, less overhead. So that, think that approaches the resource constraint issue. The second thing I want to mention is that running something like tilt and using Kubernetes means that parts of my infrastructure that I'm developing on could run on a sidecar machine in another, if I had a desktop and a laptop, but my laptop was underpowered, I could develop locally on the laptop run.

Will (09:53)
Yeah.

Calvin Hendryx-Parker (10:18)
the Redis and the database and the other pieces on the other machine as part of one cluster. Or it could be running in EKS or in ECS on the cloud. It doesn't matter where these containers necessarily live. You can now extend your resources into places where resources can be paid for by the hour. That's more complicated, obviously, to do such a thing, but it is possible.

Will (10:43)
I'm sorry, Carlton. One more. So with all that said, if I'm, if I'm a new employee or I'm working on a new project at six feet up, by the way, we should mention you're hiring, right?

Carlton (10:45)
Yeah, you know, come, come.

Calvin Hendryx-Parker (10:51)
Yeah. Yes,

we are hiring. I'm looking for full stack devs. I'm looking for DevOps folks. I'm looking for people who are passionate about solving hard problems. That is something that is like near and dear to our heart is actually going out there in the world and taking the vision of impactful tech leaders and helping them solve these hard problems. And so if you wanted to come play and have fun and do cool stuff with us, we're looking for people right now. So go to sixchef.com slash careers. That's the last plug I will give for the company, but we are definitely hiring.

Will (11:19)
Yeah, yeah, no, I

Carlton (11:20)
We'll

Will (11:20)
prompted it.

Carlton (11:20)
do that again at the end. Do you work remotely as a team? No, no, no, no, we'll come back to that. We're doing the fact that Calvin's hiring now.

Calvin Hendryx-Parker (11:22)
Okay.

Will (11:24)
Wait, wait, wait, I didn't get to my... sorry, go ahead.

Calvin Hendryx-Parker (11:25)
Yeah, are

fully remote. don't have an office. We are a fully remote first company.

Carlton (11:35)
I've seen some amazing photos of the company get together. I don't know where in the Caribbean as well.

Will (11:38)
Mmm.

Calvin Hendryx-Parker (11:40)
Correct,

we do a once a year company retreat in Dominican Republic where we bring everybody together for a full week together. We don't do any customer work, we just work on building the better team.

Carlton (11:51)
So, okay, that sounds right. I might apply. sounds right.

Will (11:54)
Well, so my, my question

Calvin Hendryx-Parker (11:54)
Hehehehehe

Will (11:56)
to you was

with all this complexity as a new hire, what is that experience of? Okay. So I'm sitting in Boston, get a laptop. What is the experience for me? Right? Cause obviously all of that work is to make it simple to do this same day deploy. What does that look like?

Calvin Hendryx-Parker (12:09)
Correct.

So Scaff builds out a skeleton onto your file system as a green field part of the development process. You check that into GitHub or whatever your Git repository of choice may be. As a new developer, I'm expected to get credentials for our organization. So maybe I'm using Microsoft Entra or whatever it is, and I've got a GitHub enterprise organization. So I log into my GitHub, I clone the repo. I should literally just be able to type tilt up.

as long as I've got, ⁓ and actually tilt, our scaffold check for dependencies. I mean, really the bare minimum, you just need to have like kubectl installed, you just need to have tilt installed. And another thing we've started embracing has been Nix for some of the development environment. So if you're not familiar with Nix, that's a whole nother level of stuff that it's not a pain I'm fully sold on, but I see the promise of.

is that I can CD if I've got Durr-Enf, if you've not played with Durr-Enf, it's a lifesaver, especially when dealing with all these API keys and environment variables. I CD into my project directory, it will bootstrap the Nix environment and make sure that all my development tools are installed at the right versions expected for that project, the right version of black, the right version of rough, the right version of isort, the right version of uname, whatever tool, poof, magic happens. I type tilt up, the cluster blossoms into life.

and I actually end up with a running instance of whatever project I'm working on. I may have to go grab some data from someplace, but typically we try to have a scaffolding of data just bootstrapped into the local developer experience because we typically don't want to develop with production data. We're typically developing with some kind of staging set of data that's already built into the project. I go take a GitHub issue and I start working.

⁓ because it's ready to go. I open up my favorite IDE. We don't mandate any specific IDEs. We've got people who like PyCharm. We've got people who like VS Code. We had someone ask for Cursor the other day. mean, it's whatever you're comfortable with. The power of senior developers, you could use BBedit. I mean, I was an old school text mate user at some point in time.

Will (14:11)
BB Edit, Carlton, shout out.

Carlton (14:13)
If you edit, no, if you baby edit, all right.

Will (14:18)
Yeah. Yeah. I like text mate. Yeah. Sorry. And that's relevant because, um, Carlton and some of the, um, steering council and board are just looking over the Django survey that's going to come out, uh, at Django con Europe. there's figuring out the questions around. I, there was one about BB edit, but Carlton based on historical, has to go in the other category because it was less than 1%. But

Calvin Hendryx-Parker (14:28)
Yeah.

Carlton (14:38)
Yeah,

yeah, no, no, no, that's fine. It's like which entity do you use? And every single year I take other BB edit.

Will (14:44)
Hahaha

Calvin Hendryx-Parker (14:44)
VV editor, wow.

Now, I mean, I'm a long time old school VI Vim ⁓ user, but I've shifted, I really do enjoy PyCharm. They changed my mind a couple years back, probably when you saw me start doing some videos with Paul over there at JetBrains, but the speed finally got to a point where I felt like it was reasonable, the VI emulation was very good, so I felt productive. It was a story, because it was a.

Carlton (14:50)
Yeah.

Will (15:03)
Mm-hmm, Paul Everett,

Calvin Hendryx-Parker (15:13)
PyCon where I did a lightning talk and at some point the the VI emulation mode got shifted off on my editor and I couldn't use my computer on stage it just like my mind got broken and like I had to use a mouse and it got it got weird

Will (15:23)
no.

Yeah.

Carlton (15:29)
It just goes from

bad to worse, right?

Calvin Hendryx-Parker (15:31)
It did.

Will (15:32)
I mean, I'll just say

as one, just as one thing, you know, being on the inside at PyCharm, it is, it's non-trivial to do an IDE well. Like it's, you know, it's, there's way, I sort of suspected, but there's so much more involved. Yeah. Well.

Calvin Hendryx-Parker (15:40)
I would agree.

Carlton (15:45)
We can all name a bad one, right?

Calvin Hendryx-Parker (15:48)
But the IDE has never

been front and focus to like, the IDE has never been the forefront of my developer tool chain. It typically has been all the extras around the edges like the Pyflix and the I-sorts and the blacks and now rough. mean, it's just those things are just such lifesavers as developers because I can kind of get to the root of the problem and not think about all the...

Will (15:55)
Mm.

Calvin Hendryx-Parker (16:11)
the outside edges and make sure that I'm still delivering well-formatted good code. you think that's even more important today with all the ID and agentic AI tools as well, that I want them still to behave like how I would lay down code. I don't think that'll always be the way it will be, because I think at some point we will probably just not even look at the code. I think that's gonna come a time. It's out there. Yeah.

Will (16:34)
Winsing Carlton and I are wincing for audio viewers. mean, yeah, I mean maybe

I certainly wouldn't say no, but

Calvin Hendryx-Parker (16:41)
Yeah, because

we care about outcomes. We care about the users, the end users, the people who are wanting the value out of the software. care what the outcomes are. They don't care what was written in the middle. We, as developers, love our craft, and I'm one of them. I absolutely love crafting fun, interesting code, and solving a problem beautifully and elegantly has always been a priority or excitement in my life. That's shifting, and it hasn't gone away.

Carlton (16:49)
you

Calvin Hendryx-Parker (17:10)
I still enjoy, I I'm using the tools, I enjoy building, but it's been a fun new experience and I still love guiding the tools into say an elegant solution.

Carlton (17:22)
That's the point is they can write okay code like no absolutely no question They can write okay go that the latest models and all the rest and there has been a change in the last few months They are much more capable, but you still have to watch like a hawk if you want like good architectural

Calvin Hendryx-Parker (17:27)
Yeah, right.

Yeah, yeah.

yeah, 100%.

Carlton (17:38)
decisions now when you say we won't look at the code at all that I wins because I think but you know I will see them make a change at an abstraction layer that's just totally inappropriate and you know that like six months down the road that change if it's not dealt with here and then will be a know ⁓

Calvin Hendryx-Parker (17:51)
that's gonna hurt. But that's why right now these

these tools are so powerful in the hands of seniors because of exactly what you just said. You recognize by pattern when there's gonna be a future problem coming to bite you later. But that's harder for people who haven't had that experience to grasp or to code with. So I think there's a lot of people out there creating tech debt.

today that could be avoided if a good senior was in the loop. How do we instill years of experience into a new developer so that they can climb those ranks? I would love to be able to solve this problem. We don't have any juniors in our team. The person with the least amount of experience is like 15 years in our team. And so that makes a difference in kind of how we deliver and what we deliver. I still think it's a problem, though, that there aren't juniors in the ranks. I don't know how we bring them through.

Will (18:17)
yeah.

Calvin Hendryx-Parker (18:46)
I benefit from people going out and working in other places and experiencing all the pain along the way and then coming to work with Six Feet Up and enjoying the senior life, I think. I don't know, it's kind of a wayward home for senior developers and open source people who love solving hard problems.

Carlton (19:02)
There you go, there's your hiring ad again.

Calvin Hendryx-Parker (19:04)
It totally is, yeah. It totally is, yeah. It's

true. I mean, I've hired some of most amazing people in the last few months that I never thought I'd work with. And I'm just so ecstatic that they're part of the team now.

Carlton (19:14)
Given that you said that about hiring seniors and that you're all very skilled and we'll come back to the AI question I think momentarily. I just want to cut back to Scaff because everything sounds wonderful and I love the setup and I love that you've managed to get this very... No, no, no, wait, wait because philosophically it cuts like absolutely the opposite direction. I've spent my entire career...

Calvin Hendryx-Parker (19:26)
Okay.

That's a resounding endorsement from Carlton for Scaff now. He's really changed his tune.

I know.

Carlton (19:41)
looking for a smaller hammer, a more precise and like delicate thing. And I love what you've done. And the example you gave was loud swarm and serverless. when you're running all those different instances of services and whatnot, absolutely the containerized Kubernetes approach, it all makes massive sense. But when you're running your kind of small to medium sized Django app, feels like you're deploying, said to you when we talked before about, it feels like you're using a Django, a jumbo jet when you just want the two seats to light.

aircraft, right? And you know, all of the tooling that you've built, and it's an amazing thing that you've got going there. And it's like the sort of ⁓ full on high tech everything approach to the and it's a good solution. But the opposite end of the extreme is that is that the nice craftsman's hammer.

Calvin Hendryx-Parker (20:32)
I will agree with you the nice craftsman's hammer. also, I think this is, thought I knew this was coming. I knew exactly where I would be confronted with this opinion on the topic. And I still believe that having the same set of tooling in that local environment as into a larger environment, it plays into the, well, I'll go back to Zen of Python again.

⁓ explicit is better than implicit. And in many ways that the, I'll put this out there, Kubernetes with tilt is more complex than a platform as a service. It's more explicit and then through that explicitness, it's just documentation you can run. As I think, if I look at where you're just, when you start pushing complexity around, you've got environment variables. You've got them, they run differently in your paths or on your

fly.io or in your EC2 instance differently than you got them locally. You've got secrets management. You've got how do I set up the database locally versus how do I set up the database? So I'm using RDS or if I'm using a installed version of Postgres or SQLite or how I deploy those databases, how do I manage those versions of the data? How do I back up the data? How do I handle all these surrounding bits of the application? And the full stack app has opinions on all those things. And it runs the same locally as it does in that.

in whatever cloud you pointed at.

Carlton (22:03)
Yeah, and there's something you said, ⁓ you didn't say here, but you said it before, which is something along the lines of ⁓ KCTL is like the standard API. It's like this, this one, one universal, we just use that.

Calvin Hendryx-Parker (22:17)
And I rarely touch

it, honestly. You may think that basing my whole opinions around development environment and developer experience on Kubernetes means that I'm a kubectl expert. I am not. I don't ever claim to be, although the LLMs are very good at telling me how to go tell my logs and check for the running nodes and these kinds of things. But that's about the maximum I do. The other key bit of this is, and I know it sounds like overkill, is

Carlton (22:36)
Yeah, they're wonderful.

Calvin Hendryx-Parker (22:46)
having CI CD and using things like Argo CD for deployment means that I've got a tool that's basically fact checking me along the way. If I make a change to a manifest, Argo will reject it before it gets to deploy it out into any space before me. Any change I make, if it's on the right branch and it's in the right place and I've followed my own process, is ended up in the right environment. Like it's either in my testing or sandbox environment now, or it's once I've merged domain,

that release goes to production because it's been approved and tested and I've got good tests and the CI running. It just helps me keep all the good practices always going in the right direction without any cognitive or overhead and load on my part as a developer to think about it. Cause it just runs like these things just happen. If I go and know Django admin, you know, create a new project. Now I've got a whole bunch of things I got to think about, you know, to put in place all those practices. So even when I'm starting a,

Carlton (23:42)
Yeah, yeah, yeah, yeah.

Calvin Hendryx-Parker (23:44)
a dummy little pet project, I will go use the full blown scaffold template. That said, there is a cost to that thing. To run a base scaffold in Kubernetes and Amazon may cost you over $100 a month for that level of infrastructure. That can be made cheaper. You can deploy it on a single node in Hetzner for a fraction of that cost.

And I've been playing with those tools too. Actually, I've been playing with Fast API. I actually been playing with the Fast API Cloud. I got early access to that and that's a lot of fun. But boy, howdy, if I want to move that someplace else, I'm locked in on that environment for the moment. But boy, it was an experience, fun and exciting as a solo developer. I put the front end on Cloudflare pages and workers with the API gateway on Cloudflare. I put the...

Will (24:15)
yeah.

Carlton (24:15)
Thank

you.

Calvin Hendryx-Parker (24:34)
Fast API which is running Lily fast API deploy and poof magic happened there and I threw up a database in neon Which is Databricks is hosted Postgres as a service. It's all free tier

Carlton (24:46)
Right, and they're targeting that kind of, that missing Hiroku space, right? That, you know, that we all knew enough. Yeah, right, okay.

Calvin Hendryx-Parker (24:50)
which is good place to be right now.

Will (24:54)
Yeah,

well, I gotta, I gotta ask you, Calvin. I, so Carlton, I were just at this PI TV event in Amsterdam. ⁓ and Sarah Boyce Django fellow gave a talk on Django has a marketing problem and it a great talk. We'll have links to it. ⁓ but I wonder as the Django community with fast API, I don't feel like we have a great story for, you know, of course we say they're different tools like Sebastian, the fast API team are great, but I don't think we've nailed the marketing pitch for why.

Calvin Hendryx-Parker (25:19)
Yeah. Mm-hmm.

Will (25:23)
Django and I'm about to go to PyCon US and I'm to get this question 100 times a day. ⁓ What would you say to someone who comes to you? You know, a client or someone else who says. You know, how would you make that decision tree between one versus the other?

Calvin Hendryx-Parker (25:29)
Certainly.

It's hard to argue with the batteries included aspects of Django. I feel like we've maybe, I don't know if it's lost the project. I don't think the project's lost its way on that. I don't think we talk about it enough that if I just need to spin up a... It totally is. I think that they're right on that point. That if I... I mean, I htmx plus Django is a really fast way to solve some problems without building your API twice.

Will (25:49)
Yeah, marketing problem. Yeah.

Calvin Hendryx-Parker (26:05)
If you're in the fast API land and you're building a React app, well, you've now had to build your API twice, basically. And now you're maintaining that thing in both places and you have to always have tests to ensure that they stay in parallel with one another. Where if I can just build the backend and I can enable the single page web app experience on the front end with low overhead, wow, that's powerful. That's a powerful way to get an idea.

Will (26:06)
⁓ That's well said.

Calvin Hendryx-Parker (26:31)
to your client, your customer, to internal stakeholders without spending a lot of time and effort. Now, you can take that to the next level. Maybe you do want to build React apps or have, it depends on your needs, like at that point. You're gonna recognize that there's an absolute usability need or user experience need for those level of tools, but it may be that HTML is really all you need on top of Django because it's got all the templates built in. It's got all the templating engine, the ORM,

Will (26:45)
Yeah.

Calvin Hendryx-Parker (27:01)
It's got all the helpers, which really, I think a lot of folks don't go explore the docs enough. ⁓ I was reading a interesting.

Will (27:09)
Well, and they think they're

doing new things, right? I think that's the other thing is they don't realize that everything they're trying to do has been done and probably perfected and thought about, and they just don't know where to look.

Calvin Hendryx-Parker (27:13)
Yeah.

Yeah.

Well, they've missed all that. They've missed out in the docs. They missed the HTML helpers and those bits that you feel like, I don't know. I think a of people may just jump in two feet and not think about reaching for the manual when the manual may say, there's already solutions for all this built into Django. You don't need to reinvent wheels. I've seen that a lot over the years with multiple frameworks, but Django seems to particularly have good docs and good helpers built in.

More folks probably just need to get exposed to them. I mean, I think that that's an interesting part about like conferences too. As you go to conferences, and I think people pitching talks to conferences are always looking to pitch the latest, newest, fanciest, like cool way to solve a problem. We probably still need some base level talks about the framework and the built-ins and the pieces that make Django really fun and easy and a breath of fresh air.

when talking, because a lot of people got attracted to Flask and now obviously they're getting attracted to like Fast API because it sounds fun and neat and it's fairly lightweight. It's lightweight and fast to get started, but then you're on the hook to build all the stuff.

Will (28:24)
No disagreements there. And well, yeah. And it's just, think, I think we could learn a lot from, again, the fast API team, you know, in terms of they're doing a great job on marketing.

Calvin Hendryx-Parker (28:25)
So yeah, I think they do.

Yeah.

They flasted a well they did not flasted a good job as a April Fool's joke on marketing too.

Will (28:36)
Sorry Carlton, I, so good.

Yeah, well, and David Lord has been doing a heroic job for, my God, I don't know, 10 plus years on everything. So you got to find the David Lord to keep your keep your thing going.

Carlton (28:45)
Yeah

Calvin Hendryx-Parker (28:48)
Mm-hmm.

The longest running

April Fool's joke in the history of April Fool's jokes.

Will (28:59)
Pretty much. All right, one

more and I promise I'll shut up Carlton. ⁓ I wanted to ask you Calvin about typing because this is, I don't know if it's hot, but it's on everyone's mind. I, know, PyCharm is there's all these new type checkers. We're integrating, you know, all of them. We're trying to decide if we have an opinion. ⁓ And then I'll just say that leads into Carlton gave a talk that you'll see versions of on Django Mantle that

has a take on typing. where do you fall? I fall on, see people trying to turn Python into Java and arguing that LLMs want static types. ⁓ But what do you see?

Calvin Hendryx-Parker (29:38)
boy, that's a hard one. kind of, I'm a bit of a person of two minds. Like, ⁓ I, I've always appreciated the Python staying out of my way and just letting me code through a problem. But I understand the structural beauty then of, of types. One thing that I, I gets me when I talk to folks is they'll say that Python doesn't have strong types. I'm like, you're, you're absolutely wrong. Python is very strongly typed. It's just never had static typing associated to it.

And when you say that to someone who says those opinions back to you, they think again now and go look at the language differently. And so I think the fact that we've added in static typing and type hints into the language has been a boost. I think it's a good thing. I think it's brought over a whole new set of people who were skeptical before. And I like the fact that I'm not forced to use it if I don't want to. ⁓ But.

It's pretty nice. I think for IDEs and for a lot of the tooling and for again, for the AIs and the LLMs who are doing a lot of coding, it's probably a net good in general. ⁓ It's nice because I don't have to type it all. I don't have to literally type it like with a keyboard. But the typing can get added for me and then I can have static type checks and I can have my test environment and my integration environment all

can validate that what was said is true. So from a convenience standpoint, I'm still like, love the village, just rip off some Python and not worry about it. But from a building important, big important software standpoint, I think it's a big boost because there's a lot of people who feel like they need that level of safety, which is probably right. They're absolutely right. If I'm building software in a life or death healthcare space or dealing with people's finances and money or those kinds of things, you need that level of.

extra belt and suspenders.

Carlton (31:30)
guardrails isn't it it's more guardrails around the the code can go wrong

Calvin Hendryx-Parker (31:31)
Yeah.

It's pro- it's proactive, yeah. It's- it's-

You're definitely being proactive about your intent when writing the code. I don't know, I don't know where you-

Will (31:41)
Carlton, this is a TFTU

though. Tell us about...

Carlton (31:43)
Well, yeah, well, my, my

take on this is not, is that, is the types are wonderful and we should use them where they add value. But what I, what my only sort of pushback there is I don't, I don't want us to let go of the dynamic patterns where they, where they are useful. And I think if we do that, we're leaving power on the table that Python needs, because if we just, if we just try and treat it as a static language, well, it's not a very good rust is it's slower and it's the type system's not as good and there's no compiler enforcing it. And well, okay. It is a dynamic.

Calvin Hendryx-Parker (31:56)
Yeah.

Carlton (32:13)
language we shouldn't abandon that is my take and then because I'm obviously in the Django community I link that back to Django. Django was written with dynamic patterns in mind and so when you come down to the core of it it's very hard to type in because well it's it's dynamic to the core and we should be careful about trying to enforce

Calvin Hendryx-Parker (32:22)
Hmm.

Carlton (32:32)
⁓ unhelpful type pins on the sort of highly dynamic bits of Django. you know, so that's my kind of take is like, absolutely type pins are great, but remember that Python has dynamic powers. Let's not just abandon them.

Calvin Hendryx-Parker (32:41)
Yeah. What's your opinion? Yeah, what's your opinion on the

on the implicit return?

Carlton (32:49)
On what,

Calvin Hendryx-Parker (32:50)
like implicit returns in functions like in methods yeah right yeah well just not if you don't even type it it's just gonna do that for you like I felt like that was a mistake like was it was less implicit than it should be or explicit it's less explicit

Carlton (32:53)
what, like returning none from a...

yeah. I mean, that's not my one particular bugbear I would have from the language.

Calvin Hendryx-Parker (33:10)
Now, no mine either, but it was convenient,

obviously, as a new person learning a language. I didn't have forget about typing return at the end of a thing if it wasn't returning anything. But then you get the side effect of it returned none. you, right, right, what, what the, right, right, right.

Carlton (33:22)
Yeah. And then you get some error, none type is not callable later on. And you're like, why have I got none type here? It's like, cause I didn't return anything from the, yeah, yeah, yeah. Yeah.

Will (33:28)
Hahaha

It's a rite of passage.

That's how you earn your senior stripes, right?

Calvin Hendryx-Parker (33:34)
True, true, true.

Carlton (33:37)
Sure, sure, sure. So yeah, that's the kind of thing that a type checker might pick up. the other thing I like is forcing you ⁓ into a match statement to handle optionals. So you've explicitly handled the none case. And I think those kinds of patterns that we pick up from Rust, or try and bring across are lovely and they do add value. But, you know. ⁓

dynamically creating a class at runtime and using it to do superpowers in a very concise way is not something we should just walk away from.

Calvin Hendryx-Parker (34:10)
Right.

No, I think it's super powerful, especially in a data-driven world, when you want to be able to create data classes, for example, like that.

Will (34:20)
Yeah. Well, that leads in, my head anyways, to the next one, which, okay, AI, I'm going to ask you about it. So you've, you've published on the company blog, a guide to AI coding assistance. can see that you're. Seem to be getting a lot out of them. And you've sort of touched on this. Like, what are you finding or, you know, ways that are working and some things that are still not there yet. I'll just say for me, the agentic stuff, I'm not quite there yet. I just, the security and the hands-offness I, I'm not quite there yet. And I'm.

Carlton (34:20)
Yeah, I mean.

Calvin Hendryx-Parker (34:26)
Okay.

yeah?

Will (34:49)
friends call me a dinosaur for that and I may be but I'm still walking the earth so where do you fall on the spectrum of AI you know tooling that helps developers

Calvin Hendryx-Parker (35:00)
I mean, I think if you've been following along, I have been playing with them all. Like I've put out posts about, you know, comparing five or six of them at once and the ground moves very, very quickly underneath you. It's like quicksand. so it's hard to follow. I think there's a lot of fear of missing out from folks, which maybe why they're calling you a dinosaur, I think that it's okay to have a skeptic view. It's probably healthy to have a skeptical view of them because they are capable of doing things that you-

may have side effects later. Our team is very, very adept and very much using all the agentic AI tooling, but we're using it again more like a senior developer would, is to augment the powers of the existing human in the loop who understands how to solve or loves the act of creation and solving fun and hard problems. So I don't care about some of the busy work on the side or creating a scaffolding or creating a, you know,

framework for a little piece of this or that. Those are the less interesting part of the problems and so we can assign those easily to the agentic AI to take care of that piece or to build most of what we're doing. We're becoming very good at ⁓ specifying and planning and using tools like spec kit which can integrate into almost all of the agentic AI tools that are out there. That's what I'm talking about kind of most recently on the LinkedIn posts.

Carlton (36:25)
This is for this

spec-driven development it's called,

Calvin Hendryx-Parker (36:28)
Yeah, yeah. So

spec driven development, a spec kit is from GitHub. It's open source and it provides the ability for you to create. In addition to, so most folks are probably familiar with agents.md or the claw.md file that you put at the root of your project. It kind of expresses your opinions about things. Agents or the spec kit takes us a step further with allowing you to the beginning of the project or as, as a developer to establish your constitution. That both the, these are the things I believe these are the things that are, should be true for this project. And so it's a more.

Will (36:30)
yeah.

Calvin Hendryx-Parker (36:58)
extensive version of that agents.md and it's meant to probably work alongside the agents.md and then you start in on the specification part of the process and it actively asks you questions. It helps you resolve ⁓ ambiguity and unknowns. It helps you write the user stories and helps you get to a better set of outcomes, not just output from these AI tools. I think there's a problem where a lot of developers are focused on the outcome output, not the outcome.

like their AIs and LLMs are incredible output machines. They can output tokens till the cows come home, but to get good outcome requires a great developer in the mix still. We're not at the point where they're fully autonomous, automatons that can go off and do all the things. We're still, humans are still understanding what the requirements are. We're still trying to document those requirements. actually making us better developers because we are becoming better at specifying how we want something.

to be done or to actually operate once it's been delivered on the other side of that software equation.

Carlton (38:00)
It's amazing, we spent like 30 years saying, no, we're not going to write specs. And now we're all like, yeah, we're going to write specs.

Calvin Hendryx-Parker (38:04)
All right, specs,

all the specs all the time and you get great docs and you get great tests and you get great use cases and you There's some great flows out there too. I mean we've been leveraging the figma make platform Which is an agentic version of figma to build prototypes ⁓ relatively quickly for Even prospects people who haven't even signed a contract with us yet. We can basically help convey understanding at that level with them

Carlton (38:09)
Thank you.

Will (38:24)
Interesting.

Calvin Hendryx-Parker (38:34)
and then we take it into building the real tool. Those are high, I think actually for us, tools like lovable, bolt.new, replit, are gonna be a boom for our business because these are high bandwidth tools for business users to convey to us what they meant, like how they envisioned a piece of software to work, and now they're like, it real. I think a lot of people recognize relatively quickly.

Will (38:48)
Yeah.

Calvin Hendryx-Parker (39:04)
Those tools have been given system prompts to make you very successful early on in building something, but they lack, I believe, in the success on deployment and the what's next, the day two operations pieces of that. So a lot of people will build early in those tools and then come back into the, I don't want to say come back into the real world, we're gonna still use agentic tooling, but in a different way to build the real version of those things. But now we've got a high bandwidth.

highly communicated to us what the needs were, what the requirements were, what the outcomes should be for this software. Like it's much easier to understand that through those pictures and through actual working UIs than it is for them to try and just have a Zoom call for an hour and understand what they want.

Carlton (39:52)
you talk about that point before signing a contract because there's always this kind of like almost Mexican standoff where you can say Mexican standoff these days, I'm still allowed, there's this standoff. I don't know, I don't know if it is or if it's not, I apologize, just a standoff. ⁓

Calvin Hendryx-Parker (40:00)
Yeah.

Is that loud? Is that loud?

Maybe, yeah.

Carlton (40:10)
But there was always a standoff between the client who doesn't want to pay until they're sure you're going to deliver the right thing. And then from your side or my side, I don't want to do too much work without getting some guarantee of some payment. That discovery phase, if you can put together a prototype at very low cost, then you can do that during the conversation. That's going to be a game.

Calvin Hendryx-Parker (40:24)
Yeah, very low cost. Yeah, and we're seeing less

and less of that contention now because of these tools that are available.

Carlton (40:35)
Do

you still have the problem though that the client's like, let's just ship the prototype. know, it's 50 bucks.

Calvin Hendryx-Parker (40:39)
I have

to be very good about explaining reality to people. There's a lot of education that goes on in my world in telling people what's real and what's hype. And that's also been a problem I think you're seeing. I think there's a lot of people with FOMO and that FOMO is around what I'm calling just keynoteware. People are showing off something on a stage that is half-baked. They figured out the happy path. They figured out a great demo that showcased it really well on stage. And boy, is that not really reality.

And it's doing a disservice. Like people should show the realistic version of these tools, because they're still incredible. I think they're really equally as incredible as a developer who's been around for a long time. I want to see the reality of it. Like how does this actually get me in a day-to-day usage productivity value, know, the outcomes.

Will (41:27)
Yeah, I like that. If I may, I might switch to books and projects time. So I think we gave you a heads up. I'll go first just to break the ice. I'm actually not doing a book. And Carlton, I forget if you've done this, but I'm going to say, OK, OK, all right. I'll take London review of books, which I owe to Carlton introducing me to it. It's basically a novel every other fortnightly. But for me, in a world of a

Calvin Hendryx-Parker (41:32)
Okay, fun.

Carlton (41:40)
I did Le Monde Diplomatique, so you can do one of your books.

British so you can

Will (41:57)
You know, how to how to say it's nice to see educated opinionated takes on things that are relevant and some things that are completely non relevant, but you know, tapestry and 16th century, whatever, and they find ways to make it interesting. So I feel I always feel better.

Calvin Hendryx-Parker (42:14)
Will you shared that?

You shared that and I immediately went and read like three little novels and I was like, this is incredible. my gosh, where did the time go? Like it was really that, it sucked me in.

Will (42:24)
Yeah.

Yeah, good. Yeah, there it was. That's my that's my shout out. Either either one of you who wants to go.

Calvin Hendryx-Parker (42:31)
That was really cool.

Carlton (42:34)
Calvin, you go.

Calvin Hendryx-Parker (42:34)
Okay,

mine is also a non-technical related thing, but I think very prescient in this time of what feels like a very fast-paced moving world. So each year ⁓ the team gets a book from Gabrielle, who's our CEO and my co-founder at the team. so two years ago, I think it was, we gave everyone the book Big Panda and Tiny Dragon. And it's a really, really fun...

Animated story of a journey of two friends who go places see things but it's really the one big theme in there is that the slowing down in a world of that pushes constant busyness is something that you We need to take a moment and see and it was I think the number one for me like the I that I took away from that book Was this it a lot of times people talk about? ⁓ It's not about the destination. It's about the journey

And in this book takes it a step further. It's not about the journey. It's actually who you go on the journey with. Who are your friends in life? And I found that one to be like about where you tear up thinking about it, because it's really important to me who I go on journeys with. Don't focus on the destination. Don't focus so much on the journey. It's focused on your friends. That one's really, I love that. That makes me feel good. There's a couple of books in the series, but definitely get the first one. You won't regret it and you will be a better person for it.

Carlton (44:02)
Super.

I'm ⁓ to show you this book here called Universal Principles of Typography. probably can't see the principles because it's got a silver background there. It's by Elliot J. Stocks who is a font designer. He's worked for Google, he's worked for Adobe, he's worked for everyone. And it's 100 key concepts for choosing and using type. it's a couple of years old now and I've had it on the shelf and I remember talking about it when I first got it. But I pulled it off the shelf the

day to look at again I was just like gobsmacked by how just gorgeous absolutely every page is just beautiful to look at it's it's it's an utter delight of a book and you know for us developers who you know all design is so hard it's really accessible it makes the principles really clear and yeah it's just a wonderful book so universal principles of divine of typography by Elliot J. Stokes and you know typography is 95 % of design right

Calvin Hendryx-Parker (44:37)
Ooh, that is pretty.

I don't know if you know this, but I got my start in technology in journalism doing desktop publishing and typography. And then I got a degree, I have a degree in technical graphics. Yeah, so that's a cool book.

Carlton (45:03)
slowly starting.

Right.

Oh, so you're one of those ones, you? Okay, right.

Will (45:15)
going with it.

Carlton (45:20)
No, it is a cool book. I really recommend it. you know, as I pulled it off the shelf, I was looking through to find my specific thing that I wanted to look up, I was again just taken by its sheer beauty as a physical artifact. So I do recommend getting.

Will (45:20)
wow.

Calvin Hendryx-Parker (45:34)
Nice.

Will (45:34)
All right, projects, I'll just go quickly. I'm gonna shout out to Django MailAuth from Coding Joe, which is Django auth via login URLs, no passwords. It's kind of a lightweight package, a newer one. I've been playing around with that and I think it's pretty interesting because auth is way more complex than people think. And sometimes you need a full featured thing, but sometimes you need less and certainly passwords, no one can remember them. So that's a pretty interesting one.

Calvin Hendryx-Parker (46:01)
Yeah, and if

you have poor typography that actually looks like Django mall auth.

Will (46:07)
Yeah, okay. I didn't yeah, I didn't mistype it the aerial. Yeah in our little notes the aerial font. It does look like moloth Yeah, that's something else

Calvin Hendryx-Parker (46:10)
No, no, it says male auth. I keep reading it looks like male auth, but I had to read it twice.

Carlton (46:19)
Good. We need to get

Joe on the show. Sorry, Calvin, before you go. We need to get Joe on the show because we've recommended his projects, you know, a number of episodes running. I think we need to hit him up and interview him.

Will (46:28)
Yeah.

Calvin Hendryx-Parker (46:29)
Yeah.

I put

a couple projects in here that I'm interested in right now because I'm building a little side app for the family. And one of things I've done is I've made it multi-tenant and I wanted to build, deploy it to the world. So this is the thing I was talking about where I was using fast API and CloudFlare for the front end, but being able to keep random bots from creating a bazillion accounts in your app is pretty important. And so there's a project out there called disposable email domains, and you can use it across multiple languages, not just for Python.

but it has basically a blacklist or blocklist of bogus email domains that bots typically sign up with. So you can actually reduce a tremendous amount of your account creation spam by putting that into your middleware or your pipeline to basically reject both disposable or bogus email domains. The second one is the project from Cloudflare itself called TurnStyle. It is a free privacy-focused capture replacement. You don't have to be a Cloudflare customer.

or use the Cloudflare frontends to put that in place. But I really appreciate Cloudflare's dedication to security, privacy, zero trust technologies. I feel like they got my best interests at heart, given the type of tools that they are putting out there into the community. So check out TurnStyle, it's a drop in. It will detect based on browser behavior, your behavior. Most folks won't see it when they go to your forms. If you're...

browser looks sus or you're a bot, you will get a captcha in its place.

Carlton (48:00)
I'm going to recommend, I saw a project came up called Django Modern REST, is from some of the people involved in the Django Stubs project. And it's another take on a REST solution for Django. know, we've got REST Framework, we've got Django Ninja, there's, I don't know, Farhan put out one, Emma's put out one. Here's another one. But the take here is Types and Async Support is the headline that they've gone for there. But I wanted to put that out as, know,

just in case you felt that we didn't have a rest story in Django that there's yet another one for us. It's a fertile time, think. People are picking up the mantle of, know, okay, let's solve this. Let's push forward. ⁓ yeah, Django Mantles.

Calvin Hendryx-Parker (48:31)
Thanks.

Will (48:44)
But I'm Ching. Yeah, but I'm Ching. You're too modest,

Carlton. anyways.

Calvin Hendryx-Parker (48:48)
Ha ha.

Carlton (48:50)
But yeah, so there's another one to check out. As I say, it's by the people from the Django Stubs project and they put a lot of work in there and they're talented people. So, you know, it's worth having a look. Django Modern Rest.

Will (49:00)
Yeah.

As we depart, Calvin, is there anything we didn't ask you you wanted to mention?

Calvin Hendryx-Parker (49:07)
Now this has been a great conversation. I really appreciate what you all are doing in the community. I want to send my greatest gratitude for the both of you. Thank you so much. ⁓ yeah, my again.

Carlton (49:15)
Thank you for coming back on.

Will (49:17)
Yeah, thank you for

sharing real world insights mixed with exploring, which is a tricky balance to do, but I see you doing it.

Calvin Hendryx-Parker (49:25)
Yeah, it's

so fun to be curious. I think that's what most folks need to do more of.

Will (49:31)
Yes.

Carlton (49:31)
Yeah,

no, that's a good moral to take out.

Will (49:35)
All right, with that, we are at DjangoChat.com. We're on YouTube, links to everything in the show notes, and we'll see you next time. Bye-bye.