Django Chat

Django for Professionals - Book Release

Episode Summary

A special bonus episode to celebrate the release of William's Django for Professionals book release. We discuss what makes a Django site "production ready."

Episode Notes

Episode Transcription

Carlton Gibson  0:05  

Hi, and welcome to another episode of Django Chat. I'm Carlton Gibson. I'm joined as ever by Will, Vincent. Hi Will.

 

Will Vincent  0:11  

Hey, Carlton. Hello, how you doing? I'm good. So today's special episode week for me, I just released my new book Django for Professionals, which I've been working on for over a year. And so I thought, in this episode, we're going to talk about what makes a website production ready in Django. And what's that leap from? The defaults you have when you spin up Django with SQL lite and all these other nice things to like a real website you would deploy to thousands or millions of people

 

Carlton Gibson  0:35  

because this is the step you're covering in the book right, your first two books Django for beginners, Django for API's.

 

Will Vincent  0:40  

Yeah, so that sort of like beginner, intermediate advanced. This is like modern, up to date very cutting edge techniques that Django developers are using on the biggest sites in the world, and sharing it with everyone. That sounds very exciting. Yeah, I mean, it's the book I read. All three books I wish existed when I was learning Django, and I especially wish this book existed. Because having done this for several years now and talking to lots of developers, there's just a huge gap between, as I said, you know, spinning up a simple blog, and something that you would do in a professional setting. And there's just no good resources out there. And having spent a year banging my head on this, I kind of understand why that's a challenge. But we can talk through, you know, what those things are that that makes something production ready and kind of where I mean, because you can go up to certain things and say, Okay, this, everyone agrees that these are steps you should take, and then it goes into the realm of purely subjective and hyper complex. And so in the book, I go, right up to that point, and I discuss options, but I don't you know, there's some things that are sort of philosophical debates around web design in general. Django itself can solve those.

 

Carlton Gibson  1:42  

Right and different deployment plans. You might take one, you might take another.

 

Will Vincent  1:45  

Yeah. So yeah, that's what got you in the book we deploy with containers, which is very new and sexy, in part because I wanted to show it in part because it's easier. But also, I talked a lot about deployment, but it's not a book on deployment. I mean, you could have you could have a 500 page book on just, you know, deployment for one platform provider, let alone the dozens that are out there. So I had to draw the lines in some places.

 

Carlton Gibson  2:08  

You've got the Amazon docs, you've got the Microsoft Azure docs is like, you know, they're big. Anyway.

 

Will Vincent  2:14  

Well, yeah. And and one of the, one of the things I mean, so in the book, we build, use Docker to build an online bookstore with payments and a whole bunch of other goodies we'll we'll go through, but we deploy with Heroku, partly because I think it's one of the easiest ones out there. But even Heroku. I mean, it took me quite a while to sort out the docs on containers, we use stripe, we use sendgrid. And, you know, these third party platforms, it's hard to figure out how to use them. I don't quite understand why they can't have a basic guide for all the five, six major web frameworks out there, but for whatever reasons, they can, but is

 

Carlton Gibson  2:47  

that because they're pushing forwards and like to the Docker deployments, or some somewhat new and so they just haven't had the time to backfill the documentation?

 

Will Vincent  2:54  

I don't I'm not sure I mean, so let me let me pick on stripes light because I love stripe as a company. I think that's the best payment processor. They're out there. But so stripe is rolling out a brand new. So we use check out in the book, they're rolling out a brand new API, which is not fully documented yet. And I know this because I have some friends who work on checkout there who I complained to saying, Hey, I'm having trouble with this. And I've written official stripe tutorials for for Meteor and for other platforms. So I mean, I know how stripe works. And I'm struggling with this. And I keep saying like, you should just have a basic guide that's up to date, pick one engineer, like, you know, one hour a week, and just go rails Django Express. I don't know, PHP flavor. And even if it's just show how to do a basic implementation. And I think it's a combination of Yeah, they're pushing forward. They're constantly changing things. I think they feel if they do an official guide. There's just too many layers of I think poor accuracy, honestly. But I know but it's an opportunity for me as a teacher to to wade through it, but it is one of the challenges of this book is that a modern Django stack has a lot more than Django in it. So I found myself repeatedly fighting with non Django things. Docker would be an example. And I want to use it and show how to do it. But it's not a book on these other things. When people read the book, they will probably seem like, well, what's the big deal with Docker because I, for example, like or stripe, like I make it as simple as can be, and yet accurate. But it took me a ton of work to figure out how to do that. Because these are kind of untested things in a way. I mean, stripe is literally changing its API, I mean, Docker, there's so many different ways that experts do it. So ultimately, I had to pick one. And then really understand how it all fits together to try to make it simple, because it's not a book on Docker. It's a book on Django.

 

