RailsConf 2023

Deep End Diving: Getting Up to Speed on New Codebases

Deep End Diving: Getting Up to Speed on New Codebases

by Allison Hill

In the video titled Deep End Diving: Getting Up to Speed on New Codebases, presented by Allison Hill at RailsConf 2023, the focus is on effective strategies for onboarding new team members across varying experience levels in software development. Hill emphasizes the importance of making the onboarding process not only smoother but also more engaging for newcomers. Key points discussed include:

  • Personal Background: Hill shares her transition from a background in Neuroscience to becoming a junior developer, highlighting firsthand experiences of learning and onboarding in the tech field.

  • Survey Insights: Conducted informal surveys among colleagues revealed valuable insights into helpful tools and experiences regarding onboarding. The respondents emphasized the importance of collaboration, mentorship, and the mixed reception of documentation.

  • Themes of Discussion: The presentation is structured around three main themes: Stress Management, Learning Patterns, and Mentorship.

    • Stress Management: Hill explains stress as both an emotional response and a physiological reaction, and how it can affect one's learning processes. Techniques such as defining success, reducing communication breakdowns, and recognizing achievements were suggested as effective stress reduction strategies.
    • Learning Patterns: The significance of documentation, collaboration, and leveraging different perspectives for learning were stressed. Hill introduces the concept of "polar bear patterns" to describe ambiguity in team processes and emphasizes the need for clear documentation and communication.
    • Mentorship: Hill discusses the impact of mentorship, particularly through pair programming and feedback sessions, in alleviating imposter syndrome. She advocates for intentional integration of mentoring into developer workflows, which can also enhance overall team productivity and morale.
  • Examples and Activities: Throughout her talk, Hill incorporates interactive polls to keep the audience engaged and illustrate her points, making the session lively and relatable. Practical tips such as assigning buddies for new hires, conducting regular check-ins, and the value of semi-regular meetings were highlighted to optimize onboarding experiences.

  • Conclusion: Hill wraps up her presentation by underscoring the need for a supportive team environment that values mentorship as an integral part of the development process. Cultivating a diverse team offers different perspectives and fosters collective problem-solving, which is crucial for a conducive learning and working environment.

