Django Chat

Django LMS - Sheena O'Connell

Episode Summary

Sheena is the CTO of Umuzi, a South Africa non-profit that trains young people in technical skills. We discuss the curriculum, teaching real-world programming skills, and building an online LMS due to Covid.

Episode Notes

Support the Show

This podcast does not have any ads or sponsors. To support the show, please consider purchasing a book, signing up for Button, or reading the Django News newsletter.

Episode Transcription

Will Vincent 0:06
Hi, welcome to another episode of Django Chat. I'm Will Vincent joined by Carlton Gibson. Hi, Carlton.

Carlton Gibson 0:10
Hello.

Will Vincent 0:12
And we're very pleased to have Sheena O'Connell, join us for this episode. Welcome.

Sheena O'Connell 0:15
Thanks. Hi, both of you.

Carlton Gibson 0:17
Thank you for coming.

Will Vincent 0:18
So when we met you at Django con us, you gave a talk about all the work you're doing. Maybe just as a quick introduction, quickly, who are you and what's your involvement with with Django? Right, what are you in right here?

Sheena O'Connell 0:32
Okay, cool. So, Django was my introduction to Python, which was kind of cool, though. Many years ago, I randomly had a Django project given to me, I was like, I could do this. And therefore I learned the language. The reason I got to Django con was that I was talking about a thing that I built in, in Django. Basically, what I do for a living is I work for a nonprofit in South Africa. And our main stick has generally been to find high potential young people who, who come from underserved communities, but to really have the, like the the aptitude as well as the grit to succeed in a software engineering career or, or another career as well. So we do all sorts of different training. We do like web development, and data science, and we do design and like copywriting and all sorts of different things. But I'm involved in the in the technical side of things. So we we find these high potential people, and we effectively hire them. And their job is to learn for a year. And then at the end of that year, we get them into like real jobs somewhere. So we get them placed into different corporates and whatnot. The Django part of that is that we have a custom built learning management system that's built primarily with Django.

Carlton Gibson 2:00
Can I Can I jump in with the most the one that jumps most to me? So okay, you identified what you called high potential individuals. How on earth does one do that? What's What does that look like?

Sheena O'Connell 2:17
But it's quite a long process. So the first thing we do is, we find people who are keen, so we advertise a lot, and we do word of mouth things and that sort of thing. And people apply, and they do some aptitude tests on mine. And if somebody does well, on the aptitude tests, it generally means like, either you or someone, you know, has maybe the aptitude to take the stuff on. So that is a challenge on its own, you have a question?

Carlton Gibson 2:43
I do, because aptitude tests are sort of famously biased, in that you take the classic IQ test, it turns out that what that that tests more than anything, is where you schooled in a particular kind of middle class, upbringing, and blah, blah, it doesn't necessarily test and the underlying attribute of the candidate

Will Vincent 3:03
Ricardo, and the question is what's what's the alternative? Right? I mean, well, does it is yeah, go I believe. That's the issue.

Carlton Gibson 3:11
So I'm just wondering, like, how do like, it's easy to test aptitude for people who have had all the advantages, because you just give them the standard tests do? How do you try and work around that? Or do I mean, it is, I don't have any answers or questions. It's just a question is like,

Sheena O'Connell 3:28
so that's just one, one step in the process. So we use a bunch of different tests. And a lot of it is also just like, comprehension, like, can you read this text and answer simple questions about it? And then there's some like spatial reasoning and some basic stats and things like that. But it's not like, yeah, it's not, it's not like super hard. From that, we take the people who perform the best. And we, we invite them to take part in a selection bootcamp. So that so back in the day when we were in, in person, we used to actually just pass people into GPS town and Johannesburg from all over the country, and then they hang out with us for two weeks, and we would assess their skills in person. But we don't do it do that anymore. Now, we have a online bootcamp and basically, what we do is we, we get these, these applicants loaded up onto our learning management system. And they, they they behave as though they are already recruited into our program. So they'll have some cards on the Kanban board and they need to move the things across the board. And the things that they do during this bootcamp are like we give them some basic code tutorials to do and we give them a bunch of Carter's to do which are like they're not super hard and if somebody's comes in with coding experience, and they tend to do quite well in that. We also get them to do some Get things. So we we've got like a quite a cool get tutorial and then they bumped their heads on things like merge conflicts and need to figure that out. And even people who do have some coding experience who are self taught up and haven't made steps before. And so the idea is to give them something that they'll have to learn, like while they're with us. And then, if people do really well, in all of that, then it might still mean that someone they know has, has the ability to code and is helping them out. This happens, unfortunately, quite a lot. So then after that, we have a test. So we use a platform called coder byte, which is really nice, because you can run lots of tests for very cheap. And that's again, just like a Carter thing. And we can detect certain kinds of plagiarism. And even then, we still nervous about letting other people in. So we have a staff member interview the people who get through to the end, and it's very hard to cheat on this kind of thing. So what we'll do is we'll say, like, a staff member will write some code that they made up just that and so what does this do? Like, what is this going to print and tweak the code as, as the interaction continues to make sure that the learner kind of grasped all of the concepts that they demonstrated during the course of the of the bootcamp and like that final interview is quite a like, like, that's the decision point and the end. But one of the things we try really hard to do is just add value at every point on the program. So like, as soon as somebody gets into the bootcamp, we try and make sure that they're learning and growing, even if they don't get into our program. So if if they come to a point where they don't actually understand something, then the staff member will spend some time with them, and try and get them to understand and be like, oh, you know, there was 90, that thing you did when you wrote that code, or gave us this code that you didn't write yourself. But let's see if we can get you to, let's see if we can get you to understand it. So if somebody gets caught plagiarizing, we don't like throw them out, we will say, we can, we can generally tell in this interview, like, Look, you actually have the potential to pick this up, you're just like, please don't do that damn thing again. And we'll often take those folks and put them into some kind of bridging course and see how they do for a prolonged period of time before bringing them into a full course. And that is, that's the selection process. So it's quite a heavy thing. Yeah,

