Rocky Mountain Ruby 2013

From Junior Engineer to Productive Engineer

From Junior Engineer to Productive Engineer

by Jason Noble

The video titled "From Junior Engineer to Productive Engineer," presented by Jason Noble at Rocky Mountain Ruby 2013, discusses the systematic approach Comverge takes in onboarding junior software engineers to enhance their productivity. Nobles outlines his extensive experience in the programming field and describes the initiatives implemented within Comverge to develop a structured training program for junior engineers. The key points discussed include:

  • Initial Challenges: Comverge's lack of a formal training program prior to hiring junior developers, with an anecdote about Beth Medina, the first junior developer hired, who faced significant learning challenges without support.
  • Development of a Junior Program: Following discussions from the previous conference, Noble and his colleagues established a junior engineer program, emphasizing mentorship and hands-on practice. Noble shares how he worked with junior developers like John Williams to foster their skills alongside comprehensive resources such as online courses and books.
  • Interviewing Techniques: The company focused on personality and passion during interviews, rather than solely on technical skills, to ensure candidates were eager to learn.
  • Mentorship and Collaboration: Noble underscores the importance of pairing junior and senior developers, detailing methods like the 'Trying' technique where juniors work on different tasks while supported by a senior developer, fostering collaboration and easing the learning curve.
  • Structured Learning Initiatives: The use of the Ruby Cones project introduced juniors to critical concepts such as TDD and Git workflows, linking project tasks with learning objectives to accelerate their integration into the team.
  • Outcomes: The structured mentorship led to significant improvements in the juniors' productivity, with timelines for ramp-up varying based on prior experience. For instance, while Beth needed six to nine months to acclimate, John was productive after just two to three months.
  • Future Aspirations: Noble expresses a desire to expand the junior program as he takes on a lead role, emphasizing the importance of continuously developing junior staff to contribute effectively within the energy sector niche.

Overall, Noble concludes with the significance of investment in training programs for juniors, demonstrating the positive impact of mentorship on their professional growth.