Carlton Gibson  4:40  

And but Docker is always constantly evolving still is it's still quite Yeah, it's all in line. You know, so I learned here and then no, a year later, I come back and it's like, all the all the command invocations I learned for mounting volumes ever will change. Now, it's not volumes, its mounts. It's

 

Will Vincent  4:55  

nothing yet you know that. Yeah. I mean, it's not as bad as like react or something. But it's Yeah, it's ever changing. And I mean, the big issue with Docker I mean, so we use Docker in the book because you can have a containers, which I speak about. So you can have an isolated operating environment. And that is good for your development. That's good. If you're working on teams that's good for pushing to production, I think this is a new thing will become more and more common, where you the containers that you use locally, you push those up into production that actually makes it easier to switch platforms if need be, you don't get locked into certain platform provider, but it's all new. And specifically with Django, there's issues around when you working with software packages use PIP or PIP and so we use PIP m in the book and you have lock files and you basically have this tension between my working locally or within Docker. And anyways, in the book, I'm very pleased with how it turned out. But it was probably a solid four months journey for me to iron out the Docker parts. But it's important because that's what most developers are using these days. They are using Docker, but they're doing it in not everyone's doing it this way many are, but it's not a there isn't a canonical guide to it. So you have to

 

Carlton Gibson  6:04  

you kind of never goes out in the landscape beyond the bleeding edge, right? Yeah, you're right. Yeah.

 

Will Vincent  6:10  

Well, because if you ever look at, you know, there are some open source Django projects out there that use Docker and it's like, being dropped into like 100 year war, there's just like so much code and so many decisions, and I find it overwhelming. So in this book, we just go step by step and we build up all the things that you need. And that's a lot of work to do. And I think also a lot of people don't do that because most people don't have the luxury of starting a big project from scratch. Maybe if you're a consultancy even then I think it's rare. So most people aren't, you know, user registration for example, like I spent a lot of time on this because I do build a lot of new projects, but most people don't you know, you airdrop into a project or you start something and barrel through and then you kind of are in the the mud and mire. But if you had a clean slate, how would you do that? So that's an example. One of the chapters we talked about using custom user models, but we also Talk about abstract user abstract base user, customizing all the templates using Django all off. So the first half of the book is really standard steps that you would use in any new project. So configuring static files, environment variables, that's basically gonna be the same any project. And then the second half, we focus on the bookstore. But again, we focus on things that are meant to be universal. So we talked about permissions. We talked about search, payments, file, image, uploads, security, performance testing,

 

Carlton Gibson  7:28  

and these are the holidays. So these go beyond the tutorials, these go beyond. You got to create these stuff yourself. So that's kind of cool.

 

Will Vincent  7:34  

Yeah, and I mean, we, you know, we joke that the tagline for this podcast should be It depends, because I think we both find it frustrating when someone says it depends, you know, especially engineers. And, you know, in this book, I really didn't want to just throw my hands up and say it depends. I really wanted to take an opinionated, make opinion, opinionated choices, but back them up and say, you know, I feel confident saying this is something that this is a Django best practice and then we get to a certain point, so Okay, Now here's where there's a diversity of opinions. Here's what they are, I'm going to give you mine and show you that, but trying to draw that line of, you know, where, where is it more my opinion versus the community's opinion?

 

Carlton Gibson  8:12  

Yeah. And showing showing a way of doing it where it lost, acknowledging it's not the one true ways is perfectly reasonable. Right.

 