Carlton Gibson 7:34
it sounds like quite like quite a lot of contact for, you know, yeah, yeah, it is, for each individual candidate.

Sheena O'Connell 7:41
It is, but it's worth it as well. Because once we bring somebody into our program, we don't really like we look after them, you know, so if somebody is struggling, we'll help them and we'll just like, keep on piling on staff hours with this person to lift them up. And like, we have a wellness team that'll coach them and all sorts of stuff like that. So if we let in the wrong person that ends up being, like very expensive for us. Because you can't just say like, oh, yeah, just ignore that person. They can fail. They're by themselves. And it also ends up being quite unpleasant for the learner. If we if we live in the long run person, they signed a contract with us for a year, and then they just like bashing their head on this thing that's not suitable for them for a year. It's yeah, it's like all round and pleasant. So yeah, we worked very, very hard to to find the right people.

Carlton Gibson 8:32
You said in the beginning of your Django con talks? You, I can't remember the first thing you said, you build. You said you build something. And then you said you build people. And I was like, yes. That's, that's amazing.

Sheena O'Connell 8:43
Yeah, that's, that's the most important thing. So we build tools in order to build people, basically. Yeah. Yeah.

Will Vincent 8:52
We're gonna link to the talk and try not to have you repeat it. But I, one of the other things you mentioned speaking at the Wellness was, because it's underserved communities, you have courses on financial literacy, and all these non coding things that somebody who as you said, you know, once they graduate is gonna be the highest paid person probably in their family and trying to set them up for success, you know, beyond the screen. Yeah, yeah.

Sheena O'Connell 9:13
Yeah, that's, yeah, it's quite a big deal. We actually don't run those courses ourselves. We have a partner who does it for us. And that's just like another online course that we offer to all of our learners. But it is a very, very big leverage point. I think. So. Yeah. If somebody comes from a very poor community in South Africa, then chances are they they don't have the financial literacy to make good decisions with their very first paycheck. And we are, we're not just about getting people jobs, we're about you know, setting their lives up for all sorts of good things. So we want to make sure that they don't make bad decisions as much as possible. Like go have some fun with your money but save up and look after the important stuff. Yeah,

Will Vincent 10:03
I believe, to your background, I believe you, you have a computer science degree is that right? It's not

Sheena O'Connell 10:07
electrical engineering.

Carlton Gibson 10:09
Because Because because I was going to ask you, you got, you got given this Django project this. And then you're like, right, I'm gonna learn Python Was that your first programming language or you

Sheena O'Connell 10:19
had coded before? So I learned. So I started coding when I was in schools. I learned Turbo Pascal as my first language, which was great fun. And then after that, I learned C++. I don't know if I learned C first or Python first. I don't remember. But yeah, the Python was something that yeah, like once I started coding in it, I just love the language. Yes, but when I was in university, I picked up a lot of coding jobs just to eat and get by. And that was my introduction to Python was,

Will Vincent 10:58
yeah, okay. Well, I was mentioned that in the context of your mentioning things around Git and doing all these tasks, I think still most undergrad computer science majors have no experience with any of that, right? They've, they don't know how to build a Django site, they don't know how to use Git. So in many ways, you're teeing people up to, you know, succeed more readily than someone from that formal background, just because they're not getting, they're certainly not getting that training at school. Yeah, they can afford,

Sheena O'Connell 11:27
yeah, they can hit the ground running. That's always been the goal is to make sure that people, as soon as they get that first job, they're practical and useful. I think the other thing to think about, or the other thing that I think about is, if you put a person into a new job, and they lost the first like three months, then they tend to last for a longer, like a significant amount of time until you know, something better comes along. And so I'm like, Alright, so what does a person need to know, in order to not annoy their co workers in the first three months? Yeah, this is a tough one. But you know, when you like, start working with a junior person that they just dumped their head on gets for the first two weeks, like, Ah, come on. So we just make sure that none of that stuff happens. We take care of all of the things that their employer would need to teach them in the first three months. Or we try to at least it's hard to take everybody's boxes and, and whatnot. But I think we've got a very firm foundation built. Yeah.

Will Vincent 12:34
So what links all this but the, the code is all open source. So it's tilde right? Yeah. That was a nice play on you mentioned, you're talking Newsies home home. Can we talk about the tech stack? I mean, yeah, sure. We can go podcast. Yeah. Yeah. Good. So you, so did you start? Did did you start from scratch, or there was an existing thing? I think you,

Sheena O'Connell 12:58
we had a syllabus already. And that was, that was basically a Hugo static site. So we had a bunch of markdown files. And that was what we gave our learners to work through. And that was generally managed, like in person. We had spreadsheets, you know, and some, like random little scripts that manage those spreadsheets, but a lot of things were handled just in a very hands on way. later on. So when we went remote, I like that's really all we had was, was the syllabus and some random scripts, and it was in no way sufficient. So till there came out of that, it wasn't an obvious thing to build. Initially, I think probably the hardest thing about building it was figuring out what we should actually build. And then once it's, like, once the solution was clear, it was like, Oh, this is obvious. Let's let's build a Kanban. Board. So yeah, so the tech stack, back end is Django and Django rest framework. And we use dramatic for long running requests. And then on the front end, react and Redux and some saga stuff and material UI. So it's not it's not like out there in any way. It's I think, like a lot of people have heard Django NDRF on the back of memory and react on the front. There are things that I would do differently. If I were to start over again, a lot of it was built in their head of a hurry. So I think the the core of the the core of the application and the Django application is this is the way we think about content. So our content is basically consumed as a bunch of configuration files for the Django app. So We've had all these markdown files, and they've got frontmatter in Yamo. And we look at that Yamo. And think of it as a, like a knowledge graph. So you can say, in order to get the syllabus done, you need to do this project. And this project has that project as a prerequisite. And since you're doing this in Python, you should do that in Python, or since you're doing this in JavaScript, you should do that one in JavaScript. And so you've got these content, items, we call them, and they can come in different flavors. And so from that kind of graph of knowledge, we generate peoples, we generate some Kanban boards that people need to work through. So yeah, go on,

