← Back to Show Notes

Transcript: Caktus Group - Tobias McNulty & Colin Copeland

Hello, and welcome to another episode of Django Chat, a podcast on the Django web framework.

I'm Will Vincent, joined by Carlton Gibson. Hi, Carlton.

Hello, Will.

And this week, we're joined by Colin Copeland and Tobias McNulty. Welcome, both of you.

Thank you.

Hi, guys. Great to be here.

Thanks for coming on.

So we wanted to have you both on for a long time. Cactus is a pillar of the Django World

consulting group. Tobias, you're also on the ops team for Django, which I've been roped into that

last couple of years. I'd love to talk about that. But maybe first we could say, how did you both get

into programming? And we'll go from there. Yeah, I could take a swing at that first.

Yeah, I think in into programming to start, I learned HTML early on and built some websites

with a few friends and eventually met a somebody online who just was like an hour away from me

and we became friends and um decided that we or just kind of found out that we both had similar

interests in wanting to build uh applications together and started a small mac application

company it was tiny we were just in high school but we built a couple small small applications

and sold a couple, uh, not very successful overall. Um, but I think that's kind of where

I got started. That was all in, uh, I think real basic. And, um, do you, do you recall what type

of applications they were? Was it things related to high school life or something for businesses?

If you sold them, we did sell a, we had a chat application with like a server and a client that

was bought by a few businesses to use internally for chatting. And then there were the rest were

fairly fairly random there was a bookmarking application and a small game we built so it's

definitely whatever we got kind of interested in we wanted to build the the chat app that's like

slack right yeah just ahead ahead of the curve very simple compared to slack i think it's

interesting what you said about meeting someone online because um i think for people of our

generation so a couple decades in i found that's pretty common in terms of people who got into

programming when they were younger, there wasn't a community, there weren't resources or necessarily

easily accessible books. So usually it was going on IRC or some equivalent and finding someone.

And then if you do happen, I just think in San Francisco, when I worked out there,

basically everyone had that same experience. They were, they were interested in it. No one

around them was and online, they sort of connected with people. So pre, you know, pre Facebook and,

and MySpace. But if you're able to do that, you're able to have this

power and control over what you do um so i wonder if that's the same now it seems like there's a lot

more support and communities out there so maybe that's not as common but it feels very common to

me for people a couple decades into things as we all are yeah yeah yeah we we both had similar

like fan gaming websites and then found each other just through that network and so it was a funny

small world to realize that he just lived so close in the end and and still yeah still keep in touch

today which is nice just to continue so then um did you continue or did you ever formally study

computer science or was it just um completely on your own yeah i went to a very or both tobias and

i went to a very small uh college earlham college which in my class was the cs department was very

small. It was only about three, three, three of us. Um, and so I did, I did study computer science

there. And, um, one of the things that I did really like about it was that they, all of the

functions within the CS department were run by the students. So like the website and the networking,

and they had these applied groups where we could all participate in the various activities that

the department did um and one one was the that i was a part of was called the hardware interfacing

project where we got to play around with these little embedded arm linux machines and um the

project was to connect them to data monitoring devices for like we had wind monitoring devices

and like temperature monitoring and we would kind of test it within the local science department and

then set up remote field devices so that they could record wind and temperature and send

readings back to us over, um, like over a SIM card over a data connection.

And, and that's really where I got into, to Python programming.

We did a lot of scripting with that and, um, and it, yeah, it was a lot, it was a lot easier

to do than, uh, some of the C work that we were learning at that time.

So I really fell in love with it then.

And eventually what led me to Django there because we had wanted a way to kind of view all this data and look at it once we got into a Postgres database and started building a data viewer in an early version of Django and remember really liking how easy it was to just kind of see things in the admin and how easily it connected to Postgres.

It was my first experience with it at the time there.

i think that's quite common now right with the the way data science has come on this is you know

these folks who are using pandas or whatever and then they're like well i need to get this online

and you know there's a few options but jango is a good option there right you can create an html

report you can stick it up serve it it's quite simple well it's not simple carlton though right

i mean because a fair number of the people who who get my books or who live here in boston are

in that community, right? So at a meetup, they're, they're doing whatever with math and advanced

Python. And they're just completely befuddled by the web, because they've never done it before.

So it's, I often think if there's a way to have like a plug and play for take your data and put

it on a Django site with, you know, list view and detail view and login, that would be worth a lot.

But the problem is the data is not easily munged together in my experience. But that's extremely

common, at least here in Boston, whenever I go to meetups or even the Django Boston group,

when we were meeting, there were quite a few people who were, you know, scientists and PhDs

and they wanted to know how to display it. And it was, you know, not simple for them.

Yeah, that's true. It's kind of a big jump to go from like a panda or a Jupiter notebook to,

to Django web app. And, but you can do a lot in those Jupiter notebooks. They're fun,

really fun to play with and, um, document what you can do in them.

Yeah. So Tobias, we're talking about college. Can we get your backstory since I believe the two of you met in college, right?

Yeah, we did. And before that, just for clarity, I was not Colin's friend living down the street who he met and had a shareware company with. But we very much later discovered that I had also had a small Mac shareware company in high school that wrote applications in real basic, which was like a totally bizarre coincidence.

Yeah, why weren't you doing the, can I ask, why weren't you doing the web? Was the web not as pre-lamp stack?

So I was doing some PHP MySQL development as well, but I think Real Basic was the first thing that I was like, oh, like I, yeah, again, for me, C was a little bit over my head, but Real Basic was something I could understand.

And the first application I built, we got a cable modem in junior high, and you had to have like a login client on your computer to use this thing, to enter your username and password, which is like totally foreign to us today.

And the client that they had for a Mac was just totally unusable and crashed all the time.

Um, but I found somebody had, uh, figured out the protocol, uh, posted the, um, details

of it online and was able to write a little login client for that and real basic.

And the, the official one was so bad that people actually paid money for it.

I think I made a few thousand dollars or something like that in high school.