00:00:20.240 Anxiously watching the clock, we're officially at 3:30.
00:00:25.260 So we'll go ahead and get started. Don't worry, there's plenty of fluff, so if people filter in, that's fine.
00:00:32.220 Welcome to "Deep End Diving: Getting Up to Speed on New Codebases." I am Allison Hill, and I am going to be sharing some interdisciplinary strategies on what you or your team can do to make the onboarding process easier and smoother for new hires, regardless of their experience level.
00:00:37.559 To kick things off, let me share a bit about my personal background. In 2019, I graduated with a BS in Neuroscience from Trinity University. I dabbled in computer science; to be honest, math seemed scarier than organic chemistry, so I stuck to the life sciences.
00:01:01.980 My first full-time job outside of college was with the Children's Learning Institute at the University of Texas Health Science Center in Houston. I worked on various research projects focused predominantly on early childhood education, specifically looking at language acquisition and early STEM skills. I really enjoyed this work.
00:01:14.580 However, in the spring of 2022, I wanted to transition into something more technical. I enrolled in the Flatiron School's boot camp program. While doing that, I was also freelancing in curriculum writing and teaching music lessons, all while looking at everything through an educational perspective. Fast forward to eight months ago, I started as a junior developer on the product team at workforce.com—a global SaaS company specializing in scheduling, timesheets, and payroll.
00:01:48.299 So, I know a thing or two about learning, and I also have recently been onboarded, so these experiences are very fresh in my mind. Even though I consider myself knowledgeable in this area, I sent out an informal survey to friends and colleagues in tech to ensure I wasn’t totally off base with my advice.
00:02:18.180 Twenty people responded, and I was particularly interested in which tools they found most useful for learning new things, as well as which tools they really disliked using. For context, the percentages off to the right represent the proportion of respondents who selected each tool.
00:02:36.060 The survey allowed for multiple selections, and some notable patterns emerged. Firstly, collaboration is very popular: of the top four responses, two involved some form of collaboration—is it through pair programming or simply asking someone for clarification on what you're working on. Additionally, people have a love-hate relationship with documentation, which was the most popular yet also the least favored tool.
00:03:05.400 Another finding was that many rely heavily on various online resources, such as Google, YouTube videos, and guided tutorials. I also posed open-ended questions regarding what was helpful versus what was unhelpful, and the responses largely corroborated my own experiences. This helped me narrow down some key themes. The main areas we will discuss today include Stress Management, consistent patterns, and mentorship.
00:03:41.520 The first theme, Stress Management, is about striking a balance between stimulation and stress. To start, I want to establish a common understanding of what stress actually is. Many of us often think about stress as an emotion—something we can feel, like anxiety or feeling overwhelmed. However, stress is actually a cascade of physiological effects triggered by a stressor. It encompasses not just our emotions, but how our body reacts as well.
00:04:40.739 Stress can originate from real or perceived threats. These can be physical, like facing a wild animal, or social, like presenting in front of an unfamiliar audience at a conference. What happens is that this perceived threat activates our stress response, resulting in neurotransmitters in the brain that increase activity in certain areas while decreasing it in others.
00:05:03.539 This process also triggers a release of stress hormones that circulate through the bloodstream, preparing us for a fight-or-flight response. This includes increasing blood pressure, raising blood sugar levels, and speeding up heart rate while slowing down digestion. The key takeaway is that recovering from a stressful event can take time. Even when you feel emotionally better, your body requires time to return to its baseline state.
00:05:41.760 Stress isn't inherently bad—it has evolved to help us focus our attention on things that need our immediate response. However, stress can also disrupt learning and significantly impair creativity. It hampers our ability to retrieve memories and can negatively affect how we process new information. This creates a situation where we can perform routine or mechanical tasks under pressure but struggle with complex cognitive functions.
00:06:43.139 Another important point is that stress lowers activity in the prefrontal cortex, which is responsible for planning and complex thinking. So, during periods of stress, you'll find it more challenging to focus your attention, and the productivity may not reflect the effort you're putting in.
00:07:17.340 Fortunately, the types of stressors we face while onboarding are primarily influenced by our perceptions of the environment. Concerns about being negatively evaluated by team members or feelings of imposter syndrome can heighten stress levels. By tackling these perceptions, we can mitigate some cognitive impacts associated with stress.
00:07:56.339 Some stressors we can work to alleviate include feelings of impostor syndrome, communication breakdowns, and feelings of overwhelm. There are concrete strategies to address these issues. For instance, impostor syndrome often stems from the difficulty in recognizing one's achievements as a result of effort, rather than luck or coincidence.
00:08:36.119 To counter impostor syndrome, it helps to clearly define what success looks like. A valuable metric shared with me by a mentor is that, in a corporate environment, success often means delivering value to customers — providing useful products that simplify their lives.
00:09:00.600 Moreover, my team excels at fostering a culture of public recognition. When someone successfully ships a new feature or contributes significantly to the QA process, we publicly acknowledge their contributions, which helps reinforce positive experiences and builds confidence. Feedback is also critical; people need to receive acknowledgment for what they're doing well.
00:09:43.920 Additionally, setting people up for success requires support through resources such as documentation, onboarding videos, mentorship, and clear expectations. When new team members understand what is expected, they can self-regulate and feel validated in their efforts. We can also help them ramp-up their involvement with progressively challenging tasks—rather than just throwing them into the deep end.
00:10:25.380 Team support is also crucial; isolation can intensify impostor syndrome. Having a diverse team can counteract this feeling, as different perspectives enhance collaboration. Diversity should be considered not just via demographics but also in terms of experience. For instance, my team includes developers from boot camps and traditional computer science programs, leading to varied approaches and insights that improve our overall product.
00:11:00.360 In addition to boosting morale and building confidence, regular feedback and checkpoints help everyone stay on track. Early course correction is essential, as it ensures team members remain validated in their accomplishments and minimizes confusion. Collaborations, particularly with senior team members, provide insights into different methodologies and thought processes, helping ease any feeling of isolation.
00:11:47.940 Now, let's have a little fun! If you're feeling tired of sitting and listening, I invite you to stand up for a moment. We're going to do a quick polling activity. I'm going to show you a pattern, and you'll need to fill in the blanks for one of the options. Move to one side of the room if you choose one option and to the other side for the alternative. Don't worry about memorizing—just go with your gut!
00:12:18.780 First up, we have a blackfish, a gray fish, and a teal fish. Do we think the next one is the purple fish or the whale? So if you think it's a fish, go to this side; if you think it's a whale, go to that side.
00:12:44.820 Alright, it looks like the fish is the winner! Anyone want to share their reasoning? Yes, fantastic! It is, indeed, the fish!
00:13:08.520 Now for our second question, which will be a little trickier. We have a penguin, a platypus, and a peacock. What do you think comes next — a duck or a polar bear? Alright, everyone discuss and move to your sides!
00:13:50.340 Okay, it looks like there’s a divide! Team Duck, feel free to voice your opinion! And Team Polar Bear, you can do the same. A consensus has formed, and it seems Team Duck has defended their choice with solid reasoning!
00:14:20.880 In this instance, the reasoning suggests that the answers relate to animals that start with the letter 'P.' This kind of ambiguous pattern, which I've termed 'polar bear patterns,' can cause confusion among team members. During a code review, these patterns can muddy our understanding of code construction.
00:14:34.320 So, how can we improve our documentation? Use pull requests (PRs) to explain your decisions, even if it seems obvious. This grants others the opportunity to understand the rationale behind your choices. Blogs serve a similar purpose, offering insight into new features or strategies we've adopted. A recurring complaint is the inconsistency of documentation — sometimes it’s useful, and other times, it can be terribly unhelpful.
00:15:13.800 Readable patterns in coding are essential. As Ruby developers, we should prioritize creating code that is easy to read, even for those who may not be the most experienced. This extends to ensuring our work is understandable in the long run and providing context on which versions of the tools we used.
00:16:00.360 Tests play a crucial role as well; they don’t just identify when something breaks, but also help document intended behaviors. Good tests are descriptive and provide clarity around expected outcomes, which in turn helps establish our design patterns.
00:16:55.620 As we near the end, I’d like to reiterate that teamwork truly makes the dream work! Feedback from my informal survey indicates that coding with an experienced buddy is viewed as overwhelmingly beneficial for onboarding. The 'experienced buddy' doesn't necessarily have to be a senior developer; they can simply be someone who is more familiar with specific parts of the codebase or tool.
00:17:56.520 This collaborative dynamic enhances understanding for everyone involved, whether they’re teaching or learning. It’s also effective for identifying polar bear patterns, which can often arise from ambiguous naming or setup. Discussing these areas can clarify confusion and promote understanding.
00:18:38.250 Also, it is critical to recognize that everyone has something to contribute. Diverse perspectives foster innovation, improving the overall quality of our product. Engaging with teammates from various backgrounds helps expand our understanding of user needs and potentially exposes hidden edge cases.
00:19:18.750 Moreover, a diverse team reduces feelings of isolation among new hires, which can exacerbate feelings of impostor syndrome. When your team comprises individuals with different experiences, educational backgrounds, and viewpoints, it creates a supportive environment.
00:20:06.900 So, how do we successfully integrate teamwork into our workplace culture? One effective strategy is assigning buddies or project points of contact. Having a designated person within a team who is approachable makes it easier for new hires to seek clarity and avoid confusion.
00:21:00.840 Additionally, implementing regular check-in meetings can help alleviate stress. These meetings provide structured opportunities to ask for help and share challenges, making it easier for team members to communicate and support one another.
00:21:36.540 During remote work periods, my teammates and I established informal morning check-ins, where we'd provide brief outlines of our daily tasks, any potential blockers, and some casual chit-chat. This practice has continued even after returning to in-person collaboration.
00:22:17.280 Our weekly meetings, lasting 30 minutes or less, serve as informal touchpoints where we discuss our progress, challenges, and upcoming needs, allowing team members to communicate proactively.
00:22:55.320 Pair programming remains a popular tool for onboarding. It helps individuals observe the coding process of more experienced developers, learn shortcuts, and discover resources. This method is particularly effective, as it does not solely rely on one-on-one interaction, allowing a more collaborative learning environment.
00:23:43.740 We should also encourage a gradual increase in responsibilities for new hires, ensuring that they do not feel overwhelmed. This process involves providing opportunities for increased autonomy as they become more confident in their skills, rather than just tossing them into the deep end.
00:24:28.020 Asynchronous collaboration has its place as well. With teams spread across various time zones, using pull request comments enhances communication, especially among cross-functional teams.
00:25:00.700 Broadly speaking, effective mentorship and the growth of team members should not be viewed as optional—something nice to do on the side. It should be integral to your team's culture, similar to how coding and shipping software are prioritized.
00:25:56.460 Going forward, I encourage teams to actively schedule time for mentorship, allowing senior team members to work closely with junior hires in an intentional and organized manner. This commitment will yield long-term benefits not only for new team members but for the entire team as their skills and confidence grow.
00:26:46.680 Before I conclude, I want to thank several groups. I express my gratitude to my colleagues at workforce.com for their support and input during my survey. A special thank you to RailsConf 2023 for the opportunity to speak at my first conference, and to freepik.com for providing public domain images.
00:27:21.720 And a final thanks to all of you for listening to my talk. It means a great deal to me.
00:28:01.380 Now, does anyone have any questions? Additionally, I have Neuroscience articles and related materials linked in the slides, and I'm happy to discuss them!
00:28:38.640 Yes! I'm thrilled you brought that question up. The question revolves around unfamiliar or intimidating parts of a codebase, especially legacy code. I've been in this situation recently myself.
00:29:12.960 In my case, I worked on an integration with a mentor who also lacked experience in that area. Although we were unsure together, the collaboration was beneficial because we were both able to contribute our thoughts and insights.
00:29:41.460 Even as a junior developer, I actively engaged by asking questions and clarifying reasons behind certain decisions. This experience was valuable—we learned together.
00:30:22.680 Further, the question was about differences in mentorship experiences between educational psychology and coding. In coding, the peer-to-peer dynamic is much stronger, with a smaller experience gap at times.
00:30:57.480 In educational psychology, a clear hierarchy exists compared to coding, and most interactions feel heavily one-sided. Coding encourages dialogue—fostering collaborative mentorship that can evolve positively.
00:31:43.680 Does anyone else have further questions or inquiries about varied perspectives?
00:31:50.640 In working with larger codebases like a massive Ruby monolith that no one has touched, communication and clarity help immensely, whether discussing with senior team members or those from different teams.
00:32:20.640 With effective communication, a more comprehensive understanding emerges, and collaboration fosters a supportive environment. Thank you again, everyone.
00:32:49.680 Now, I’ll share additional resources and articles linked in the slides. Thank you for your time!