On mentorship programs and internships

My internship was one of the most formative experiences in my life. It ran alongside three of my four years of college. For me, it wasn’t a side quest while I learned how to be a professional and an adult. It was the primary path for me. In fact, I long held that my internship was the primary reason for improving my software skills rather than my college education. I’ve softened quite a bit on that, but that’s another topic.

It’s been quite some time, but I remember being treated like another developer. Actual engineers gave me some time and attention to help me understand tickets, how to run the code or review what I had done. Over time, when I was able to provide tangible value to the company, I was treated like a resource for projects and involved in the planning. For someone who knew practically nothing about software a year before, I was moving at an incredible pace. What’s more is that each year the company would add 5 new interns. They did their best to keep people in the entire school year and hiring them when they graduated.

I’ve found contributor programs follow a similar path. The same topics are covered, how to get the project running, how to reproduce an issue, help a person fix it and review the solution. In both cases, there’s a measure of guided problem-solving. The mentee is given direction, then left to their own devices for a period of time. The mentee may spin their wheels or make a ton of progress. In either case, the mentee is learning. They could be learning several ways not to do something. Or understanding the different ways to approach a particular problem. Or maybe they get exposure to a good design and how it can be extended. Regardless, they come back with the mentor to see where they are at, what they’ve learned and what to do next. With these regular check-ins and revaluations, the mentee avoids veering off course too far.

One difference between them is the intensity and duration of the programs. Djangonaut Space is meant to be 5–10 hours a week. This seems to work best for people who may still be in school, have a job, have children or are involved in other areas. In comparison, my college internship was 40 per week during the summer and then 20–30 during the school year1. I was also getting paid for this internship. And got free snacks and drinks. And occasional lunches. While it’s difficult to compare the time investments between the two, it feels reasonable to say the internship was meant to be a major focus. A contributor program is meant to be significant, but is not a major focus.

Another difference between an internship and an open source contributor program that favors the contributor program is that you touch on more correct software practices. There’s a greater focus on automated testing, continuous integration, documentation, accessibility, coding standards and code reviews. Yes, any software team can prioritize them, but with open source software, they tend to not be shoved to the background so quickly.

Something that Djangonaut Space does that feels unique is having a community mentor (Captain) and a technical mentor (Navigator). Google Summer of Code asks the mentors to do both sides. After all, the goal for Google Summer of Code is to bring new contributors into open source communities. With Djangonaut Space, we felt that it may put too much on the plate of our technical experts in the community. It’s also that our navigators tend to be in a single demographic, while the community as a whole is diverse. By allowing community members to support and be leaders to others while not having to be a technical expert, Djangonaut Space is able to exemplify its leadership diversification goals. This allows a broader group of people to feel welcome and allows a broader group of people to gain leadership experience. All of these serve to strengthen our community bonds and build a social foundation to have difficult technical discussions in the future2.

When I originally set out to write this, my main goal was to complain how open source and volunteers were taking up the mantel of training new developers as we see fewer internship and junior engineer opportunities. I decided against that because, for one, I don’t have the data to support that. And for two, I don’t think contributor programs can replace internships and junior positions. The purposes and environments are too different for them to achieve the same thing.

My current conclusion is that we need both. We need internships to expose people to the fast-paced, commercially driven projects that are held together with bubble gum and duct tape. There people can be exposed to a variety of hard problems and strengthening their software engineering toolkit.

We also need contributor programs and open source software to expose people to close to ideal software development practices. There, people can be exposed to the excellent software engineering practices that aren’t common at every job, sharpening their software engineering toolkit.

When you put the strengthening and sharpening aspects together, you’re able to do much more as a developer. So yes, I want to see companies contribute to open source, but I also want to see them invest in growing their next batch of developers. I also want to see open source communities invest in themselves via creating their own contributor mentorship programs. A sustained effort in building up the next generation feels like part of the universal truth3.

If you have thoughts, comments or ideas, please let me know. You can find me on the Fediverse, Django Discord server or via email.

Thank you to Rachell Calhoun for reviewing this post!

  1. By Junior year, I was designing my class schedule around what would allow for the largest blocks to work. 

  2. Any long-term software maintenance is hard and requires hard decisions to be made. The more we do to support those discussions and decision-making now will help down the road. 

  3. It’s my life philosophy that there is a universal truth out there and that each person occasionally gets a small window to view it. This is why several resources and books seem to say the same thing, but slightly differently.