Transcript: LearnDjango.com
Hi, welcome to another episode of Django Chat, a weekly podcast on the Django web framework.
I'm Carlton Gibson, joined as ever by Will Vincent.
How are you, Will?
We're here, Carlton.
And this week we're going to talk about Will's new site, learnjango.com.
So, Will, you've always still got a site, I guess, willwsvincent.com?
Yes.
so I'm you've you've started a new one I started a new talk us about that and yes so this is a
long-term project that I'm been working on so a canonical source of my own stuff on on Django
that has tutorials eventually books courses videos and yeah so I want to talk about what it was like
building that and more broadly what it's like building a new site from scratch sort of the
considerations and because I think there's there's so many choices you have to make and some some
matter and some don't some you just have to decide and don't really have huge architectural
implications and some do so we can talk about that um so where to start well talk about tell
us why you decided to start a new site because will ws vincent has been your your sort of personal
brand yeah so it's like for a while while you're writing the books sure yeah so so the ws vincent
dot com site um it's a jekyll site which is static site generator uh written in ruby and it's really
just, I've had it for four or five years just as a way to put tutorials and things out there as I
was working at different companies. And, you know, so it has reached a point where it gets
six-figure monthly unique traffic, and it's going to have a couple million people a year. I mean,
that's pretty, to me, that's pretty high for just a personal site that I don't spend too much time
on. And it's just got a mix of things like Python, JavaScript, book reviews, you know, so I think I
want to have a more Django specific place where I can put tutorials that are on Django, I can lead
people by the hand. And really, the goal is to mimic what I do in person, which is to assess
kind of what someone's level is, are they a total beginner, intermediate. And, you know, I've sort
of built a library of learning materials, but I want to direct people a little bit better towards
them instead of just searching, you know, how, how do they find stuff? Most, most people come in
through a Google search and then they leave. Um, but I know that if they come in and they look at
something on Jenga rest framework, you know, and there's four or five other things I have that I
could tee up or present, or even better, I could do a linear progression where I could say,
oh, you're at this stage. Here's, you know, here's how to go ding, ding, ding, ding, and feel like
there's some order to the learning not not this kaleidoscope of googling around and not knowing
what you're doing yeah a tutorial on this topic do a bit more stack overflow this a bit more google
there oh another tutorial that was good like an experience so choose your own adventure yeah so
the site is um and part of that is so i've i have the site up it's not finished um it will always
be worked on um but there's enough up there there's there's search there's tutorials there'll
books um and i have it up um but maybe something to talk about is so the site itself is i was i've
been playing this for a long time is i gave serious thought to if i should build it in
django or make it a static site because it's essentially a static site and i like using
static site generators i use um i've been using netlify for my hosting which is really fantastic
that handles everything um ssl load again it's you know a couple million page views and i don't
do anything until recently i didn't really have to pay for it either though they've started
adding some pricing there um call custom but this uh but this new site um and so i did waste a bit
of time building out a building out a whole version in um with jekyll because on the one
hand i so right now all my um all my tutorials and stuff they're they're markdown files and
there's something more reassuring to me about having them you know in my in in git as opposed
to in a database which yes i back up my database but it could be lost and um and also it's even
you know even me with i spend so much time on django part of me was like it's a lot of work
to do a django site do i really want to do a django site okay so so what's the because i i'm you know
from your first description of what the site's about i've already like where you you clearly
need a dynamic site but like what was it pushed you away from the static site why why why not do
a static site um yeah there's two two main reasons well i guess the main i think the main reason
well three three reasons so one is that i do do django and i need and want just a evergreen
project that i can perfect and play around with um because i've found myself recently writing
these books that i've done a lot of kind of hobby project sites um and there's something a little
bit unfulfilling about that it's also because i need payments and i i know what the future site
will need and so even though it's a little bit more work up front i'd i'd rather build what i
know i'm going to need and i don't i've i don't see that as over engineering as opposed to just
getting up and running and the third you know the third is we can get get to this payments so
payments if your payments are really hard right now it's uh stripe and all the other companies
there's what is sslc there's a new european law so historically you had to have a a dynamic site
to do payments um so you could pass the token back and forth there are now options where you can do
one uh hosted by stripe or paypal and do a a web hook in but i basically knew i would need it um
and i think what i've my current site is actually i'm really happy i've did all sorts of versions of
it and over-engineering, but it's really quite basic what I have now, where I have the site
itself. I have, so I have tutorials. So I have essentially a tutorials app with a list view and
a detail view. Same thing for books. I'll have same thing for courses. And I, the, maybe the
biggest thing for performance, cause I'm, I'm now redirecting the blog posts from my personal site
over is I have Cloudflare sitting in front as a CDN. So it's a dynamic site that loads, you know,
instantaneously and it's fast and it doesn't take much i don't have to have a big database or
anything behind it yeah because essentially you're still loading templates off the file system right
and so the django view is loading a template yeah yeah so rendering it sending out right so two
things to say so one is it's it's all server side right now um i certainly had played around and
would love to i'd probably build it with view and you know do all these nice things but that's very
much third third phase for me yeah we've talked about this you don't need to jump to that you
probably shouldn't for a solo project right but it's right exactly it's a solo project right so
you're building it yourself right so you there's a big question about what's possible with one pair
of hands right yeah and the other bit is if you're just a note if you're doing redirects you you need
to watch yourself you need you don't want to get those wrong you want to do a 301 redirect and we
could do a whole episode on that but you want to be a little bit careful because you're the black
box that is seo you lose some some of your juice when you do a redirect um but you could lose like
all of it or you could really lose stuff so it is sort of a long-term play like my traffic has
gone down a bit because now there's this new site and even though i'm redirecting so i sort of know
that as part of you know a project where you start it and just have all these things then you go more
specific i believe it's important that you put in this ref canonical header in the old places
pointing to the new one and things and there's a way so within jekyll there's a there's a way to
to do it properly and actually interest somewhat interesting netlify just notified me that i have
two weeks to change because how they handle redirects is going to be muffed up and so i'm
like great thanks netlify that's just what i need like something important and technical
to deal with but anyways so it's built in um it's built in django and you know the considerations
when you start a project from scratch i put a lot of thought into you know again it's it's it's sort
of a contemplation when you over engineering when you're in when are you not thinking about the
authentication and users you and i had a discussion about this i think we put in the forum of okay
well how how do i want to handle authentication because i do want to have it because i'll need
that for people who log in and pay yeah but also log in and build up a reading list and things like
this and you know if you're going to offer a learning path and you know it's all right doing
that statically, but if there can be little ticks that appear for an individual user and
all of that kind of stuff, yeah, I guess you could do it with JavaScript, but really you
want that to be backend driven.
you it's nice to have you know checking your progress i mean there's this whole there's a
whole it's actually not really jenga specific idea thoughts around do you require a login how
much do you gate how much do you not for now i i have a mailing list at the bottom so a newsletter
because you know some people want to get updated whenever there's a new article or once a month
and some people don't but they still want to be in the system so that's actually something i'm still
going that's going back and forth a bit on um for how do you handle that right there's sort of two
streams of thought one is you you put you do this drip campaign thing where people come in and you
basically hit them with an automated sequence until they unsubscribe or stay you know basically
until they buy something or leave and the other is maybe more like like a west boss approach where
you require the email up front and then you only email like when you have a new course once or
twice a year yeah most people would recommend the former but i feel like there's something to the
louder especially if you're an individual where it's it's you it's not a company yeah thank you
this mailing list is so common now like you know and these these nurture sequences
i don't know that it seems like everyone's got a subscription you can sign up to and you get so
many emails and the value of them isn't always that you know this is a nurture sequence that
really is giving me something so yeah i've i've i've talked to a number of people running
successful learning companies, you know, like companies with people and consistent advice I've
gotten is you are not your customer. So you and I, Carlton, we're power users. And we I personally
don't like drip sequences. I find it off putting. But hard to say. Anyways, for now, I'm not
barraging people, but I do have a login thing. And to get back on that topic, one of the maybe
you can talk about so there's, I like doing this idea of you, I use Django all off, which is a
package i'm very fond of and i like having email and password um actually not using username and
then the last bit of that is i have to wire up my email um service which i use sendgrid for that
which is pretty straightforward i have some tutorials on that but you have this nice approach
that you like to use right well yeah well i i like usernames okay so i'm just really old-fashioned
but it's like you know the username for me is like something that can appear on the site you
You know, so if you've got a profile page, it's like Ford slash Will.
Yeah, like GitHub, right?
So that kind of publicly exposable, unique user identifier, that's your username.
That's my username.
That's so-and-so's username.
I like to use email for login because people like that.
And what AllAuth gives you is this nice email ability to handle multiple emails,
and you can verify them individually, and you can mark one as primary,
and it helps you to do the login with the emails.
it's got some good stuff going on with it all off and then the user id is like you know the actual
id that's in the database but that never goes public so i never put that in a url or i never
put that anyway that's that's that's that's the the the internal unique identifier which picks
out the user but that's not their username right yeah well an email you know i can have multiple
emails per account and it depends on the needs of the site i mean that's something i so for my site
it it doesn't really you don't need a public username because it's you you log in and you
have access to courses but it's just there's no public page if there were if it was yeah it's a
github or a twitter clone or something absolutely i would adopt the approach you're advocating yeah
and indeed i built a whole you know version kind of the way you had described and then i really
thought about i was like i know you don't ever need that for what i'm building which is just
basically an lms yeah no sure and when i say when you say advocating it's what i like to use in
sites that i build for for these reasons yeah but but this is it's a this is a fundamental you know
one of the decisions that really does matter that has to be made um and is worth some thought as
opposed to you know i don't know when you do the start project command do you put it in the same
you know do you add a period or not you know is there an extra directory like there's a whole
bunch of those um and side note my book django for professionals i walk through a lot of these
steps of showing one way and talk about the trade-offs for how to do all this so um if i
appear tired and garbled in this which i am um that book is a resource but what else models
right so if you are okay switching yeah switch gears so models there's um let's take the
tutorials um actually i probably should pull up what i even have in the models okay so so model
so let me i think it might be interesting to talk about the model i have for tutorials where
and this and again this pattern repeats itself for in many projects so i have an author um which
uses get user model um so that refers to who writes it that's you well it's me it's me and
i guess that's pretend perhaps that's slight over engineering because it because you've scaled you've
already scaled up for when you've got a whole media empire fleet and it's 40 people yeah i i
that's a whole separate uh thing but i have the capability of doing if i want to um and i have
the title and the description um and i've added the slug i've got a whole django slug tutorial
because i want to use slugs and again because it's just me i don't worry about collisions there
if i was building um a twitter or i don't know a twitter clone or something i would and that's
actually a great example of if you have a username you don't have to worry about these collisions as
much like if you're building a blog platform if it's blog.com slash carlton slash you know you
don't have to worry about you and i writing the same hello world um example yeah and what post
like and you might have a an extra path segment for a date which i know isn't fashionable but if
it's actually you know if it's a blog you might have a date which helps to you keep it unique so
it'd be unique for that date or unique for that year or unique for that month or whatever or you
can have an extra little slug component i'm sure we talked yes i think we have about hash ids and
yeah side note i cover identify which is yeah and i cover do you use that um i don't use hash id in
this i was going to say i do in the jenga professionals book one of the chapters i walk
through id uu id um hash id you know kind of because that's tricky for beginners to understand
how you how you implement that um but because with learn jenga what you've got because it's just you
at the moment you don't need to worry so much about the collision so you can make sure the
yeah i don't have to worry about that at all and actually um this is in my my django slug
tutorial which you can find in the search thing on learn django.com i use the admin section because
for now i'm i'm putting in the admin so it auto populates the the slug so it saves me a step of
you know if it's hello world it'll automatically lowercase it and be hello dash world um i'll link
to that again so you're using using the admin you've got super win there because you've got
a UI which is perfectly acceptable, right?
Yeah, yeah.
For free.
Exactly.
The last bit is two things.
One is, so I add a created at and an updated at field.
So the created at is auto now add.
The updated at is auto now.
A nice way to do this, actually,
that I wasn't aware of that Jeff Triplett showed me
is if you use Django extensions,
there's one of the Swiss Army features in there
will automatically add these updated at.
But, but basically any, almost any model that's going to have users update, you want to add
a create that, update that just as a, you're going to want it later situation.
Yeah.
And then the last bit is I have a, um, is live Boolean field.
So I can do, I can do drafts and, you know, decide if something's flagged or not.
Um, and that's, that's really it.
I mean, I also, you know, I've do an underscore string method, uh, you know, get absolute
URL for the detail view.
And, and that's kind of it.
I've made more complicated versions of it,
but it really doesn't have to be
much more complicated than that.
And that's the same approach I have for...
And what would I say,
like the thought that crossed my mind
when you say about not making it more complicated
is dead right, start there.
And then you can always add a migration, right?
You can always add a field, right?
The Django's migration framework is super
and it lets you evolve your model.
Whereas you sit there,
spend three months planning all the fields
and all the possible interactions
and you've got this model which has got 42 fields
and you only ever build the software
for the first four fields
because you never get to that.
So just drop all that time
and just write the four fields and work with those.
Oh, I need a new field, fine.
yeah you can always add them in make migration i'm definitely going that route of i can always
add stuff in and migrations are fantastic i guess two other big buckets to talk about um so one is
deployment um yeah so how are you deploying so from so i'm using i'm just using heroku
um because i'm familiar with it because there is a slight cost but i think what i have now
with decent traffic cost me seven dollars a month or something i mean okay and again because i have
cloudflare sitting in front of it is a cdn that absorbs the bulk of it and it makes it fast and
i'm not getting the dad you know the um the server is barely being hit because everything is cached
so can i can i just call yeah so can i call you up because you've said cdn a couple of times but
for cdm um when someone says that that brings to mind like images and static files but it also can
be distributed to edge location but is it also a cache as well yes okay and so how are you setting
the caching headers to tell yeah so for now i'm for now it's just updating every i should double
check what it is i think it's i think it's every every once it once a day so this is something i
will go a lot deeper on when i have where i'll it'll be section or page specific but for now
what i want to do is have it and actually i should double check um so when i whenever i do an update
it refreshes the cache um automatically but i'm i'm just doing very broad strokes um you know
django on its own because they're still largely static pages right yeah everything is static right
now i mean there's nothing you know if you know when i start having when you're logged in you see
things that you've checked and progress that you've made you know that's when i will
fine-tune that um and there and i'm actually not quite sure exactly how i'll do that you know so
django comes with built-in caching framework that you can use i have a tutorial on that but then
also cloudflare lets you do it sort of the cloudflare level and i'll probably do it okay
within cloudflare a cloud cloudflare more than django but i haven't done that for real yet
so right now that's a big broad stroke django so say you so say you're rendering markdown right
which is an expensive which i'm also doing by the way and i have a tutorial on how to do that
right so say you're rendering markdown which is expensive process you want that rendering bit
to be done so you could at least the rendered markdown fragment you would cache that in django
yeah so that that that you know if multiple requests are made for the page then it just it
doesn't have to re-render the markdown as which is the expensive bit was rendering the template
that's pretty quick you know if if if the markdown is already converted to html injecting into the
template and sending the template along you know that's not a slow process yeah and you you were
very helpful as i was actually i got a little bit tripped up in the markdown part the end of last
year um and in the tutorial i wrote around it i showed i talked a little bit about some of those
options and again it's a little different too where this is just me now so i don't have to
deal with it's not a public uh yeah blogging platform or something like medium where these
things matter a lot more for now it's just me and the performance stuff i can just toss behind the
thing with the public platform is you know if people are going to submit markdown you have to
make sure that that's sanitized so you might use something like bleach or absolutely right
there's all these security concerns whereas if it's just you you can trust that you're not going
to you know inject malicious html into your site yeah hopefully not um and that is actually
something where you you know how you configure your static files and stuff when you're dealing
with um if you're using white noise which you probably are for uh serving static things it
will not do user uploaded uh things you have to use django storages um again apologies i'm super
sleep deprived but um there's no no but that's exactly right yeah um so that that i had a small
little bug on that and i was like what's going on here and that's what it was django storages
white noise will not do that you have to use django storages um just to get around that and
that's security thing um so some extras so this is more the list of when you break down like just a
basic django site there's so many things you can and should add to it so you know search is one so
I have basic search set up where I'm, I have a tutorial on this where it's just nothing fancy.
I'm not using Postgres built in search, even though I'm using Postgres. So I will add that
later on. But that's sort of a nice feature to add sitemaps sitemaps are so that's there'll be
like a slash sitemap.xml, which you can point to Google or whomever and say, hey, here's a listing
of my site. And you can add meta information around like how often to update it. That's
something you should do there are some gotchas on that um if you have a very large site so i
had this on a project a django project a couple years ago where i had 200 000 things in the
database um the site maps will only do i think it's 50 000 you can't just have a single canonical
site map you can break it into sections um and that's something you want to do um a little
tricky there um syndication the number was something like many thousands i think the limit
is 50 000 within django i think i found that generating them was so slow on my server and
such a hit that i made it 5 000 right but you know that could be you could change that number
of ways but just be aware that um there is a limit and you want to you want to have sitemaps
um syndication framework so that's if you want to have like a rss feed django also comes with
built-in support for that but you need to add that that's something else you should add even
if you think people don't use that a lot of people still use that and you can point other
things to it um especially if you're doing you know like a blog kind of site uh as i am but like
you know if you've got an rss feed then you can really easy go to zapier or you know microsoft's
power automate or whatever they call it and you can wire up your rss feed to post to twitter or
paste to facebook and it's like all because you created an rss feed whereas if you didn't you've
got like well you know i've got to write a little um agent that runs on the server and it checks
every so often if there's an update or yeah no don't do any of that just create an rss feed and
then use you know power automate or zapier or yeah and um i guess related to just the the suite
of tools that you use obviously i'm using google analytics i'd like to use something else long
term. But you know, analytics are good. I'm using uptime robot to just check if the site goes down.
There is so Django has a translation, a fantastic translation framework that comes with it. Because
this is just me, I'm probably not going to use that what I found actually, and this is another
reason why I want to move from PDFs to online is that readers, you know, can use the built in
browser translations, which is very powerful and very good for my for my book. So I'm not going to
using that but a lot of larger projects you'd want to use that and what else there's just there's so
many little things right even though i build these i build sites all the time it's been a little while
since i like fully built one out and there's just so many small steps that um i find myself kind of
you know it's like i have a list of like the first 10 steps but then to get to a step 100
you know i i kind of even i meander right even though you can't you can't get it like you you
have how can i phrase it like you have this you sit down with a piece of paper and a you know
glass of wine or whatever and you're coming up with your plan for your site and it's going to
have all these features and this bit will be written in react and you know all this stuff goes
on and the reality is that you know getting just getting the logins right so that it's 100 and
getting it so that when people sign up for the newsletter like they actually get the newsletter
and they only get one and they don't you know they can control that preference and all the
unsubscribe links are in the right places and that takes ages and then put again your tutorials so
they they come up nicely and that people can you know view them right or get an update from their
rss feed or whatever it just takes ages to get this yeah it's a big difference between that you
never ever reach your react no you never get well i think there's what's unusual about this site is
um you know so this is the prototype versus production thing is that unusually i already
because I'm redirecting traffic. Like I know it's going to get a lot of, you know, a reasonable
amount of traffic. So I'm, I'm a little more careful with this than I would be if I was just
throwing it out of the wall and see if it would stick. Um, but it does take a lot of time. Um,
you know, of course I've changing the admin. It's not at slash admin. That's the best practice we've
talked about. Um, and I'm using Docker throughout, um, which that's a separate discussion, but I find
that i know how to use it it works for me i'm just deploying the container
up there i know how to work it works for me that's like the that's the that's deployment
yeah isn't it um you know it's some what are some other cool things um so for for my continuous uh
integration i'm using github actions um which actually works pretty well is that deploying
straight to heroku every every commit to master sort of thing yes so i don't have like a server
uh staging set up right now i am again it's that tension between getting stuff up there
and adding all the things that i know i probably will at some point but again because it's because
it's just me i you know i'm it's different than a team production site yeah if i need to i can
always you know i can revert a commit i can roll back something um so i'm a little more fast and
loose there than i would be if this was a team of people no but that's that's exactly the right
thing you need like um you know it's like uh using kubernetes well great if you're a big team and you
need 500 engineers and they all need to work on separate projects and they need to be able to do
that fine brilliant but if you're a two-man man or two-person band what on earth are you using
kubernetes well i mean you what was what was your twitter comment that i loved the other day about
kubernetes well just you getting um your eldest to uh sort of look after your newborn it's like
that's like using kubernetes oh yes because i was saying you know if you just space out the kids
then they take care of themselves yeah um so i will and then and then so and then the last bit
is payments so payments is a total it's unbelievably messed up how hard it is for a small business to
do because you have taxes you have the you know all these requirements that have come in i would
love to just use a service i mean basically like so for me as a small business content creator i
just want credit card and paypal paypal is important because a lot of people use that
paypal is very challenging to work with you know stripe obviously doesn't have paypal support so
then you go okay what am i going to use there's charge b there's brain tree there's a new one
paddle i believe it's called that um damn peter real python's using that
handles in theory all the tax stuff for you but they're opaque on their pricing and and with so
much of this you know i've tried to talk to lawyers and other people who run platforms
a lot of these rules around nexus so do you have to create uh collect state tax you have to collect
you know vat even though i'm based in the states they don't really apply until you are
at a larger scale than i am you know something like seven figures but yet so basically you i
find that i even though i want to and i won't put time in to do this properly there is no way to do
it properly because the rules are being changed it's completely onerous for a small business to
do. There's no all-in-one solution. But if someone were to have, you know, credit card and PayPal
and handle the taxes, there's services like TaxJar and stuff that you can plug in.
But it's a real cost. And the other content creators I talk to, we all just go, oh my god,
this is so hard to do. And it's even harder for subscriptions. Part of the new rules is around
you have to you can't just indefinitely have someone be subscribed um i'm going to be doing
um not i'm not going to be doing subscriptions i'll be doing courses but it's still a lot of
work and honestly it's something that's post paternity leave hopefully post coronavirus that
i integrate all that yeah no i mean it's always been the way that i remember you know 15 years
ago trying to it was always iframes and you know it was just horrendous and then stripe came along
it was a lot it was a lot better yeah but it's still not perfect it's not stripes fault but
stripes had to react to this this new european law which just mucks it all up um and paypal is
still challenging and you know and that's the bit too where i like i really don't want to get that
part wrong right like so i have testing but um obviously i really don't want to get payments
wrong for a lot of reasons so for now um i'm still but in testing payments is just so and
that's really hard too there's no they they don't offer any way of like for instance stripe with
their row off connect platform whatever there's no way of testing it short of manually creating
an account and you know stepping through it in the browser and to know that it works but that's
not a sustainable testing program that process that's not like you know pi test go yeah i mean i
in theory you could do um you could do some headless stuff or you could do some of um yeah
But it's, but it's in practice from people who've spent time on this. Yeah. It's, it's just, there's no perfect way to do it. It's really, um, yeah. Challenging. Yeah. Challenging. So, so that's the state of things. Um, uh, the site, um, and the design of the site is something that I've kind of punted on. I mean, I love doing design, um, but it's a bit of a time trap for me. I'm just using bootstrap. It looks fine. It's up, you know, I'm focusing on keeping it up to date.
At some point, I will eagerly look forward to devoting time to making it look great,
but I'm not letting that get in the way.
Everyone's reading it, and there are accessories or anything.
Something like that.
Yeah.
What else?
Is there anything else?
So video, I'll probably be doing video at some point because I have things structured.
The way a lot of people do this is you can use, for private video, you could use YouTube,
but then it has ads.
You can use, a lot of people use Vimeo or they use Wistia.
Wistia is a bit better, but it's quite expensive.
And what a lot of people do, which I'll probably do, is you use YouTube for the free stuff so you
don't have to handle the bandwidth. And then you use something else for the behind the paywall
version. But we'll do episodes as I build these things out. It'd be interesting to talk about.
But the basic site, if I knew what I knew now, it's not that much code. It's really a couple
apps. It's the authentication. I'm using Cloudflare. Payments will be a big struggle.
i've got sitemaps and syndication but it's it's simpler than i thought it would be actually and
partly that's because other people who've built sites in django on this are doing things like
they're using redis and they're like sharding and all these things that i don't quite understand
to me you know it's like this running joke i have with my friends i'm like you're over
engineering redis is a good idea but you know rather than shard get a bigger redis you know
yeah to a certain point yeah I mean so you know as the site grows that's you know something you
know the email sign up that's something that would make sense to move over but I'm just stepping
through it and I'm and I'm actually I'm I'm really excited about having a project where I can do what
I want with it so I can have fantastic test coverage I can play around with new things you
know I've sort of realized that even though I could have had this up a lot quicker doing different
ways um it's worth having a personal playground and you know it feels good right i mean that's
the challenge too for developers if you're working on production product you're just constantly given
you know agile sprint sprint sprint sprint and sometimes i want to write tests sometimes i want
to play around with something and i you know because of because of where i'm at in my with
the work you know if i learn something i can teach it and part of that i can monetize so
it sort of self justifies or justifies taking the time to spend extra time on things um yeah to do
it properly yeah so i'm i'm excited about that yeah it sounds very exciting and you know you
have your own project you're working on carlton when it's ready we'll talk about it but yeah like
but you know i'm you know four kids fellowing it's no rush um so thank you everyone for listening
um i'm happy to you know we'll do further episodes on stuff um get feedback yeah there's more to be
said about you know this this prototype first production it's just for everyone it's it's a
it's a big jump and you just have to kind of make some decisions on how you do it and the important
thing is not to waste six months making it perfect locally and never getting it up you just gotta
yeah throw it out release early release often you know get it out there and just incrementally
improve and like you like the minimum viable product for learn django is that you're putting
tutorials up there they're readable you could subscribe to them use the newsletter brilliant
get it up there's no reason for it not to be up so we will um be back in future weeks episodes
on django um thanks everyone for listening we're at chat django uh on twitter join us next time bye