← Back to Show Notes

Transcript: Django's Async Future - Tom Christie

Hi, and 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?

I'm great. How are you, Carlton?

I am marvelous. And today we're joined by a very special guest, Tom Christie,

creator of Django REST Framework, and well, you know who he is. Hey, Tom, how are you doing?

Oh, pleasure.

Thanks for coming on.

there's so many things to talk about let's just as a broad structure i gotta ask you about jenga

rest framework and then really want to talk about encode and async and the future of all that um

but maybe before we get to that so how did you learn how to code because you're doing some really

cool almost like bare metal programming type stuff with async and i know you you have a formal

background in computer science is that right? Yes yeah so I started out the way I guess

quite a lot of people who are my age who are in the programming industry did which was writing

games for a ZX Spectrum and doing a bit of you know basic programming there and also on

um on whatever thing you know the the cube basic as well wasn't it that was the the windows dos one

i think it came with snakes and something else gorillas was another one okay both of you

no no gorillas is where you threw the bananas right and you had to throw the throw it up and

hit the other building with the source code so you could go and have a look and then try and

figure out how do i turn that into a flying triangle instead or yeah i thought you're

going to talk about we had nicholas tollerby on talking about the what's carlton what's that

british thing that you all did the bbc the bbc micro did you did you play around with that as

well tom because in the states we didn't have anything like that no no no that was not a thing

But, you know, it was kind of by accident trying to figure out, well, what are you going to do once you get to leaving school age and just ended up doing a computer science degree.

and um i've i've worked in a few different areas kind of since then so i ended up moving into

when i finished my degree i then went and did a master's in computer speech and language processing

it just seemed like an interesting area i was really interested in artificial intelligence

at the time so i went and did that and um then worked in that area of the industry for a while

and then like most people who were on that small master's course with me we eventually all ended

up moving out of speech recognition because it was so it was such it's such a too soon domain

well yeah it's still like in terms of where the money was at yeah it was too soon because it was

right before you know that was all before siri came along and you know a big boom in all of it

but even so i think it's always quite a difficult space to work in a way because it's only really

with the mega corporations and then you have this little research team and it's such a specialized

area that you're working in um personally i found it quite frustrating eventually so

well there is and i'm sorry i was just because i know that um with current options there's

for doing um audio to text one of the few non-megacorps is speechmatics which is i don't

think a megacorp um but it's based in the uk but maybe they're bigger than i think they are

in terms of i don't i don't i don't follow that scene anymore so i played around with transcribing

our podcast and it's like yeah it's like google amazon you know microsoft and then there's like

a uk one and they had a nice drag and drop option not you know configure an api to test it out and

yeah sorry i interrupted please no that's okay um and then ended up

slightly by chance really but ending up working in networking so worked with a content distribution

network um who were doing stuff with peer-to-peer and building caches to live inside isps in order

to save them traffic on all the peer-to-peer stuff that was going through their networks

um did that for a while and then eventually at the same time as i moved to brighton decided okay i

just want to have a complete change of stuff and i would like to be able to again with both of those

things they were really really kind of um but they were very deep technical kind of areas

but i didn't know how to build my own website right or my you know or just to do those sorts

of things and that freedom to be able to okay right i know the basics of how to put stuff together and

build stuff that i can do with and eventually you know build up the skills that you can use to

potentially build a company or do something like that rather than you know the backend stuff and

when i started um yeah when i started kind of working in the web industry uh that was you know

i guess about a year later was when i started working on rest framework right and so did you

find django at that point uh yes i guess that the company that i was doing that i was working with

at the time must have been using it no actually i think they weren't i think they were using they

were using java and that was massively frustrating but yes i had found right so i went looking for

django right to corral them into look we should do more of this stuff because that stuff's really

painful for me well and was the the natural language things was that in python um because

most of it is now um so was python around when you're doing your degree it it certainly wasn't

very big on the scene right and i've struggled to remember at what point i switched over from

bash scripting and pearl to oh wait a minute this is really really helpful like this is much better

i think it probably was yeah i think it i think it probably was after i'd left the speech

recognition stuff because i can remember like some of the more impressive things that i did

when i was there were very complicated sets of bash scripts and pearl strung together because

for all of the um with all the stuff where you're dealing with large corpuses of uh audio and

you know you need to do so much wrangle basic wrangling with them you kind of got that stuff

and then you've got your like very detailed here's my bit of c that right you know actually

does the signal processing and pulls the waveform out into a set of different signals that we can

yeah and that's still the case though right because a lot of the scientific python libraries

are extensions around the underlying c implementations and stuff so it's it's not

necessarily changed at the implementation level even now today possibly so well well that background

actually that makes a lot of sense i was just saying before we recorded your your talk at

jingo con europe this year on async and future of django was fantastic and you did a really good

job of breaking down going a level deeper level deeper on the layers of abstraction that i think