Will Vincent  8:19  

Right. Right. So yeah, so that was some of the challenges of this book. I mean, the first couple books, the first two books didn't take this long to write, but I'll probably write a blog post on things I've learned when I've had a couple of weeks to settle on this. But I think writing an advanced book is a lot a lot harder. Because it's, you know, more figuring out the technology. And also you just more and more, you're bumping against these debates within the community on how to do things.

 

Carlton Gibson  8:45  

So it's not settled. I mean, one of the the, I call it a meme. I don't know if it's a meme. But one of these ideas that comes back again, again, is that you need to use concert you need to be somewhat conservative in your technology choices because otherwise you're spending too much time stretching. about what's new, but deployment is still an unsettled project and all the practices about how you get your static files in the right place and exactly how you serve them. What did you choose there, by the way?

 

Will Vincent  9:11  

for deployment?

 

Carlton Gibson  9:12  

Yeah, no, though, for static files just while it's in my head, because there are.

 

Will Vincent  9:16  

So we saw we configure it properly, which creating the directories. we configure media files, we use white noise. Okay. But yeah, that is that's another example of, we're just jumping all over the place, but that's fine. Like when you so let's say you so you've used Docker, you set things up, then within Docker, you can create a separate production environment within Docker, which you need to if you go through Django has this fantastic deployment checklist. So even if you're using a production database like Postgres, beyond debug, there's a whole list of things you need to fiddle with to be secure when you go online. And we've talked about this in some of the other podcasts we need to harden the admin

 

Carlton Gibson  9:52  

set the security headers, which we talked about, we talked about

 

Will Vincent  9:54  

headers, so yep, HTTP strict transport security, secure cookies. is forcing SSL clickjacking, there's a whole list of things that if you haven't done before you, you really should do. But again, there's an 8020 on everything, especially with deployments and security. I mean, you can spend all your time on this stuff. And at some point you have diminishing returns. And yet there is like some bare minimum things you absolutely should do, you know, allowed hosts, for example, so, so we cover the 8020. And then I talk about in here's where you can go nuts on it. But there's always more to do. And so I tried to pass along at least what I think is good judgment and how you spend your time and how do you get is what the bare minimum and then be aware of here the next steps to take there is a bare minimum as well though, because

 

Carlton Gibson  10:43  

there are automated bots automated scripts out there that are checking every every available port on every IP they can find on the internet for known weaknesses. So if you don't get over the baseline, it's not a question that of if your application is hacked, it's just when it's at so there is a minimum bar. You have to To get that far, and then, you know, depending on your threat model, you might need to go further.

 

Will Vincent  11:04  

Right? I mean, I would say, you got to turn the bug off, you got to have SSL, you should change your admin URL. That's the top three, if I would say, but there's, there's a bunch more. And you know, again, Django has this deployment checklist. But I think the challenge is actually more configuring how you have, you know, two different local environments. So this is where environment variables come in, which we use, because before Docker, it was a lot harder to test your production environment, not in production. Like there's jokes about, like, just toss it on production and do it, you know, do it live. Docker makes that a lot easier, where you can actually within a container, have these production settings, run these things, check them, you could do it on a staging server, you probably should as well, but to be able to do it locally. It's just fantastic actually, that you can use a Docker so we go through that in the book, but it's a lot to keep in your head. You know, you have local databases, production databases, you have local environments, production environments, and that goes away. Across the board with all these settings you know you you want different things locally because you won't be fast and you don't want to have all the security stuff but in production you do want to switch things around I mean the server right the default Django server you you don't want to play with that you want to use a barn or with you whiskey.

 

Carlton Gibson  12:16  

Yeah. So what did you choose that you choose? Green unicorn unicorn, whichever.

 

Will Vincent  12:20  

Yeah, so my thing around kind of corn I never

 

Carlton Gibson  12:22  

know how you say any of these things. Some people green unicorn, a unicorn. You're at Django con Europe and I was like, green you

 

Will Vincent  12:30  