Carlton Gibson 15:41
can I ask because this is a fascinating question for me is like the Django and relational database, they work very well with the relational model. But a lot of data structures are graph like, and is always in this sort of impedance, because you can model a graph in Python in memory. But then how do you write that to disk now? Do you like like, Wow, can I ask you to explain a bit about how you handle it? Because I think it's a good challenge.

Sheena O'Connell 16:02
So I don't know if we did it in the most elegant way possible? And I think it is. Yeah, basically, we've got a table called Content Item. And then we've got a nother table for marking like, what is what which content item is a prerequisite of which other content item? And is it like a hard prerequisites whatnot, like is a strict requirement? Or is it a nice to have. And then from those two tables, we and then we have like a, like a curriculum object as well, that says, I do these content items in a specific order. Then from that, we generate a Kanban board for a learner. So I'll say, okay, cool. You've got these cards, and then that's just like a normal, that no longer resembles the graph in the same way. So we Yes, yeah. Yeah, sort

Carlton Gibson 16:55
of flattened it. Yeah. Yeah.

Sheena O'Connell 16:59
Yeah. So we don't have to do like crazy recursive queries, except when we're generating a person's board. And then once the board is set up for that person, and they just need to move through it.

Carlton Gibson 17:10
And do you do can I just do serialize? So you do that calculation once and then serialize it in the database? So each time you just fetch the curriculum as it was generate? Yeah, okay. Because then

Sheena O'Connell 17:19
we can add extra status information to the cards that show up on a person's board. So you can say this is when you started the thing. This is when you requested a review. This is how it moved around. Here's the repo associated with your card. Yeah,

Will Vincent 17:33
can I ask a little bit about your, your previous background with Django? Because, like we all talk about, you're like, oh, I need to spin up the site, and you listed a laundry list of technologies. And it worked. And, you know, people who are new are like, wait, you can you can, you know, build a Twitter clone in a weekend like, so could you Could you fill in kind of your the Django web bit to kind of get to the place where like, I could build a Kanban board and a couple of weeks, you know, that is prototype, and then scale it.

Sheena O'Connell 18:02
I got to try it understand your question. Let me know if I'm going off on a tangent.

Will Vincent 18:07
The question is your, your, your, the web experience, you sort of mentioned you picked up programming, and doing jobs in college, you know, what gets you to the point where you can do that. And not just you can say, you can just like spin up prototype anything, right? Because I think after however many years, you know, any basic kind of crud thing, like, yeah, I can do that. And Jenko. But you have to have done a bunch of stuff before to get to that point. Yeah, I think that helped with a question.

Sheena O'Connell 18:36
Yeah, yeah. So it's sort of like what, what experience do you need in order to get to a point where you can solve these sorts of problems?

Will Vincent 18:43
I guess, I guess so. Yeah. Like, or like, how many major sites have you built before? What what got you to that point? Because it differs by person, right? It's not a linear thing. Yeah, it is.

Sheena O'Connell 18:52
My career journey was not linear or intentional in any way. It was very, very meandering. I think. I learned a bunch of web dev work when I did that first Django app. But I also did like, some like C sharp stuff, once upon a time, and I've done PHP and some PHP front end stuff. And like a lot of pyramid work and some flask work. And so I've touched a lot of different frameworks for different reasons with different clients. And so I think, I think the one thing is knowing like having an idea of the lay of the land and make what kind of tools are out there, and the trade offs between them is a big deal. Like, so. So that's like, I think that's a huge problem on its own worth solving for people because, like, if you don't know which tool to use, then you could just research that wages. Then the other thing is knowing almost like the anatomy of a web app to say, Okay, what is a back end? And what is the front end? Like? How do these things talk? Where does the code actually run? And how, like, what are the trade offs between like using a template, like something was generated on the back end versus a React app? So I think knowing that that like how these different things can talk and how to make decisions about that is also a big deal. And then once you know how to make those major decisions, it's like, you know, which technologies you want, you know, their major configuration and then writing the code. It's almost like you've already solved the problem a lot of the time, and now you just need to write down the solution. Yeah.

Will Vincent 20:43
Does that. It's really, it's a no, I mean, I'm not I'm not saying I, I concur. I just I, when I was first learning, I just had no idea of what that roadmap is for people. Yeah, it's so like, my top my talk at Django con was about the roadmap being like, kind of here is that, yeah, the canvas of what you laid out that you need to have some experience with. And then it's a matter of picking and choosing, and y'all figure out the details, but I kind of know, the overarching structure of what I want to do. And that's, I mean, that's great that you touch so many technologies, you know, because I do think some people you know, learn one thing and just stick with it. And then there's a little bit of like, well, I don't want to see I don't want to see sharp like, especially as maybe as you get more competent in a certain set of tools. It's like, why would I change? And that's why knock on wood. It's nice that Python and Django are still here, because I'm not like, you know, I play around with new frameworks, because it's fun, but I don't really want to have to go build a Rails.

Sheena O'Connell 21:44
Yeah, I think one thing that's interesting, I think, is that I actually stayed. So after I started working with Django, and went and tried a whole lot of other technologies, I circled back to it very intentionally, for this project, because of the fact that I found Django to be a fantastic teacher when I was learning Python. And when I was learning about web dev as well, I think one of the things that has frustrated me about Django is the fact that it is so opinionated, it means that, like you have to deal with those opinions. And if you have your own opinion, then that can sometimes you're like, like a little tricky. But if you're a new programmer, and you want to learn about web dev, then jumping in with a very opinionated framework is fantastic, because then you get the opinions of all these, like, you know, like really clever people who built the framework and thought really hard about it, and you get to, you know, walk that well trodden paths and do some, like you can build something effectively, without having to make all those decisions as your first step. So, yeah, so chose it is because it's a good teacher. Partially because like, a lot of the people who I work with are fairly Junior. So it's like, okay, cool. That's like, learn Django. It's gonna serve you. So, yeah.