is often assumed because people work at their own um level but given that you've jumped about a whole

bunch of those levels professionally it makes sense how you would be able to wrap it up together

you sort of kept going up the abstraction layers in a way to um you know working with web stuff

but anyways we'll link to that talk i think for for people interested in async your talk and

andrew's godwin's talk which we'll link to from django con this year i think are the

the two places i point people to um so i want to dive into that stuff but did you

what else with your story so you were doing web stuff and at some point you did um django s

framework and then encode right should we finish the professional yeah so what's the origin what's

the drf origin story what's okay yeah sure so what happened was basically there's this one

big motivating factor i have no idea kind of where it came out of but there was the idea was

why on earth is it that out of all these apis that we're building none of them are web browsable

why on earth is it that when we're having to interact with our web apis we're having to do

that from the command line rather from than just being able to point a web browser at it

um http is designed with content negotiation so that you can serve different representations to

different kinds of clients so that a programmatic client could get json but a web browser could

request html instead and i had a couple of ideas about how you would do it because there were

there were things that made it awkward to do so for instance browsers not being able to

post json inside one of their regular forms i mean this was a way back so even where javascript

was was a bit different then as well but even sending non-post requests you know to send a

put or a delete you know the http verbs are available forms themselves don't natively support

it right and i had a couple of ideas about well look here here are different ways that you could

get around that and it seemed to me such an obvious and such a beneficial idea that the web

api should be web browsable that you know i looked into oh can i use one of the existing frameworks

at the time to do this and eventually went no i don't think so let's just you know let's build

let's build a proof of concept first and show that you can do this thing and then it just kind of

snowballed from there you know it was the big like that was kind of always the big motivation

because i thought it was such a you know i thought it was an important idea i ended up wanting to

pile more and more time into improving the framework so i could show people how i thought

we ought to be interacting with apis and the browsable api is still like you know i don't

know how many years later now so seven eight nine years later perhaps the browsable api is still

really cool you know you fire up a new api and you you go to it and it's like oh yeah great and okay

at some point you know you get nested serializers and all the rest it doesn't handle those but

forget up and running it's like oh wow this is super and i don't have to crack open the command

online and i can play around i can create some models and still it's you know still an awesome

thing yeah i mean obviously you know i think there are nicer things that we could be doing with it

but um time and time and effort yes well there's i mean it's a great for i mean i think of a lot

as the admin for django itself where it just works it's fantastic and you get it out of the box and

then if you need more you can use postman or something the same way as you know you shouldn't

force your django admin to do too much but it's just that first time experience of like you can

see it and it works you know that's really really powerful i mean so for example like in my my book

my book um on django apis i mean it's all using the built-in um web views and i say you know you

can go to postman you can do all this other stuff but really most of what you need especially when

you're starting out it's just the first time first time i saw visually those things actually i think

that's the case for many people they they you know because the command line just doesn't do it

yeah well having having the immediacy and the accessibility of it but that's interesting you

almost worked backwards so you you started with that idea rather than saying you know tasty pie

or twisted or the other ones you know the serializers were the issue you almost sort of

started with the end goal there is that correct um yeah yeah yeah definitely yeah yeah it was um

it was tasty pie and piston at the time i used tasty pie i never used piston i should well i

should have done what jasper noah the the author of piston did which is found bit bucket and then

sell that to atlassian for who knows how much that's why he's not on the scene anymore right

Yeah, he's still sitting on a desert island feet up.

So, you know.

Wow.

Well, so Django has frameworks.

So 3.11 is coming out.

Well, it will be out by the time this is released.

It's so feature-complete as is.

What do you see as the future for that project?

And then we'll get into all these other projects.

I can't necessarily think of what more it needs beyond polishing,

but, you know, you two wrote and maintain it.

yeah so at the at the moment i would say it's just in its mature phase now if there if there is

another big jump i think that to me the obvious place would be so we have the we have an admin

like view in there at the moment right but it's not great it's not that great um and i think like

the obvious place that you could put some improvements in would be making it so that

rather than the browsable api defaulting to look like here's a bunch of json and here's some form

fields it's like well here's your tab for the json and here's your tab for i want to see this

data displayed in a table and be able to paginate through it with pagination controls and so on

so yeah if there's another like big jump to happen there i think that's probably where i'd be most

interested in putting time in that's kind of interesting i mean there's also you know there's

also i guess yeah yeah that's that's where i'd be most interested right because there's someone who

users DRF for building projects in the commercial environment have done you know it's how I found

it I was building iOS apps and I needed a back end with an API and a new Django and I was playing

with tasty pie and I was like this isn't working for me and I found DRF and I was like this is

working for me for me still in that still thinking about that environment it's the it's the integration

with the open API tooling the schemas the client generations and all that stuff and that can't be

part of REST framework really,

but integrating with that ecosystem