casually mentioned to like my wife or someone non technical and they're like what? I'm like, you know, Django ponies and G unicorn and they're like, what are you doing? So yeah, so you chose unicorn just because just because I will actually no I did. I gave thought to this. I've used it myself in projects and also it is a little bit simpler to set up. You whiskey has more configuration options. So I think if you need it you might want you whiskey but as a default and certainly as a teaching tool. g unicorn is the Project chairs.

 

Carlton Gibson  13:00  

Yeah. And as well, like there's something in my head. So I'm talking about naming I heard you whiskey rivals couldn't use whiskey and some good micro whiskey. The joke was that Europe is a

 

Will Vincent  13:11  

different thing

 

Carlton Gibson  13:11  

where it could be like the, the Greek letter there, which everyone knows, I never know these things.

 

Will Vincent  13:17  

But a classics major.

 

Carlton Gibson  13:20  

I sort of do classics on the part time. That's my little hobby. I'm learning in ancient Greek too. So it can be an old man and replace it with the original. But that's it. That's for another podcast. What was I going to say? I was gonna say something really great. Oh, yeah. So in the US gi docs, it says, This is great. If you're building a whole, like a hosting platform or something, right? It's deliberately more complicated because it's for you know, if you want to be able to provide a hosted environment for people to put their Django apps in, then you know, you whiskey perfect, but if you're deploying your own app, you don't need any of that. So gonna cause a little simpler, as you say,

 

Will Vincent  13:55  

right. And that, you know, that's just one example of many, which I think again, is why because I sometimes Why did it take me so long to write this book? Because I'm pretty fast writer, I know what I'm doing, largely speaking with Django. And I think it was because there's so many decisions just like that, I mean, dozens and dozens of micro decisions, where I have to think about it, and then explain it. And I, you know, I usually I pick one. And I explained the differences, because I want to be, you know, in some ways, I was trying to cram everything into this book. And it's a long book. I mean, it's almost 400 pages. But it's still, there's a lot I just took out eventually, because I just couldn't, couldn't fit it all in. And, you know, I'll get to it in other ways. I mean, one of the sections I'm most pleased with actually is the permissions area, because permissions is, I think the RM and permissions are, I would say the two things that advanced developers or professional developers spend a ton of time on, but there's not especially permissions there's not a lot of good educational resources, really any the that I've seen out there and, and yet, the ability to create groups to set permissions you know you on a on a forum or on an action. So in the in the We, we set permissions for people who can see all the books. And you could change this to be individual books. And then when a payment goes through, we put in the view, I was really pleased with how elegant I made this code as part of that action of the payment, you flip the permission on the user. And so I was I spent a lot of time trying to figure out how to make that clean. And I haven't seen it done before. So yeah, no, I don't

 

Carlton Gibson  15:27  

think that there isn't there aren't guides out there. I mean, people quite often there are issues on the developer mailing list or on the track about confusions around the permission system. And, you know, it's quite fun with all this,

 

Will Vincent  15:41  

but you have to understand again, yeah, people you know, people get dropped in dropped into these code bases and you don't have the chance or the opportunity to learn or to build it up. So we build it up and we talk about when to groups makes sense. You know how you handle permissions because at a minimum on most sites, you're going to have some At least three levels, probably you're going to have you know, your, your admin, your super users, you're going to have, you know, in the newspaper example, the editor who can do more things, and then maybe a writer, so at least three permissions. You know, another example would be like, if you had a university, you'd have teachers and students, they'd have different permissions. But this crops up right away, and is very, yeah, it's hard to hard to think about. And if you are architecting, and building this out, and you get it wrong, it's a lot more work to backfill it than to get it right the first time.

 

Carlton Gibson  16:29  

Yeah, and again, like this. That's exactly right. When you're talking about anything security related, it's very important to just take the extra time to measure twice and cut once because you can't afford a mistake you.

 

Will Vincent  16:40  

Right, but how do you how do you learn that, you know, this book, I think will really help people really you learn it through pain and making the mistake on the job. And that's, you know, embeds the learning but is not not not the best way to do it. I've tried

 

Carlton Gibson  16:56  

