Finding Your Place in Technology with CodeDay Labs
This is a guest post written by Tim Van Cleave, a CodeDay Labs advanced-track mentor from SPS Commerce.
Working in the software industry means being adaptable, resilient, and interested in expanding your own horizons. It also means finding out your passions, both from a technology perspective and how and where you work. Do you feel more comfortable with a small or a large team? Is there a particular industry you’re drawn to? How can you take the technologies you’re really interested in and build a career out of them? These are really hard questions to answer for someone just starting, but they can also be the most rewarding. I’m very passionate about helping new developers answer these questions and were super excited to volunteer with the CodeDay Labs virtual internship program this summer! CodeDay works to provide students underrepresented in technology with the skills and opportunities to succeed in related careers. I am really invested in resolving the lack of diversity found all over the tech industry and was really excited to work with an organization that had that goal as their main focus. CodeDay Labs just completed its 4th year, and being a part of a really mature and well-managed program was wonderful. Even better, each Labs internship is run by professional software engineers who help students learn coding best practices, how to build useful projects, and experience what it’s like to be an engineer in the real world — all in a virtual setting!
As a mentor, I had to come up with a few ideas for different projects that my teams would work on and then write up a really great description. I have almost never felt so self-conscious as when I was trying to make my descriptions exciting and interesting to college-age students (it’s been a long time since I was that age), but it worked out better than I could have hoped! After teams were assigned, I found that I had two teams of three young women each, spread between the east and west coasts and ranging from rising college freshman to seniors. Having a spread of different ages was a wonderful bonus because it meant that each team could take advantage of a variety of perspectives exactly like you would want to have in a team of professional engineers. I had a chance to really learn what got them excited, what their challenges were, and most importantly share in their enthusiasm. I cannot overemphasize how cool that was! Every single one of my students was incredibly smart, driven, and eager to learn anything and everything they could, which was really inspiring to me. I also had the chance to share my own career experiences and answer a lot of really great questions the students had about their own careers (reflecting on my own journey along the way). I found It really fulfilling to help them develop their own professional skills and overall career goals and see how much they’d already figured out!
As I was planning out what my teams would work on, I had a couple of major things I wanted them to learn around the core technologies we’d be using. I really wanted them to experience a real developer workflow and have a chance to live what it means to be a software engineer working in a modern tech stack. Since my background is in fullstack web applications, I based my ideas and goals to fit that experience, and to that end, I made a few decisions about how I wanted to lay out the project’s tech stack:
§ Decouple and host the API and UI separately – This was definitely more complicated to deploy and manage since it required completely separate hosting configurations, but the best applications treat the API and UI components very differently to best optimize how each piece runs.
§ Use Docker for local development – containers are absolutely essential in today’s world and you can’t start using them soon enough.
§ Use Django and Django Rest Framework to streamline API development – Django is a fabulous framework to make database-driven web applications using solid best practices, and DRF then makes it easy to turn that into a really useful REST API. I’ve had really great success with this combination and I felt it would be a great way for students to build relatively complex APIs they would be proud of in the short time we had.
§ Use React as the frontend framework – React has not only been my bread and butter for years but also has made me a better developer just by the way it makes me write code. It’s a hugely relevant framework, always updated, and while not the only game in town, it was definitely an easy choice.
§ Apps would be hosted in AWS – This was mostly a choice of familiarity since I have the most experience in AWS out of any cloud platform, and it turned out to be a really great choice that let me create a pretty robust hosting environment for our apps!
§ Everything would use Continuous Integration – CI is an industry best practice and is often used to run critical tests before a new software version is released (or even approved during a review). I set up a few basic pipelines in AWS that would automatically build and deploy new versions of our apps so teams could collaborate from a single source of truth and see their changes running on a real website.
§ Source code would be stored in Github – Github’s code management tools are peerless and used by an enormous number of organizations, so this was a pretty easy choice too.
§ Agile project management would be used as much as possible – Agile was one of the things I was most confused about coming out of school and getting a solid grounding in how to work in that framework would be a great win. We used Trello boards to track features, individual tasks, and all the rest to help with collaboration and practice a really critical real-world skill.
It took me quite a while to become fluent in all of these technologies, so to help the students focus on building their app, I set up seed applications for each team to start with that were fully running vanilla applications using this tech stack. As far as I was concerned, it wasn’t as important for them to see how to write a Docker file or bootstrap a Django app right now, but it was critical that they know how to use one if they come across it. We also would have extra demos where I would show the basics of how to get started with each technology and give everyone a chance to ask questions so they didn’t have to only rely on the classic “Getting Started” tutorials we all know and love. This approach turned out to be a great fit for the relatively tight Labs timeline and both of my teams responded really well to it and ended up building some extremely cool stuff!
Being a Labs mentor came with some amazing rewards, but I also ran into my fair share of challenges along the way. I had never done anything quite like Labs before and it made me really think hard about what I was teaching at any given moment, how I could best help students learn the skills they’d need to succeed in the real world, and also make sure they were getting the best possible experience they possibly could even with the short timeline. Some of the major challenges were:
§ Time zones are fun – Even with prior experience working with offshore teams, keeping track of meetings in three different time zones was quite a challenge. Developers usually don’t like date math and I assure you I am no different…
§ Different skill levels – Even with all the benefits that having so many skill levels gave each team, it was sometimes hard to keep on top of where each student was in their development skills and how I could best help them grow.
§ Infrastructure complexity – Building out a complete AWS hosting solution with containers, CDN-backed frontend hosting, CI, and the like was really challenging for me on a technical level but also a great growth opportunity.
I can honestly say that being a Labs mentor has been one of the most rewarding things I’ve ever done, hands down. Having an opportunity to work with a group of students were just as excited about software as I am was awesome, but most importantly I was able to see each of them grow by leaps and bounds (technically and professionally) throughout the internship. CodeDay provided a fantastic series of mentor guides that helped me figure out how to organize things and work with my students in the most effective way possible and definitely took a lot of stress off my shoulders.
Just some of the great results from the Labs internship were:
§ Increased confidence – I loved seeing how each of the students became more and more confident in themselves as they became more familiar with the tech stack and the overall project process.
§ Career direction – Many of my interns found that they really enjoyed working with our tech stack and created some really amazing work! It took me years to figure out what I really enjoyed doing with software and I was so excited to see them take so quickly and so well to some really challenging tech.
§ Professional skills – Each student really grew in their time management, collaboration, and developed a drive to deliver results that will serve them really well in the future
§ Give students tools and mentors to succeeding as women in technology – I set up some networking opportunities and Q&A meetings with a group of women engineers from my company and was thrilled that the interns were able to hear different perspectives of what it’s like to be a woman in technology and tips for success from women who are further along the same journey. From those meetings, I learned how to make the tech path easier for them and other women in my professional circle! I was also able to introduce my team to my own mentor and have her share her own professional journey in tech from QA engineer to manager and got some really great feedback from the students who found it super helpful.
§ Practical engineering experience – Along with the technical side, students were much less anxious about whether or not they had what it takes to be a software engineer (spoiler alert: they totally do) after having a chance to build something in real life and live pretty much the same process they’ll get at any company.
Being a mentor can be a lot of work and doing it well, but I have never felt so fulfilled as when I saw students who had never written React before turning out gorgeous apps, or a young woman who had never interacted with APIs before suddenly building her own brilliant authentication system. Both of my teams were amazing to work with and taught me just as much as I taught them. All of my interns were from groups underrepresented in technology, and being able to help them find their own place in a field I care deeply about was an absolute honor. If you ever have a chance to be a mentor, be it through an organization like CodeDay, your workplace, or just to a young person in your life, I urge you to seize the opportunity. You will never regret that choice and will make more of a difference in their life than you may ever know.