and making that more fully fleshed out,

I think that that's where the growth is

for over the next short term period at least.

Because I think that's, you know, as a jobbing programmer,

that's what you need, you know, you need your API quickly,

but you also need all these client libraries.

And if you can produce decent docs and, you know,

code examples and, you know, and all that stuff,

The other area that I'm particularly interested in as well is, you know, at the moment we have what you have if you're coming to a new project and you want to build an API, you've got two different slices of option.

and one of your options is you use a completely hosted service something like firebase

or something like that and you build within their service

and you have to be happy to kind of live within the set of constraints that they provided and

know that you're going to stay on their platform indefinitely or you go the other route and you

work with a framework like django or rails now i think you have to host your own really nice space

that's somewhere in the middle which is you know what's the easiest way to get put you know express

it like this like what's the easiest way to get started with django oh well start building your

admin and your api out in this hosted service here and you can put some you know you can start

putting data in and so on and you can start interacting with it as an api and when you're

ready here's this big green let's go button and you hit that and you've got your code and you're

ready to start running that so that's another area that i'm interested in working in so the

other big project that you was around right at the beginning was make docs right which is

which is incredible that it even exists because sphinx was the big beast in the room and you

created this other thing was it is my burning question was it just that you hated restructured

text so much that you wanted to use markdown or was there another no it's just i enjoyed working

with markdown so much um you know in the tour and the tooling for markdown was a lot better you know

as well like there's so many markdown editors and yeah um and support for markdown came to github

before support for restructured text and you know all all these sorts of things um and yeah it's

you know it's a trade-off obviously like you know it's still all these years later it doesn't have

interlinking um just pushed out a package that does um you know you point at your python package

and you can you can inject your uh your doc strings into your you know your markdown

your pros is this a wrap around around docutils uh is it it's um it's a mcdocs equivalent of

uh is it autodoc that right okay this is an equivalent of autodoc but for mcdocs

so it'd be like creating api documentation yes it is yes placing api documentation within

your prose documentation so that came out last month and we're using that so far with httpx

uh i can't remember if i'm using it in any of the other projects yet okay and what what's that

called for our listeners we'll put it in the show notes uh automac docs maybe i can't remember okay

we'll find it we'll find it it's in the show notes i'm using it now so i've forgotten the name

we're just okay abstracted away that's really cool so you've just said the big exciting thing

as well that you've mentioned httpx so tell us what that is uh yeah so actually i'll i'll start

from what was the motivation and then i'll kind of come to where it is now and what it is now so

the gap that was missing was well two things in particular number one how do you you know what's

the async http client for python so you know with requests you're using the thread concurrency model

and you're generally only able well you're only able to open as many outgoing HTTP requests as

you have threads running whereas if you're using the asynchronous model so and that might be you

know say maybe 10 or 20 concurrent requests whereas in the asynchronous model the process

of making a request doesn't block all of the other little async tasks that are off running

concurrently alongside your other one thread of control that you're looking at right now and

you're able to serve thousands of concurrent HTTP requests now the big question was well we've got

requests at the moment but how do we bring async functionality to requests so i've put a bunch of

time into trying to look at what would be a good way of doing that and eventually that's uh evolved

into you know what let's build a complete http client from scratch all the way through because

we need to build one that is async capable up front and center and also you know like we're

in a different landscape now than when requests started so let's start by building an HTTP client

that uses type annotations all the way through so it's very very precise about exactly what the API

and um and another big thing that it started to provide is http2 support right so there's

there's one other kind of halfway incomplete python http client that supports http2

um but there wasn't really anything and fully mature that had that in place so the two big

things were let's look at async support and let's look at http to support um what it's evolved into

is a an http client that is largely requests compatible so wherever possible the api

meets up with requests so i can come along as a long-time request user i can get me import httpx

i can do my get and it will be more or less the same yeah that that supports async uh right now

that means two things so we support async io but we've also just added properly support for the

trio async library as well can we have a little sidestep what's the difference there

async io versus trio what's what's good no but you know in 10 words what's the difference between

those two uh so so trio is an alternate implementation instead of async io and

of like the event loop the big thing is is that uh yes the trio people were bashing me over the

head because it doesn't use event loops or something but um and it had essentially it's

more thoroughly designed it's got this really nice core tenant called structured concurrency

which doesn't just apply to trio but is a general idiom for that um that they've kind of discovered

for look here's a sensible way to deal with concurrency without having callbacks all over

the place without potentially leaking tasks that you forget about having uh you know well-defined

semantics for what happens when tasks are cancelled and so on it's a really thoroughly designed

alternative to async io it's a bit awkward because the two things are completely incompatible

but from the point of view of httpx it's largely irrelevant we've got these two tiny little back

one for asyncio and one for trio and we're able to support both of those uh yeah both of those

different platforms um the plan is we what we did have we did have sync and async support for httpx