So I was like, super proud about that at the time.

That's known by going for life, right?

He's a high school student.

You've got this thing.

No one understands you get paid for it.

It's like, I'll just do that.

Yeah.

Um, and yeah, so I guess fast forward, I got a, I actually took a year off in between high

school and college to sort of figure out what I was doing and got a job, um, uh, writing

statistics software.

I actually responded to an ad, uh, um, about, uh, HTML scripting.

Somebody was looking for somebody to do some HTML scripting and responded to that.

And, um, pretty quickly they, uh, asked me to go into a programming role, uh, instead

That was a lot of fun. I think the one part of that that I really enjoyed was they ran their own mail server on a Mac.

In a closet?

In a closet.

Yeah.

And, yeah, I didn't really know what they were doing with that, so I volunteered to set up and ran their mail server for them.

And I think that was sort of where my love of managing servers got started and continues today in my work with Cactus and also with the ops team.

So this is all, you know, pre-Gmail because I think that came on the scene in 2004 or something like that.

Yeah.

And that was the first one, as I recall, that was like, well, just use that, right?

Before that, everyone had something in their closet for email.

Like everyone had some sort of setup.

I mean, where I grew up, we were next to a local university, so we tapped into that, but there was no good cloud option.

So I assume it was around that time when you were doing that, because, you know, today, it'd be nuts to run your own mail server.

But it was common back then.

And then there was that interesting overlap where I saw companies, even in the 2000s, were still running stuff in a closet.

And I would go to them and be like, you know, this is crazy, right?

Because you've got, but you know, now no one would do that, but I'm sure there's, back

then it was, yeah, it was very common and the cloud was scary and seemed less safe,

whereas today it's really, you know, the opposite, right?

Yeah, I still do have a soft spot in my heart for Postfix was the mail server that we used

at the time and still have a soft spot for that in my heart.

So then you decided after a year of doing that that you wanted to pay to learn how to

program instead of getting paid to program?

Yeah, so I did.

I applied to Earlham at that time and got in.

I actually shirked the CS department for a couple years there.

I had decided that I wanted nothing to do with software and programming.

And first, I think I wanted to pursue an acting degree.

I eventually settled on philosophy, but it was around the two-year mark.

God help you.

Yeah.

Carlton agrees with that.

So do you have a philosophy degree?

Dr. Carlton.

Oh, wow.

I didn't know that.

I do, I do.

i've got i got yeah yeah yeah i remember when i first uh i don't know if james knows this but

when i first uh discovered the django community and found james bennett i was like absolutely

thrilled that he also had a philosophy degree so i've never told him that before but

anyways yeah i discovered that i really do love programming and um sort of joined the

cs department as a add-on and um uh specifically sat in on a software engineering class uh my

senior year and that's how i met colin and the other two co-founders for cactus um and yeah i

think we just really enjoyed working together and writing software as a team that was the i had all

the work i had done previously was individual and um just was like felt like we were so much more

powerful as a team together and i think it's that mentality that we um try to carry through in our

work today as well okay so tell us about cactus because like you know for my entire time in the

jango sphere cactus is one of the sort of landmarks agencies yet but for people listening who perhaps

don't know here tell us about cactus and how you got started and all of that sure sure yeah i

chuckled when i was listening to your episode with uh aaron mulaney who is a cactus alum and

i think the line was something like cactus has been around forever really have we been around

that long no but you know if i had to sit there and think you know what are the you know what are

the the foundational agencies you know the groups that have been there for you know for the whole

time yeah we were really honored to hear that and yeah it meant a lot to hear that coming from you

guys. So, but anyways, yeah, we, Colin actually moved to North Carolina in 2007 after he graduated

from Earlham and just because it was a central spot for all of us. And I think we tried a few

different things at the time. We were doing some PHP development. I think we looked at Rails as

well, but settled on Django, I think because of its affinity for Postgres. And I think this has

probably changed now. I don't honestly know, but Rails philosophy at the time seemed to be that

your data constraints only needed to exist in the application rather than in the database as well.

And we didn't really feel comfortable with that. So I think that's what sort of pushed us over to

the Django side. Do you recall what version of Django this was? Was it pre 1.0 or is it after?

It was. It was 0.96 or 0.97, if those are even things. But no one really used them from what we could tell. Like everyone was following the subversion, you know, what was then a subversion repo, the trunk branch of that, because so much had changed and there wasn't another release.

And so it was a really interesting time to get into Django and like every commit that hit the subversion trunk branch, like you would need to go and read that and understand what was happening and make changes in your code.

So it was an exciting time to be a part of the Django development for sure.

Carlton, that's about when you joined.

that really is the wild that really is the wild west though right where compared to today where

it's like you know the new version just pip install it'll be fine you know nothing's broken

oh one deprecation warning you know no i've got to go and read the commit and understand it and

rewrite this whole section it's a big different world obviously i came in about 1.1 i would say

i got a book um 1.0 1.1 something like that so the the four of you can i just ask about why

why do an agency versus a company or maybe that sort of morphed over time

right because you said it was four of you who met in college and then decided to

do stuff together yeah what like why client services instead of a product company i'm just

curious the genesis of yeah i guess so i mean because generally it's some sort of mix of we

all like working together we like technology and we have some ideas but we can also get paid for

client work and um you've all continued obviously with client work um so i'm just curious how that

path unfolded i think of a little bit of as like as like um actors and musicians right like they

all want to be the other like every consultant has like a side project or like a passive

thing so they don't have to work with you know clients and on the other hand everyone

who's working a big company sometimes like man i'd like just something new and different so

there's a tension from where i sit in terms of the the roles but disabuse disabuse me of that

stereotype no that's a good question i i mean i don't know if it's a question anyone has ever

asked us before um i don't know that it was particularly at least on my part it was

particularly thoughtful or intentional decision i think it was probably largely naivete at the time

and like oh we can totally do this and you know i think in retrospect we had no idea what we were

doing, and a lot of it was timing and just

