00:00:10.460
Should we get started? It's right on time for being late. Is that a good thing?
00:00:15.480
Before we start, I have a favor to ask all of you. I am a little bit nervous, and so if you could help me out by applauding every time I take a drink of water, that would be very useful for me. So let's practice real quick. I've been talking for a while, and you may have forgotten about this favor I asked you. So, let's just try it out.
00:00:34.260
Okay, I think my slides are working. Welcome to RailsConf! Welcome to Kansas City! My name is Lillie Chilen. It is not phonetic, but here’s how you say it: you can picture Sean Connery addressing Canadian pop legend Celine Dion. A little bit of that lisp again, Chilen. Hopefully, you'll remember that forever.
00:00:54.120
So, who here is from Kansas City? I am! Oh, it's not true? No? Who's from Kansas City? I'm from Kansas City. I live in San Francisco now, but I'm super excited for RailsConf to have come to my hometown. I'm a software engineer at Omada Health. We help people avoid getting type 2 diabetes via the internet. It's kind of fancy.
00:01:30.570
I would like to know more about you. Can you show me your hands if you have ever been an engineering intern? I have! Alright, about half the room. Have you ever worked with an engineering intern? More people. And who is hiring engineers in general right now? Just about everyone, okay? That's not surprising.
00:01:47.970
I’m going to share with you some true stories about internships. Some details have been changed; names have been left out. Some of the people are co-workers I've had at Omada, and some stories are from others as well. The first one is not about an Omada person. This is the 'CS Hammer.' This is a person who starts an internship as a recent computer science graduate, and they wanted to use CS for everything. Everything was a red-black tree. No one wanted to work with this person. It was really sad.
00:02:29.950
This person went off by themselves and just implemented an interface that didn't really fit what we needed. We didn't understand why they wanted to do it, and honestly, we didn’t want to help them get on the right track. We had enough work to do, and we didn't have time to help this person write the code we actually wanted to use. So, they kind of got ignored, and at the end of their internship, it was like, 'Great, it's over. You're leaving,' and then we never did anything with their code. That's a way to run an internship program.
00:03:21.760
Another story I heard, which was also not related to Omada, involved the founder's spouse’s cousin who was interested in programming. They thought, 'Hey, let's start an internship program so this person can get a job here.' They ended up paying all their interns minimum wage. Interestingly, they didn’t find a lot of good candidates beyond that relative, and I’m not sure if they were a good candidate or not. They ended up putting interns on little toy projects that didn’t matter at all, which was sad.
00:04:01.630
Our third intern was a friend of mine, the 'Cutting-Edge Cat.' They really wanted to use some really cool technology and didn't care about building something useful. They wanted to build a dashboard that showed the number of users logged into the site. To do this, they created a Sidekiq job that reported the number of currently logged-in users every minute. It was a complete nightmare, and I ended up deleting his code a few months after the internship was over. However, we hired him because he was actually great despite the terrible project choice.
00:04:53.450
Finally, let’s talk about a really successful internship. This was also someone at Omada. They were a recent boot camp grad, willing to ask a lot of questions, and they admitted their ignorance. They were a pleasure to work with. They worked with our product team to build a lower-priority user-facing feature. However, they copied some patterns in our codebase that were not great. We had to tell them, 'Oh yeah, just don’t do what we did a year ago. We had really bad taste back then.' This person was able to gain some autonomy but also received support when they needed it.
00:05:40.640
All of these different internships teach us valuable lessons. The first one, the 'CS Hammer.' One lesson you could take from that is: don’t hire CS grads because they'll just try to make everything a red-black tree. The actual answer isn't that CS is bad, but rather that you need to give feedback and guide interns, working with them to create what you want rather than ignoring them.
00:06:36.690
A team that doesn't integrate interns will realize how siloed they are due to their inability to help. They think, 'You just go sit over there,' and that's not an effective pattern for bringing on a junior developer. The key is to have clear goals in mind that aren't just about employing someone's relative. You need to know what you want out of your interns; otherwise, you’ll waste resources and miss the potential for a positive impact.
00:07:14.640
Unfortunately, my friend Andy, who is great, needed more guidance. We failed him by letting him work on something that turned out to be subpar. From the successful intern, we learned a lot about our codebase and realized we had bad patterns. Supporting those interns can help you audit your processes. Running an effective internship program can highlight areas for improvement.
00:08:39.130
It’s important to note that a bad internship isn’t necessarily the intern's fault. Yes, some interns can contribute negatively, but ultimately, a bad internship reflects how the company fails to support the intern through the structure of the program. The structure of your internship matters; if you don’t design it properly, it’s likely to be ineffective for you and the intern. Your first internship may not go great, but with critical thinking, you will improve.
00:09:22.380
A note on terminology: I’ve probably said ‘intern’ around sixty-five times so far, and I’m going to keep saying it, but some companies refer to these roles as ‘apprenticeships.’ The practices I’m discussing are also effective for onboarding junior developers, regardless of where they come from—full-time positions, co-op programs, boot camp graduates, or internal transfers from support or design to development.
00:10:05.600
So that’s enough about why internships are useful. Now, I’m going to talk about how we run the Omada internship program. I think we have a pretty good way of doing it, but can we take a quick break? Let’s just stand up for a moment.
00:10:29.700
Stand with your feet hip-distance apart, roll forward and back on your feet a little bit, lift your arms up, and stretch over to whichever side you feel like, pressing the opposite foot down for a good side stretch. That’s nice. Thank you for indulging me in that!
00:11:03.439
To run an effective internship program, the first thing you need to do is make the business case. An internship program costs money and time, so you need to convince management that there’s a good outcome and that it’s not just charity work. My slides are mostly big words; they aren't very useful for going back to later, so I’ve written some blog posts to publish these ideas. I’ve scheduled those and it will include links to the tech blog, giving you resources to convince your management team about the value of internship programs.
00:11:39.560
If you don’t have buy-in from management, you shouldn’t run an internship program. If you cannot pay interns and take the time to support them, it won’t work out well for anyone. Having clear goals is essential. At Omada, we want to ensure our onboarding game is strong, and we prioritize knowledge transfer, though I hate that phrase. It sounds corporate and strange, but people prefer it to teaching.
00:12:13.690
We appreciate the diverse backgrounds interns bring. They provide fresh ideas and ask questions about our processes, which is invaluable. The way we run the internship program involves pairing for about a month or six weeks, then transitioning to a solo project for another month or six weeks, and finally back to pairing again. It’s straightforward, and they always have a mentor from their team.
00:12:40.880
You might wonder what kind of teams can support an intern. Avoid having a team made up entirely of interns. You hear about this in places like San Francisco, where companies hire one bootcamp grad and then another a few months later. This doesn’t seem beneficial for the interns or the company. At Omada, we usually have one to two seniors, one to two mid-level developers, and one to two junior developers or interns on a team. I joined a team of about three and a half engineers when I started at Omada, and it was incredibly useful. If you have three engineers, you can probably support an intern.
00:13:26.780
At Omada, we practice pair programming. Raise your hand if you do pair programming consistently. I do about eighty percent of the time. If you don't pair, keep your hands down! So most people do pair programming. It's important to clarify what pair programming is. It isn’t just looking over someone's shoulder; it's one computer, two keyboards, and often two mice. You should encourage your team to understand what true pair programming entails.
00:14:05.800
Pair programming helps reduce silos, and communication and teaching skills are essential in that environment. You’re not working alone; you’re collaborating. Onboarding is so much easier when pairing, as new hires can ship production code on the first day. You might think, 'Oh, we don’t care,' but pair programming is incredibly valuable for interns. However, I wouldn’t recommend starting with an intern but rather pair with your current colleagues first.
00:14:47.450
Once you’re pairing with an intern, let them type. It’s easy to grab the keyboard when they’re struggling, but it’s essential to work through the problem together and give them the opportunity to learn and apply their skills. You’re probably not going to have an intern pick up an important feature on their first day, so you may want them to start with a solo project first. Code review will also play a crucial role in their learning.
00:15:53.950
Code review is vital, especially if you don’t utilize pair programming. As new interns begin their work, they will point out confusing aspects of your code. It’s important to be open to feedback and to use it as an opportunity for growth. You may discover that your code is confusing or outdated.
00:16:36.500
Bringing interns on consistently can help provide fresh eyes. Encourage them to ask why and to question the existing code base. As a current intern, challenge yourself to ask why several times a day. The second lesson you might learn is that not everyone is a good teacher. You will encounter people who hog the keyboard, don’t provide constructive feedback, or aren’t encouraging.
00:17:51.350
Don't feel that you need to teach those not-so-great teachers how to teach you. Your job is not to teach them how to be better; it’s advisable to provide feedback to your mentor or manager regarding your experience.
00:18:38.600
Now, let’s talk about solo projects. A solo project is an essential element of our internship program. After a month of pairing, my first task was to write my first controller spec. I was initially overwhelmed, but I had written many specs alongside my peers. I realized that all the methodologies and collaborative efforts we practiced were important, and this project was my chance to complete things independently.
00:19:49.060
Learning through a solo project is crucial for interns. The importance of choosing the right project cannot be overstated as it contributes significantly to the quality of learning. One of our recent interns worked directly with the product team and tackled a project that significantly enhanced their understanding and confidence.
00:20:34.790
Code review becomes critical during the solo project phase. It’s essential that you have a strong code review culture in place; if not, you should establish that immediately. With in-person code reviews, we have new interns engage directly, helping them learn from their mistakes and successes.
00:21:21.290
Mentorship should be established from the start, ideally with the team lead or someone who takes a management role for the duration of the internship. Regular scheduled check-ins during the solo project phase help immensely. It’s also beneficial for the rest of the team to check in with interns whenever they encounter issues. Some companies have interns work on a client project for a certain duration, and some interns can get jobs with the client after their internship.
00:22:16.380
A key point: pay your interns. Do not run unpaid internships. Companies benefit from interns, and therefore it’s only fair to offer compensation. If you're running an internship program, find ways to make it mutually beneficial.
00:23:20.290
Another key benefit of running an internship program is its potential to diversify your team. While having a diverse team extends beyond just hiring interns, it’s an avenue worth exploring. For instance, sixteen percent of software engineers are women, and that number is considerably higher for boot camp grads. There’s an opportunity to bring more diversity into your organization.
00:24:38.200
To attract more underrepresented groups, it’s essential to reach outside your usual networks. If you only rely on internal referrals or postings on basic platforms, you’ll miss out on potential talent. Participate in organizations that promote diversity such as RailsBridge and Code2040 to boost outreach.
00:25:48.560
When recruiting and interviewing interns, I suggest having a less strenuous process. Start with simple code challenges or straightforward tasks that will allow you to evaluate their ability to follow instructions. Making it mandatory for candidates to complete specific tasks will also help you gauge their competencies while filtering who truly understands the tasks at hand.
00:26:52.080
One of the benefits of our internship program is that it helps us retain current developers. We utilize similar structures for team rotations, encouraging engineers to learn new skills and expand their knowledge by collaborating with different teams.
00:27:37.440
There are certain changes I would make to our internship program at Omada. I’d be open to hiring interns as junior engineers rather than having a long audition process, as it could be less commitment for both parties. The term 'apprentice' may suit these roles better if we plan to hire them at the end.
00:28:27.300
The final takeaway is the value of audits. When an intern joins your team and highlights areas of weakness in your code or process, it can be a pain, but it’s a good indicator that you can improve. These insights will help you hire and retain awesome people.
00:29:09.890
It will enhance your team's performance and productivity, resulting in the development of better software. So that's it—thank you! One last drink of water.
00:30:00.040
Thank you!