momentarily i've dropped out the sync support because we needed to re-engineer the way that

that works previously the the sync code was kind of bridging onto the async code so it would seem

to the user like you're running synchronous code but actually you've got an event loop running

under the hood an async code running underneath and we're actually switching that round so that

instead the sync version of the client will be a pure sync version of the client and the async

will be a pure async one and the folks working on who worked on urllib3 which is the thing that

powers requests have some really smart ideas about how to do that so we've been working on that basis

right super and i was looking i've followed that conversation i was a bit um i was a bit like i

don't drop the sync support because i just want to be able to pull in httpx as my replacement but

having looked at it um async ko has this nice function called run which you can just call from

a synchronous context and you can pass it your coroutine which will be your httpx gets yeah and

it will it will on without you having to pull up your event loop and run the event loop yourself

it'll which is only a few lines but it'll do all that for you so yeah well it's not importantly

the sync support is coming back yeah and i mean i don't know when's the podcast coming out

well when do you want to come out yeah well anyway hopefully hopefully it's already back in

right yeah by the time you listen to this folks sync and async hcd client that additionally

supports blah blah blah right so hang on before we before we lose the thread here you just mentioned

url lib3 now so one thing that um i was sort of under the impression that um the requests um one

of the things about requests is it was built on kind of some older tech which wasn't quite as

robust and then the underlying networking layer has kind of been redone and url lib 3 is part of

that but all of that's a bit vague to me because i haven't dug into it and haven't researched it

could you what's going on there like what's you know url lib 3 is that is that what we need to

be using and is is i don't know what's going on how would you describe that stack has it been

rewritten or is it so the uralib3 team are also working on a new version of that which brings

synchronous and asynchronous support okay and that's the underlying personally what i would

like to do is and i don't think is that difficult is provide the ability for httpx to be used with

that once that's available um i mean we've already implemented a slice of it as well ourselves

but that's the mature battle tested battle scars um you know deals with all these different edge

cases that they've hit in the wild when servers over the course of 10 years ways so whereas we've

got this kind of that this is clean hcb works like this this is what we expect version it would be

really really beneficial to kind of have both those options on the table and be able to figure

out where we're going from there so that's still a work in progress right but that's kind of

underlying level that that layer underlying layer is being yeah yeah they're working in the in the

exact same space as us and a whole bunch of the work that they've done so for example

their approach onto how do you build code that is both sync and async is what we're now

tacking for in httpx because it's smarter than the approach we had before it's going to work

out better for the project well i think one of the things i took away from from your talk as well

tom for people listening who aren't or are new to this space is that async requires rebuilding all

the layers in the stack which is sort of why you know why is the rest framework person working on

http but it's because it you sort of have to rebuild everything for this new async world

uh yes but i you know um that's and that's certainly the motivation but what i hope as well

is um you know as mature and great as requests is i think it'd be really great to have a new

http client that does all the same slice of stuff as it because i'm really pleased with the work

we've done on hcpx like the design is is really nice and i think folks kind of coming to it now

and digging into the code base will be able to get a handle on oh right okay i see how i mean

that's kind of true for requests as well actually but um you know we've kind of been stuck in this

place where there's just this one entity and it's backed onto url of three it would be nice for us

to freshen up and all that again and it's stable right httpx is because it's like 0.8 now is it

it's stable if you pin to no but what i mean is it's stable isn't the right word it's um the word

i mean like it's fully functional fully you i could put it into a project it does everything i

need there's like because the north point what does the north point what's left for a 1.0 then

so yeah you should pin to a median release version so you should pin to 0.8 or 0.9 you know

0.9.x or 0.9.x and the big thing that will still change is once we add sync support back in

then you've got to go well what are we calling the async client and what are we calling the

sync client and what are we calling async requests and what are we calling sync requests

so maybe an import changes or something like that yes you've got a namespace here and you've got to

name it but there's not actually a massive amount more technical work required to get there

um and once it hits 1.0 that's when we'll have the right here's our uh formal deprecation policy

here's what you can expect to happen once we upgrade to version 2 in a year's time or

so on all that stuff so i really want to ask you about starlet um oh cool so let's just assume

And so ASCII, their async web service gateway interface,

we could talk about that, but let's assume that exists.

Starlet's really interesting to me,

and you've also done some work building out,

you've been putting the code,

like a new demo project with it, I believe, right?

So this is, let me tell you what I think it is,

correct me so this is you're building up so lightweight framework using ascii that the

ideas of which could eventually roll into a larger thing like django itself um is that how would you

describe the motivations because i look at it as like it's really educational for me but um

you know you have so many projects that sometimes i'm like wait what does tom work like you've got

like a dozen active projects that are all cool and all i've been trying to keep that more and

more neatly garaged these days but do you i mean what you have i mean django rest framework httpx