you know, being a part of the Django community when it was so small, I think certainly gave us

a leg up during that time. Um, yeah, I think that that's what, um, um, Peter from Lincoln

loop was saying a similar thing in terms of, he just, he very deliberately chose Django over rails

in part because Django was a little bit newer. So there was less, um, you know, places that

needed Django needed help. Um, and you know, keep riding that, that wave in a way. And also

python's great right like ruby is ruby's pretty but python is clearly one out as the

more useful language of the two i would say okay yeah i'm not just going to sit there in science

for that one because like the um like standard niche niching down right niching down like put

your niche focus on it if you've if you've got if you can be a django specialist then you're always

going to have a market like you can you can be a fortran specialist you're always going to get

work you can you know i saw something the other day people moaning about not being able to hire

objective c developers anymore because everyone's learning swift so if you know objective c you've

got you know you've got a job for life and um adam johnson was saying to me yesterday about um

amazon iam if you know if you can work your way around iam you've you've got a job right

it's the same if you right if you know if you know django but but at least there was um a desire

among all four of you to to sort of carve your own path because today or in the last five ten

years i've seen a lot of especially when i was hiring trying to hire at a startup in san francisco

someone who comes out of a school of the computer science degree has a lot of offers like good

offers and so the opportunity cost of going to do your own thing is is pretty high um so i wonder

maybe it's the previous work experience you both had but but turning that down takes a lot of guts

because i recall when i interviewed people if they were flirting with google or facebook or whatever

they weren't going to go to a startup they needed to know that they wanted a startup and then if they

did want to do a startup, well, then I could, you know, make a good pitch for it. But I couldn't

solve that problem for them of like, well, all this, you know, prestige and money and my parents

will like it. Like, I couldn't fight against that one. Yeah. Yeah, I think, again, yeah,

I guess reflecting on that, I think we felt we were doing incredibly well for ourselves at the

time. Like my, you know, my job before college, I think I was making less than $20 an hour doing

software development uh and then you know we start cactus and you know 2007 we're charging you know

65 an hour us for this work and this is you know i think by the standard of what was being charged

at the time was probably quite low but we were absolutely thrilled with it um from from my

perspective so yeah I think it was pretty touch and go there for a while um Colin actually told

me just yesterday that he applied to be a baker at the time I didn't know this but I'm really glad

that's my retirement goal too King Arthur Flower is actually in my hometown um and every time I

go up there I'm like you know it's like I could do that wake up early and you're just done and

it doesn't need an update it's very different than programming it's kind of a nice change of

change yeah it's like woodworking all these like analog hobbies of programmers i think it's probably

a good thing yeah yeah in my case i just have kids so that removes the need for hobbies but

yeah maybe in 20 years when they leave home and they're at college you can have a hobby

so okay i'm so you've been running an agency um for you know 15 years 14 years 15 years yeah

what advice would you give to um someone starting out down that road because it's a you know a lot

of it is the business side about you know client development and business development making sure

you you know when one project ends that there's another one there and what kind of would you say

on that you say it was a bit difficult touch and go at one point yeah i um i think my answer to

that today is to hire a chief of staff. There are a lot of different people out there in the world

who will tell you, you need this, or you need that, or you need to figure out your strategy

for this. But I think for us, one of the things that has allowed Cactus to continue is just being

able to adapt. And it wasn't until, um, last year actually that we made this, made this leap and,

and hired a chief of staff. Um, but just for a company that is as small as we are being able to

adapt to the changing times is really, really critical. Um, so that's been a, a role that,

um, has, uh, and yeah, I don't, Kel Hanna is our chief of staff, um, not to Kel, um, been,

really happy to be working with her and um it's probably what i would recommend is the first thing

to and anybody sort of embarking on a building a small team um like this bootstrapping a small

team like this okay and what does the chief of staff do because they what do they what's that

cactus now too just in terms of size sure we're um 18 full-time employees and we have a handful

of contractors maybe four or five um contractors as well um that's quite big so yeah pretty yeah

decent sized team uh and we're so yeah we're organized into uh four different uh teams within

the company right now three of those focus on client work um one you know just helps keep the

business humming and um yeah i think to your should probably have uh cal on to answer that

question because i think the answer is anything and everything um but just you know supporting

i think the organization to i would say yeah to find its maybe it sounds cheesy but to find its

true self and enable the people within the organization to find what brings them joy and

and do that work well i mean because it is it's super entrepreneurial i mean you you love to code

so you be you do an agency and then you find yourself doing kind of everything but coding

at some point along the way and so figuring out how to you know get back to what you want to do

and think you're good at i'm sure it can be a challenge but actually related to that one thing

i wanted to ask is i've always had a sense of cactus has a reputation of really mentoring and

um, leveling up developers, um, you know, people who come in maybe at a junior level and are really

Aaron and others who are able to make that transition. So I'm, um, I always wanted to

ask about how you manage that because that's a wonderful thing. I know it's not an easy thing,

but it leads to people from different backgrounds. And, um, I don't see a lot of companies or

even agencies investing in their people in the way that I've seen Cactus.

Oh, thank you, Will. Yeah, and that was, I should probably let Colin talk about that as our CTO, but I think it was an intentional choice on our part, in part because, you know, we maybe had no choice.

We did want to grow, and very senior developers expect, rightfully so, expect a lot of money.

And so this is, I think, like you said, a unique way that we found to give back and try to grow team members,

hire team members that are more junior level and provide an opportunity for them to grow within Cactus.

And hopefully they'll stay, but if not, you know, like Aaron, that's totally okay too.

And we're delighted to see what the Cactus alumni go off to do in the world after Cactus too.

Anything you would add to that, Colin?

Yeah, I think that we, you know, finding a good fit at the companies is always something we're looking for.

And for junior folks, we can, we just, I think kind of lucky we'd find a lot of folks who

were just really excited to work with us and we were excited to work with them and it would

turn into a great kind of relationship that we would grow together because we were learning

a lot too at the time.