00:00:30.480 Hello, my name is Jason Noble, and my talk today is titled "From Junior Engineer to Productive Engineer." I had someone point out on Twitter that junior engineers are not necessarily unproductive, so that is not the intent of this talk. The intent is to give you the process that we've gone through to help bring junior engineers into our team. A little bit about me: I have 15 years of professional experience and six years with Ruby on Rails. I've taught Rails classes in Atlanta for three to four years, and I’m a top 45 contributor to the Ruby on Rails community—though now one of my students pointed out I’m now a top 47 contributor, so I’ll have to work on that again! I am a senior software developer and lead at Comverge, and I also serve as a mentor and instructor at Da Vinci Coders.
00:01:23.840 Comverge is the company I work for, founded in 1980 and headquartered in Georgia. We work in the intelligent energy sector, helping utilities reduce their energy demands. For example, we may turn off your AC or make your pool pump run at three in the morning instead of the middle of the day! These are some of the devices that we connect to via Ruby on Rails, which is pretty exciting.
00:02:09.360 Back in March of 2012, we hired our first junior developer, Beth Medina. She had been a ColdFusion developer for a couple of years but took seven years off to raise children. When she returned, the internet was a very different place. At that point, Comverge didn’t have a training program; so when Beth came to work, we essentially threw her a few books. We told her to read "Agile Web Development" and we bought the Pragmatic Studio Ruby on Rails courses for her, along with the Ruby on Rails Tutorial by Michael Hartl. All of these are excellent resources for anyone looking to get into Rails.
00:03:00.000 Beth would come to Comverge and pair with senior developers occasionally, although they were usually too busy with other projects. To help her get ramped up, we gave her a small side project to build a Rails app from scratch that would allow versions of our iPhone app to be provisioned correctly. At last year’s conference, there was a breakout session moderated by Mike Gehard, where we discussed the necessity of training new developers. I noticed that the panel ended with many questions about how to foster growth and experience for developers.
00:03:45.680 After that conference, I was eager to resume teaching Rails again. I also began discussing with colleagues at Comverge about developing a junior program. One of my coworkers, John Williams, had a background in sales, primarily in the cell phone industry, and he decided to get into programming. He enrolled at Da Vinci Coders in Louisville, and he chose me as a mentor. We did a lot of mentoring outside of work. John would come to Comverge a couple of times each week after work, and I would spend an hour or two with him, going over what they'd learned in class. This included explaining concepts he struggled with and testing him to expand his knowledge and approach topics differently.
00:04:31.760 We began interviewing in January 2013 for junior developers and focused on personality and passion. We sought candidates who didn’t necessarily have experience with Rails but who were eager to jump in and learn. Our interview process included a FizzBuzz-type algorithm and basic questions about sorting algorithms and web browser mechanics. John was hired as a contractor in January, effectively doubling our engineering staff. Three months later, he converted from contract to permanent, and we learned several lessons from this process. The first—and perhaps the most important—was that having two junior developers is better than one. Junior developers often hesitate to disrupt someone’s productivity with questions, but if there are two, they can collaborate. One might be stuck, while the other can help move things forward.
00:05:51.760 We also found it beneficial to have senior developers dedicate time to work with juniors. When John first came on board, he spent about 20 to 25 percent of his time explicitly tasked with mentoring a junior developer, working through a user story, fielding their questions, and sharing general domain knowledge. Oftentimes, juniors pairing with each other proved effective, too. If one got stuck, they could help each other out. Should both be struggling, they could learn how to ask the right questions of a senior developer. This interaction is invaluable—it's entirely different for two juniors to come together with vague issues versus pinpointing specific queries for a senior.
00:06:56.240 We also implemented a method we called 'Trying,' which involved two junior developers working side by side with a senior developer in the middle. Each junior developer would tackle a different story while the senior toggled back and forth to provide guidance as necessary. However, a warning for mentors: this method can be exhausting because of constant context switching! One initiative I took was involving the Ruby Cones project, which is an introduction to Ruby focused on test-driven development. Each file in Ruby Cones corresponds to a tracker story they had to implement, requiring them to pass tests, create pull requests, and navigate our Git workflow. This hands-on practice gave them vital experience with the tools we use daily. I also converted the command-line crash course into tracker stories, allowing juniors to learn while completing scripting tasks.
00:08:17.360 As a result of this structured approach, juniors gained familiarity with our testing suite, leading them to take on progressively advanced stories. By pairing seniors and juniors, we found that juniors could follow along, ask pertinent questions, and grow more independent. Mentorship roles became less intense, shifting towards more scheduled hours of discussion than frequent interventions.
00:09:27.680 In September 2013, a new team member, Josh, joined us. He is a 2013 G-School graduate. Beth eventually left Comverge for a permanent position with Riley’s offer in Boulder. We are proud of our junior staff as they go out into the world, impressing others with their skills.
00:10:16.560 Now, I would like to share a couple of things. The top one up here is an email to rate my talk. You can also find my Twitter, GitHub, and slides online. I am an instructor at the Da Vinci School in Louisville, so if you're a junior developer looking to enter this field, consider this class as an option. Are there any questions?
00:10:54.480 Yes, the question was: what did we hope to gain from the 'Trying' process? Essentially, each junior developer works on different bugs but with the capability of pairing up for support. The idea was that if we assigned two juniors to a story, they would be slower independently. However, if working alongside a senior, the combined velocity would increase due to collaboration and mentoring.
00:12:14.560 John mentioned that he found the process useful, as he could work independently but still ask questions when needed, promoting productivity. And indeed, pairing provides a unique opportunity to learn. When it comes to the varying experience levels of new hires, it’s important to note that we’ve hired juniors at different stages. For instance, Beth came in with no Ruby on Rails background, while John had 11 weeks of instruction from G-School. The training process remains the same; what changes is the time it takes them to become productive. Beth took about six to nine months to ramp up, whereas John was productive in two to three months, and Josh has been on the team for only a few weeks. Questions?
00:14:09.040 Yes, regarding pairing juniors with seniors, we indeed rotate junior developers through various senior pairings. However, we’ve noticed that juniors struggle with two main challenges: learning Ruby on Rails and grasping our specific domain knowledge. Our junior program is structured to help them become comfortable with our domain, such as the energy sector, while also learning the technology. Once they feel at ease with both, they can interact more intelligently with senior developers.
00:15:01.680 With Beth, we provided her with resources like the "Agile Web Development" book and the Rails Tutorial. John and Josh both had prior Rails experience. Yet, we’ve implemented the Ruby Cones project as a consistent learning tool for all juniors, ensuring they understand pull requests and Git branching methodologies. It’s a tailored curriculum rather than a standardized industry model, crafted to suit our environment and needs. For future plans, I was recently promoted to a lead software developer. I now have three junior developers under my guidance, and I hope to expand our program further next year. It’s vital that our junior team members progress to contribute meaningfully to our projects.
00:18:07.360 Thank you very much for attending!