asgi um uh uvicorn api star like yeah i mean there's kind of um there's kind of three projects

okay so there's django rest framework there's httpx yeah and there's the async web stack

the async web stack includes well we need an async server so here's uvicorn that's your async

web server we need an async web framework so here's starlet we need a way of interacting

with async database drivers that's at a nice level so here's the databases package

we need an orm eventually i mean so the orm package you know that's kind of more on my horizon

but kind of got the basics in there so there's that bit um and yeah and one or two other bits

and pieces around the periphery there and then carlton what's the schedule for django three

releases for how these things are added in right three one is going to have or three zero has

ascii three one is yeah okay so we so we've just released 3.0 and that that can um run under an

ascii web server so uvicorn or daphne or the other one i can never remember hypercorn um

so you can embed and what's useful about that at this stage is you can embed django next to

your data set application or you know next to your starlet application it's not actually async views

so hopefully 3.1 will have async view capacity and for there you know from from the django

perspective tom's work is like breaking new ground and it's showing the way to go and it's like

it's just amazing and tom's talk from django con europe when it was called sketching out a django

redesign and he spent the entire time talking about starlet not the entire time but you know

basically was talking about starlet but how else do you show what django could become looking at

other than showing what an async web framework looks like.

And that's, you know, from the Django perspective,

it's like, it's amazing that this stuff's here,

the work that Tom's doing and seeing it.

And we can take some ideas

and we won't be able to take it all

because Django's got a lot of history

and it's always going to be,

it's Django and it's got to be backwards compatible.

And, you know, so it's a really exciting area

and there's plenty of room for Starlet

and Django to rob all the good ideas

or as many ideas we can.

and we won't be able to rob them all because Django's Django

and it's got a history and it needs to maintain that.

But yeah, 3.1 for Async Views, which is the bit I'm really excited about.

Something that's been really nice has been being able to see how

once we've got a standardised approach, ASCII,

that Andrew Godwin's designed, we're then able to go off

and I can go off and do a whole bunch of work

in this kind of completely different approach and different space

and he can go off and do right how do we start to bring this into django and they end up being

complementary right so okay and mix and match right yeah yeah so for example like we've got

the baseline functionality in django 3.0 of you can um you can be running in async right at the

very bottom level well what that means i mean i haven't dug into it in detail but you'd be able

to do some neat you know not stuff that you'll need to do all the time but neat ideas like okay

well we have this one particular this one particular case where we want this path to always

just proxy requests off to some other service and you could add in an ascii middleware to let you do

that yeah using http x to make the requests yeah and that's before there's it it just it starts to

give you opportunities but coming back to what will asked earlier actually because you kind of

crystallized the answer to that in my mind you said well what what is starlet i'll describe it

what do you think well actually what starlet is is essentially um how would i start to go about

designing the fundamentals of something like django if i was coming to it fresh now from where

we are now in the landscape exactly that's not to say it's any you know of course it's not remotely

at that level but that's because right let's put these foundations here let's put those foundations

there let's do this bit let's do that bit and um you know because when i especially when i started

working in the async space you know did things like okay well i've got uvicorn and that's built

here but my god you know trying to build some production service on top of that like what are

all the other bits of work that i'd have to do to do that it seems immense and undoable and

i don't want to have to work with these async database drivers it's not my

core expertise i don't understand how to do that but gradually as we fill in more and more of the

blanks um you know you're going to start to see you know a more and more mature framework ecosystem

yeah yeah and it's about providing the the abstraction so you don't want to handle

um asgi send and receive handlers you want a handler takes a request and you send back a

response and you want the framework to do the send and receive to asgi and you don't want to look at

that yeah yeah that kind of thing yes yeah yeah and yeah the way that it's designed is it's kind

of designed to be to be very lightweight but without sacrificing the kinds of abstractions

that you want to be working with at the framework level yeah and one thing you've talked about a lot

is the importance of all this stuff because we talk about async and it's all very you know

but why does it matter how important is this to python and django and other frameworks the space

where it's important particularly is python's position within the landscape right so two of

its biggest competitors in particular would be javascript and go and both of those when compared

to the synchronous python frameworks are able to handle vastly higher levels of throughput

so you know for each server that you're running you're able to handle a certain number of active

Now, that doesn't, you know, for vast swathes of businesses, that doesn't always matter. But for the heavy hitters, it does. And also, you know, a lot of businesses that they're starting out and they're hoping, well, one day we want this to be, you know, and we don't want to have started out in a technology that we then find we're fighting against the current.

with and the intention here is to build up the kind of framework where you've got all of the

wonderful productivity benefits that working with python brings without having to make the case of

it doesn't matter that it's less you know able to handle vast amounts of loads than javascript

without having to make the argument being able to say it's basically equivalent and of course it's

not for go but the goal posts are shifted that much closer that it's not gonna matter to your

