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 wow.
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 rec 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 uh we had a 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 was definitely whatever we got kind of interested in we wanted to build.
The the chat app that's like Slack, right?
Right.
Yeah, just ahead, ahead of the cuff.
Very simple compared to Slack.
I think it's interesting what you said about meeting someone online because uh 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 connect with people.
So pre, you know, pre-Facebook and uh in my space.
Um, but if you're able to do that, you're able to have this power and control over what you do.
Um so I I wonder if that's the same now.
I it seems like there's a lot more support in 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.
And uh just to continue, so then um did you continue or did you ever uh 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, Erlum 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 I I did really like about it was that they at 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 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 I really fell in love with it then.
Um and eventually what led led me to to Django there, because we had wanted a way to kind of view all this data and look at it once we got into into a Postgres database and um started building a data viewer in in an early version of of Django and remember really liking the how easy it was to just kind of see things in the admin and um and how easily it connected to Postgres.
So that was my first experience with it at the time there.
I I think that's quite common now, right?
With the the way data science is common.
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 uh there's a few options, but Django's 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 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 is 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, it's true.
It's kind of a big jump to go from like a panda or a Jupyter notebook to to a Django web app.
And but you can do a lot in those Jupyter notebooks.
They're they're fun, really fun to play with and um document what you can do in them.
Yeah.
So Tobias, let's um, we're talking about college.
Can we get your backstory since I believe the two of you met in college, right?
Yeah, we did.
Um and you know, before that, uh we actually I was so 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 uh yeah, that I had also had a small Mac shareware uh company in high school that wrote uh applications in Real Basic, uh, which was like totally bizarre coincidence.
Yeah, well why why weren't you doing the well can I ask why weren't you doing the web?
Was the web not a not as um I don't pre-Lamp stacked?
Yeah, I think I um so I was doing yeah, some PHP MySQL development as well, but um 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, um, but Real Basic was something I could understand.
And um the the the first application I built um when we got uh cable modem in in junior high, and uh 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.
Uh 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.
Yeah, 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 the one part of that that I really enjoyed was uh they ran their own mail server uh and on a Mac and um
in a closet?
In a in a closet.
Uh and uh yeah, didn't really know what they were doing with that, so uh 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 is you know continues today in my work with Cactus and and also with the ops team.
So this is all you know pre-Gmail, because I I think that came on the scene two thousand four or something like that.
But yeah, and that was the first one, as I recall, that was like people would just use that, right?
Before that, everyone had something in their closet for email.
Like everyone had some sort of setup.
I mean, we're at where I grew up, we we're next to a local university, so we tapped into that, but there was no good cloud option.
Um 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.
Yeah.
But it was 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 uh you know, now no one would do that.
But I'm sure there's it 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 uh post fix was the mail server that we used at the time and still have a soft spot for for that in in my heart.
So then you decide after a year of doing that that you wanted to pay to learn how to program instead of getting paid to program?
Uh yeah, so I did uh I applied to Erlum at that time um and got in.
I actually chirked the CS department for uh a couple years there.
I had decided that I wanted nothing to do with with software and programming.
And uh first I think I wanted to pursue an acting degree, uh, eventually settled on philosophy, but it was around the two year.
God help you.
Yeah.
Carlton Carlton agrees with that.
So do you have a philosophy theory?
Dr.
Carlton.
Oh wow.
I didn't know that.
I do, I do.
Yeah, yeah.
Yeah, I just think that's a good thing.
I remember when
I first uh I don't know if if James knows this, but when I first uh discovered the Django community and found James Bennett 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 an 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 uh 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 I 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 um today as well.
Okay, okay, so tell us about cactus, because like I've you know, for my entire time in the Django sort of sphere, cactus is one of the sort of landmark agencies there.
But for pe 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 I chuckled when I was listening to your episode with uh Aaron Mullaney, who uh is a cactus alum, and I think the line was something like cactus has been around forever.
Really?
We've been around that long.
No, but you know, if 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 cactus
is one of them.
We were really honored to to hear that.
And it yeah, it meant a lot uh to hear that coming from you guys.
So um but anyways, yeah, we um Colin actually moved to North Carolina um in 2007 after he graduated from uh Erlum.
And just because it was a central spot for all of us, and um 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 uh 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.
Um Do you recall what the t what um version of Django this was?
Um was it pre-1.0 or is it after the
i it was, it was 0.96 or 0.97, if those are even things.
Uh and but no one really used them from what we could tell.
Like everyone was following the subversion, you know, what was you know, then a subversion repo, the trunk uh branch of that, because so much had changed and there wasn't another release.
And um so it was a really uh 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 uh um it was an exciting time to be a part of the Chenko development for sure.
Carlton, that's about when you
joined up.
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, will be fine, you know, nothing's broken.
Oh what one deprecation warning, you know.
No, I've got to go and read the commit and understand it and rewrite this whole section.
Like it's a big different world.
I was I came in about 1.1, I would say.
I got a book um one one 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.
Why like why client services instead of uh 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 and 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 it 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 at a big company sometimes like, man, I'd like just something new and different.
So there's uh attention 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 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 you know, timing and just um 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 Moop 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 um newer, so there was less um you know places that needed Django needed help.
Um 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 won out as the uh more useful language of the two, I would say.
Okay, I yeah, I'm not just gonna sit there and silence for that one.
Because like the the um like standard niche niching down, right?
Nishing down, like pick your niche, focus on it.
If you've if you've got if you can be a Django specialist, then you're always gonna have a market.
Like you can you can be a Fortran specialist, you're always gonna 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 that you've got a job, right?
It's the same.
If you if you know if you know Django.
But but at least there is 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 what especially when I was hiring, trying to hire at a startup in San Francisco, someone who comes out of a a school with a 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 if maybe it's the previous work experience you both had, but but turning that down takes a lot of guts.
Like because I recall when I interviewed people, if they were flirting with Google or Facebook or whatever, they weren't gonna 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 can't I couldn't fight against that one.
Yeah.
Yeah, I think um I I I again, yeah, I guess reflecting on that, um 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 twenty dollars an hour doing software development.
Uh and then, you know, we start cactus and you know, 2007, we're charging, you know, sixty-five dollars 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 from my perspective.
So that being said, 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 uh baker at the time.
I didn't know this, but I'm really glad it didn't go anywhere.
That's my requirement working.
King Arthur Flower is actually in my hometown.
Um, and every time I 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 of
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're at college, you can have a hobby.
So okay, um so you've been running an agency um for you know 15 years, 14 years, 15 years, yeah.
Uh what advice would you give to um someone starting out down that road?
Because it's uh, you know, a lot of the 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?
Because 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 is to hire a chief of staff.
Um there are a lot of different people out there in the world who will tell you, you need this, or you need that, or um you need uh you know, figure out your strategy for this.
Um 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 yeah, 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 really happy to be working with her and um it's probably what I would recommend as the first thing to anybody sort of embarking on a building a small team um like this, bootstrapping a small team like this.
Okay, and what does a chief of staff do?
Because they what do they what's cactus now?
Uh 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 decent sized team.
Uh and we're so yeah, we're organized into um 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 uh should probably have uh Kel 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 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 just 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.
Uh um, yeah, that and that was uh I should probably let Colin talk about that as our CTO, but I think it was an intentional choice on our part.
Um in part because you know we maybe had no choice.
Like we did we did want to grow and and very senior developers um expect rightfully so, expect a lot of money.
Uh and so this is uh you know, I think uh yeah, like you said, a unique way that we found to um you know give back and you know try to you know grow uh team members, uh hire team members at a more junior level and and provide an opportunity for them to grow within cactus and hopefully they'll stay, but if not, uh you know, like Aaron, that's that's totally okay too.
And we're um yeah, delighted to see what the cactus alumni um go off to do uh in the world uh after cactus too.
Anything you would add to that, Colin?
Um no, I 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, you we can we just I think got like kind of lucky we'd find a lot of folks who are 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 how do we grow the company as well as um you know helping people with their with their skills and and experience too.
So it's yeah, I I enjoyed.
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 whether it's you're at a similar skill set to 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 um when you can when you have the time to pair and and work together.
Well, I think that culture is so important because that's not easy you don't take that for granted, right?
That you 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 skill foil types right in Silicon Valley.
Like I've worked with people like that.
Uh 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 it um as opposed to feeling like they're being held back.
Yeah.
Yeah, when you can work with somebody and I don't know, 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 I feed off that kind of energy.
Like when when they get excited, I get excited, and and I like to just be a part of that sort of loop and that cycle of uh of excitement.
Well, because coding is so it's so intimate in a way, it's so 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 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 you have an understanding of of the people or the team that
you know they're thinking.
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 uh 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 com I think is less common in other fields where there's you know sort of an agreed upon way to do things, hopefully, and programming sort of you know, free-for-all in a way.
Right.
I mean that's
yeah, and I think it's yeah, part of it's 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 uh it's can be chaotic and disorganized and and you know, you know, our our uh CS Professor Erlum uh you know liked to joke that it's you know, you just it's just g honing your Google skills to uh 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 tearing down the mystery of that and that it, you know, it it is a very sort of slow, arduous process at times, uh, I think is um I I hope, you know, something that we can communicate through pair programming with folks on our on our team.
Yeah, I think that's important for juniors to see that it is really slow because you you you you so many, I don't 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.
It really and a lot of it is you know, it it it I've got to transform this string.
Well, that's 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 then 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 we tried it when we have founders on, you know, to really push them on like, okay, you built 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 Elasticsearch?
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, oh, okay, you know, because I 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 uh 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 cactus 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 they want to spend a small amount and get quite a lot, and you're like, well, but it's gonna take a lot longer.
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 code it.
No, yeah, that's a that's a great question.
And I um 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 sort of 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, uh especially has been involving uh user experience experts in that process.
So um trying to get at, you know, what is it that the you know customer really needs to solve this problem and not necessarily what it is that they're telling us because sometimes those things can sometimes they're the same, sometimes those things are different and can take a little bit of um you know teasing out to to figure out what those things are.
Um and I think part of that too is just you know sometimes understanding the the customer's business domain.
If it's a you know a a business that we're not familiar with, um 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 and understanding it um I think has a side effect of uh yeah, showing how complex the work is that we do and sort of getting um them on board with the process if they if they uh do come from a less technical background.
Um and so
there's it strikes me that there's a large discovery phase there.
Not necessarily large, but um yeah, I would say we more often than not we like to spend, what would you say, Colin, um you know, at least two weeks, you know, possibly four or more, depending on the side of the project, size of the project, before we get started to um answer some of those questions and and you know set the team on a good foundation going into it.
Yeah, yeah,
so it's gonna be important to set the expectations of that.
How do you mean?
That there is this initial phase which is discovery and you know Yeah.
Yeah, and some some clients love that.
Um it is uh it is certainly a harder sell for some, but I think once once we get into it, the you know the the the the time definitely proves itself.
Um sorry, Colin, you were gonna say I
uh yeah, no, I agree 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 too much too 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 the requirements start to change a bit and you're like, hey, but you did say priority was this.
Is that still the case?
And they're like, oh yeah, that's still the case.
And you're like, okay, yeah.
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 when you can when 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 um 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 um the ops team for the Django Software Foundation.
Um let's shed some light on this, right?
So we just interviewed um E Durbin, who runs infrastructure for Python, um, 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 um 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 uh 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.
Uh but I um so yeah, I joined in 2016.
Um just as a you know, as I mentioned earlier on, always have enjoyed tinkering with servers, and um, you know, this was a a way that I could do something that I love and hopefully give something small back to the Django community as well.
And so the ops team maintains the servers for um you know Django Project.com and all the related sites like the Docs sites, um, 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 uh 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.
Um uh yeah, I think I was particularly proud of was setting up the CDN for the docs, Django Docs site.
So someone had wasn't my idea, someone just emailed the Django developers listserv and said, hey, over here in Australia or uh 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 you know a single server at Rackspace in the US East region, and you know it takes a couple seconds for light to travel uh halfway around the world.
Um so we set up uh a Fastly, call out to Fastly uh donated um uh CDN to the Django Software Foundation, and um we set that up in front of the dock site and and more recently some others as well, static and and media sites.
Um 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 it makes a huge difference um obviously in terms of speeding things up.
Yep.
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 yeah, the Django docs sites does get some real traffic.
So traffic, yeah, yeah.
I mean it's it's kind of non-trivial as well because there's the 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 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 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 that is working.
So you're just so you're trying to just r 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 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.
Uh because I I'm just curious, because I mean I 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 Cloudflare, 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.
Um but that whole process of warming up the cache, I always wonder when does that really, really matter?
Um, I almost almost think that maybe it doesn't matter as much these days as it used to, but it it's a cool concept of you know preloading 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 about it.
I don't think we'd we added anything to to sort of pre-warm the cache uh after uh flushing it like that.
So there will be a period of time after you know 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 a you know, 100%, like because those files never change.
Um but I think it hovers around 60, 65% for the doc site, and it pretty quickly returns to that if you you know once it's invalidated.
So yeah, I didn't didn't bother with that um for this.
I mean that that's it.
I mean, you know, 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 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 uh a year so you're a little over a year ago, I think it was when RecSpace announced that they were offboarding um a lot of their free open source projects.
We sort of had a mad scramble to find uh hosting providers for that.
Um this was uh yeah, just pre-pandemic, I think.
Maybe I'm misremembering, and that was two years ago.
I I remember I remember it well.
Yeah, there was um because 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 rack rackspace who feels strongly about Django and um yeah, I think I tweeted out and yeah, we s we sorted it out, so they we they were very generous again.
But so we should call we should yeah we should call out the you know the people who provide the um some of the resources, right?
Because it's not it's non-trivial.
Yeah.
But yeah, they're I mean they're in the footer of the website, but yes, um Rackspace, Fastly.
I guess what uh what do you there's there's also now there's the Oregon computing group, right?
That is Yeah, so it's right.
So yeah, it's part of this mad scramble to figure out if we are losing Rackspace or not.
I think we ended up with far more hosting than we probably need.
Uh and got I think yeah, I think probably over 70, maybe close to $100,000 worth of uh uh free hosting provided annually to the Django Software Foundation from Sys11, which I think is a German company, uh the Oregon State University uh open source lab, which yeah, I had a very small open source project there many, many years ago, a couple decades ago, um, and
they uh were able to um donate, yeah, roughly equal to what Reckspace was providing previously.
Uh and then AWS as well.
Um they recently started an open source free hosting for open source projects programs.
So Reckspace, AWS Sys11, and OSU OSL, I think are now all hosting providers as well as Fastlate to the DSF.
And the biggest
thing I think we have something on Heroku.
I think we pay
Heroku a
little bit.
I forget.
I think it might be the Django people site.
Uh, 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.
Yeah.
Snippets.
Well, and there was also um so Django Packages is uh is not part of Django formally, and that that um just transferred over from um Daniel and Audrey.
We're um running that with some volunteers, and Jeff Triplett um from Revfs has taken over the hosting of that, um which is hosted on DigitalOcean.
So we're just covering everything with all the all the platforms.
And can 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 it's got to be the most visited uh um site.
Uh I I think the the static media is probably the most, or the downloads, Django downloads is probably the most bandwidth.
Um just the the I think the HTML probably pales in comparison to the size of the all the HTML and all the images in JavaScript that need CSS that need to be downloaded.
Uh but uh yeah, certainly the doc site is probably the pit gets the most traffic.
So well uh on the board we get the emails that come in through the contact form, and there's always amusing, you know, uh 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.
Um you clearly don't know anything about, you know, you have hopefully you have some bot and not some person sending these emails, but uh 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 how they shook out, right?
We 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?
Um Yeah, I think you know for me, we've yeah, we've worked on so many projects over the years.
I think for me, um I usually think back to the the first project that we did with UNICEF in 2010.
Um in part because it was a yeah, incredibly fun and exciting project to work on, in part because I think it also uh you know maybe precipitated some of Cactus's growth.
Um we we'd applied to this project to uh travel to Zambia and Malawi and build a Django-backed uh SMS application to deliver uh infant HIV test results uh 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 uh you know take the results on paper on a motorbike and take them back to you know the rural health clinics um that were serving these uh families.
And so we were able to cut the time in half for the delivery of those HIV test results by sending them by text message because there's you know mobile connectivity all over the country, send them back by text message to the provider who would then you know follow up with the patients if there was a positive result.
Um so that yeah, that was one, and I think we 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 um you know precipitated some of our initial uh hires at cactus as well.
So that's probably the one I think of.
Colin, what what's a project for you?
It's a good question.
I was looking at these here.
I I think I um one that I actually got to work on recently is related to uh it started as a volunteer project of mine.
I befriended a an attorney in the area who knew about this data set.
It's a 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 it has you know 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 um what started is a volunteer project to build this website called Open Data Policing and C well 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 not as good.
North Carolina actually has a fairly good one overall.
But overall, I mean the the site itself is what I like about it is that it's it's local to us, so it's in the it's in the North Carolina area, but it also helps you visualize and um see what what your local police department or department in the area, what your the the stops look like and the 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 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 how we can kind of help help shed some light into the policing around our area and what we can do to help there.
Yeah, that that kind of thing is awesome.
That reminded me when we had Jose Pedir on, he was doing a similar thing in Puerto Rico about um government expenses, that they're all sort of available, but they weren't available.
So by putting them on a website and then uh shining a light on them, they were able to, you know, hope well, hopefully improve behavior over time, right?
Because visibility is the greatest um disinfectant.
Yeah.
Well, and this of course, Simon Willison is uh his project data set is um trying to make this more off the shelf for journalists and other people.
Um I I'm looking at the the site.
I 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 uh 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 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 Elasticsearch or something?
Yeah.
Yeah, it's it's all Postgres behind the scenes.
Um this the search is it it's it it it doesn't there are there are a lot of stops.
I think there are like 22 million stops, and when you work 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.
They 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 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 and the idea is that like you you you know, you could you could get stopped by the state high 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 the the officer ID is not like their badge number, so it doesn't actually identify who the officer is, but um it is a unique number tied to that that officer.
So you could actually then look and see what what their you know stop history looks like and get a sense of what what you know who they stopped before as well.
Yeah, that would be I mean that's one of the things I I've I've read about the um Derek Chauvin trial going on right now is that they're able to talk about um you know the back history of of um Floyd, but not of 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 um in North Carolina at least that'd be readily available.
Yeah, and
so it's it's an interesting question of jurisprudence, isn't it?
It's like can like you've you bring someone to to to trial, you're trying them to trial for that particular event, not you know, not convicting them on a um oh they're a shady character, which you know has led to miscarriages of justice in the brilliant times.
I'm not saying mentioning anything about this particular case, but yeah, 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.
That's you know
Well, um speaking of other civic things though, so Code for Durham.
Um could either of you talk about this um this organization?
Yeah, yeah, that that that's a volunteer effort that that I'm a part of here and um is part of where open data policing um was was was born and and yeah, it started in I think in like around 2013, and I'd learned about Code for America from other activities that were going on in in the area.
One was an open open data day that was just looking at open data sets that were in the Triangle region of of North Carolina and learn about these the 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 we meet every other week.
Uh used to be in the cactus office, though I haven't been there in a while.
And uh and uh yeah, the brigades I think can vary a lot from area to area, but in Durham we do a lot of building apps for for for Durham and the policing one was one.
We also recently worked on a a project that we're partnered with Legal Aid of North Carolina to help with record expungement, and um 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 because 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 the 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 once the technology comes into play, it can really help help out certain things.
Well what if you know what you're doing.
I mean, here at um uh a guest 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 family 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 um yeah, it's it's programming's a superpower, right?
If you 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 you do work with junior developers.
So the the command line, how do you introduce this to people?
Like I know this 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-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.
Um, 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, anything else I look up, but it's taking 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 see what Colin thinks too, but I think the Django Girls tutorial does a wonderful job of that.
Yeah, intro introducing the command line and and tucking 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 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 um for Python Django in the in the command line.
Anything else it's a maybe a bit of a cut out anything else no
I don't think so but I mean even that one and I was just looking at code academy like you know because on a Mac it switched over to ZSH by default.
And so the prompt is different.
It's the press percentages instead of a dollar sign.
So like just how do you explain it to someone is like well okay um 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 iterm and terminal um 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 I you know I feel like it's me be being that engineer I hate who's just like oh here's a you want a simple answer?
Let me go on an hour digression.
But I do but you do need to know those things, right?
So it's like how do you so maybe the yeah the Django Girls tutorial is really good even though it still uses the bash prompt.
Um sorry Colin you were gonna say I'm just venting because I'm just like been thinking about this a couple 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 bombs someone with information who wants to just get started.
Yeah.
And I don't I don't know if I have much I 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 git I I do think it's really valuable to to do let 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 and using one of those you know source tree or some of the
the tools out there.
But um I think so 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 git 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 it takes away some of the anxiety that you may have jumping into the the the terminal and the command line for the first time.
Right and then set up your alias so you can do GS because git status is just way too long to write.
That's my fault I totally forget what the actual commands are because I have all these shortcuts.
Yeah.
But I guess pair you know pair programming would be good because you do need to actually do it and
um 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 to ask something about the 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 this 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 ser
ver it's probably still bash but you could install ZA you know ZSH but and like how different are the two of them and it's like wait 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 installpython3.com and I'm updating it because that's like a a opinioned way to install Python um and it seems like on Mac you know homebrew 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 adds something to your path so it'll 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 munched up path and that's like Google hell I think to try to fix someone's path.
Yeah.
Anyway pair programming is the answer maybe.
Yeah I think the concept of like yeah see changing just changing directory C D 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
I can successfully change back out of my home directory if
I'm 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 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 she has a a fun uh origin story of how she hurt first heard about cactus which
I'll I'll let her tell uh if if she's comfortable sharing.
I'd love
to have her on too because I got a book of hers where she wrote about um debugging and testing with Python uh with Django.
Yeah you know early days like quite a while ago but it was it was you know great book.
Yeah yeah and 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 uh of North Carolina and we're yeah absolutely thrilled that um she could be there and that you know you know turned into obviously uh uh uh Karen joined cactus in twenty ten and yes joined turned into uh now a decades decade long
uh relationship so we're happy to have Karen and great just grateful for all of her help uh at Cactus over the years.
I should check out that book I didn't know about that book.
I know it's Django 11 testing and debugging but I'm sure m a lot of it still applies.
No it's it all totally still applies.
I mean you know it's it's just gold dust that book it's great.
So but yeah other than that um Colin anything you had
no I don't think so that was great.
Yeah well um Tobias it's nice to see you in person.
I feel like we've we've sent so many emails back and forth over the last couple years but I never actually um had met you so yeah
likewise and you
know digitally hopefully you know we can all meet up at a DjangoCon or event up too
yeah you know
yeah yeah yeah thank you all for all all your help with the hosting related things and the DSF ops uh collaboration um and yeah call uh call and I were just talking yesterday about how much we really missed 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 yeah I'm definitely a person who does better in smaller groups so like meeting Marcus and and Florian there is has been really great.
And yeah Marcus and I were actually going to share a hotel room at DjangoCon 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
about 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 DjangoChat comm chat Django on Twitter and we'll see you all next time bye
bye join us next time bye bye