to do it in a sandbox environment is perfectly good and safe and it's a good learning experience, but to do it on production environments, like wow, that was my, that was my business.

 

Will Vincent  17:05  

Yeah, and I mean it. And again, this is maybe it's top of mind because I've gotten a number of emails just this week from people who read my books and have said, Hey, I have a new job, and I'm in this new code base, and ah, you know, and that's, I tell them like that, that's all it is for me to you know, I mean, it's just, that's how it is for anyone. And in those environments, you need to, hopefully, there's someone there who can tee up some, just how do you eat an elephant one bite at a time, right? Like, find some smaller things, like don't have some big integration, you know, testing thing that they just toss at you, you know, find some small stuff, like it's gonna take a month, at least, to wrap your head around it. And even then, you know, a lot of times on these big sites, you know, there's areas where you just kind of go like, like, I hope I don't have to touch that, you know, you're not gonna, you're not gonna be responsible for everything.

 

Carlton Gibson  17:50  

There is like that on every big site. That's,

 

Will Vincent  17:53  

you know, somebody voted some places or I'm like, I don't know, if you work out for a year or two. You're like, Oh, I just don't want to touch that. That's all you have confidence. What else? Oh, so search. So this is, this is something actually my my talk at Django con in September is going to be on search. So I wanted to include search in the book, but figuring out how to how to do that, because search is infinitely complex. And most people just jump right to using elastic or, you know, these solar, these full throttled solutions with no build up of how do you do it. And so I'm really pleased with the chapter where we, we add search because you want it in almost every site. When we talk about forums, we talk about filtering, and just layering on the complexity, then you can build in postgrads built in support, then you can get to, you know, elastic if you need it, you can do hosted solutions, but just doing a step by step solution, because, you know, search to if you're using, you know, let's take a elastic locally, you'd have to spin up another server or container, like it's very non trivial to get that going. And most people just drop into that. They don't have a chance to build it up and think about like, well, how does it really work? And really, it's a form and a filter. And you're passing the data back and forth. And if you go step by step, you know, just for me with my understanding, I've spent quite a bit of time with search on various sites, but having to go through it to teach it myself really helped me and I think it'll help others understand what's going on there. Because it's, it gets complicated, fast with like, you know, weights and you know, all these things, but fundamentally, it's, you know, user input and a filter of some kind.

 

Carlton Gibson  19:28  

Yeah, and like, as well, that the, if you can get away without jumping all the way to Elasticsearch or whatever, it's, it's doing that because there's a maintenance overhead to that to run. An Elastic Search cluster stable in production is actually difficult that, you know, people have a full time job doing just that.

 

Will Vincent  19:46  

teams have full time jobs doing that. Yeah, especially on ecommerce sites. Well, and we had Simon Wilson was on recently and on his personal site, I mean, he's got a fairly basic implementation and it works just fine. And I think that's another thing I want to get across is, it's okay to have basic implementations if they work that's quite elegant. I mean, Jacob Kaplan moss gave a talk at pi con this year on static, static files and talking about, you don't need to jump right to a CDN right away. You know, there is value in the basics and getting those right. And yeah, and he even was, you know, just to go back to search, though. I mean, I see, I did a bunch of research, and it's implemented a lot of different ways, you know, you can, you can do it as a POST request, you can do it as a get request, either you can do it with function based views that are just 50 lines long. You can do it with a class based view, as I do in the book, where it's like three or four lines, you just update in the context data. So I always strive just just in my own code, and certainly when I'm teaching, I want to explain it. But if there is an elegant, accurate way to do something, I will go for that every time.

 

Carlton Gibson  20:49  

Yeah. What's nice is if you like the thing with the danger with a class based view is you just kind of fill in the one class attribute that does the magic and you don't understand Yeah, he was Yeah, no, but If you build it up and told the story, then that understanding

 

Will Vincent  21:03  