team yeah if you can get if you can get 95 performance you know that's probably good enough

so anecdotally here in boston i hear there's a fair number of enterprise java company stacks

that you know they're switching over to new technologies in part because they can't hire

java developers because no one coming out of school knows java and so they're looking at

yeah those three python javascript go as modern current workforce can use um and maybe because

i flew i flew back from pycon on the plane with a whole bunch of these people saying i was like oh

why using python just for recruiting so it's almost right you know like but you know of those

those are the three kind of modern, I need something high performing. Well, and really,

yeah, people would say go and then JavaScript is mangled. So anyways, it's an interesting

perspective. And I think it's right that if you can just check that box, like again, in your talk,

you had great, you showed a bunch of benchmarks and kind of why they're not the standard benchmarks

people trot out don't really matter or are sort of incomplete, right? I mean, Carlton and I often

talk in this podcast about how Python is not what, you know, the programming language is not going to

be the thing that slows down your web stack anyway but even if you're looking language to language

it's easy to look at one of those and think python slow but it's really so yeah so let's talk about

some other aspects of it as well though right because um web socket support right for instance

that's one of the big now django has that with django channels but it's had to be kind of designed

you know into an existence whereas with you have a corn and starlet we're able to start

from a starting point of right we want to be able to handle long-lived connections such as web sockets

or streaming hcp requests now i know there's not necessarily loads and loads of good kind of

tutorial level examples yet of look at the interesting functionality that you can start

to easily build out with using these stacks but that's going to start to come and i think that

when it does and when you start to be able to show look here's a production ready framework

that you can start working with now and um look at those sorts of real-time things that you can

start to build with it i think that will be interesting um and the and the other thing is

forgetting about the async at all but just starlet in its own right i think is really interesting

because the you know having had 10 years of working with django and right how would i approach this

from scratch just the the way that it's stripped everything right down you know it's easy to say

i think that people will kind of get a feel for it when they've been working with it for a bit

but it's a very very low depth of complexity stat right and that's something that i can say

nebulously and is difficult to difficult to quantify but it's a you know i think it's a

really elegant design and i think that as the uh space on top of that starts to mature

that's going to kind of become apparent in the way that it allows you to kind of

uh you know the the framework ends up having a low maintenance cost so you can work on new

things quickly you can adapt new things quickly if you get things wrong it's easy to move stuff

around versus okay cool we're supporting you know versus jango's completely different thing which is

supporting tens of thousands of businesses and here's all the things we're carrying along with

us and we do a fantastic job of continuing to involve and support them um but it's also worth

putting time into great here's this new sprinter on the scene let's work with that for a bit yeah

oh yeah no totally totally totally and like jango's got 10 years of edge cases to

you know to accommodate and to maintain and rightfully so i and i always say one of the

reason why it's still exciting is because we don't break stuff so you know that it's still

going to be there and reliable so no but you can use the new version you can update and you can

use the new features because you don't have you know i always argue that unless you're unless

you're going to really abandon your app don't be on the lts be on the latest major version and get

the new feature and have fun with it i mean yeah you've got to update every nine months but that's

just like taking you taking your car to the garage well so hosted api is the name of the the demo app

that um you built out and i guess i i want to mention to people listening if they're more

beginners jacob captain moss one of the django creators his he had a pycon talk 2017 which we'll

link to on if he were going to build django today from scratch what would he uh redo um because i

think when at least when i try to explain to like i work in a co-working space there's a whole bunch

of people using django who aren't developers so they're managing developers and when i try to

describe async i see their eyes um glaze over and i think part of it is they don't they don't

understand how the piece is what is the stack what is a web framework um so you know what is

whiskey how did all these things stack together so um you know i think of this as an educator i

want to write some courses on async but i think it really has to start with well here's all the

things you were using you didn't have to think about but like here's what the stack is here are

the choices because i i think until you can understand why async beyond a real time sounds

nice you have to see where what you're dealing with and you a lot of people haven't see i think

the thing is the reason that we're having to talk about the technical aspects is because it's still

immature yeah right and what i've been working on really hard is and you know hosted api is just

like kind of the very right let me figure out what we're still missing is until you can get to the

point where you can put your technology in front of people that really don't know an awful lot

about the space and say, hey, look at this cool thing. Isn't this what your business wants to be

able to do or to be able to build or, you know, to have your team work with? You know, and I'm

hoping to be able to get into that much more user facing space. Well, what do you think that example

is right because i think of well maybe it's like what is you know something you build the sync way

and the async way and you can just show it's massively more performant is there like i mean

it's like oh chat seems a little bit faster like what would be a good you know killer example right

like what's the like equivalent of like so a real-time admin right so a real-time admin

plus uh oh and look here's a bit of javascript that we've written on the other side and here's

a website where we've got these various kind of graphs that are updating and we can see