And how do we grow the company as well as, um, you know, helping people with their, with

their skills and experience too.

So it's, yeah, I, I enjoy it.

I mean, I think part of the fun for it too, is just to be working side by side with somebody

and learning from each other.

So whether it's, you're at a similar skill set, Toby and I like to do a lot of pair programming

together, but also if different skill sets, I think can go a long way of what you can

learn from each other and pick up when you can, when you have the time to pair and work

together.

Well, I think that culture is so important because that's not, you don't take that for

granted, right?

you clearly do have to have a deep um sense of mentorship enjoying it um to do it as opposed

to right like the um gilfoyle types right in silicon valley like i've worked with people like

that and you know if anything i would say that's more common than wanting to pair program with a

junior developer um so it's i think it's a great thing but i yeah it's some mix of the business

from the top deciding it's important and also the type of people you have who find satisfaction in

um, as opposed to feeling like they're being held back. Yeah. Yeah. When you can work with

somebody and I think as doing development, you get all, a lot of these easy wins and you can

kind of get excited by, Oh wow, look at that. It's working. How we, and I, I feed off that

kind of energy. Like when, when they get excited, I get excited and I like to just be a part of that

sort of loop and that cycle of, uh, of excitement. Well, cause coding is so, it's so intimate in a

way it's sort of like this hive mind like i struggle to find another analogy in terms of

a white collar profession that is so intimately tied together i mean it's really you really get

to know someone and how they think and also you get to see how someone you know a couple years

before was thinking at the time you know you you have an understanding of of the people or the team

well and then i look at my own my own code from a year ago and like man that guy's terrible

so but it does it does it's i i like that i like that into intimacy of knowing people and

seeing how different people approach the same problem um which i think is less i think is less

common in other fields where there's you know sort of a agreed upon way to do things hopefully

and programming sort of you know free for all in a way right i mean yeah and i think it's

Yeah, part of it for me is sort of tearing down the curtain, too, of, you know, what is this mysterious software development thing?

And in many ways, it's – it can be chaotic and disorganized and, you know, our CS professor, Erlem, you know, liked to joke that it's, you know, you just – it's just honing your Google skills to, you know, figure out what is the best question to Google and going off and Googling that and finding a skeleton that you can carve out and sort of hop inside.

And so sort of tearing down the mystery of that and that it, you know, it is a very sort of slow, arduous process at times, I think, is, I hope, you know, something that we can communicate through pair programming with folks on our team.

Yeah, I think that's important for juniors to see that it is really slow because you so many, I know, blog posts and things in the tech media about rapid development and, you know, getting things done quickly. And it's like, but I don't know about you, but it takes me ages to write software, you know, really. And a lot of it is, you know, I've got to transform this string.

well that you know that it's a four or five step procedure that's difficult to get right and you've

got to write tests and well it took you all morning to do this really trivial thing but okay but that

now works and now i've got that block that i can build on and that took me you know all afternoon

to build that but the next day i've got two blocks and they're together and okay and i think people

have kind of unrealistic expectations about how quickly it's possible to write software yeah i

get bugged by that too and you know the media oh someone over a weekend you know threw together

something or other it's like well maybe but they kind of just copy and pasted something that they

spent five years in another capacity building and then you know voila it works so so we tried it

when we have founders on you know to really push them on like okay you build something in a weekend

i remember we had the listen notes um fellow on who um really impressive company and he threw

together a search engine for podcasts in a weekend and we really pushed him on like well how did you

do that with elastic search it's like oh well my day job i'd spent years on it and i knew exactly

what i wanted to do and it's like okay you know because i i do want to as you say pull back the

curtain and show what does it mean to throw something together over a weekend it's like

it's basically copy and paste i mean it's based on years of experience and then anything new

it's like well it all stops and the gears start to grind it's like uh-oh yeah yeah cutting back

to characters and clients then how do you how do you communicate that difficulty to clients you

know because and when you're talking budget with clients it's always this tricky question is they

want you know they want to spend a small amount and get quite a lot and you're like well but it's

going to take a lot like i mean how do you deal with that negotiation then that's the chief of

staff carlton not not their problem anymore yeah we just turn up and call it no yeah that's a that's

a great question and i um i think colin and i both really love interfacing with with clients on that

and and trying to you know just break down the complexity as it were of of the the work that we

do and and really the challenge of getting any sort of concrete estimate for a software project

um i mean it doesn't yeah estimation is one thing that's uh for me at least has not gotten easier

with time. Like it's, it's always been a challenge and can throw some numbers at the wall and they're

usually wrong, but I think I've just accepted that and can move on. Yeah. Um, so I think,

yeah, we, um, when speaking with clients now, we really try to focus on and understand what the,

what the business priorities are. Um, a key part of that for us is, is, um, in the past few years,

especially has been involving user experience experts in that process.

So trying to get at what is it that the customer really needs to solve this problem

and not necessarily what it is that they're telling us.

Because sometimes those things are the same, sometimes those things are different

and can take a little bit of teasing out to figure out what those things are.

And I think part of that, too, is just sometimes understanding the customer's business domain.

If it's a business that we're not familiar with, there's a whole lot of knowledge that our customers have that we don't.

And just having a methodical process for breaking that down and understanding it, I think, has a side effect of showing how complex the work is that we do and sort of getting them on board with the process.

if they do come from a less technical background.

And so it strikes me that there's a large discovery phase there.

Not necessarily large, but I would say we, more often than not,

we like to spend, what would you say, Colin, at least two weeks,

possibly four or more, depending on the size of the project,

before we get started to answer some of those questions

and you know set the team on a good foundation going into it yeah yeah fun

so it's going to be important to set the expectations of that how do you mean

to set the expectations that the client that there is this initial phase which is discovery and

you know yeah yeah and some some clients love that um it is it is certainly a harder sell for

some but i think once once we get into it the you know the the the time definitely proves itself um

sorry colin you were going to say yeah no i agreed with all that just that you that initial time when