is great, right? And that's, that's partly and that is true. That is the danger of class based views. You're just, you know, turtles stacked on top of themselves. And so you, if you just drop in and change one thing, it does feel like magic. But I do in the, especially with the user user registration, chapters of the book. And actually, throughout, I'll say, if I'm going to do some magic, I'll say, Hey, here's how I figured this out. So for example, like updating templates with, you know, the email that new users get, you know, I don't just jump to the file, I say, Okay, well, how do I know where this is? How do I figure it out? It's like, well, I literally a copy paste a part of it. And I go into, you know, the Django source code and go up. Where is it? Like, oh, it's not there. Oh, because it's part of Django all off because I'm using Django, although and so now it's in Django all off. Now I can see where it is. And now I can see Oh, there's a structure and now I can see the other templates. And now when I told you how to create the template directory structure in a certain way because Django off goes, uses accounts versus Django uses registration. So I actually spend quite a bit of time explaining how you figure this out, because I want to, like teach people how to fish, not just give it to them because I agree like that is, it doesn't help I just give it to you with no context, right? And template loading is, is moderately

 

Carlton Gibson  22:15  

cool, right? People get confused about that. And then how do I override a template? And how can I extend this template so that I just fill in this one block without having to you know, re implement the whole thing and like, to go through that is actually, you know, something that people will learn a lot from, I think,

 

Will Vincent  22:30  

I think so. I hope so. It took a lot of time to write. So what about the thing with?

 

Carlton Gibson  22:34  

Yeah, going well, I was gonna set so what about performance? Do you do anything that because you go to deploy, it's alright, you know, you're testing it locally, it works. Have you done anything to when you put it up there? You find it your site crashes? Why? Because you've got no slow queries, if you talked about that.

 

Will Vincent  22:49  

Yeah, we do. We have a whole chapter on performance. So there's two ways you can do it. So one is you want to, you can do things locally. So again, with the benefit of Docker, you can test your production environments locally. So bare minimum Things Django debug toolbar I need to add, I talked through that there's actually a gotcha with using it in Docker that I walked through, because you have to find the correct. What is it the correct port, there's something a little tricky, but I walk you through it. But then yeah, so you want install Django debug toolbar, look at your queries. And then things like select related prefetch related, these are go to tools to basically, they're complicated topics. But basically, if you have a lot of queries, often, if you can boil it down to one, big one, that's more performant. But you don't really know until it's a production environment. So I talked about things like you will probably want to implement these, but don't just do it. And don't just do it locally, like put the site up live, you know, things will appear that needs to be addressed. Same with adding indexes to databases, you may think, oh, I'll just index a whole ton of stuff that you know the user ID, but you should hold off and the problems will present themselves and there is a cost to indexes for example. So all these things I talk through, you know, compressing your front end assets caching. You know, Django has four different built in layers per site per view template, and then low level API. So we talked about how you would do it, but then also say, you know, don't necessarily just jump into doing it because that's, you know, premature optimization is a problem. The root level No. Yeah. Donald Knuth, I think. But, yeah, because you're gonna get it wrong. You know, when you put your site out live, don't worry. Like, people are like, what am I going to work on? Like, things will jump out at you like, Oh, this is on fire that's on fire. That's actually the perfect time to optimize it. Not just saying, Oh, I'm, you know, I'm gonna add Redis. Raph the bat, I think you should wait until you need it.

 

Carlton Gibson  24:40  

Yeah. And also where you think the performance bottlenecks will be. That's not where they'll be. They'll be somewhere totally different. And then you'll discover in production, where those small number of performance bottlenecks are you optimize those and all of a sudden your thing is, is fast, and you haven't actually had to do too much work.

 

Will Vincent  24:56  

Right. That is another trap is that it's when you wait for problems to present himself and put himself into a hierarchy. It's way less time. But you know, again, how do you know what the problems are? I mean, you and I have a sense of these are the common things because we built a bunch of sites. We're familiar with Django, if you haven't done it, it's a constant, just like, Oh, my God, Where'd that come from? So the book sort of says, you know, here are the major things, here's how you would do it. But, you know, I do give the advice of wait. That's some pro advice like there, wait, if you can, there are plenty of you know, if you're worried about those things, go talk to users. Don't prematurely optimize your site for a million users go get a million users, and then you can figure it out.

 

Carlton Gibson  25:35  