Carlton Gibson 23:01
Well, the flip side of that exact point, though, is it's not just that when you're learning, it's when you're a senior, and you need to bring on juniors to have something where they don't have to be able to intuit what went on in your mind when you were stuck in your ivory tower. Right? Yeah. From scratch. That's really kind of helpful. Yeah, here's the Django app. Oh, yeah. I know how that works.

Sheena O'Connell 23:20
Yeah. Scalable teams is a big deal. Yeah. That's awesome.

Will Vincent 23:25
Well, the the fact that like, you know, Carlton, I can look at the codebase. And very quickly, kind of know how it's structured. Whereas, let me pick on flask, right, like, that's not the case. Yeah. Everybody's got their own flavor. Yeah, it makes that.

Carlton Gibson 23:38
Oh, back in the back in the day, homebrew microframework. I broke myself. It's like, even

Will Vincent 23:45
Whoa, yeah. Forget that. Forget that. Yeah. Yeah. Well, we just interviewed last week, Craig Carson's of crunchy data. And, and he was we're quizzing him on kind of rails and Django because he's a lot of experience with both. And he was making the point that Rails is more opinionated, but Django has more batteries actually under the hood, which I thought was quite nice to you. Okay. Yeah, it's, you know, because Rails is like, wow, it just works. But I hadn't really thought about, like the built in auth. And the actual batteries part is very strong in Django. You know, it sometimes I wish maybe for beginners, it had more opinions, actually. But, you know, the batteries just take for granted. Whereas every time I touch another framework, I'm like, What, you don't have an admin you don't like yeah, what do you did here?

Sheena O'Connell 24:31
Bye. Find yourself. Yeah,

Will Vincent 24:35
yeah. Do you have do you have a question I saw, so you got Kubernetes in here, I have to ask about deployment. And like, that seems like that it's not simple. That's not a small step to go to Kubernetes. So how did you make that decision? And so

Sheena O'Connell 24:50
I had Kubernetes. experienced before, which was quite helpful. And yeah, like learning it from scratch under pressure might not have been the best situation that it was, it was useful to know already. And I also had experience with making use of auto scaling things like Google App Engine and how that can go terribly wrong if you use it inappropriately, because auto scaling, things can become quite expensive. And so I was like, okay, cool. App Engine is really, really nice for front end things, which is why I'm still using it for the front end of the application. So the React app is running there. But the Kubernetes stuff, I wanted control over the I just want to control over how many instances of the Django app are running. And I didn't want to have to, like fiddle with a virtual machine and like a Docker composition or, yeah, just Kubernetes just fits in my head a little bit.

Carlton Gibson 25:53
So you're running on Google Cloud Platform? Yeah. Yeah. And so you're used to using the managed Kubernetes? Service? Yeah.

Sheena O'Connell 26:01
Yeah. Yeah.

Carlton Gibson 26:02
Right. So that's, that's not there's two things that's different. Yeah. No, well, there's two things when you run Kubernetes. Like, please, can you run like into my pod? Yes, I can run your pod. No problem. I'd like four of those pots. Sweet. That's one thing. The other thing is setting up the cluster. Yeah.

Sheena O'Connell 26:17
So I didn't say that the cluster myself.

Carlton Gibson 26:21
Which is just like a madness was like, why are you doing this?

Sheena O'Connell 26:24
Yeah, that's, I do prefer managed services very much. Yeah.

Carlton Gibson 26:30
We'll all this is a managed service. Stan show here.

Will Vincent 26:34
Oh, yeah. Yeah. One of the other tech cool things you noted in your talk was the project cards, where when someone you create a GitHub repo automatically protect the main branch? Can you talk a little about that? Because that was really cool to me. Yeah, how you automate that and

Sheena O'Connell 26:54
awesome. Yeah, so basically, the way our philosophy for teaching is we want to make professionals and so we want to simulate a professional environment as much as possible. And if you are a developer working on a team of developers, on some realistic project, you're not just gonna push to the main branch or willy nilly, you're gonna push to a different branch, and you're gonna make pull requests or merge requests. And so we wanted to get that feel for for the learners. And we also wanted to make use of GitHub. Lovely, like review functionality. So basically, what we have is, we've got this Kanban board and different cards on that board behave in different ways. And they are these cards called repo project cards. And if the learner by chooses to start one of those, then the code will pop across into the next column. But in the background, yeah, we create a repo for them. And we it's a private repo. And they are added to as a collaborator, the main branch is protected, there's a little bit of a readme added in there for them. And now they get to start contributing code in their own branch, then other learners get to review this. So one thing that coders need to do in life is review each other's code repo that you didn't write to have an opinion on it, give and receive constructive feedback. So once a learner has finished a specific project, let's say, I don't know. I don't know just some projects where they have to build a thing. And somebody else is doing the same project. And they have to build the same thing.

Will Vincent 28:36
Some password thing, right? Yeah, so check. Yeah,

Sheena O'Connell 28:40
so there's like a little password checker project. And so if somebody has finished the password check of project, then they are allowed to review other people's password checker projects. And they can be added as reviewers. It's sort of like a random allocation of like, who you're going to review, so long as you've done the work. And then they can merge the pull requests and help people get their cards across the board. So that's yeah, that's pretty fun.

Will Vincent 29:08
Yeah, that I love the, you know, automating and just getting a learner setup, to focus on what you want, instead of all the other cruft that we have to deal with. Programmers that isn't Yeah, isn't primary. Yeah,