you're first becoming acquainted with the project and with the clients having that discovery process

to kind of figure out the requirements together because no one really knows what what they are

until we kind of all get in a room with the technical knowledge combined with their knowledge

and we can kind of put the the main goals ahead of us and think about those and it helps with

prioritization as well you can have through some conversations figure out well what what are we

really aiming for in this you know the first couple versions or the initial release what

what are the highest priority items to focus on because that can help kind of limit limit what

you're trying to build and not let scope get too big to cause the project to get a little

you know too much too too expensive it's that's good to have in the back pocket as well a few

weeks into the project when you know the requirements start to change a bit and you're

like hey but you did say priority was this is that still the case oh yeah that's still the case

Yeah. And it's good to check in because maybe things would change and you kind of have to like swap things out. But overall, I think when you can, when you both take, when everybody takes part in that discovery process together, you do have a shared vision. And I think that really helps keep everybody kind of on the right track together in the end, which is nice.

So I can't think of an elegant segue, but I want to ask about the ops team for the Django

Software Foundation.

Sure.

So let's shed some light on this, right?

So we just interviewed E. Durbin, who runs infrastructure for Python, and Django has

its own ops needs around Django Project and other things.

So Tobias, you're on that team.

Could you just talk about, maybe call out who else is on that team and what that role

entails because it's a volunteer role but a pretty important one within the django community

yeah so it's a it is a small team small volunteer team marcus uh marius and i guess marius is a

also a fellow but florian is the other member of the um ops team and um they they yeah they

predate me on the team and i think have their hands in probably more things and take credit

for more things than I can really

claim.

I joined

in 2016

just as

I mentioned earlier on, I always have

enjoyed tinkering with servers and

this was a way that I

could do something that I love and hopefully give

something small back to the Django community

as well. So the ops team

maintains the servers for

djangoproject.com and all the related sites

like the docs site,

Django people

things like that um i think the bigger lift is probably maintaining the ci infrastructure

there's a whole bunch of servers that um power the custom jenkins configuration that you know

every time there's a commit or pull request on django runs tests on every possible configuration

of you know python and django and database to uh you know make sure that nothing is broken so

that's that's a big lift um certainly i thankfully don't have to worry too much about that because

I think Marcus and Florian handle most of that.

One thing that I think I was particularly proud of

was setting up the CDN for the Django doc site.

So someone had, it wasn't my idea,

someone just emailed the Django developers list serve

and said, hey, over here in Australia,

or I don't remember exactly where it was,

the Django doc site takes a really long time to load.

Is there anything that we can do about that?

because at the time it was hosted on a single server at Rackspace in the U.S. East region.

And, you know, it takes a couple seconds for light to travel halfway around the world.

So we set up a Fastly, call out to Fastly, donated CDN to the Django Software Foundation.

And we set that up in front of the Duck site and more recently some others as well, static and media sites.

and yeah he mentioned that fastly also donates to the python software foundation which has a little

bit more traffic than we do and it makes a huge difference um yeah obviously in terms of speeding

things up yeah yeah and it's really it's really fun to watch the statistics the live statistics

dashboard that they have with the you know traffic popping up all over the world of where

where requests are coming from to hit the django docs site at any given point in time

yeah i mean it you know the jenga doc sites does get some real traffic so traffic yeah yeah i mean

it's kind of non-trivial as well because there's all of the supported versions all of the unsupported

versions are still there as well there's each of the translations for you know you know i think

there's eight versions of 3.2 that are up and you know it's non-trivial to get them built to get

them up and to serve them so it's kind of cool yeah and we tried i hope that it's working we

tried to instrument, uh, something to invalidate the, um, the, the cached pages every time a commit

happens so that, you know, especially when a new, uh, you know, security release comes out that you

can actually see that page right away and you don't see the stub that was there ahead of time,

because that would be particularly frustrating and off-putting, I think, for the community if

there's a new security release, but nobody can see what's in the release notes for that.

so hopefully that is working so you're just so you're trying to just refresh the changes as

opposed to just when there's a new commit re-running the whole cache um i think it does

just invalidate the the whole cache i don't actually recall it was a few years ago so i

don't recall exactly what it does but i think it it either invalidates the whole cache or just for

maybe just for that version of the django docs it will invalidate that's that stem in the url

because i'm just curious because i mean for smaller sites certainly it's easy just to

invalidate everything and there is an option i mean on my smaller sites you know i use cloud

flare and sometimes i'm like well should i just you know change the section i just changed or

do it all and at the end of the day it's like it only takes one hit to warm it up but that whole

process of warming up the cache i always wonder when does that really really matter um i almost

think that maybe it doesn't matter as much these days as it used to but it's a cool concept of you

know pre-loading the cache and running a script to set all that up it's sort of like fun to do

but i wonder if it's you know i wonder if i should be doing that on my own sites versus like right

now it's kind of manual because i'm a little bit lazy yeah i don't think we we added anything to

to sort of pre-warm the cache after uh flushing it like that so there will be a period of time

after the cache is invalidated

where you can see the,

I think it hovers around 60% hit ratio

for the Django doc site.

The static media is much higher,

like 100% because those files never change.

But I think it hovers around 60, 65% for the doc site.

And it pretty quickly returns to that

if you, once it's invalidated.

So yeah, I didn't bother with that for this.

I mean, that's it.

I mean, I'm on the emails,

but it's still a little bit of a mystery to me what the ops team really does as well so i just

wanted to shed light on it because i know there's all of you who work on it and it's sort of you

know as long as it's working it's working until there's a problem and then it's like who's in

charge of that yeah and speaking of yeah speaking of sort of and i think it's turned into less of

an emergency but yeah much less of an emergency but a year so you're a little over a year ago i

I think it was when RecSpace announced that they were off-boarding a lot of

their free open source projects.

We sort of had a mad scramble to find hosting providers for that.

This was yeah, just pre pandemic. I think maybe I misremembered.

And that was two years ago.