when we put you know either when we're putting data into the admin we can see that stuff updating

over here so kind of what hosted api is no you know maybe one day i'm skirting around you know

bigger plans or here's a simpler example right so um being able to when you when you start up

django right and you get your little welcome screen and then you've added in the admin and

you get the admin like what would be what would be really nice in async framework land would be

once you've started your new project and you go to a screen you can see uh like a real-time

graph of how many requests per second are we running at the moment and it's updating all the

time what's our throughput how many servers are running and currently connected to the same

channel at the moment to be able to see really responsive set of information like that and have

those be in your basic programmers toolbox so you know rather than django debug toolbar is the thing

is the kind of level that we're looking at you know responsive set of information that's coming

back straight away about you know those sorts of things and in the in the phoenix web framework

which is in a lick um which is built on the elixir language which is kind of like a functional thing

built on the early vm they um they've got a thing which is really the new hotness at the moment

called light which they call live view which is exactly this kind of real-time communication back

to the server and they can do you know inline validation send back the response updates in line

and it's it's like ajax but ajax plus plus plus plus plus because it's so quick and you know and

really easy to implement and they've kind of got that nice and be nice if starlet had that be nice

if django get can get there and it's time and you know for me you start you've got you take a

beginner and you run them through and you create a django model and they start and they spin up the

i'm in and they imagine doing that but just with with an async framework where you know they don't

even know about it's async they're just building something and they're and all of a sudden it's

like they're programming and they're learning to program but using this this really cool modern

async stack fantastic yeah

one of the things that is difficult though of course is trying to balance that you know trying

to balance django rest framework with okay i think that the revitalizing the http space in python is

really important so here's httpx with oh i think that the async web space in python is really

important so here's the async web stack right trying to balance those things and trying to make

the case for you know especially with in places where stuff is newer trying to make the case for

yes this is less mature no your business shouldn't necessarily be working on this yet unless you know

that you've got a good reason to but yes we think it's worth investing the time up front on and so

we come to the final and perhaps most important topic is encode oss and your work to build

the tagline what's that the tank sustainable software development right that's that's how you

uh yes yeah it could be well perhaps it was once upon a time but it was collaboratively

funded software development is what it is okay there you go yes that that that that chimes

because like we've we've mentioned what a dozen packages drf starlet h uvicorn you know

httpx how on earth can you do it and you know well yeah and there's a there's a short answer to that

is uh my time is fully funded i work on this stuff full time actually i think it's interesting

going back into the story of how that happened to come about because it's quite lucky really

um you know django rest framework 2 version 2 was when we very first ran a kickstarter for it

and at the time i was working with the web consultancy dab apps and they were really on

board with the idea of running a kickstarter for this so we kind of came to an arrangement where

he said okay we'll do a kickstarter and you know we'll figure out for however much money the

kickstarter makes here's how much of my time can be taken out of client projects and instead just

be put to work on rest framework and we we ran the kickstarter and it was wildly successful

you know for rest framework too i can't remember how many how long ago that was now but it was a

way back because i i it would i got involved with rest framework before version two but it was like

it was coming along and there was the kickstarter and it was it was years ago yeah and i think you

know the timing happens to be just right people could see you know what we wanted to do it was

kind of just about started emerging as you know like the more mature like for a long time tasty

pie had been overall the kind of the the slightly better choice in terms of if you just want to look

at what features have they each got but the timing just happened to be just right and you know we got

like 30 000 pounds from the kickstarter and i worked on rest framework 2 for i can't remember

but you know between six months and eight and nine months somewhere in that area which was fantastic

when we came to okay here's a new slice of work that i think needs to happen and rest framework

3 um again we got pretty lucky with the timing because mozilla had just launched their grants

scheme and i knew that although i wanted to run a big kind of initial fundraiser for it what i

actually really wanted was ongoing funding rather than a single kickstarter style drop

work work work now we're done and it wasn't really obvious to me that leaving my job would be a good

idea or not but because i'd applied to the moss grant the way it went was once that grant you

know once they came back and said yep here you go here's your grant which i think was about 50 i

think was fifty thousand dollars i think it was thirty thousand pounds again so that gave me

this huge chunk of runway you know like best part of a year and i said okay like tab apps is a great

place to work but i can see an opportunity here so i i quit and launched the um the ongoing

funding model and i thought well we'll wait and see how many companies pitch in with this and

what kind of level it gets to and if it's 50 of what i need then at least i'll know you know i'll

have a year's worth of figuring out and maybe i can go back to dab apps and work there you know

half time or whatever but as it happens we've just about got we've just about got enough to

keep me going full time on things and sometimes we've had a bit more and sometimes Carlton's had

contractor time on it sometimes in the past I've supplemented it with a little bit of contracting

and so on but on the whole I'm trying not to do any of that at all and just use the funded time

and and the pitch that I that I always go with if I'm ever on stage talking about it is