Sheena O'Connell 29:21
I think then there are a couple of extra benefits to getting the learners to review each other, like one obvious one is that it saved our staff members time. So it makes our jobs like way, way easier, because we don't have to always say, you know, point out the obvious stuff. But from the learners perspective, they get that experience of giving receiving feedback, which is great, but they also get the experience, they get the benefit of like, spaced repetition in their learning. So they have to revisit things that they wrote. But now it's written in a slightly different way, and now they have to understand it, and that's a pretty good way to make sure that they do absorb have as many concepts as possible. So that's pretty cool.

Carlton Gibson 30:05
I think as well that reading code and understanding code is, by far the biggest part of the actual job, you know, it's spend some time writing it. But realistically, if you just spend your entire training period writing code, and then you get put to a job where you get to write, I got two hours actually doing some code not to have to review. I think that's lovely. I think it's really good thing.

Will Vincent 30:28
Well, that reminds me the saying that sorry, cards and one last thing, and then I know I've been talking. Jeff triplet, who works at Rev says often has said that he gets paid to write tests, not code. Because when he goes, you know, he gets parachuted into a code base that's on fire. He's like, Well, you know, where, you know, where the tests are, like, let's write better tests. So so much of it is, yeah, writing tests at a professional level, like actually writing Greenfield new code is quite rare. And the more senior you get, the less you do that, because your time is better spent reviewing. And rather than, you know, actually building the thing itself, which is sort of, you know, in a way doesn't make sense, but with experience are like, Oh, well, that's that's kind of where the value add is, is being in that review capacity, as opposed to just even though it's, you know, fun to, you need to write your own code to sometimes write Greenfield people's code.

Sheena O'Connell 31:21
Yeah, yeah. Something that I often find I something I often end up doing is just swooping in and writing a chunk of code that has almost gaps in it for somebody else to complete. And that also works pretty well, especially on front end stuff I just know, builds some new functionality, but it's like the padding is all wrong. And it's a little bit like Squonk like, Okay, guys, you're awesome guide rails. That works pretty well, as well for onboarding new people. Yeah.

Carlton Gibson 31:58
That's a nice word Squonk. So I had a couple of questions about the pedagogy. One is that I think you say you're adding start, you know, start date spin date, you've got this Kanban board that the curriculum is kind of like that. How do you find that is helping people on because sometimes I find people, you know, if there isn't a kind of nice structure, they kind of just drift away, not meaning to but there's just not the discipline to do that. So that would be my first question is, yeah, that's that is a big deal. Momentum.

Sheena O'Connell 32:30
So if we were a purely asynchronous remote course, without any, like human interaction, then I do think we'd have pretty high dropout rates, because that's a normal thing. I think Coursera has something like a 7% completion rate. Maybe that's generous, even I'm not sure. And

Will Vincent 32:47
I think that that's pretty generous.

Sheena O'Connell 32:48
Yeah, so so whatever. Yeah, it's pretty bad. And there's lots of reasons for it. But I think one thing, so we've got a whole lot of different things that we do to keep people on track. The first thing to know is that we are self paced. So we don't, we don't try to make everybody do the same project at the same time, or sit in the same situation at the same time. But we do. We do have stand ups every day. So we've got little baby Scrum Masters, we call them scribblings over there. They, they run a lot of the standards and help the learners like plan out their week, and spot any kinds of problems that might be happening. And so that's the one like major interaction we have is just like everyday people will say, like, this is what I'm working on. And this is where I'm stuck and that kind of thing. But then we'll also keep an eye on their pace. So if it looks like somebody is falling behind, like, we know, on average, how long each project takes, and we know how much time we have with people. So we can say, oh, it looks like if you continue like this, you're probably not going to finish in time. So how can we like what can we do? And sometimes just telling the person like, look, you've got to pick up the pace isn't enough. Sometimes they need extra support in different ways. So that's yeah, those are the main accountability things. We've also got all sorts of different interventions for different kinds of different kinds of things. So when so there's all sorts of different pitfalls that junior coders tend to fall into when they're self taught. So one thing, for example, is that if somebody is self taught, they'll often think that print and return are the same thing. And the reason for that is because of reports because they learn to code in a ripple and they have a function that returns a thing and then they they run the functions like look at printed that and so there's all sorts of little weird things like that, that we've noticed. So we'll have like mini workshops just on those concepts. So it's like alright, cool, we're just gonna like He sets with one staff member and three learners for 45 minutes. And we're just going to make sure everybody freaking nails the difference between return and print. And then once that's done, it actually solves a lot of problems. So so it'll be returning for instance, some other like how functions interact. And just because you're printing the returned value twice, doesn't mean you're calling the function twice. And, and like, yeah, there's all sorts of like weird little pitfalls that people fall into. Yeah, so we we aim to, like nail those very, very early.

Carlton Gibson 35:33
Yeah, you have a question? That's as important knowledge as well, I would think that there's, there's just like, really understanding how a function works in terms of what happens when you pass the vat, the the, the, the arguments in? And are they by reference value? And, you know, is it a reference of any type? And then what happens if you don't return anything? Is that like, what's the return value of a function without, you know, that kind of low level stuff, but actually learning those is really important. Yeah.

Sheena O'Connell 35:59
And while we're teaching that, we're also trying to teach people how to experiment with code, and how to assess their own understanding of things. So it always, like follow the same sort of process when exploring the staff, or like, the staff member will write a little simple piece of code and say, Hey, learners, what do you think this is going to do? And then they'll each title, say what they think, and you'll write that down. And then you'll run the code. And then you'll write some code, and then ask them what they think and then run the code. And that's the way we explore the topics. And inside look, you can actually do this yourself, you don't actually have to do this for you, you can explore like this, look, we just made a random change. And you took another guest like cool. And the people who click on to that way of self assessment, they tend to do really, really well.

Carlton Gibson 36:40
And that really fits the Python model of like, iterative exploratory.

Sheena O'Connell 36:45
Yeah, yeah. Yeah, so that's nice.