I remember it. I remember it. Well, yeah, there was cause I think as part of

that, I went, I was, there was those emails about it.

And I remember thinking like, no, that can't,

like there must be someone at Rackspace

who feels strongly about Django.

And I think I tweeted out and yeah, we sorted it out.

So they were very generous again, but.

So we should call out the people who provide

some of the resources, right?

Because it's non-trivial.

Yeah, but yeah, I mean, they're in the footer

of the website, but yes, Rackspace, Fastly.

I guess, there's also now,

There's the Oregon Computing Group, right?

Yeah, so it's part of this mad scramble to figure out if we are losing rack space or not.

I think we ended up with far more hosting than we probably need.

And got, I think, yeah, I think probably over $70,000, maybe close to $100,000 worth of free hosting provided annually to the Django Software Foundation from Sys11, which I think is a German company.

the Oregon State University Open Source Lab,

which, yeah, I had a very small open source project there

many, many years ago, a couple of decades ago.

And they were able to donate, yeah,

roughly equal to what Rackspace was providing previously.

And then AWS as well.

They recently started an open source,

free hosting for open source projects program.

So Rackspace, AWS S11, and OSU OSL.

I think are now all hosting providers, as well as Fastly to the DSF.

And the biggest thing?

I think we have something on Heroku.

I think we pay Heroku a little bit.

I forget.

Which area is Heroku?

I think it might be the Django people site.

Well, the Django snippets.

We shut down, we sunset Django people last year, but it's Django snippets that's still

running on Heroku.

Snippets.

Okay.

Thanks, Carlton.

Snippets.

Well, and there was also, so Django packages is not part of Django formally.

that that um just transferred over from um daniel and audrey were running that with some volunteers

and jeff triplett from revsis has taken over the hosting of that um which is hosted on digital

ocean so we're just covering everything with all the all the platforms and can i just ask the

biggest the biggest thing is the docs right that's the biggest that's the biggest bandwidth hog it's

got to be the most visited

site. I think

the static media is probably

the most, or the downloads,

Django downloads is probably the most bandwidth.

Just that

I think the HTML probably

pales in comparison to the size of all the

HTML and, excuse me,

all the images in JavaScript and

CSS that need to be downloaded.

But yeah,

certainly the Docs site is probably

the, it gets the most traffic.

well on the board we get the emails that come in through the contact form and there's always

amusing you know generic ones being like hey we see your site has some traffic we'd like to put

ads or we'd like to do a sponsored post you know they're just spamming the web and it's

interesting to see like oh like you've got some traffic on this site like it's like yeah we do

you clearly don't know anything about you know you hopefully you have some bot and not some

person sending these emails but they're pretty amusing to see um i know we're we've gone a little

on time i really want to ask about projects so you you both like there's a whole list in our

docs here of some really cool projects that cactus has worked on um i'd love to hear about some of

them and how they shook out right part of this podcast is to talk about django in the wild and

actually being used um so what what comes to mind for either of you um of cool projects with django

Yeah, I think for me, we've worked on so many projects over the years. I think for me, I usually think back to the first project that we did with UNICEF in 2010, in part because it was an incredibly fun and exciting project to work on, in part because I think it also maybe precipitated some of Cactus's growth.

We'd applied to this project to travel to Zambia and Malawi and build a Django-backed SMS application to deliver infant HIV test results from the lab.

So there's only one PCR lab at the time.

There's only one PCR lab in Zambia that could do the test for an ancient HIV test result.

And then they would take the results on paper on a motorbike and take them back to the rural health clinics that were serving these families.

And so we were able to cut the time in half for delivery of those HIV test results by sending them by text message because there's mobile connectivity all over the country.

Send them back by text message to the provider who would then follow up with the patient if there was a positive result.

So yeah, that was one, and I think we won that, and we're like, oh my gosh, we have this other contract that we also need to serve.

And so that sort of precipitated some of our initial hires at Cactus as well.

So that's probably the one I think of. Colin, what's a project for you?

That's a good question. I was looking at these here.

I think one that I actually got to work on recently, it started as a volunteer project of mine.

befriended a an attorney in the area who knew about this data set at the state that um basically

there's a statute in north carolina that all police agencies need to record their data and

send it to the um the state doj so that they and it's recorded and stored centrally in this large

database that no one had really looked at because at this point it has 22 plus years of data in it

and most folks who would try to use it just didn't know how to work with that that large of a data

set and what started as a volunteer project to build this website called open data policing and

see eventually became a cactus project later on and when we tried to expand it into other states

that had somewhat similar, uh, statutes, but not as good at North Carolina actually has

a fairly good one overall, but overall, I mean, the, the site itself is what I like

about is that it's, it's local to us.

So it's in, it's in the North Carolina area, but it also helps you visualize and, um, see

what, what your local police department or department area, what your, the, the stops

look like and what led to a search and kind of the, um, the, there's a form that a police

officer fills out that has some demographic information on it. So you can slice the data

based on like race and ethnicity to see if, see if there are some disparities in how the

departments are operating. And we just relaunched that as, um, NC cop watch with, with another

organization here in North Carolina. And, um, yeah, I think it's a great project to be a part

of and how we can kind of help, help shed some light into the policing around our area and what

that we can do to help there.

Yeah, that kind of thing is awesome.

That reminded me when we had Jose Padilla on,

he was doing a similar thing in Puerto Rico

about government expenses,

that they're all sort of available,

but they weren't available.

So by putting them on a website

and then shining a light on them,

They were able to, you know, hopefully improve behavior over time, right?

Because visibility is the greatest disinfectant.

Yeah.

Well, and this, of course, Simon Willison, his project data set is trying to make this

more off the shelf for journalists and other people.

I'm looking at the site.

So how do you do search, if you recall, on the like open data policing?

Because you've got a search bar there.

you've got tens of millions of records um do you recall how you are i'm i'm partial to search i

mean i did a talk on it and i find it a really interesting topic yeah you mean the find a stop

