Transcript: Deploy on Day One - Calvin Hendryx-Parker
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 sixfeetup.com.
Hi, welcome to another episode of Django Chat. I'm Will Vincent with Carlton Gibson. Hey, Carlton.
Hello, Will.
And we're very pleased to welcome back Calvin Hendricks-Parker from Six Feet Up.
Hey, Calvin.
Thanks, Will.
It's nice to be back here.
Welcome back on the show.
So we were just discussing, last time you were on, you were making the pitch for this
Scaf Kubernetes approach that you have that Carlton is especially hesitant about.
So maybe give us the context and then we'll dive-
No, no, no, no, no, no, no, no, no, no.
I'm not hesitant.
Wow, we're really, really, really jumping right in, like both feet.
Here we go.
Let's do this.
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 because i think this was you know at least a year maybe two years ago since
oh i mean this is 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 you know 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 we've taken what we thought were some of the best pieces from here and there and combine 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.
I mean, this is a dream even anywhere,
like every startup, every new company.
Yeah, it's hard to do.
But I think we've done it.
I honestly believe that the framework
we put in place with Scaf.
So Scaf 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.
So it used to be using Cookie Cutter under the covers.
And so it 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 SCAF implementation or a Wagtail SCAF or 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 maybe more sophisticated projects where you need you
know you've got a mail service like so we got mail hog on the back end 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 redis cache or valkey and now you've got postgres on the back end and so it's 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 you know day
zero really a deployable event that i could you know build out a scaf project greenfield
and literally type scaf 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 i don't care piece for
where i put it is 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 i'm nodding everything you said makes total sense to me so far
because that that is levels of playing field something to think about like i've come from
the same journey many of you have like 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. I don't
compile kernels anymore. Those just work for me out of the box. Or I use my Mac because it just
works. I don't care about the kernel in 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.
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 Loudsword platform to do Python Web Conference as a personal passion project.
And at that point, I picked, like, how do I deploy as quickly as possible?
It's my own thing.
It's what 6VIP is building.
We're not beholden to any other customers, you know, 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, you know, 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 slight edge cases here and there um you know
there there were essentially I always go back to xenopython and if you think about xenopython
the simple is better than complex but complex is always better than complicated yes 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. And even if you write plugins to,
say, for example, Django Simple Deploy, you're now still dealing with different abstractions,
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. And any place I want to put them, I can just throw a container.
I mean, in Amazon, you've got 21 different ways to run a container. And there's a reason why it's
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 a container. So then the next logical step
is how to orchestrate those containers
and how to do the same thing locally
that I would do in my production environment.
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?
Because I recall, you know, Docker, especially,
Docker like 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 got super excited about it, I realized for my students, let's call them, a lot of them were like, I can't run Docker in a meaningful way.
If you've 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.
But if you can run, originally we've developed Scaf with the Kind Kubernetes distribution in mind.
So for those of you who don't know, Kind is a way for Kubernetes developers to run a local Kubernetes in a Docker container using Docker's Docker Desktop or OrbStack 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 an 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 it has a Talos control plane running.
You only interact with it over APIs.
You cannot SSH into it.
So again, limiting security, vulnerability, surface area.
But Talos 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 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 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 you know in develop mode locally
that is what you're doing it is and it runs very very fast uh and with again less overhead so that
i 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 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 i'm sorry carlton one more so with all that said
if i'm if i'm a new employee or working on a new project at six feet up by the way we should
mention you're hiring right you're 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 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 sixchev.com slash careers that's the last plug i will give for the
company yeah no i prompted it yeah we'll do that again at the end because that's a good thing i
mean you you do you work remotely wait i didn't get to my no no no we'll come back to that we're
doing the joke we're doing the fact that calvin's hiring now we are fully remote we only have we
don't have an office we are fully remote first company i've seen some amazing photos of the
company get together i don't know where in the caribbean right as well no correct we do a once
a year uh 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 so wow okay that
sounds like i might apply that sounds well so my question to you was with all this complexity
as a new hire what is that experience of okay so i'm sitting in boston in a laptop what what is
experience for me, right? Because obviously all that work is to make it simple to do this same
day deploy. What does that look like? So Scaf builds out a skeleton onto your file system as
a greenfield 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 an actually till our scaf will 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, um, it's
not a pain I'm, I'm fully sold on, but I see the promise of is that I can see the, if I've
got Durham, if you're not playing with Durham, it's a lifesaver when, especially when doing
all these API keys and environment variables, I see the end of my project directory, it
will bootstrap the Nix environment and make sure that all my development, uh, 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 eyesort, the right version of you name,
whatever tool poof magic happens i type tilt up the cluster you know blossoms into life and i
actually end up with a running you know instance of whatever project i'm working on i may have to
go grab some data from some place but typically we try to have a scaffolding of of data you know
just bootstrapped into the 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.
I mean, it's whatever you want,
whatever you're comfortable with.
Like the power of senior developers.
Carlton, shout out.
You could use BBEdit.
I mean, I was an old school TextMate user
at some point in time.
Yeah, yeah.
I like TextMate.
Yeah, sorry. And that's relevant because Carlton and some of the steering council and board are just looking over the Django survey that's going to come out at DjangoCon Europe.
And there's, you know, figuring out the questions around. And there was one about BBEdit, but Carlton, based on historical, it has to go in the other category because it was less than 1%.
Yeah, yeah. No, no, no. That's fine. It's like, which editor do you use? And every single year I take other BBEdit.
Wow. I mean, I'm a longtime 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 following got to a point where I felt like it was reasonable. The VI emulation was very good. So I felt productive.
It was a funny story because it was a PyCon where I did a lightning talk.
And at some point, 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 just got weird.
It just goes from worse, bad to worse, right?
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, there's way, I sort of suspected, but there's so much more involved.
But the ID has never been front and focused.
Like the ID 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 iSorts and the Blacks and now Ruff.
I 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 outside edges and make sure that I'm still delivering well-formatted good code.
And I 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 there's going to, that's going to come a time.
It's out there.
Winsing, Carlton and I are wincing for audio viewers.
I mean, yeah, I mean, maybe.
I certainly wouldn't say no, but.
We care about outcomes.
We care about the, what the users, the end users,
the people who are wanting the value out of the software,
we 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.
I still enjoy, I mean, 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.
Well, that's the point, right?
Is they can write okay code,
like absolutely no question they can write okay code.
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 them like a hawk if you want oh yeah good architectural
decisions now when you say we won't look at the code at all that i wince because i think
but you know i 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 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 by pattern when there's going to
be a future problem coming to bite you later that's harder for people who haven't had that
experience to to grasp or to code with so there i think there's a lot of people out there creating
tech debt today that can be could be avoided if a good senior was in the loop how do we train how
do we instill like 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 that 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 not i still think it's a problem though that
we don't have that there aren't juniors in the ranks i don't know how we bring them through like
I benefit from people going out and working in other places and experience 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. There you are. There's your hiring ad again. It totally is. Yeah,
it totally is. Yeah, it's true. I mean, I've hired some of the 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 okay i'd so given that you said that about um hiring seniors and that you're all
very skilled and um we'll come back to the ai question i think momentarily i just want to cut
back to scaf because everything sounds wonderful and i love the setup and i love that you've
resounding endorsement from carlton for scaf philosophically it cuts like absolutely the
opposite direction i can't i've spent my entire career 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 and and you know that 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 it feels like you're deploying i said
when we talked before about it feels like you're using a jumbo jet when you you just want the two
seats of 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 um full-on high-tech everything
approach to the and it's it's a good solution but the opposite end of the extreme is that is that
the the the nice craftsman's hammer right i i will agree with you the nice craftsman's hammer
i also i think this is i thought i thought i knew this was coming and i knew exactly where
this that i would be confronted with this opinion on on the topic and i i still believe
that having that same set of tooling in that local environment as into a larger environment
it it plays into the uh well i'll go back to xenopython again the uh explicit is better than
implicit and in many ways that the um i'll put this out there kubernetes with tilt is more complex
than a platform as a service uh it's more explicit and then through that explicitness it's just
documentation you can run is I think if I look at what you're just put you 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've 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 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 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 yeah and
there's there's something you said um you didn't say it here but you said before which is something
along the lines of kctl is like the standard api it's like this this one one universal and i rarely
touch it uh honestly uh you may think that but basing my whole opinions around development
environment developer experience on kubernetes means that i'm a kubernetes kubectl expert i am
not uh i know i don't ever claim to be although the llms are very good at telling me how to go
tail my logs and check for running nodes and these kinds of things but that's about the maximum i do
like i the the the other key bit of this is that and i know it sounds like overkill is having cicd
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 you know argo will reject it before
it gets to deploy it out into any 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 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 overhead and load on my part as a developer to think about it because it just
runs like these things just happen if i go and you 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 a dummy little pet project i will go use the full-blown
scaf uh template that that said that there is a cost to the that thing to run a base scaf in
kubernetes and like amazon may cost you over a hundred dollars a month uh 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've actually been playing with the fast api cloud i got an 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 was the 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 fast api which is running lily fast api deploy and poof magic happened there and i i threw up a
database in neon which is databricks is hosted postgres as a service okay it's all free tier
this portion of django chat is brought to you by six feet up what's stopping you maybe it's an
application that won't scale or an ai initiative that just isn't delivering that's where six feet
up comes in with deep expertise in python django and ai they solve hard software problems modernize
platforms and get teams to market faster their impact speaks for itself automating health care
pipelines for hospitals helping nasa explore pluto building severe weather prediction tools
and applying ai to connect farmers with vital crop data when the stakes are high and the problems
are hard six feet up is the partner that delivers see what's possible at six feet up
right and they're targeting that kind of um yeah that meeting heroku space right that
well which is a good place to be right now yeah right okay yeah well i i gotta i gotta ask you
calvin so i so carlton and i were just at this pi tv event in amsterdam um and sarah boyce jango
Fellow gave a talk on Django has a marketing problem. And it was a great talk. We'll have
links to it. But I wonder, as the Django community with FastAPI, I don't feel like we have a great
story for, you know, of course, we say they're different tools, like Sebastian, the FastAPI team
are great. But I don't think we've nailed the marketing pitch for why Django. And I'm about
to go to PyCon US. And I'm going 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 it's it's hard to argue with the batteries included
aspects of django and i i feel like we've maybe i don't know if it's a lot of the projects 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
marketing problem it totally is i i think that they're right um on that that that point that if
I mean, I think HTMX plus Django is a really fast way to solve some problems without building
your API twice. 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 is that a that's powerful that's a powerful way to get an idea across to your client
your customer to internal stakeholders without you know 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 you're gonna recognize that there's a absolute usability
need or user experience need for those level of tools but it may be that htmx 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. It's got all the helpers, which really, I think a lot of folks don't go explore
the docs enough. Well, 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. Well, they've missed that in the docs.
they miss the html helpers and those those bits that you feel like i don't know you i think a lot
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 see we've seen that a lot over the years with multiple frameworks but django seems to particularly
have good docs and good good helpers built in uh more folks probably just need to get exposed to
them i mean i think that that's an interesting part about like conferences too is you go to
conferences and i think people like 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 it's
fairly lightweight it's lightweight and fast to get started but then you're you're on the hook
to build all the stuff all right no disagreements there well yeah and it's just i think but 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 um but a great whether they like to not fast did a good job as a as a april fool's joke
on marketing too yeah well and and david lord has been doing a heroic job for oh my god i don't know
10 plus years uh on everything so you got to find the david lord to keep your the longest running
april fool's joke in the history of april fool's jokes pretty much um all right one more and i
promise i'll shut up carlton um i wanted to ask you calvin about typing because this is
i don't know if it's hot but it's it's on everyone's mind and i you know pie charm 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 um 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 so where do you fall i fall on i
see people trying to turn python into java and arguing that llms want static types um but what
do you see oh boy that that's a hard one i i kind of i'm a bit of a person of two minds like uh 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 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 in
when 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 i like the fact that i'm not forced
to use it if i don't want to um but it's pretty nice uh i think for ide's 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
um in in general um it's nice because i don't have to type at all like i don't have to literally type
it like with a keyboard um but the typing can get added for me and then i can have static type
checks and i can have the the you know my my test environment and my integration integration
environment all can validate that what was said is true so from a convenience standpoint i'm still
like i love the ability to 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
who feel like they need that level of safety which is probably right they're they're absolutely right
if i'm building software in a life or death health care space or dealing with people's finances and
money or those kinds of things you need that level of extra belt and suspenders it's guard rails
isn't it it's more guard rails around the the code can go wrong it's proactive yeah it's it's
you're definitely being proactive about your intent when writing the code
yeah and this is up to you though yeah 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 push back there is i
don't i don't want us to let go of the dynamic patterns 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
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 unhelpful type hints on on the sort of core
highly dynamic bits of django and you know so that's my kind of take is like absolutely type
integrate but what's your opinion that python has dynamic powers let's not just what's your opinion
on the implicit return on what sorry like implicit returns in functions like in methods what like
returning none from yeah right yeah well just not if you don't even type it it's just going to do
that for you yeah i feel like that was a mistake like it was it was less implicit than it should
be explicit it's less explicit yeah i mean i've that's not my one particular bug pair
no no money there but you know it was convenient obviously as a new person learning a language
i didn't forget about you know 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 yeah and then you get some error none type
is not fallible later on and you're like why have i got a none type here it's like i didn't return
anything from the right yeah yeah yeah no it's a rite of passage that's how you earn your senior
stripes right true true true true sure sure sure so yeah that's the kind of thing that a type
checker might uh might pick up and i the other thing i like is of forcing you into a um into a
match statement to handle optional so you've explicitly handled the none case and i i think
those kind of patterns that we pick up from russ say or and try and bring across are lovely and
they do add value but you know um dynamically creating a class at runtime and you know using
it to do superpowers in a very few in a very concise way is not something we should just walk
away from right in my in my right yeah i think it's super powerful especially in a data-driven
world when you want to be able to create like a data data classes for example like that
yeah yeah well that leads in in my head anyways to the next one which okay ai i'm going to ask
you about it. So you've published on the company blog, a guide to AI coding assistance. I can see
that you seem to be getting a lot out of them. And you sort of touched on this, like, what are
you finding are 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. Just the security and the hands-offness,
I'm not quite there yet. And 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? I mean, I think if you've been following along, I, I, I, 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, and, and the, the, the ground moves very, very quickly underneath you. It's
like quicksand and it's, it's, it's hard to follow. I think there's a lot of fear of missing
out uh from folks which maybe why they're calling you a dinosaur i think that'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 um that you may have side effects later so 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
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 a framework for a little
piece of this or that those those are the less interesting part of the problems and so we can
we can assign those easily to the agentic ai's to take care of that piece or to to build you know
most of what we're doing we're becoming very good at uh specifying and planning and using tools like
spec kit which can integrate into all most all the agentic ai tools that are out there that's
what i'm talking about kind of most recently on the linkedin post spec driven development it's
yeah yeah so spec driven development 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
cloud.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 should be true for this project and so it's a more
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
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 output, not the outcome. Like where 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 on the humans are still understanding
what the requirements are we're still trying to document those requirements it's 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 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 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 we've been leveraging the figma make platform which is an agentic
version of figma to build prototypes um relatively quickly for even prospects people who aren't who
haven't even signed a contract with us yet we can basically help convey understanding at that level
with them and then we take it into building the real the real tool using you know those are those
are high i think actually for us tools like lovable bolt.new replit are going to 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 make it real uh i
think a lot of people recognize relatively quickly those tools have been given system prompts to make
you very successful early on in building something but i don't they lack i believe in the success on
deployment in the 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 they're going to still use it we're going to 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 high
highly communicated to us what the needs were what the requirements were what the 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 and you talk about that pre and that point before signing a contract because it
it's there's always this kind of um like almost mexican standoff where you say mexican standoff
these days i'm still allowed there's this i don't know i don't know if it is if it's not
um like but there's 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 you know 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 yeah at very low cost then you can do that during the conversation
yeah we're seeing less and less of that contention and now because of these tools
that are available you still have the problem though that the client's like let's just ship
the prototype well you know i had to be very good about explaining reality to people there's a lot
of education that goes on in my world and 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 keynote where 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 it's doing a disservice like
people should show the realistic version of these 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 you know the outcomes yeah i like that if i may i might switch to books and
projects time okay so i think we gave you a heads up i'll go first just to break the ice
uh i'm actually not doing a book and carlton i forget if you've done this but i'm gonna say
i did le monde diplomatique so you can okay okay right i'll take i'll take london review of books
which i owe to carlton introduced me introducing me to it it's basically a novel every other
fortnightly um but it's pretty for me in a world of uh 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 in 16th century whatever and they find ways to make
it interesting so i feel i would feel better you shared that and i immediately went and read
like three three little like novels and i was like this is incredible oh my gosh where'd the
time go like it was really that it sucked me in yeah oh good yeah um there it was that's my
that's my shout out uh either either one of you who wants to go go on california okay uh 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 uh one of the so each year uh the team gets a book from gabrielle
who's our ceo um and my co-founder at the team and said two years ago i think it was we gave
everyone the book big panda and tiny dragon um and it's a really really fun animated story of
a journey of two friends who go places, see things. Uh, but it's really the, the one big
theme in there is that the slowing down in a world of, uh, that pushes constant busyness
is something that you, 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's a lot of times people
talk about, um, it's not about the destination. It's about the journey. And then this book takes
set 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 ready to tear up but 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 focus on your friends and that that one's
really i love that that makes me feel good there's a couple books in the series but definitely get
the first one you won't regret it and you will be a better person for it okay super we can't
that's up and up there in our top book recommendations for the for the series um
i'm gonna um just show you um this book here called universal principles of typography you
probably can't see the principles bit because it's like got a silver background there it's by
elliot elliot j stocks who is a font designer he's worked for google he's worked for adobe he's
worked for all everyone and it's a hundred key concepts for choosing and using type and i've
it's a couple of years old now and i've had it on the shelf and i've i remember talking about it
when i first got it but i pulled it off the shelf the other 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 a it's
an utter delight of a book and you know for us developers who you know all design it's 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 stocks and um you know typography is
95 of design right you know i don't know if you know this but i 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 oh so you're one of those ones yeah okay right yeah so that's a cool
book no it is a cool book i really recommend it um you know as i pulled it off the shelf
and 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 it.
Nice.
All right.
Projects, I'll just go quickly.
I'm going to 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.
And you have poor typography that actually looks like Django Molloth.
Yeah.
Oh, did I?
Okay, I didn't.
No, no, it says Molloth.
I didn't mistype it.
The Arial.
Yeah, in our little notes, the Arial font, it does look like Molloth.
It looks like Molloth, but I had to read it twice.
We need to get Joe on the show.
Sorry, Calvin, before you go.
We need to get Joe in the show because we recommended his projects, you know, a number of episodes running.
I think we'll need to hit him up.
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 the things I've done is I've made it multi-tenant and I want to be able to deploy it to the world.
So this is the thing I was talking about where I was using FastAPI 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
block list 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 Turnstile. It is a free privacy
focused capture replacement. You don't have to be a Cloudflare customer or use the Cloudflare
front ends 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 interest 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 forums.
If your browser looks sus or you're a bot, you will get a captcha in its place.
Okay.
Well, that's a good recommendation.
I saw a project came up called Django Modern REST,
which is from some of the people involved in the Django Stubs project.
And it's another take on a REST solution for Django.
So, you 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, you 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, I think.
People are picking up the mantle of, you know,
okay, let's solve this.
Let's push forward.
Oh, yeah, Django Mantle.
Yeah, but I'm changing.
You're too modest, Carlton.
But anyways.
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 for modern rest.
As we depart, Calvin, is there anything
we didn't ask you or you wanted to mention no this has been a great conversation i really appreciate
what you are doing in the community i want to send my greatest gratitude for the both of you
thank you so much and thank you for coming back on oh my yeah thank you for you know sharing real
world insights mixed with exploring which um it's a tricky balance to do but i see you doing it so
it's it's so fun to be curious i think that's what most folks need to do more of yes yeah no
that's that's a good moral to take out of the show all right with that we are at jango chat.com
we're on youtube links to everything in the show notes and we'll see you next time bye-bye
thanks again to six feet up the python jango and ai experts you call for the hardest software
problems from scaling applications to simplifying data complexity and unlocking ai outcomes