Carlton Gibson 36:52
I had another question, which was just about what you think about this new wave of AI tools that are coming alongside run code pilot and the chat, one that's been out this week that people will be talking about? I mean, is it is that a worry for plagiarism? And people sort of packing the the course content? But also, is it a tool that you think is useful for people in their careers?

Sheena O'Connell 37:19
So I haven't personally used them. It's something that I want to explore. I think for junior coders, it's probably a bit of a danger to get too reliant on them. So something. So one problem that exists that I've noticed, I think, I think it's probably everywhere. But that happens a lot in our education system. Like the South South African education system is a bit of a mess, really, like it's, it's nonsense. And people come out of that system thinking that memorizing and understanding are the same thing. And it's really not. And so

Will Vincent 37:56
that's pretty, pretty universal.

Sheena O'Connell 38:00
And so snapping people out of that is really, really hard. Yeah. And the other thing that's challenging is things like illusions of competence. We read the code, you run the code, and like, yeah, I could have guessed that. And then you think that you can write the code, but you can't, because you've just structure an ego instead of actually assessing your own ability to do the work. And then there's people who are so focused on moving their cards to the complete column that they don't necessarily put in the time to understand everything, they just want to get things done quickly, so they can look cool. And so I do worry about people making use of those kinds of tools while learning if they ever just ended up giving them perceptions of being able to do things that they can't do. Yeah, that's, that's a big deal. So they are, it's a concern. And I generally actually tell the learners to do not to rely on that stuff for their projects. Like they can play with it. And it's cool, and maybe maybe some kind of CO generating thing, we'll come up with something that they can learn from, but they shouldn't be reliant on it. Yeah, have you guys use that? Those sorts of tools,

Carlton Gibson 39:21
I've played with co pilot, or copilot, or whatever it's called. And I like it for writing boilerplate T stuff, like bootstrapping unit tests. That kind of thing is awesome. But like, when I'm when I really want to think I have to turn it off, because I know that because it's like, it's like pair programming, someone who's drunk is it, it's fine. And then you realize that it's, it's massively wrong. And it's like, no, no, if I just thought, you know, if I just tab through there, it would look as if it was right, and it just isn't there's logic errors, and it's like, so, so you know, when you're trying to think you just you don't want that distraction. But yeah, if I'm trying to write a unit test, and it's the same as the other 40 unit tests in the file, I don't want to have to write out 30 lines of boilerplate. It's super for that. I'm sure they'll improve with time. But I'm just interested in I think the point she made about the comprehension and the understanding and that false sense of competence. That's, that's an interesting viewpoint I hadn't considered like, yeah, I

Will Vincent 40:17
would agree with you. I spent quite a while. I don't think I mentioned this before, talking to Simon Wilson at Django con about these AI tools. Specifically, that was a Dali the image generation, but because he's like, you know, really interested in all that. And then he was with co pilot, he was mentioning that he uses it all the time. And the thing is, you know, he said, you know, half the time, it's rubbish. And half the time, it's correct. But you know, it'll return like code he wrote, because it's like, pulling from Django. Right. So I think I agree that like, if you're Simon Wilson, like, sure, like, it's just like, sort of interesting. And you like, immediately pick up on like, oh, that's wrong. But for an average person? Yeah. It's the I think it's dangerous, actually. It's the drunk programming. And certainly for a beginner, I think you don't you don't you don't want the crutch. It's really not helpful. But I would say it's interesting to you know, I was like, of all the people who don't need this. And he's like, no, no, it's cool. I just always type it in. And, you know, by Wonder, yeah, so I would also advise people to, you know, to play with it. But yeah, I think there's gonna be some tricky things there other than the more mundane tasks, but yeah, in a couple of years, like, maybe, maybe the new frameworks will be, you know, they'll be like an AI framework. And we'll all be focusing on some other part of the web stack, right. I mean, probably,

Sheena O'Connell 41:40
yeah. Yeah. I can imagine you're getting way way better than it is now. Yeah, but it is still, I think it will always be a thing where you should learn your basics, probably.

Will Vincent 41:50
Yeah. I mean, actually, the testing might actually be an area where it's easier to you have a generate stuff, and you can kind of look and see like, better. Yeah. And it was, I think interesting. I wanted to ask you, so you use on your stack, drone. Drone IO, right? For your continuous integration, like, could you talk through just the testing, or just change, but just your testing strategy and how it's changed over time?

Sheena O'Connell 42:14
So yeah, it's it's slightly more chaotic than I'd like it to be. But it is what it is. So our test coverage on the back end is quite high. Like, it's like very high. So that's, that's pretty solid. If somebody makes a pull request that the tests have to pass, and before we deploy, the tests have to pass. We, yeah, so nothing, nothing fancy. It's just the standard unit tests that need to pass at different points. Yeah. So testing strategy, you might be also referring to like TDD versus not. We're not too fussy about like, if you write your tests first or later, or anything like that, so long as the code is properly tested. Yeah.

Will Vincent 43:10
Yeah. Fair enough. Yeah. It's a very broad question. With your current stack you're using Hugo, I think you've mentioned maybe you would revisit that. That decision, like what what do you make of static site generators like 11? T and others? What, like, what would you use today, if you were starting from scratch with static site generator. So

Sheena O'Connell 43:26
for a long time, I was thinking I should move towards 11 T? Because it's sort of like low level in a way in that it's just relies on web components. And, yeah, it's, it's like a very elegant little thing. It's like small, and it's very easy to understand. And the code is all in JavaScript. And I am pretty good at JavaScript. So that helps. So we were using Hugo initially. And it seemed like a good idea at the time. But I think the version that we that version that there was at the moment is pretty unstable. So as soon as we wanted to upgrade it at all, like even a bias 0.01 And then we'd be like, Oh, now things are broken, and we have to fix them. And

Will Vincent 44:12
that was a script. I mean, what do you expect? Oh, he

Sheena O'Connell 44:15
goes in Go. Lang.

Will Vincent 44:18
Which is Oh, yeah, no. Oh, I talked to my 11 D. Yeah, JavaScript just gonna get dig in.