You get 10, and then figure it out.

 

Will Vincent  25:37  

Yeah, but that's an Yeah, that's an engineering trap. Right. It's engineering stuff is fun. And even on deployment, I talked about how you know there, there are deployment engineers for a reason site Site Reliability engineers. In fact, most engineers at a big company are working on deployment performance issues. And it's really fun to do because it's, it feels like binary like you can look and see up page load time got better or in our uptime, increased fields. satisfying. But should that time be spent eking out those gains? Or should you, you know, go talk to users and make? I don't know, like maybe pick on Korra. Right, like, hey, Cora, maybe I don't have to log in all the time to use it. Would that be a better thing than, you know, being proud of how fast your site loads? Probably. So those are like engineering traps that you get into because you can document it feels good. But is that what you should work on? I mean, generally, you probably want to work on what you don't want to do in a startup setting.

 

Carlton Gibson  26:27  

Yeah, I mean, as well, like, in a way that it can be a bit like busy work, or, you know, it's like, yeah, I feel like I'm doing stuff I'm Yeah,

 

Will Vincent  26:32  

exactly. But I haven't

 

Carlton Gibson  26:34  

got anything done at the end of the day, spend all day in the inbox. That's, that's not productivity. I spent. Yeah.

 

Will Vincent  26:38  

But the thing is, you deploy but you get some, yeah, you do get something done, but it's probably not the most important thing. I mean, that was something so i saw i started what depends on the scale, right? depends on who you are on the scale. So I was at Quizlet, which is now a quite a big site very early on, and I give the founders a lot of credit that we about once a week. Several people in the engineering team as a small engineering team would go in to schools and visit and just see how it's being used. If you think about that's a huge cost, right, five days a week, that's a 10th of the work day. And then really the whole rest of the day, we're talking about things that we would learn. And that was a great way to see how things are actually being used, you know, things that we didn't think about would come up. I mean, spending the time with your users is hard to do, but always the best thing to do again, and it doesn't feel as good maybe as these known performance issues that you want to address. But there you are.

 

Carlton Gibson  27:31  

Yeah, I mean, I could go on all day about this, like when it's his job, I'm

 

Will Vincent  27:37  

happy. How does that how does that relate to you with, you know, being a Django fellow, do you see these? Also these sort of at 20s, these areas where engineers get really excited about working on stuff, maybe it's not the most relevant?

 

Carlton Gibson  27:48  

Yeah, I mean, the thing that comes up is when people want to propose a feature, and they want it to be an exact way so that in their particular code base, they've just got one line of code to write and it will magically does that. In the cost of that is extra API surface area for the entire user base of Django. And on balance, it's probably not worth it for the entire user base Django, when what we could see is that this one line for that one person could just be like half a dozen lines overriding one function in a classmate view. And we'll, you know, we'll say no, we're not going to add that extra service, say, API service error over the whole API, because there's this quick fix available. And then they get upset about that, because they want it to be just so for them. And it's a new light. Well, that, you know, you could put that in your own project, or you could put that in a third party app or, and that's what,

 

Will Vincent  28:34  

that's the default. Make them feel, make them feel your pain and also convey that you understand their position, because everyone is, you know, everyone views the world through their own eyes.

 

Carlton Gibson  28:44  

Yeah. And so that's the like, trading that balance where Django is useful for the majority use case and we include the hard batteries, you know, the things that are difficult for a user to implement themselves, we will will include, but we can't necessarily include Absolutely everything for absolutely every use case, because then becomes unworkable.

 

Will Vincent  29:03  

Right? Similar attention. Yeah, I mean, in the in the book too, I mean, especially around, there's so many areas where I say, you know, hey, Django has got your back here, but let me explain how they have your back, you know, security, user registration, performance. I mean, there's way more things built in, you don't have to think about, versus these toggles that you can customize, and even the ones you can customize, I think Django does a fantastic job of sort of being objective about it, you know, depending on the caching, for example, offering, okay, may hear these different levels. And, you know, there's always Django always gives you the option to roll up your sleeves and dive in and get crazy if you want, which is fantastic. Because a bunch of some frameworks, don't you know, they're they really great out of the box, but they're hard to customize. Django is a little bit more work, but it's eminently customizable across the board. Which is its strength.

 

