Transcript: Self-Hosted Open Source - Michael Kennedy
This episode is sponsored by Mailtrap, an email delivery platform that developers love.
Try for free at mailtrap.io.
Hi, welcome to another episode of Django Chat, a podcast on the Django Web Framework.
I'm Will Vincent, joined by Carlton Gibson.
Hello, Carlton.
Hello, Will.
And we're very pleased to welcome back Michael Kennedy from TalkPython.
Welcome, Michael.
Hello, hello.
It's amazing to be here on your show.
Thank you guys.
Good to see you.
Thank you for coming on.
You are one of the original inspirations for this podcast.
I was, I think, a guest on yours, and we were just talking off air.
That was over five years ago.
So it's uh time flies.
I can't believe it's been five years.
It's just meant.
I know.
I know.
But in fact, I said talk python.
You you have this whole constellation of things now as well, right?
You have Python Bytes, you have your training courses.
I feel like I'm missing something.
Is that the full suite of things?
That's pretty much it.
Yeah.
A tiny bit of conference speaking and stuff, a little bit of YouTube, but primarily talk python, Python Bytes, and the courses around it.
So you mentioned conference week.
I saw you flashing by on the news this week or last week about some keynote somewhere exotic.
Yes.
Yes, I had a wonderful time.
I got to go to uh give one of the keynotes at uh PyCon Philippines this year, which was very excellent.
I think I'm over jet lag, and then we had daylight savings, and so you know, that's that's that means
does that mean the kids are get up earlier or later?
I can't remember.
They are forced to get up earlier than they want.
Right, okay.
We lose an we lose an hour, yeah.
But it's glorious.
It's glorious.
I live in the Pacific Northwest in the US, and it is like we have two seasons, we have summer and rain, and also that comes with darkness.
It'll be dark at like 4:30 in the winter and rainy and and the sun was out till past seven last night.
Um I feel like summer's already here, even though it's not.
So no regrets.
Yeah, it makes a big difference.
I'm I'm I'm on team daylight savings.
Let's go.
So, how did you go in the Philippines?
Tell us about your keynote.
What was the what did you talk about down there?
The keynote was super fun.
Uh uh it was called The State of Python in 2024.
Oh, that's good.
Because I wanted to ask you about that.
Like, what are your hot takes, Michael?
Go on, give
us your hot takes.
What are my hot takes?
Well, it's you know, I think it's it's interesting to consider that in the Python space, it's so distributed, the directions, and it's it's like brownie in motion almost.
Like stuff is just moving around, and like whatever channels it takes, and where traction uh gets for various projects, that's where the future goes, right?
Even amongst the core devs, there's a bunch of them working on things.
So if I went to a keynote or you went to a keynote on at Apple, Tim Cook, you know, Tim Apple would come out and he would tell you this is what we're doing with our new stuff, and this is what the team has been doing.
You go to Microsoft Build or Google IO, there are people who come out and say, Here's the direction we've decided for you and us as a community.
Hope you like it.
There's none of that in Python, right?
But partly because who's gonna speak for the 10 different web frameworks and the 1,000 different data science things and all that kind of stuff, right?
So I tried to put that together.
I tried to say, like, all right, where has Python been last year?
Where what's important, and where is it it going in the future?
So fun fun stuff.
Okay, so my I mean, one question one not question, one problem I have.
You know, I'm quite involved, but I'm very involved in Django, and I don't know anything that's going on over there.
And all of a sudden I'm like, oh wow, there's this brand new thing that how do you keep up?
How does how does one keep us kind of overview of what's going on in the different areas?
I have a bit of a cheat card in that regard.
Yeah, well, you got Python bytes.
Yeah, I got Python bytes, right?
I got talk python and I got python bytes with talk python.
I can I can dive into deep topics.
Like one of the big things is you know the whole astral UV stuff.
Yes.
That's going out, right?
And so I'm talking to Charlie Marsh in three hours or something about UV, right?
So I get to ask all those questions and kind of figure that stuff out.
But then Python Bytes, it's like six, seven, eight topics that you've found every week, and you're gonna not just get to you have to find another six for next week.
And so it just keeps you kind of on top of always searching.
But for the for the for the rest of us, we should just listen to your podcasts, right?
That's yeah, it's
how we keep up.
Take it on coast.
Take it on, yeah.
Yeah, exactly.
So do you we talked about this last time.
I mean, when you're so involved in talking about and producing things around Python, uh do you you still get to code a little bit, right?
Because you had recently well, we're gonna we're gonna talk about infrastructure and deployment, but like in terms of actual Python Python, do you still get to keep your hands dirty?
Yeah, it seems like I I would just be busy talking, right?
But there's a ton of infrastructure uh and stuff going on.
Um there's kind of a whole DevOps side, but you know, the the talk Python training stuff is it's it's basically its own SaaS, right?
Evolving over time in lots of ways.
I just noticed um I was doing some stuff in GitHub.
I'm I'm trying something different.
I'm always busy, you know.
I I talked about all these different projects, and then I have people working on the courses, and I've got you wouldn't believe how much email, and it's always just stuff pulling me away.
And so I have like big ideas for stuff that I would like to add, and it's always like, well, maybe next week.
So I'm I was working on something I'm calling platform week, where turn off the email, turn off all I have no meetings, who knows?
Maybe even I'll go stay by the beach or something.
I'm just kind of more alone.
I haven't decided, but just sit down, come up with a plan.
Like if I had 40 hours to just write code and and sort of tackle the bigger problems that I've been thinking that I should, what what would I do?
So I was working on that and I realized just for the courses I'm on, issue 1690 or something like that.
It's mostly me, but also a little bit, uh a little bit of stuff is in there around, say, like our mobile apps where I worked with another developer and things like that.
But that's a lot of code.
Yeah.
And what's what is it now that it keeps you excited?
Like when you're you're you're coding when you're talking actually just focusing on the code side.
What what are the exciting bits that you you like?
Oh, yeah, I like doing that, or I like this.
Yeah, there's just always stuff to learn.
There's always stuff to get better at.
You think, okay, I've really got this web stuff nailed, and then HTMX comes out, and you're like, oh I gotta be ever this changes everything, right?
I know you both are big fans of that.
And yeah, um, you know, like, okay, I I got HTMX nailed, I got I got the the web stuff nailed.
Oh, maybe we could deploy it in a whole way better way.
This whole thing I've been doing, uh, you know, is I could I could completely change that as well.
And it's it's never ending.
I I think the fun thing is, is it's every time you kind of go through that process, it's better.
Like Python is better, the web frameworks are better, the infrastructure and tools like databases and web servers, all the way to the host, like the whole spectrum is just like, oh, this is even cooler than last time I dove into this aspect of it.
And so it's it's worth getting out
three times.
Yeah, the the excitement is like last few years it's been like, oh wow, we've got you know new layout things on the front end, we've got you know CSS finally catching up with where we wanted it to be, and you know, and then on the back end all the async thing stuff has come through, and it's it's always fresh.
Yeah, absolutely.
I just just yesterday I talked about Mountaineer, the web framework, and a few weeks before that was fast UI, not fast API, but fast UI from Samuel Colvin and team.
And those are those are both super interesting projects.
So it's like Python deeply integrated with the React in interesting ways.
I don't do a ton of React, but you know, like when you write a function in your web app in Python in Mountaineer, it automatically creates like an API connection for you and it generates a TypeScript, type safe like front-end thing to call that and keeps them in sync.
There's just a lot of a lot of neat stuff out there, right?
Well it's good to have that attitude, right?
Because I think you can also, after a decade plus, get in the you can fall into the trap of thinking this is just reinventing what I already know, which is a little true, but it's also you know generally better, which is why people are taking the time to reinvent the same things.
Yeah.
But that might be more where if you you know if you're three years getting really good at something and then you know a manager says we're switching and get up to speed, and you're like, ah I I have a feeling that's more where that that feeling comes from, or you're you know, the market changes and it's yeah, it can take a little time to feel like you're catching up, even though you've been deeply in one of those areas.
It it can, and if you're if it's not your choice to go down that new path, it can be frustrating, right?
You're like, ah, we we were really good with just server rendered code.
What are we doing?
Like, why do we gotta change all this?
And honestly, I still think that that's that's true.
I think it's it's pretty amazing, which I guess is why HTMX is also really interesting.
It's not as bad in Python, though, right?
I mean, we could be in JavaScript, not knocking the language necessarily, but it just changes so fast.
The lifetime, you know, and and backwards compatibility seems to be something that people are like, uh, maybe if it's convenient, you know.
I just saw that they're working on alpha on a tailwind four.
I'm like, all that does is fill me with dread.
I'm just like, okay, what is not gonna work anymore that I don't quite realize?
I'm quite excited about
10 classes are gonna break.
Yeah, I'm quite excited about the Tailwind Fourth because um it looks like it's bringing it a step closer to CSS.
It looks like you know, using native layers rather than the Tailwind layers and things like that.
So it might be, you know, that might be nice to because it's not the case that you have to stick with your tailwind forever.
You you don't have to do everything in in JavaScript, right?
But you can work it back into your style sheet.
And if they go closer that way, I think it might take away a few of the um kind of religious criticisms of it.
Excellent.
Well, it's it's looks exciting, so we'll see.
Will, are you a tailwind fan fan?
Do you do you believe in Tailwind?
I have a redesign of my main site that is not publicly live yet, that's in Tailwind.
But I have to say I'm not a Tailwind expert.
So I I worked with designers, imagine that, who did an amazing job on this.
I think we talked about that uh on Mastodon.
Uh yeah, maybe.
Yes, that's right.
Yes, you were you were looking for um, yeah, I used uh YupGup, um who are great, who do a lot of work in the Django space.
So I highly recommend designers.
They're a lot cheaper than programmers, and it's um so yeah, so I've I mean I I definitely wouldn't say I'm super comfortable with tailwind, but I'm sort of really happy about that.
Yes.
I have enough to deal with with you're tailwind interested.
Tailwind curious.
Yeah.
Yeah, curious.
To that point of just like I like I'm I'm pretty familiar with bootstrap.
I've used a lot of bootstrap, and there was a discussion of like, should we use bootstrap?
Should we use tailwind?
And it's like, well, I know that whatever it is, we'll probably have to change it in five years.
And Tailwind seems pretty established and a little easier for me to maintain once someone else does it, um, but I don't have to worry about architecting it.
I mean, because so that was the decision.
And you know, it's uh it's a little annoying to have to have a separate server running to uh uh you know have MPM going, but it's not the end of the world.
Like uh Yeah.
Yeah, that's true.
It's not the end of the world, but you do have to figure out okay, well, there's these little scripts like watchers and stuff I've gotta write.
Yeah, yeah.
And then deploying it like is you know, it was a day to like fully figure out like okay, like even just on Heroku, which is still like what I use, like it's like okay, wait, where's the thing for this?
I mean, that's the you know, we we we both work on courses.
Like, I'm like, how does anyone figure this out?
Like, why why does this take so long?
Why isn't there just like an answer?
Like, I will pay money for an answer.
Like, someone just like save me two hours for 10 bucks or 20 bucks.
Like, yeah.
But I guess it's just the change is too much, and maybe it's not worth anyone's time.
But um, so anyways, so yeah, I I'm trying to fight the don't change things attitude on all this.
Oh, just just on that.
I saw a thread this I saw a thread this week and it was from a frontender, and they were like, look, all I hear is front end's too complex, front end's gone off the complexity cliff, front end's crazy with its complexity.
But what were it?
They're like their their argument was well, we s were what were we supposed to do?
Just sit there and not look for the better solutions, not try the better things, not progress.
And at each step, their argument was that you know it made sense that we brought in Webpack.
It made sense that we switched to this, it made sense, and you know, they were just searching for a better solution, and it's all right, it's all right for us Python desktop, oh you JavaScript is you crazy with that kind of shit.
I think well, I think it's two things, right?
It's the people pushing the envelope are large companies with big staff who have maybe needs that the rest of us don't have.
Um, so does a your average website need all these things?
Probably not.
Um, and at the same time, you know, selfishly, we all want to feel like we understand everything going on in our web app, but obviously as it matures, that becomes harder and harder to say with a straight face.
Yeah, yeah.
It's probably true also of the big teams.
It's probably more true of the big teams that they don't not the people working on don't necessarily understand everything, all the moving parts, right?
Because you got teams specialized team members that deal with like hey, hey, how do we keep it in production?
Right, right.
Well, um, well, maybe that's a segue to infrastructure because that's uh one of our big topics, and you have a number of notes to dive in.
I guess have you you've changed your infrastructure or you're thinking about it?
Where where does all this research come from?
Oh no, this is all this is done.
This is is kind of the the the infrastructure equivalent of what I refer to as the platform week.
Like I'm just gonna take some time, focus on this problem, put everything down, suffer the backed up inbox later, and try to try to dig my way out and and and get a bunch of changes.
I think this was how is it what was really the impetus for this?
Yeah, I was gonna ask how why do you why dive into this, right?
Like what where is that point where you say, you know, because you're you you have traffic, but you're not Google level, right?
Like how do you decide okay it's worth it's worth customizing things beyond just you know paying a platform as a service bill.
Yeah, absolutely.
So just to I I don't know that I would say it's big and it's not totally small.
I'll just give people a sense.
Uh, we do through all the talk python things, we do around nine million Python-backed requests a month, and we do about 10 to 12 terabytes of traffic a month.
So it's a decent amount, but it's not, it's certainly not Google, like that's a minute on Google or especially YouTube or something, right?
But it's a it's a non-trivial amount of sort of traffic, right?
So for a while I had so let's take a step back.
So for a while, at least in the early days, I kind of had this what I think is not really the way anymore that a lot of uh people think about.
But I had this belief that the cloud was small commodity things, right?
The cloud is the cloud is uh best at giving you a bunch of small little things.
They're super cheap.
I can get a $10 thing here and it's uh 12, you know, $12 thing there if I want to optimize the CPU to be an Intel, whatever, and so on.
And I can piece my stuff together with that, right?
So I have a server for this, server for that, I got some backend servers, I got some failover.
So I got and I ended up with like eight servers sort of in that constellation of things.
And I thought, okay, this is great.
So I've got the main stuff, I've got failover servers.
If I need to do maintenance and say, like the kernel is patched, uh, and there's a security patch on the main one, I've got to reboot that server.
There's not too many interesting trics I can do besides just making it reboot.
And so what do you do?
So do you use some kind of load balancer to switch it over to the the cheaper backup one or you know something like that, right?
That was kind of how I was doing things.
And and it real I realized like I've got yeah, go ahead, go ahead, Carlton.
I just wanted to bump in because like you said nine million requests a month, so I just quickly did the math.
There's about six thousand requests a minute or something, it's quite a lot, right?
So you can't just reboot your server because you you've lost six thousand requests.
It's yeah, it's a lot.
It's all right if you're like just running your blog and it's like oh one person maybe.
Yeah.
Anyway, carry on.
Sorry.
So you so how do you handle the fallover and how do you handle the low pancer you were saying?
But yeah.
Um well, I was just sort of cycling between these servers and using, you know, sort of IP magic and stuff like that to, you know, sort of DevOpsy stuff.
But what I realized was one, I have all these servers to maintain, and I've got to patch them all, and it's just a bit of a hassle.
And then, I mean, you could make a platform as a service argument, that's that's certainly a thing.
And you could talk about Heroku, but there's advantages to not being a Heroku as well.
Um and then what I realized is, well, if you got to take the database server down as one of those things, they're all going down anyway.
You know, there's there's there's probably 10 seconds of downtime per month that's unavoidable unless I get into a more complicated database cluster with replication.
And now it's like, okay, I am not Google, I'm not YouTube.
It doesn't justify that level of uptime.
I'm willing to take 10 seconds of downtime a month.
Very rarely, like more if I screw up something.
But, you know, which does happen, but not that often.
But anyway, I'm like, there's kind of the single point of failure anyway.
And I've all these servers, and then that was one half.
And the other half was, and I think this is where a lot of interesting stuff is gonna happen in the conversation.
Here is there's actually a ton of open source similar things to what you might use, right?
So let me just give you one example MailChimp.
MailChimp used to be a cool little startup.
You could get your mail over there and you could sign up people and you could make a community, and it was amazing.
And then it grew and it grew.
And then it was bought by a financial company that just wanted to turn the screws on on folks, from what I can tell.
I'm sure there's people who don't just want to turn the crew screws, so no offense.
But it's it's got a slightly different business model, and it doesn't have that.
Like, like I'm supporting the small, the small person anymore, right?
And my bill is just going up like $100 every two months.
Like, hey, we've guess what?
Your bill is now a hundred dollars more sometimes because there's more subscribers, sometimes just because, well, we've added a new feature that you're not using, so it's a hundred dollars more again, you know?
It was up to like I don't remember, something like six six hundred dollars a month or something.
I was like, all right, this is getting out of control.
Like and so I realized there's like a couple of really cool options for just self-hosting something, an open source version of this.
All right, well, they've got these eight servers.
Where do I put this self-hosted thing?
Well, I'm sure not gonna put it like right next to anything else that has access to my database.
That because I I'm not in control of that code.
How much do I really trust it?
You know, I trust it, but there's trust it and there's putting it on inside the room with you, you know.
Like that that animal looks friendly.
Oh, it turns out it's really aggressive at night.
I can't believe it's in my house.
Like, what have I done, right?
Like that kind of thing.
So I'm like, all right, well, I need to set up something to kind of manage that, right?
Like, all right, well, maybe I need to set up another server, or maybe I should just this is ridiculous, and I should start using something like Docker or containers or something.
So, like, that's one half of the the story.
And the other one is I was interviewing or reading different people talking about like this cloud commodity, a bunch of small things.
Maybe that's not the right way.
Like, for example, I got a chance to uh have uh Mark Rasenovich, the CTO of Azure on TalkPython.
We sat down and we were talking, and he's like, oh yeah, we're we're moving towards more consult more big servers rather than a bunch of small commodity servers.
And they have they have some that are up to ridiculous levels.
Like single servers you can go get that are you know 1700 core machines with many terabytes of RAM.
And they every every time they put out a new one, they have a different adjective for it.
So it started out with Godzilla, then super Godzilla, and now the one that they have uh that's really big is like mega super Godzilla beast or something like that, right?
But they're they're running out of ways to describe like how ridiculous it is.
Um so so that in the David Heineminer Hansen stuff, like leaving the cloud.
I don't know if people have been watching that, but like similar thing, we're gonna get like a couple really big servers, and we're just gonna use modern software to sort of DevOps our way through this better than and so I kind of went down that path because I'm I'm like, all right, well, I want to take advantage of not just Python, but all these cool open source things for both running your code, for for extending services, for getting away from unfair SaaS to having not just unfair SaaS, but you know, your your GDPR
statement has here is this other service we're sending in your data to at a very high price, we pay for the privilege of doing so.
And then here is their GDPR statement and their cookie statement, and they're this and they're that, and it just it makes operating an online property a little bit of a pain, a little bit fraught with that kind of stuff.
Not to mention blocking, right?
Like if it's some kind of API endpoint that uses their domain.javaScript thing, and maybe that's blocked as tracking, right?
Uh, so there's just all these challenges of integrating with other people's stuff.
So there's a lot of advantage to running things yourself, but then you don't want to let the wild animal like into your house.
What do you do?
Yeah, okay, good.
So I want to so one thing I want to pick up on before we perhaps um switch over to the container side of it, is just on um hosting your own email list.
Is the big scary beast that they always wave at you is deliverability.
It's is getting your your email delivered.
And if you self-host, how do you handle those deliverability issues?
How do you Yeah, that's certainly uh a concern, right?
So I there I people should disentangle two things.
There's running your own mail server, and then there is running the database that holds the list of people on your mailing list.
And so, for example, one of the things that I chose, uh, there's a ton of them uh you could choose, but I chose something called Lispmonk, which is free, self-hosted, sort of Docker first type of.
I don't even think this one has a hey, you can pay us money.
Um listmonk.app.
Yeah, so when you go there, it says, well, how do you use the thing?
It right there, it says, okay, what you do is you literally uh use this, uh say create a Docker compose YAML file that has uh listmonk latest, and it also has um you set up Postgres.
I think it think it is Postgres.
There's basically two um two servers that you gotta run there.
Yeah, uh the the use of post uh Postgres thing and then just the web app, which I think that's written in Go.
Yeah, I'm pretty sure it's written in Go, but it doesn't matter because you don't have to think about it.
So you just go there and it says here here use this is how you plug it into your infrastructure, right?
As as part of uh your system.
So back to your question, Carlton.
Um that plugs into what people are probably already using to deliver mail.
So it has it like a drop-down for are you using Amazon SES, are you using SendGrid?
Are you using Mailgun, which you've already got your DKIM and PK, whatever stuff set up, and you because because you're already sending a ton of mail out of that, right?
Yeah, right.
Okay.
Right.
Because that's the thing, is that when you like running a platform as a service, you have your transactional emails already, you know, someone signs up, reset password, that kind of thing through let's say SendGrid, and then you can separately have your database that holds your newsletter, which you also send through the same what's what is it?
SES, what's what are they even called?
There, there's some acronym for
SES is the Amazon one, right?
Simple pools, yeah.
Simple email service, but I
there's something.
Yeah, I'm sure there's an alternative and uh an opposite of transactional email service, but yeah.
Yeah.
So they send it, they s they send the emails.
Yeah, the email sender.
Yeah, so Carlton, I'm not hosting my own mail thing.
That seems fraught.
And also it's not just yeah, exactly.
And my reputation is a hundred percent at SendGrid.
So as long as I'm well behaved.
Maybe it's 99.9 or something now, but
I gotta put on my old man hat.
Like 2010, when I was at a company called Quizlet, we had millions of users, and we had to do all the, I guess primarily transactional stuff that we sent a couple a couple marketing in quotes emails.
And it was just like just stored in like a PHP app.
And you know, it's basically impossible then, and it's worse now, to just send a million emails or two million emails unless you have this built-up reputation, right?
Because at Gmail Yahoo, like it's it's undoable.
And I think Mailgun actually had just come out of Y Combinator at the time.
But like, yeah, so like you can send them, but they're no one's gonna get them.
No, they're not going anywhere.
It's it's
it's a nice nice little gated garden there.
But but yeah, that's for anyone who's thinking I'll just self-host it all, like that it's not gonna go through because there are these guardians around reputation.
And if you get a certain number of spam, yeah.
This is actually this is what I tell like my non-technical friends.
I'm like, if you're someone's sending you email, just flag it as spam and they will stop.
Like they will hard stop.
Because unsubscribe is just kind of like a option, it's like please unsubscribe me.
There's no force there, but it you hit spam, their you know, their credit score gets dinged essentially, and they will automatically pull it.
Yeah.
Yeah, so I actually set up uh uh a thing that will listen to it'll set up a webhook that'll listen to unsubscribe events across different things.
And so sorry, and and well that's obvious, but spam requests and bounce requests and and those types of things that are not typically sending back responses.
And through Syngrid, they'll tell you, hey, somebody, somebody uh marks you a spam or something like that, at least on the major platforms, Google and Microsoft and stuff.
And so you can then unsubscribe them so you don't keep sending it and keep adding to your bad score.
And so that's right, that's some of the interesting things that you can do.
Uh it took a little bit of Python code to make it happen, but
it seems like that should be built into one of these services, right?
It's built into this listmonk thing, but it somehow doesn't come back from Sendgrid correctly.
I I don't know.
And I'm like, it's m it matters enough that I'm gonna just take an hour, write a little API that just listens to this email doesn't like you for some reason.
Unsubscribing.
No, and is this primarily this is for like marketing emails as opposed to transactional?
Yeah, exactly, yeah.
So the transactional you already had through I forget which one you said.
Like that was all Sangra.
This is right, right.
Because the marketing ones, that's where MailChimp and Convert Kit and all of them come in.
And yeah, like they we're actually um there's a Django hosted one um button down.
Yeah, button down.
You have to pay for it.
But certainly I can send it button down as well.
Yeah.
That looks cool.
We're gonna have Justin Duke on um a little bit later to talk about it.
Awesome.
But yeah, that that that seems to be the progression, right?
It's like, hey, we're indie, and then all of a sudden Intuit owns you.
Yeah, exactly.
They and it's like free for the first couple of thousand, and then it's like, wait, how much is my bill?
Yeah.
Yeah.
Sorry.
But anyways, yes.
It it's always struck me that email providers are quite expensive.
You know, you you look at them and it's always like, okay, it's only 30 bucks, but it scales up and it's like, oh wow, actually it gets it gets expensive.
But the transactional ones aren't that expensive.
No, no, no.
The pen marketing ones.
Yeah, yeah, yeah.
Marketing ones, it's like a hundred X like markup.
And it's like you're still just sending an email.
Like, and uh my issue is like I want like a base version.
Like, I don't want to do a drip thing, like I just want to send email.
And I'll have like personally, I'll happily pay someone not to just do that.
And you know, so we're gonna have to talk to uh Justin from Button Down and these other solutions, you know, because I'm not at a scale, but there seems to be no in between, uh, you know, broadly speaking, right?
It's really, I guess, designed for larger companies and the marketing departments.
Once they get hooked in, like they're not writing an API endpoint, they're not looking at this, they're just like just throw money at it and move on.
Yeah, absolutely.
And there's uh I don't know, I I guess I guess that's just the space, but there's that whole area is just I I kind of feel like they're just overcharging.
You know, you look at places like HubSpot and MailChamp, and they're like, you know what?
It seems totally reasonable that it's a thousand dollars a month to have a few landing pages.
You know what?
I'm not really sure that that's true.
Oh, by the way, you can pay that in 12 months you know, yearly chunks as well.
So it's like, wow, okay.
Right.
I didn't know.
Thanks for that.
Well, there's no alone.
I need a loan to get like marketing software.
Right.
I mean, there's a company here in Boston that just IPO'd that's um Django based or was originally um Clavio with a K that I believe also does like like if you look at a lot of like e-commerce companies, they handle mark you know, marketing emails essentially.
And um I know there's is it still around?
There's a company called Drip that was doing drip emails.
Yeah, drip's just
that kind of thing.
Yeah but like Clavio is like that, but like ten billion dollars or whatever it is.
So like huge companies.
Um but yeah, that I guess there just isn't a market for like solo or smaller places, right?
They don't really care, right?
And it's like, well, you can go open source if you can, otherwise, we'll just we'll take your money.
Yeah, anyways, button-down shout-out.
We'll talk to Justin about it.
I think he's trying to tackle that challenge, but the space in general doesn't focus on that.
This episode is sponsored by Mailtrap, an email delivery platform that developers love, an email sending solution with industry-best analytics, SMTP, an email API, STKs for major programming languages, and 24-7 human support.
Try for free at mailtrap.io.
So, Michael, you decided you were going to stick everything all on one but one big box.
What kind of box did you get?
And where did you get it?
And is it a physical thing?
You have to drive to the colo and change the hard disk at two o'clock in the morning, or is it is it?
I I think, you know, I mentioned the the DHAs were leaving the cloud, and those guys went and spent half a million dollars on servers.
Like that's not you're also not you're also not 37 signals, probably, for the general people listening who would consider.
But it's totally reasonable to say I'm gonna go to somewhere like DigitalOcean or Linode or somewhere.
You know, one of the things that has struck me as like interesting, but you often get uh sort of too deep into the machine, and then you're stuck, is just go to AWS and look at the the console of services that are there.
You know, it's like you gotta zoom in just to see what they are anymore.
There's so many sort of thing, right?
Like, what is going on here?
And you know, it's it's totally reasonable that all right, this this database thing is like starts at $20 a month.
Okay, that's fine.
And we got this functionless, and then oh, we're gonna need caching for this thing, then over there, and then all of a sudden, your code doesn't run in general places, it only runs in this one particular cloud.
And the aggregate of this, because you now started doing too many SES transactions transactions reads and writes, so now that's expensive, but you got nowhere to go or whatever, right?
Bandwidth is high, um then you're kind of stuck.
And it it's I think it can be frustrating.
Also can kind of take you away from just the simple Python solutions.
Like, then how do you even test that kind of stuff locally end-to-end?
You know, it's like, well, I don't have all these.
I know there's containers you can set up, but like at that point, you're running a different set of complicated infrastructure just to write code.
So to answer your question, Carlton, just I got like a $60 server over at DigitalOcean and just put everything on that.
Right.
There's some really interesting things.
But you get a lot of you get a lot of stuff for a $60 server, right?
You do, yeah.
It's uh eight gigs, four CPUs.
Um what's really interesting is the bandwidth.
So if you did 10, let me just do the quick math.
If you did 10 terabytes of traffic on the the CPU, the EC2 is actually not as expensive as it used to be, but if you did 10 terabytes of traffic um on Amazon, it's $921 a month, right?
It's uh nine cents a gigabyte, right?
Which doesn't sound that bad, but then you multiply it by big numbers and it goes up.
Digital Ocean, you get most of that for free.
It's like bandwidth is like 50 bucks a month.
I was like, oh, that's interesting.
You can that's
quite a big difference, no?
That's uh it's not a non-trivial difference, and you know it scales linearly with how much traffic.
So as you get bigger, it's just it's it's different.
Why is why is that?
Is that Digital Ocean trying to compete with AWS in one of the few ways they can, or what?
Every machine that you get, every basic tier of a machine that you get at DigitalOcean, I think LinOn is this way too, but since the my acquisition, I don't really know anymore.
You get one terabyte of included bandwidth with each little machine you get.
And if you get big one big machine, I think I get six or eight terabytes of credit for outbound traffic.
Whereas on Amazon, it's like, well, it's just nine cents a terabyte or gigabytes, not so bad, right?
But then it adds up.
So I think there is a a quite generous starting thing for I mean, most most small sites wouldn't pay anything for bandwidth on.
Yeah, yeah, yeah.
And even if you were a small site, like it also it it just doesn't matter, right?
But if you start shipping bigger things like uh MP3s and videos, yeah,
videos, videos.
As soon as you're hosting videos, you're like, ow.
Yeah, yeah, yeah.
Well, and you yeah, you so you don't use like, I don't know if it's still the case.
For a long time, Vimeo had like uh unlimited for like $99 a month or something.
Is that a sigh there?
Talk to me about hosting videos.
Hosting videos.
So yeah, I I had some stuff going on with Vimeo for a while, paid for their business tier where you could white label, re-host it.
And it was it was actually a really good deal for a while, and it it solved a problem because video delivery, CDNs, all that stuff is super, super hassle, right?
Um, you know, re-encoding stuff so it streams the right, you know, on Android it wants a different size and format than it does on iOS, than it does on yeah, it's a nightmare.
So they handled it.
I was happy to pay them, and then they changed their policy.
Like, oh, if you have too much bandwidth, then you're gonna start paying.
There was a famous example, I can't remember the exact details because it's been so long, but there was this is somebody who was not going through the business plan.
They just put like as if you were on YouTube, they put up a video and it went viral.
It was a creator type, not somebody trying to create a platform or anything.
And um they got a letter from Vimeo saying you're gonna need to pay us like a thousand dollars a month for the bandwidth that your viral video is costing us.
And then I what?
I just put like you're a video.
We posted a popular video.
It wasn't popular at first, it became popular.
And yeah, they they they had some changes in policy that just really kind of put the quash on that.
I don't remember the exact details, but around that time, it feels like it was five or six years ago, that it was it just things changed there and it it didn't make any sense anymore.
Kind of like MailChamp.
Like it was cool for a while that you could do stuff there, um, but it things change.
Well, what what is I think it's this is also Boston based.
There was another like more expensive better Vimeo.
What is that one called?
There was there was like one other one, right?
Something like that.
Yes, the Wix is the building.
It was like that.
Yeah, something like that.
I can't remember.
But its pricing was even from the start, it was like kind of outrageous.
I think, yes, probably back five, six years ago when I was looking at this.
It was still, it was like, I was like, who who can afford this?
It's like big companies, I guess.
Big companies with marketing departments that just want to pay money and have it solved.
But yeah, I guess it had all this analytics and everything.
And yeah.
Yeah.
It's awesome for the right group, um, but not for the wrong group, I guess.
So what are you doing today?
Yeah, you're no, you're right.
It is Wix.
You were correct.
Yeah.
Okay.
They're still around.
Um I guess I was thinking about Weebly.
All these weird names.
Something that's like Wix, though, for building web apps.
It's like a Squarespace competitor.
I don't know.
Remember exactly what that is.
So basically, I real like through this whole process, I realized, oh my gosh, there are an amazing set of open source projects that sometimes you can pay small amounts of money to, or if it makes sense, you could also self-host it, right?
This list mug example I gave you, you have to self-host it.
But another one that's really, really interesting is the web analytics, you know, Google Analytics Alternatives sort of thing.
Probably the best known one would be Plausible at plausible.io.
You guys know that one?
Yeah, yeah.
Yeah.
So those those folks are based, I think, in the EU and are much more concerned about GDPR.
And I think what you guys know?
Carlton, maybe you know, you live, they're in your neighborhood.
Uh, there was some ruling, either France or Germany, that basically said uh Google Analytics violates the GDPR to some effect.
And then another one, uh, which are those pairs that said Google Fonts violates the GDPR, right?
Right.
Which is even a little more subtle.
But you like so the trick with, I mean, I know more about the Google Fonts fonts, it's something I've looked into and considered.
And I always, if I want to host a web font, I will always download the web font and host it locally because actually
they don't let you do that anymore, Carlton.
Yeah, they do, they do.
No, no, no.
You I was there yesterday downloading a font.
They've got downloads.
Google, Google does.
Yes.
But but if you like, because I went through this with the design process, even all these fonts, I was like, we're talking to designers.
I was like, I'll pay a couple hundred dollars to download a font.
And it's like, nope, you can't anything that's not Google Fonts, basically, there, it's a SaaS font.
Fonts as a service.
It's yeah, and it's so expensive, right?
And I'm like, you know, like there's I forget the font that, you know, OpenAI's font that they're using is you know, I calculated the bill based on like obviously they're they're getting a discount, but it would be like tens and tens and tens of millions of dollars a month just for the font.
And yeah, anyway, so just side rant, like, yeah, just let me just download the thing.
And yeah, I guess Google lets you download them.
But all these other fonts, I was like, oh, I want a bougie font.
I love fonts.
And it's like, nope, that's yeah, like basically not possible for for the majority of yeah.
Okay.
So it's anyway, so I I do is download them because um I don't want to for my, you know, even forget the EU regulation.
I don't want to put my use, people come to my website in good faith.
I don't want to then have tracking stuff embedded in there.
I'm 100%
you know, big big megacorp can form their shadow profile.
I'm just like, no, I'll download it and self-host it, and that's fine.
So the thing with the analytics is like which are the which are the ethical ones?
Which are the ones which don't do exactly that?
I'm gonna leave some out for sure.
But so plausible.io is really interesting.
They've got a just analytics as a service, which I think probably makes sense for most people, right?
But it's buried deep down in there.
I mean it's not buried, but it's it's not front and center click here to self-host it, but you can self-host plausible as well.
The one that I'm using is something called Umami, which is more yeah, I've heard of that umami.is uh it has a a pricing version where you can just go get it your own for nine dollars a month.
Uh or you just go, it's got a GitHub 20,000 stars and fired up your your Docker Compose file and and off it goes.
And what's really especially interesting about analytics is I the so I I actually took Google Analytics off like four or five, three, four years ago and just turned it off because I'm like, it is not just a privacy violation to basically have it, but it is also kind of useless because so many apps, web browsers, pie holes, everything just block Google Analytics outright.
And so you're getting a really partial view of what your web traffic is doing.
But with anything self-hosted, you can put it on your domain and it just looks like part of your web app.
So, for example, for you mommy, I self-host it uh in a container on the same big server with all the other things.
I've got like 15 things running over there in there.
It's on the same domain, the same IP address.
So when browser look at it, go, yeah, that's fine.
That belongs to part of this web app, right?
Yeah, it's just uh and and you get near 100%, unless you turn off JavaScript, you're getting almost a hundred percent accurate view into what's happening in your world.
That's yeah, which is obviously much more.
That's a pretty that's a pretty unique thing.
Most things are not like that, but web analytics are are so subject to this privacy blockers, tracker blockers, ad blockers, which I'm not ranting against at all.
I I think that they're serving a very important role.
But you know, as a web site builder, you end up on the receiving end of you know other people misbehaving badly, so you're untrusted as well.
Kind of like the same email story, right?
You know, people have abused the system, we don't trust anyone anymore, unless you're Gmail.
Back in the back in the day, you didn't have a web blocker, but then you had pop-up, so we have to have a pop-up blocker.
And I mean it's it's just warfare.
I'm not turning it off ever.
I I'm surprised there isn't like a documentary on like you know the dominant web blockers, right?
Because the ownership structure is deliberately unclear.
And it seems seems like they're owned by like Google and Apple, like it, but it just isn't like for real.
Yeah.
You know, not to get too Joe Rogan on this, but um yeah.
That's right.
Yeah, the deep, the deep, the deep analytics.
The deep analytics.
Don't don't let deep.
Yeah, yeah, yeah.
Like who would want to who would want to own it?
Who would want to own it and has a lot of money?
Like, uh,
like, oh, we're gonna block everything except for our ads.
You know, something like that, right?
That's right.
Yep, yeah.
So I actually run um next DNS uh for my DNS, and that that stops everything.
That's beautiful.
Even my television has ad blocking built in.
My all your iPhone apps or Android apps built in ad blocking because though that network endpoint is unreachable.
So if you so like Amazon Prime now for their videos that you just get a blank thing when it tries to put ads on there?
Uh, you know, I haven't watched any Amazon videos since they put ads on there.
So yeah, so I think generally the stuff that's in the stream is is kind of come through the same source, but in most of it, you know, even if you go to if you go to a uh some mobile app and you hit a thing and it opens up an embedded browser, like the ads are gone.
Every now and then my daughter asks, like, Dad, could you put the ads back on on the network for a little bit?
I'm like, why do you want that?
She's like, well, if I watch this ad, then I'll get a credit in my game, and I can't watch the ads in my game because you're stopping like we're winning.
But uh Yeah,
no, I I was thinking this because my kids, like for the longest time, you know, they've never seen ads on a screen, and now one of these things or something they want to watch, and they figured out that my kids like Legos, and so now it's like, hey, I want this Lego.
Okay, what does it cost?
What?
Like $300.
Yeah, it's oh my god.
You know, like so it's but it was, you know, in a way it was this it was is this golden time of kids not seeing ads, like you know, because growing up, like the radio that like you just bombarded with it, right?
Whereas most kids, you know, well, I guess you know, if you pay for a YouTube premium or get a family plan, um but anyways, yeah.
So when someone looked at that and was like, you would pay more to not see those ads.
Exactly.
Probably.
Yeah, exactly.
So yeah, I think anyway, so back to the uh analytics, I think you know, there's all these different ways in which that that information either is somewhat ill gotten by sending it through a big tech or just just corrupted because it's so partial from you know the different levels of ad blocking.
So I think that that kind of self-hosting stuff is there.
Um I I want to give uh I'll give you guys a whole long, interesting list of things here in a second.
But I want to kind of just step back for a second and talk about like this eight little servers versus one big server.
And if you think about you could say, all right, well, the the big server is roughly every app has about the same RAM as it had before, right?
In a at least in a sense, right?
If they're all still using a decent amount.
But if you have a bunch of small servers and there's some spike in say one of your APIs, or there's a traffic spike in one like talk Python has like a big spike for some reason.
Python Bytes had one because some guy was trying to DDoS it the other day.
But it was fine.
I didn't mind.
Anyway, if for whatever reason, good or bad, it has a spike and it's on this sort of commodity bunch of small pieces world, it quickly runs into the limit like well that server has one CPU or it has two CPUs or whatever it gets when you chose it.
And that's it.
But if you put them all together in some kind of like Docker cluster type of thing, those spikes almost never overlap.
Right.
The reason that the courses would spike the versus the reason that talkPython versus Python Bytes versus the APIs that run the mobile apps, whatever, there's no almost no correlation between the spikes of one and the other.
And so it can each one of those has almost all the compute available to scale out and do its thing.
So it's really interesting to think, you know, like I've got this little Yamami Docker thing running and this listmonk thing running and all the other apps and um web apps running and they might have these different spikes but they all have like higher headroom to do whatever they need to do for less.
Like I'm paying 40% of what I was for the eight servers the little baby eight servers than to get one bigger one and you get more compute out of it.
It's really interesting.
Yeah no I like that I like that it's yeah love it.
Yeah it's it's fun to think about but so all right so I I mentioned a couple of these things and and neither of them just before
just before you got gone but just before you do that let me just jump in.
So you're running so you said 15 services on this on this box.
So I presume it isn't just some sort of long running screen session with you know shell it's 15 tabs open and uh how are you how are
you managing Docker containers I believe maybe 17 with the different databases and stuff but yeah.
Have you got some nice UI that you know helps you manage those or
oh uh not really but I I it didn't come with one because you've got Docker and and compose and different things.
But I used Rich, you know the Python library by Will McHugan and Textual and did basically uh an in-memory join on the report that a bunch of Docker and Linux things return.
And it'll create a table and then with rich something that's really awesome is one you get color as I'm sure you know but what people maybe don't know is Rich has a context manager for live redrawing of content.
So you say with live here's a table and then you just start changing the table and it'll change the UI without even um without even flickering or anything just over SSH.
So that's basically that and are you all familiar with Btop no oh b top is magic.
So Btop um it's github.com slash oristokratos slash btop
yeah a monitor of resources
yeah but what's amazing as they don't have if you scroll down to the graphics section like maybe half the way down that page there it's you know this thing I described with rich this is not based on rich but it's like kind of that to the logical extreme it looks like a uh
Atari or Nintendo 64 game almost and just live updating of all these different panels here's all your CPU across all you know individual and total aggregate CPU here's your network traffic your processes um this is what your your disk and memory usage looks like all updating live with graphs and and stuff.
So like that's kind of the thing I've been using is just like look at the the server.
What's interesting is when you're running Docker containers all the processes in Docker all show up as separate processes in in the like the the process monitoring tools.
Right?
So you can actually see this part of my Docker container like this worker process for this service is using this much RAM and this much CPU and here's the graph over time and stuff like that.
It would be super cool if just thinking about like your custom stack here it's almost like if some naive person came in and you just had these drop downs like oh I'm using MailChimp I'm using these different things and then it was like here's here's a recommended other you know I don't know you wouldn't monetize it in any way so what's the point?
But like as much as things are custom there is some degree of generality around all this which I mean you know Carlton I almost hesitate to ask you know you have spent quite a bit of time on a Django specific thing um button that was going to do some of this for um for Django I guess it's just hard to draw that line and get enough people in where it's like yeah I'll pay you know it's it's not as much as all these services but it's enough to someone put a wrapper on top of
it.
Yeah no I think there's a market there.
So how's your project coming Carlton
yeah no it's going really well so I'm so I stopped following and I mean immediately in order to pay the bill pay the bills had to pick up a new um thing.
So I've been working on a project called Pards which is an app in the environmental and social governance space but I'm deploying that with button on exactly the the tooling that I want to use and it's all going great and it's it's super um and I think there is a market there.
It's just a question of um productizing so you you build an app and then you you want to productize it and it's it's sort of three times the the the the three times the time to productize something as it is to just build the app that works for you.
And it's that bit that is tricky because I'm already building one application for as a full-time job how am I going to then build another well I'll slowly tick away at it and I'll roll it out over time now.
But it for me it works it works well it's lovely I think there's a market there but it needs somebody to sit down and you know have the time and where do you get that time without the funding to to back it
and then just raise money just get some friendly VCs
no but as soon as you raise money then there isn't a market there anymore.
That's that's the rub that's so what have we talked about on this podcast?
We've talked about MailChump used to be cool and then they sold out and they then they became really expensive.
We talked talked about I don't know a Vimeo that did used to be good it was the best offer for hosting videos on the internet and then obviously they need to make more money to to to satisfy their um their investors and all of a sudden it's like priced out and it's corporate only and it's the same in this deployment world is like Heroka what happened to Heroka well it got bought out by you know the the big company there and then they they're like we can't do this free plan because it's it just doesn't satisfy and that's
yeah yeah yeah yeah I I don't know how much their policy changed but like they they kind of got down the
same path.
Yeah you can't have it both ways either it's a small bootstrap thing which you need to kind of grow organically or you take outside money and then that you can't you just can't serve the the the hobbyist developer or the small the the the small independent developer.
You're looking at corporate and there's no way around
that'll be our first question to uh Justin of button
well no but he's the but he's doing it that way right he's he's it's a small thing he hasn't
a lot of intent and a lot of and at some point right like maybe you don't want to work on the same thing for forever right and so um I guess you know and tech is so weird because it's infinitely scalable whereas like a more real world example like what
is it like um the like oatmeal like to get from this like Bob's something or other it's this old guy on it.
And like Bob just yeah red mill right like you know he could have sold to megacorp he sold it to the uh employees so now it's employee owned like where I'm from in Vermont there's a number of companies that have done that but you know that means that Bob or whomever he could have made a lot more money right but um you know yeah and I guess it would be nice if there was some tech equivalent I I guess maybe there there are some a little
bit but more around like agencies.
I know like Torchbox is employee owned I guess it's really hard around products to do that in the tech space.
Yeah and the stuff that has running costs right infrastructure bandwidth uh computes and
if you raise any outside money then inevitably it's gonna yeah.
No but it I think about outside as soon as you take the outside money you need the bigger revenues and you need the
clock's ticking on your 10x and you better find a way to get it.
But you I mean not to make this all about 37 signals but they famously took money from Jeff Bezos like way back in the day because I think they were facing some of these pressures and it allowed them to you know stick it out right like maybe there's you find a benevolent billionaire who'll buy 10% for uh some amount of money.
You know I like I like database camp app I want it to exist.
I'll just make sure it doesn't go away.
Something like that.
Yeah, yeah.
Their whole leaving the cloud series that David Heineman Hansen wrote is is super, even if you disagree with them, it's super worth your time of looking through it it.
It's it's quite interesting.
So you guys are, I'm sure, familiar with awesome lists, right?
So one of the things I want to just give a shout out to is kind of like this whole thing we've been discussing, kind of that.
So if people check out products.containerize.com, that is like an awesome list for you know, pick your self-hosted thing.
So you want to do blogging, here's here's the choices.
You want a forum, here's these are all open source, self-hostable, right?
Discourse, or do you want vanilla?
Do you want you know Node BB, or there's a marketplace?
They're all alternatives to you know Shopify, I guess, would be the marketplace equivalent, right?
And they've like this is the one that's voted most by by the users.
Um, you want chat like uh Slack?
Well, Rocket.chat is like the winning one, apparently, here.
But there's you know, what is that, 12 other options?
Um transactional email.
Is it win winning by GitHub stars or they have some other
it gives this little like thumbs up?
And I think it's whoever runs this is like this is the one we've sort of given our stamp of approval to more out of them.
But yeah, that
yeah, I know it's very cool.
That's interesting, right?
But then you end up like, well, if I want to use any of these, like, well, what infrastructure do I run this on?
You know what I mean?
You've got you've got invoice.
You're back, yeah, you're back to that, right?
But I don't know.
I mean, every one of these things has a massive learning curve to picking them up and taking them on, right?
It's not it's it's open source, it's self-hostable, but it's not free.
No, it's not totally free, and I totally uh agree with that.
But what I would tell you is you will find a pretty common theme of here's a Docker Compose file.
Do you have a place that can run Docker Compose?
If you can do that, then you can probably self-host this pretty well, right?
You gotta have some kind of backup, but almost always it's Postgres.
So you just run a Postgres backup on the server you set up and and figure out how to restore that later, whatever that means for them.
You know, it's it's not as once you start down this path, you're like, oh, I've already got 10 of these things running here.
What's what's two more?
What's 11?
Yeah, what's eleven?
You know, because it's Docker, like you know, you don't have to trust it as much.
You still got to trust it with your data, but it's not right in there with all of your other stuff on the inside of the firewall and and those kinds of things.
And so it's it's not as risky, but it's pretty interesting to go down this.
You know, one um um one thing, I guess, also two things here.
Uh one is um, have you heard of Elestio?
E-L-E-S-T-I-O, Elestio.
So these this is uh it's not that cheap, but it's it's kind of empowering.
It's just this company that you say, what is your provider?
It says hosted on DigitalOcean, AWS, Vulture, Hertzner, Linode, Scaleway, et cetera, et cetera, even on-prem.
And then you say, Well, which one, which open source project do I want?
So, do you want Click House?
Do you want uh OpenSearch, you know, whatever, Redis?
And they'll just set, they'll manage the backups, keep it running, keep it patched for you, almost like as a service on your own infrastructure for like a bit of a cloud premium.
But you just go in there and you type in you one of these crazy things, there's a really good chance that they have it right there.
I think it's pretty fascinating.
We'll have
a link to that.
All of these things that cloud premium, it's like, well, what are you buying?
What are you trading off?
Because in my day, there was when I was a youngster, it was literally a sort of old guy who like had a beard.
Yeah, you gotta have a beard.
No, no, but it was it was like, yeah, like it was a profile big
beard and recumbent bike, you know.
He he he had a full-time job, and he was like, you know, whatever time of day, he had a pay, like he was never like seeming seemingly never sleeps, but didn't do much, didn't speak much.
But literally, his job was to keep the the actual physical server going.
And so when the cloud came along and they were like, Well, you could get rid of that guy, and that guy didn't get got rid of because like he had you know, he was he was just part of the furniture, you wouldn't get rid of it.
Yeah, we just kept the cloud
going, but that cost just disappeared, and so okay, the cloud server was more expensive than running it your own, but it was a lot cheaper than hiring the system administrative.
Absolutely, absolutely.
And so you think, oh, well, you know, this service here that's gonna be an extra few pence per hour, but but hang on, what are you trading off?
Are you trading off it took you two days to work out how to deploy this versus clicking it in?
Or do you need to hire somebody to manage all these things, or can you just like pay an extra hundred dollars a month?
Yeah, it's it's really interesting.
One uh Django one that's really worth um maybe you've already had these these folks on, but have you looked at post hog?
Post hoc, no.
No, I've heard I've heard of that.
No, we haven't we haven't talked about it.
I think I'm pretty sure it's self-hosting.
Let me just double check.
Single platform to analyze, test, observe, deployment feature.
Post hog, what is the domain of the ending?
Post hog.com provides open source product analytics, session recording, feature flagging, a b testing, all of that as a service or self-hostable, and it's in Django.
Oh, right.
Well, we'll go again, right?
Doesn't that look interesting?
I'd see I had now you bring it up.
I had seen it before.
I didn't know it was built in Django.
So that's yeah.
I mean, that's what isn't that kind of cool?
Like even the two, even the three of us, right?
Like who do podcasts on this, and it's like, oh, there's this thing with like 17,000 stars that we didn't really know about that a lot of other people knew about somehow, some way.
Somehow, exactly.
How do we not?
Yes, almost 17,000 GitHub stars and and written, and it's a really cool looking app.
Single platform to analyze, test, observe, and deploy new features for your your web apps and and stuff.
So yeah, that looks that looks quite slick.
Let maybe let me give you all one more category of interesting before we we close it out.
Uh or we can keep going as much as you want, but before before we miss it.
And I know um Will that you're a fan of the Heroku style of things, right?
Yes, I am.
And then you end up at my go ahead.
Yeah, I just say I put a preface with at my scale, it's I'm more than fine.
And you know, I know there was a lot of drama around Heroku.
Uh I don't wanna I don't really want to give any hate.
Like they're they shouldn't be required to run the internet for free.
Yeah, you know, regardless if they're just run by one person in a closet.
And no one else does either.
Yeah, exactly.
No one else really does either.
Exactly, you know, like digital ocean.net free.
They have a four-dollar server, which I don't know, to me feels like free, but you know.
Uh it's not free, right?
It'll still covers it for like the the super, super indie little sites and just little small things and so on.
But uh as part of this whole deal, I came across Doku D-O-K-K-U.
Are you familiar with Doku?
Doku?
Yeah, I
mean, this while I was wondering something like if you used some kind of UI, a bit like this, but you you don't, you do it with the terminal, but
yeah, so Doku's pretty interesting.
It's kind of it's got this, you know, create your own, it's it builds itself as open source pass alternative to Heroku.
And you just kind of somewhere you create an app and then you create a proc file and you get pushed to some branch and that makes it go.
I talked about that on Python bytes, and people are like, oh, that's interesting.
And somebody wrote in, I can't remember the name of apologize, said that's cool, but have you seen Coolify C O O L I F a Y?
This is like uh one of the same things, but a little bit a little bit more full featured and a little bit better UI and a little bit more supported.
Self-hosting, alternative Heroku, Netlify, Versal.
I mean,
that covers a lot of features there.
Yeah, free, free SSL, automatic database backups, web hooks, automation, notifications, monitoring, all the all of that in just uh uh Docker compose up.
Let me ask you as as an educator, like what do you tell people who are just want to like learn web development?
Right?
I mean, because like this is kind of the issue, is like at the same time that most software engineering jobs are around infrastructure, actually, probably around the web.
But getting started, like, I don't know, what do you say?
Someone comes to you is like, I don't know what Docker is.
I just have this, I'm so excited, I just learned Django and I want to host something, and it could be uh uh yeah.
What do you think?
Well, let's put the data science folks off to one side because that's a whole different level.
Okay, yeah, right.
Because they don't even actually have a web app, but they need to somehow get it on the web, right?
Turn this spreadsheet into a web app with CRUD and off and everything.
Exactly.
Which is more of a but but for the folks like I have a web app, it does just what I want on my machine.
How do I make it on everyone's machine, right?
Right, so I think there's two paths as an educator you send people down.
One is just don't think about it.
This is what a connection string looks like to a managed database server.
You get pushed to Heroku or something, some platform as a service equivalent.
Job done.
That's kind of the I want to make it happen, and I don't really want to think about, worry about, or even hardly know about necessarily.
Like, what do I need to?
I just need it to just go.
And if I can get it here, these people will take care of it, right?
That's the minimum path, I think.
And that's probably the right path for a decent number of people.
Just like, I wanted to get it to go.
The other side, this isn't what I've ended up doing more, and I don't know, people are like, Michael, why are you doing this to me?
Is show them how to set it up on Linux.
If if you because if you know how to set it up on Linux, you can run it on VMs, you can run it on what do you got to do to do a Docker container?
You put run or copy in front of all the Linux commands.
You know what I mean?
Instead of saying CP, the the Docker file thing is copy.
Instead of uh you know apt install, you say run apt install, right?
Capital R U N is the front of that thing to make it a Docker command.
And so if you understand Linux, you understand Docker, and that opens up all the you know containers as a service, it opens up um Kubernetes if somebody else is running the cluster, like all it opens up that whole world, I think.
But there's a higher bar to say, like, okay, well, I'm a Windows person and I generally don't use the terminal, and you're making me work in Linux with no UI.
What has become of me, right?
There's that challenge.
So I think there's this bimodal, you want to send somebody people to one end or the other.
I think there's a trade-off as well with the the past, is that it's kind of like a dead end, and that you I've described it in the past a cold set.
You go in and then it's great to begin with, and it's lovely and pretty, and there's flowers around it and that's bit of the end, but then you get to the end and you're like, oh, actually, I want to do something further, and you have to kind of go back all the way out out where you were to start again to get on to a more complex whereas if you go straight to a VM, it's slightly harder to get there to begin with, but you can grow an awful long way before you need to learn anything else at all.
Um I 100% agree with that, yeah.
The the the sort of example that comes to mind is with channels, which is the um you know um async add-on or web socket add-on for Django.
We the number one problem we have is people um having difficulty connecting to Redis because they've got a pass and they've they've got a Redis that they've spun up in the cloud somewhere, and it's not simple to connect because you you you're doing it over the network and it's got to be HTTPS and it's got to be this, that, and the other.
Whereas nobody in the history of Redis had a problem connecting to Redis on localhost, right?
It just never happened.
And so like
if you've got a VM, you can spin up Redis sitting next to it, and you're just you're off and you start, you never hit that set of problems until you're you know much bigger scale and you're like, Oh, I need a much bigger Redis.
Well, then okay, you can put Redis on a separate box, but by then you've you've kind of got the chops.
Whereas like people really struggling early on because they've gone the pass route, and then they needed something which wasn't delivered by the pass in its sort of cul-de-sac of first offer.
Yeah, yeah.
I think part of it too is it's enough to create a website and market it and do all those things, like in and of itself, and then to add in all this other bit.
It's kind of like it's rare to have the success and the knowledge and the time to do what you've done, Michael.
Yeah, whereas most people it's like on your own, put up a portfolio stuff and then go join a team and then you know have the time to focus on area.
It's pretty, it's very rare to do all the things you're doing at the scale that you're doing.
And I know you have some help, but like still it's usually most people are overwhelmed with
no, I totally agree with you.
And look, when I started my stuff, I ran it on Pl uh Python Anywhere.
And I'm just said, here's my code, run it.
I don't want to think about it.
Also bought by someone else.
Yes, I know Anaconda, Anaconda, I think.
Yeah, yeah, yeah.
Uh then I slowly, slowly over time, kind of thinking like Carlton said, like, oh, it's just I need a little bit something different, right?
You know, I think it was something like we're gonna have our maintenance period.
Will it be down for four hours?
I'm like, four hours?
I'm not really psyched on that.
Maybe I should learn a little bit enough to control my my my maintenance window to be shorter than you know, four hours.
That's that's a long time and stuff like that, right?
And I know I know we're coming up on time, but how how did you dip your toe in, right?
Because it does feel a little bit like a boom, like like were you able to do that gradually, or was it nope, I need
to no super gradually it was.
How do I get
it like moving services
and then keep the database there?
Well, in the beginning, I just used SQLite because how much how how how read heavy is a podcast, right?
It's not that read heavy.
I mean, sorry, it's not a write heavy, it's it's it's read heavy, right?
And so that's actually pretty much fine for something that you update it a couple times a week, you know.
And it's only one person updating it, right?
It's one
person updating it too.
Yeah, exactly.
And so I started out with that, and like, all right, this is easy.
I can I can productionize this because I just let the file be there, basically, you know, run it on on Python anywhere, and like, all right, well, maybe we need to move it to our own server.
Okay, well, maybe we need a better database for analytics, like recording stuff that's happening and stuff like, you know, and it it grows, but it grows, you know, it's you look you look back and like, oh well, look at all this stuff.
It's like it's crazy.
How why why do you choose this?
Well, it started like little little baby steps.
Uh, and you know, after you work with a while, it's like, well, that's not that's not for me, that's not that complicated.
But I know that it is for others, right?
No, the best advice I ever had was from you know senior when I was a junior was like don't only put at the bits that you need as you need them.
So, you know, you know, don't worry about varnish caching and stuff.
You'll get to that if you need it.
Like just to a scale that you care about that, yeah.
Then you can dedicate the time.
Yeah.
You should be so lucky as to have a problem where you need that, honestly.
Yeah, exactly.
Exactly.
Right.
Or as I sometimes I'll I like to tell people like when it's a problem, it will be overwhelmingly apparent.
Like you don't need to, you know.
How will I know when a mine database needs to scale?
Like, well, yeah
when it becomes a
premature optimization, like there's a quote on that.
Like, yeah.
And and that's true in code, and that's true in like how you try to run your code.
Um, well, we could keep going on and on, but we're a little bit over time.
We'll have links to all these things.
Um, I should we'll put a link to you.
Uh you have you mentioned HTMX, you have a relatively new Django HTMX course that folks should check out.
Um that seems I hope that's doing well for you.
Yeah, yeah, it's doing well.
Worked with Christopher Trudeau on that, and it's it's going well.
Yes, he's kind of he's like your Django person, right?
He does more.
He's done a lot of stuff.
Yeah.
Not to limit him to that, but I when I see TalkPython stuff that it does Django, I'm like, oh, that's Chris.
Yeah, exactly.
Yeah.
Um so thank you for coming on our podcast.
Of course, you have your podcast, Python Bytes, TalkPython.
We'll have links to everything, training around Django stuff if they need it.
And um this was really fun.
This I mean deployment is such is just an infinite topic, and I think for you to come in as pretty much a solo person at scale, that's a really interesting perspective as opposed to someone at a large company who came in late, you know, Kate didn't start from the beginning, and it's just like, well, here's my little piece of it, but everyone wants to know how did you how did you get there?
It's yeah, it it's really interesting to think of I mean my takeaway is it's so easy and so uh affordable.
I I guess easy is not the right word.
So it's so accessible, right?
You know, for a hundred dollars a month or something, you end up with infrastructure that looks like world-class infrastructure, right?
It's it's ridiculous.
So uh it's it's all within reach.
And hopefully people got some cool resources as well.
Thanks, thanks, Boy.
So we are at DjangoChat.com and we'll see everyone next time.
Bye bye.
Bye.
Bye bye.
This episode is sponsored by Mailtrap, an email delivery platform that developers love.
Try for free at mailtrap.io.