feature is that the part you're looking at um well so on open data policing like on north carolina

there's a way to view agency dashboard you can search um or i guess any of it right i assume

using the same type of search like is it that's true postgres search is it you know elastic search

or something i see what you mean yeah how yeah it's it's all postgres behind the scenes um this

the search is it it's it it doesn't there are there are a lot of stops i think there are like

22 million stops and when you when you join that with the searches it can get expensive but um

by far yeah but like the the largest data set is the state highway patrol that they make over

60%, I think of all the, the stops and searches in the state. And so any, anything you kind of

do with that agency, it's a little more expensive than the, than the others. But yeah, I think it's

just, it's all just Postgres and just some, um, tuning to get it to respond quickly. And, um,

and it works pretty quickly. And the idea is that like, you, you know, you could,

And you could get stopped by the State Highway Patrol, and the agency has basically 60 days to report that to the DOJ, but eventually your stop would show up there and you could look at it, and then the officer ID is not like their badge number, so it doesn't actually identify who the officer is, but it is a unique number tied to that officer.

So you could actually then look and see what their, you know, stop history looks like and get a sense of what, you know, who they stopped before as well.

Yeah, that would be, I mean, that's one of the things I've read about the Derek Chauvin trial going on right now is that they're able to talk about, you know, the back history of Floyd, but not of the police officer in court.

they're not allowed to mention his history as an individual or as a police officer um even though

in north carolina at least that would be readily available yeah and so yeah

it's it's an interesting question of jurisprudence isn't it it's like can

like you've you bring someone to to trial you're bringing them to trial for that particular event

Not, you know, not convicting them on a, oh, they're a shady character, which, you know, has led to miscarriages of justice in a brilliant time.

So I'm not saying, mentioning anything about this particular case, but it's an interesting sort of philosophical problem.

Like what are, what is accessible as evidence in a court of law?

Anyway, that's not Django chat.

Well, speaking of other civic things, though, so Code for Durham.

Could either of you talk about this organization?

Yeah, yeah, that's a volunteer effort that I'm a part of here

and is part of where Open Data Policing was born.

And yeah, it started, I think, in around 2013.

And I'd learned about Code for America from other activities that were going on in the area.

One was an open open day to day that was just looking at open data sets that were in the triangle region of North Carolina and learn about these idea of brigades, which are just volunteer groups in certain areas that are organized around helping their communities using using technology and has really just kind of grown.

I mean, we meet every other week, used to be in the cactus office, but I haven't been there in a while.

And, yeah, the brigades, I think, can vary a lot from area to area.

But in Durham, we do a lot of building apps for Durham.

And the policing one was one.

We also recently worked on a project that we're partnered with Legal Aid of North Carolina to help with record expungement.

And that one was kind of fun because Cactus held an internal kind of pitch competition.

and, uh, where we could kind of bring a project idea and cactus, one of the cactus teams would

work on it for a little bit. And I pitched the idea to help do an improvement to it and ended

up winning. So it was kind of exciting to get a little bit of the cactus, uh, um, force behind

it to help push the project ahead. So it was nice, good help there. I love that you're doing this.

Cause I, I feel like sometimes engineers don't know what to work on, but at the same time,

people who are interested in code they have all these very real things they'd like to solve but

they have no idea how any of the pieces come together so to know that these data sets are

available you can build a site and search them um you know yeah that would completely i'm sure

hook people into like yeah i do want to learn how to program i do want to get over the humps of

things because it's powerful and it's you know anyone with knowledge can do it yeah definitely

it's definitely motivating for me to oh wow i can really like help help this the community and these

attorneys with record expungement and it's not that complex of a problem but like once the

technology comes into play it can really help help out certain areas if you know what you're doing

i mean here um i guess we had two episodes ago um built the covid tracking for the entire state of

massachusetts in about eight weeks um and someone i i knew and you know i've used that my all my

friends have used that and you know it's like wow that's that's django being used same thing a lot

of the vaccine trackers,

the open source ones

that are out there

are actually also Django

in various states

where you can,

you know,

compile which pharmacies

and which hospitals

have stuff.

So, yeah,

programming is a superpower,

right?

If you know what you're doing.

I did actually,

so I know we're coming up

on time.

One thing I wanted to ask

the two of you

because you do work

with junior developers.

So the command line,

how do you introduce this

to people?

Like,

I know it sounds like

a non sequitur,

but like,

everyone has to learn how to use it but nobody it's completely befuddling to people and then

there's like wsl on windows um i wonder if when you have a junior developer like how do you

explain that elegantly because this is something i'm struggling with right like we all use the

command line we need to use it and you kind of use the same commands but getting to that point

like the first time you go text only is super scary for people and it's it's i feel like it's

this like switcheroo where it's like i want to use python it's like well first you gotta learn

the command line and da da da and don't type these commands because that'll nuke your computer

and and then you can come around to python and all the rest uh so i just from a personal standpoint

ask if you've had any inspiration on like what is this you know scary thing that is or you know we

use all the time but we don't think twice about it right it's like i use the same five commands

and anything else i look up but it's taken me a while to get to that point right you gotta learn

what the file system is and um so i'm just curious as you level up developers this must be part of

part of that process is working with the command line yeah honestly i think the i see what colin

thinks too but i think the django girls tutorial does a wonderful job of that and introducing the

command line and and talking through that so um yeah many years ago we actually had our own

django boot camp that we put together the material for that yeah that's a huge amount of effort to

maintain and have found that is um much easier to do with the you know the the force of the entire

world behind it you know behind a tutorial like django girls or something else so um we um well

yeah often point people to that you know whether internal or outside of cactus point people to that

as a starting point for python django in the in the command line anything else it's maybe a bit

of a cop-out anything else well no i don't think so but i mean even that one and i was just looking

at Codecademy, like, you know, because on a Mac, it switched over to ZSH by default. And so the

prompt is different. It's the percentages instead of a dollar sign. So like, just how do you explain