Carlton Gibson  29:51  

Yeah. Okay.

 

One thing I liked about what you've talked about the way you've done talked about all the topics around Django that you've experienced in the books, it reminds me of a conversation with Back in Episode One or Episode Two, when we were like, you know, Django is almost a front end framework. And if you look at the whole stack, you know, it's not front end, it's not CSS, no JavaScript, it's not react, it's not whatever. But if you look at provisioning VMs, or database servers, or Docker or any, it's kind of a bit front end and what it sounds like you've placed Django inside that wider environment. And that kind of sounds really cool.

 

Will Vincent  30:25  

Yeah, I've tried to and the thing I like about having these, again, these three books is I feel like I've, you know, it's beginner and intermediate advanced, and I'm constantly going to be working on them updating them. And both as Django evolves, and also just, it's a chance for me to keep improving how I explain these topics. So yeah, so it's an exciting time. And I should mention, so the first so that when I

 

Carlton Gibson  30:46  

pick up the book, How do I do that?

 

Will Vincent  30:48  

Yes. So you can go to the website Jenga for professionals calm, which we'll link to in the show notes. And you can read the first two chapters in the introduction there which will walk you through Docker and some projects and talk about what's going to come It's available as an E book, and it will be on Amazon print and Kindle. By the time this episode comes out, if you have a choice, I would recommend the E book because you'll get updates. I can't do that on print and Kindle but if you want a standalone copy, you should go ahead and get those on Amazon.

 

Carlton Gibson  31:19  

And if I wanted to get the all the books is a nice little

 

Will Vincent  31:22  

sell for the ebooks there are bundles. So if you buy so each book is $39. And if you buy two you get $10 off if you buy all three, you get $20 off, there's links on my site, Ws Vincent comm slash books, which I'll put in there. So yeah, trying to make it easy for people to understand and, and get to and, you know, for me Actually, I've spent a lot of time all my time creating and now I'm switching my brain around to the marketing and displaying I'll probably do a video where I walk through the project and show, you know, a couple minute video show. Hey, here's what we built. This is actually something I'd like To add for my first two books is to walk through because the first book goes through five different projects. And I think people kind of buy it based on trust. I think like they read other tutorials I have, but I can, I can and should walk through and show quick hey, here's what we're going to build kind of video. Okay, even though a lot of it is the plumbing, which is the interesting part.

 

Carlton Gibson  32:18  

And if I wanted to get update on those, those kind of comments, I should subscribe to your email or

 

Will Vincent  32:22  

you. That's right. Yes, I have a newsletter. We'll link to it, where I do maybe once a month, only important stuff linking to new tutorials that I've written to podcasts. I see amazing stuff out there. So it's very intermittent. But yeah, I'll link to the newsletter. That's the best way to be updated. There's also an RSS feed through that is available on the site I'll link to, and it shows up in the Django community feed right. I'm not sure don't charge you that but it's on the Django community feed.

 

Carlton Gibson  32:50  

Yeah. So you submit and then we just verify that it's a valid jangle topic blog, and then we that gets added to that feed.

 

Will Vincent  33:00  

Okay, yes, yeah. So someone submitted me, which was very kind of them. So it's what so when I publish things with the NGO tag on my site, it pops up.

 

Carlton Gibson  33:08  

Yeah. So if you go to Django project calm and the community tab, you can find the the link to that feed.

 

Will Vincent  33:14  

Yeah, that's a really good feed for people. Yeah, that's out there. Email me feedback. I'm really proud of it. I'm I want to see how people think. But it's been a full year of work. And I think it's really going to help people out.

 

Carlton Gibson  33:25  

Well, well done. Does a little celebration to get it out there.

 

Will Vincent  33:28  

Yes, yes. All

 

Carlton Gibson  33:30  

right. Thanks very much. That's everything from us this week. Take care and join us for the reg show next time. Bye bye.

 

Will Vincent  33:35  

Okay. Bye.