Sheena O'Connell 44:24
It's totally acceptable. Like, every time I have to write significant JavaScript, I have to go take a shower afterwards. It's a messy language. But, but it's also Yeah, it's also solid in a lot of ways. So I've done some playing with eleventy and it seems very, very capable and very Yeah, like easy to extend in different ways, which is really cool. Like you go, but like I hardly ever write Go code, like, practically never and so if I want to do anything interesting, then it's A bit of a mission. And so interesting things don't happen. Whereas with eleventy, it would be much, much easier. I'm actually also thinking about next. Because you can also do static site generation with next. And it's got the full power of React. So it's heavier again. But it's also, you can do all sorts of cool things with it. So that's an option, because it would be nice for the content itself to be a bit more interactive. So right now, we've just got markdown files, it comes out as text with some pictures and some videos and things like that. But it's, maybe it'd be cool to have a little quiz II thing or some interactive content. So I think maybe next would be better for that sort of thing. So it's going to change at some point, but it's not like the highest priority thing on the list right now. It's difficult

Carlton Gibson 45:51
as well, because these framework decisions, they come with a lot of overhead in terms of each time you switch, new, so you got to, you've got to choose carefully, you know, you've got to, when you do go, you've got to say, okay, we can commit to this for a period of time.

Sheena O'Connell 46:04
Yeah, yeah. Yeah, we chose you go, like years and years and years ago, and at the time, it probably, like from what I knew at the time, it seemed like a good idea. It seems like the best bit. But yeah, there's there's different things now, things that seemed more appropriate now.

Carlton Gibson 46:20
Yeah, that point about not using go very often. It's like whenever you've got like multiple texts in the stack, it's like the one on the edge where you don't use it very often. Every time you go back to it. I've got to remember that and you say the velocity is just so slow.

Sheena O'Connell 46:35
Yeah, yeah. It's got like that mental hurdle that you'd like. Okay. Getting into it. Yeah. But that's one of the benefits of next because it's just react well to react with other bells and whistles, and our front end is react. So it's not like super different. It's not like a whole other thing. So that's, that's cool. Gatsby is also available, but I think react. I think next is maybe nicer. Yeah,

Will Vincent 47:05
right, if we want to get Yeah, I haven't used

Carlton Gibson 47:08
mindshare. Next seems to have the mindshare and then it's also. So it's an up and down thing with JavaScript worlds. But like, you know,

Will Vincent 47:19
that your Hugo story is bringing back memories. Because six years ago, when I was at a startup, we had a i, someone had started and I had to gin up the blog, using Hugo It was exactly like that. It was like, Oh, this is fast. And it's cool. But anytime I do anything, I was just like, Oh, God, I don't really want to be an expert in another language. Like, which maybe it's not the worst thing because you just sort of leave it alone and just post content. And but it's, it's nice to stick to Python JavaScript, if you can, just because one less thing to worry about. Anyways, yeah, I agree. It's yeah, I don't think it's quite the hotness that it was. Pandas, you're are you using Pandas and the project in some way, like you said, is being

Sheena O'Connell 48:03
used not by me personally. But basically, we've got another repo off to the side that our data folk deal with. And it's got a tilde client API thingy in there, that they can fetch data from tilde and put it into a data frame and do what they need to from that. So from that we do things like, figure out how long different cards I'm in to take and spot different kinds of outliers and spot different kinds of problems. Yeah, so So there's a bunch of random things happening. There are like syncing data from tilde into things like air table, because a lot of our non technical staff live on air table. And so we get data dumps and put it into air table, and then they can wrangle it how they want to and make reports, send emails to partners and things like that. So yeah, pandas is handy for all of that kind of thing,

Will Vincent 49:02
do you? Is it one cohort goes through over a year, and then you have another one each time is it's like that as opposed to continuous,

Sheena O'Connell 49:09
everything's pretty overlapping. We generally take in a cohort, every couple of months. And it's nice because of the fact that they review each other. So there's overlap and when cohorts will be a little bit more senior to the next cohort, and they'll be able to help out. We even have things called jtl, which are junior tech leads. So it'll generally take like a more advanced learner and then get them to sit in the stand ups of a more junior cohort so that they can, like have an opinion on things and that also works quite nicely. So yeah, that overlap is really handy.

Will Vincent 49:46
For when is there time for the team to go okay, of course, it's graduated. Let's revisit and potentially change things. It sounds like that has to be more continuous too, because you're just constantly having people go through so that may Me, I guess, you know, they'll always be nice to have a month to think about things. But yeah. Not a real world situation.

Sheena O'Connell 50:07
Yes, that's what holidays are for. So, the funny thing is that I actually worked with my brother. So he started off volunteering. Adam was he and then I was like, I want to hire my brother, will it be dodgy? And they're like, Yeah, it'd be dodgy, but we like him. You should hire brother. And then my boss hired my brother, which is better. And but he's great. Like, he works freaking hard. And he's, he's not a techie. He's more like a management type of person. So we're actually quite a good team in that way. Now, he doesn't work with like, it's complicated. But a lot of major decisions were made in like random caves and the dragons Berg. Like away from work, having a nice hike sitting in a cave somewhere. We're like, Ah, I just thought of something. So, yeah, sometimes getting away from the daily grind is critical. It helps a lot. But yeah, other than that reflection happens. Yeah. Reflection is just a constant thing. Yeah.

Will Vincent 51:08
Right. It's like a active equilibrium, as opposed to a, you know, going off to a monastery. So speaking of external things, I did see from your CV that you've, I guess, not not as much now. But you had done Brazilian jujitsu at quite a high level for a while. I was just, I, my daughter has recently gotten really into it. And I was, that seems like the kind of thing people once they get to it, they don't usually step away, especially if they're as accomplished as you were. So I'm just curious. You know, what was that like? And because it seems like a natural fit for a programming mind, right? It's it's through, you're solving problems. And that's for my daughter, who's 10. She likes the intellectual aspect of it, as opposed to just run heart run harder. Or, you know, the fact that it's solvable fits her mind quite well. That's super