um you know i want to work for your company full-time for a hundred dollars a month

because that's that's what the case is that's and it's so clear then why collaboratively funded

open source development makes economic sense right it's like an insurance makes business sense

yeah it's like one of these plans to service your boiler like you know you make a subscription to

keep the the fundamental infrastructure of your business there isn't a there isn't a person

listening to this podcast who doesn't use res framework right you know if if all those people

fund it a little bit of all those companies fund it a little bit then it's totally sustainable on

the ongoing basis yeah i think too it's easier for people to understand that drf is is you and

a small team whereas i mean i'm constantly struck by django is just this amorphous thing even though

it is a half dozen dozen people who really do the yeoman's work um it's a little bit easier in a way

when you can people can see oh it's it's going to tom and his crew right it's not i know it's a

little bit of an easier ask because i think of this in the context of i'm constantly thinking

for the django software foundation i think there's a lot of ways they could get more money which would

help a lot of things um but it's a little bit harder than when you're literally on stage saying

you know I want to work for you for $100 a month and it's just like man if I'm using DRF for

anything as a business that's obviously a total no-brainer so I think yeah I think it's I think

it's really important that there's a very direct link between sponsorships and um the person doing

the work because I think it is a personal relationship I mean you know I I think there's

probably more that we could be doing in that space as well that um you know so for instance

things that i've kind of toyed with recently as well it would be great to get some more to get

somebody else in with a bit of funded time on the project well maybe the right sort of way to

approach that is you you have a a mentee a mentorship program and you specifically ask for

you know we want to run this program and we we need three companies to sponsor it yeah and here's

how much we expect you to buy and then it's a very direct relationship you know they can say

we're sponsoring this program right that person i think that is what they want at a corporate level

I mean, it's like giving to, you know, university. You want your name in the building versus just general fund, right? Everyone wants to point to their specific thing. I mean, because I think, again, in the Django context, I would posit that 95, 99% of people have no idea that a Django fellow exists, let alone that there are two, let alone that Carlton is one of them.

I mean, it's just totally—the DSF, nobody knows what that is because they don't really have to.

So it's—I like your idea of direct relationship from mentee.

I mean, just this year, the DSF with Jacob Kaplan Moss is mentoring someone on adding something to the funding page.

They got 1,000 people who wanted to be mentored.

And I think if you had a company that would sponsor that or something, yeah, that's brilliant.

that makes a lot of sense it's like a badge that a company can talk about and yeah have a as you

said a direct relationship between their funding and what they're getting out of it well it's a

lot easier for me and rest framework to be able to tackle that sort of thing because i can just

be very unilateral in how i want to approach funding right whereas that's more difficult with

a commute you know something where there's a bunch of different people who are all kind of

equally responsible for the health of the project to go to to make very like direct decisions about

you know what let's put the funding up front and center and let's be very direct about this

you know those conversations can be more complicated yeah jango's a big ship it takes

a while to turn you know yeah but and yet it you know if you go to a django con in the u.s or europe

or now africa next year i mean it's still a small number of people who really make it happen which

i mean this is like i i you know being by far the newest to this community of the of the three of us

i keep getting struck by first it's like wow this is amorphous thing and then i'm like oh my god

it's so fragile like i mean carlton's given some talks to this jango jango isn't you know this big

organization there's there's marius there's myself there's half a dozen people who are very active

and then there's you know 50 people who are kind of active and then that's it that's that's it and

you know people will email the django developers saying the django team and it's like well really

that's you if you step up well and it's true in so many places as well right it's you know there

there's a lot of places where there's these core bits of you go in python or any other bit of the

space where there's something absolutely critical and it's one person sitting in their garage

you know every now and again who's working working on it out of love yeah yeah well as we wrap up is

there anything else you want to mention highlight i mean there will be a couple thousand people

listening to this and you know it'll be there for posterity uh no just hi

come back in six months time and i might have something different to say to that question

so we'll see okay great we're gonna have links to all the stuff encode everything uh in the show

notes so please do check out all the packages and stacks that are being worked on i'm also i'm

hoping to go to PyCon in 2020 which is not something I do very often yeah I'm not often

I think yeah over in the States so it would be really wonderful to chat with loads and loads

and loads of people there because I'm like I say I'm not over that way much so and and but you'll

be at um DjangoCon Europe they've publicly announced it's in um Porto Portugal are you

gonna be there i haven't figured that out yet okay sorry to put you on the spot i think i'm

gonna try to cross over the pond uh for the first time i'm really excited to yes no i've been in a

bit of a squish at the moment so okay we can cut that bit out pretty much down okay so tom thank

you so much for coming on the show and listen from us and from the whole django community and

beyond thank you so much for the contributions you give and all the work you've done you're just

you know superhero thank you that's a pleasure yes thank you tom and this was jango chat join

us next time folks