to someone it's like, well, okay, you're on a Mac. Okay, what type of Mac? What's your operating

system? Okay, the prompt may look like this, it may look like that. Don't worry about everything

to the left of it. You know, what's terminal, that's different than shell, that's different

than console. You know, there's hyper and I term and terminal. It's just like, you know, oh, and

the commands are different on windows and so is the file system and by the way there is a file

system you know it's just like i i you know i feel like it's me being that engineer i hate who's just

like oh here's a you want a simple answer let me go on a hour digression but i but you do need to

know those things right so it's like how do you so maybe yeah the django girls tutorial is really

good even though it still uses the bash prompt um sorry colin you're gonna say i'm just venting

Cause I'm just like been thinking about this a couple of days and I'm just

like,

God programming sometimes,

you know,

with all the powers,

it's just like,

there's still these things where I'm like,

I don't want to be that person who just completely bomb someone with

information who wants to just get started.

Yeah.

And I don't,

I don't know if I have much,

I do feel like we,

when I have paired with someone who is learning that type of,

even just the command line or interacting with get,

I do think it's really valuable to,

sure to do look to like start at the at the like the the cli rather than the gui versions because

i think it's easy to kind of jump into the gui if you're new to the command line and using one of

those you know source tree or some of the tools out there but um i think it's just more of like

a hesitancy to jump in if you're like pairing with someone you can walk through and talk about each

each command and we have sometimes helped like built out a little like cheat sheet of things

to do like run you know run get status for certain things and how to make a new branch and i think if

you can kind of like help get over those first couple of humps it's easy it it takes away some

of the anxiety that you may have jumping into the the terminal and the command line for the first

time right and then set up your alias so you can do gs because get status is just way too long to

right that's my fault i totally forget what the actual commands are because i have all these

shortcuts like you know git commit gc and um i get kind of annoyed i'm like i gotta type this

whole thing yeah but i guess pair you know pair program would be good because you do need to

actually do it and um yeah yeah that beginner mindset yeah definitely definitely carlton i

know i know we're out of time now i've i've hijacked the conversation but i just wanted

command line because it's it's i i think about how to educate people right and it's like if i'm

sitting next to someone that's one thing but how do i do it in a you know verb in a text or video

form where i have to kind of guess all the things that could come up and address them without you

know swamping someone and it's just this command line thing i was just i just occurred to me like

oh yeah like the prompt is different you know so if you go into a server it's probably still bash

but you could install zs you know zsh but and like how different are the two of them and it's like

it doesn't even like really matter like right like all you need to do is like cd and ls basically and

then run a script but getting to that point you know not to mention you know my path like i saw

that um uh if you install the new so i run this site install python 3.com and i'm updating it

because that's like a opinionated way to install python um and it seems like on mac you know home

brew you don't want to use you want to use the python installer and the python installer is great

um but it automatically at like add something to your path so it'll put it in front so it's like

do i want to tell someone that that happened or just be like it probably worked right it's like

i don't really want to get into that but and if i'm sitting next to them it's like oh sweet it

worked but if it doesn't work now someone has a munged up path and that's like google hell

i think to try to fix someone's path yeah anyways maybe yeah i think the concept of like

yes changing just changing directory cd and moving around within the file system in the in the shell

um yeah thinking back to pair programming or you know tutorials that i've done that is a

it's it's yeah it's a hard thing to understand um for sure well that's why we all get the big bucks

right now do you see exactly i can successfully change back out of my home directory well and

what's the home directory why does that matter yeah like what's tilde symbol it's like i didn't

know that was called tilde until i was yeah yeah anyways is there anything i've missed um i know

we have a lot of notes um any other projects or things either of you wants to call out yeah i just

wanted to call out uh karen tracy i don't know if if you've had her on here before um but she has a

i don't think so she has a a fun uh origin story of how she first heard about cactus which i'll

i'll let her tell uh if if she's comfortable sharing um i'd love to have her on because i

got a book of hers where she wrote about um debugging and testing with python with django

like you know early days like quite a while ago but it was it was you know great book yeah yeah

we we met um we met karen back in i think 2009 when we had emailed the django developers listserv

about organizing a sprint in the triangle and um had no idea that there was a django core developer

in the triangle of North Carolina.

And we're absolutely thrilled that she could be there.

And that turned into, obviously, Karen joined Cactus in 2010.

And it's turned into now a decade-long relationship.

So we're happy to have Karen and just grateful for all of her help at Cactus over the years.

I should check out that book.

I didn't know about that book.

I know it's Django 1.1, Testing and Debugging, but I'm sure a lot of it still applies.

No, it all totally still applies.

I mean, you know, it's just gold dust, that book.

It's great.

So, but yeah, other than that, Colin, anything you had?

No, I don't think so.

That was great.

Yeah, well, Tobias, it's nice to see you in person.

I feel like we've sent so many emails back and forth

over the last couple of years,

but I never actually had met you.

So, nice to do it.

Yeah, likewise.

You know, digitally, hopefully, you know,

we can all meet up at a DjangoCon or event.

Yeah. Yeah. Yeah. Yeah. Thank you all for all your help with the hosting related things and the DSF ops, uh, collaboration. Um, and yeah, Colin, uh, Colin and I were just talking yesterday about how much we really miss, uh, getting together at conferences and things with, with folks. Um, I was, yeah, I was actually just before the pandemic was like one of the nice things about the ops team, which I'll throw in at the end is that I, I'm definitely a person who does better.

in smaller groups so like meeting marcus and florian there has been really great and yeah

marcus and i were actually going to share a hotel room at jango con eu and then of course the

pandemic happened um so we're very much looking forward to um getting back out there and meeting

meeting folks in smaller groups at conferences and uh you guys as well so thank you so much for

uh putting this together and uh inviting us to be on it's a lot of fun to talk thanks

thanks for coming on the show really great yeah thank you both so we will have links to everything

in the show notes uh we're at jango chat.com chat jango on twitter and we'll see you all next time

bye-bye join us next time bye-bye