Sheena O'Connell 51:58
cool. Yeah, it's a puzzle. And I love how many subtleties, the different moves have and the little tweaks that you can make to things to make them more effective. It's, you can really geek out about VTG for ages. It's super cool. Yeah, so I started it randomly. So I've always been a climber. And I wanted to do something else besides climbing. And this mixed martial arts gym app opened up near my place. And I was like, let me go see what that's about. And BJJ was part of what they taught and it just stuck. So I ended up getting like, seriously into it. I've competed internationally I am. So I'm the world runner up at blue belt. Which was,

Will Vincent 52:47
yeah, I mean, like, not not a small thing. I was

Sheena O'Connell 52:52
efficient. It was hard work. Yeah, so that was so at the time, when I was training for that I was working for a fintech. And it was just a very, very intense time. So it was like, wake up. Like, go for a run or something go to work, work like freaking hard, then go train, you know, so it was just like, that was all that was happening. I

Will Vincent 53:18
got a joke. Joke a couple people. Just

Sheena O'Connell 53:22
yeah, but it was very, very non stop. And then afterwards, I needed a break. I was like, Okay, I just need to like, step away from this for a moment, because I've been to completely obsessed. And then my gym closed, and my very favorite coach moved to Germany, and I haven't found like another home gym. That quite fit my personality, I suppose. Yeah, I'm actually thinking very seriously about getting back into it next year. Because my original like, first room ever is nearby. And I just like haven't been able to get back into it. Like, I haven't been able to build up the habit again. Yeah, it's, I don't know, my own head sometimes. Like I really loved it for a really long time. But I haven't I haven't managed to, like five refines the love for it. In the same way,

Will Vincent 54:19
I think when you're so committed, you need a full reset to kind of enjoy it for itself as opposed to Yeah, I mean, I think you have something in my life, like to get the competitive part out of it and rediscover the, the primal part because it's hard not to just switch the mode into like, I need to be good and do all these things. And then it kind of leads to the things that led you to go away in the first place as opposed to the initial interest.

Sheena O'Connell 54:43
Yeah, yeah. That is a big deal. Just to bring it back to that playful way it used to be. It'd be nice. I think it was also a no, my coach was fantastic. I find that I can push myself incredibly, incredibly hard. If I'm like, involve, like if there's no if there's somebody on my team that's also doing that. So when I got my medal I tried to give it to my coach, but he didn't want it. Which was a bit of a. Yeah, it was a bit weird, but yeah, it's such a great guy. Gosh, it's super cool that your daughter's into it? Yeah.

Carlton Gibson 55:24
No, I mean, I think the habit, the habit, the point about habit was that if once you drop the habit, it's really hard to pick it back up. It's like, it's, you know, you miss one. And then I'll do it's really easy then to miss the next one. And then to be in that routine of like, No, this is what I do. This is what I am. I am a jujitsu or I am a tattooer. I am this

Will Vincent 55:48
I know you're looking at me, Carlton. I'm just a parent. Yeah. Yeah, now I had, well, I bring it to bring my, my two year old son and he's watching that, you know, the, the sessions and he's, he asked me the day, he's like, he's like, Daddy, you exercise? And I was like, no, no, I pay money and watch other people exercise with at this stage of life. So, but he was like, he's like, you do that? I was like, no, no. But now he now he wants to, you know, he wants to do everything they do. So he's, you know, I always Yeah, it's a it's a good it's seems like a good activity. So I'm pleased my my daughters into it. And they just, okay, world runner up, like, whoa, like, no, that's

Carlton Gibson 56:29
super. Yeah, that's pretty impressive.

Will Vincent 56:31
Are there any any things you want to as we wrap up any things you want to promote or things people can do to help? Musi or publicize?

Sheena O'Connell 56:42
Nothing offhand, actually, that I can think of? Yeah. Yeah, I think I think that's

Will Vincent 56:49
enough. I mean, it's yeah,

Carlton Gibson 56:50
good call. And if you've got something else to say, I was just gonna say thank you. So Sheena, for coming on, because I've really enjoyed the chat. But if you've got something

Will Vincent 56:58
else, thank you. And I was, I was gonna say I was. Thank you for coming to Django con. Like, you know, the fact this is why these communities exist that and then are you around for some of the Sprint's as well, I mean, I think for all of us, I think I don't know if I had you been to a Django con before? Or us one.

Sheena O'Connell 57:15
No, that was my very, very first. Yeah, was a very good experience. The Django community was just lovely. Yeah.

Will Vincent 57:24
Oh, actually, it's a big, you know, time and money thing to go. So

Sheena O'Connell 57:27
yeah, it is. Yeah, it was, it was a bit of a pricey place, America. That was totally worthwhile. I'm happy that I went, made some new friends went on some adventures. So they are very, very worthwhile. Django con Africa is happening next year, and that's going to be cool. So we've just started organizing it, and there hasn't been one yet. So I think it's probably going to be in around November next year. Not sure which country yet. But stay tuned. It should be cool.

Carlton Gibson 58:02
Yes, it was gonna be before the pandemic and then and then yeah, and then then then the pandemic. Yeah. Yeah, that's really exciting.

Will Vincent 58:11
All right. Well, again, thank you for thank you for coming for coming on. We're gonna have links to everything in the show notes, so everyone should check them. Check it all out. We are at Jango chat.com. Chat Django on Twitter, I guess if that's still around,

Carlton Gibson 58:24
but we'll we'll know. We'll know. We on the Friday.

Will Vincent 58:28
Yeah, we are we

Carlton Gibson 58:33
may or may not be on the very verse as well, folks.

Will Vincent 58:36
We will be we will be I'm I'm personally done with Twitter. So we're gonna move over there. So. Okay, anyways, Djangochat.com. Thanks, everyone. See you next time.