Pair Programming

It’s been eleven years since I began my career as a professional software engineer. I’ve worked alongside others with various levels of experience, ranging from fresh graduates to seasoned veterans. Early in my career, I believed the best way to grow as a software engineer was to surround myself with engineers who were “better” than me. Part of me still believes it today.

However, as I enter my second decade of working in software, I find myself playing the “senior” more often. And with this shift, I’m realizing there’s a lot of value in surrounding yourself with less experienced “junior” engineers. I thought I’d share some of those realizations!

They encourage teams to improve or create a better onboarding process

Onboarding is the process of orienting new employees to the workplace. The goal is to get them productive as soon as possible. For software engineers, this typically includes setting up a local development environment or installing tools. Junior engineers usually come with no prior experience with any of the standard tools or development processes in the industry, so they require a bit more guidance setting things up.

This is a great opportunity to optimize or create the onboarding process. Are new engineers having trouble following documentation? It might be time to fill in the missing details. Are they floundering while building the local development environment? Maybe the tech stack has grown complex enough to warrant tools like Docker or Vagrant.

Regardless of the approach, the fresh eyes of a junior engineer are useful for finding gaps in the onboarding process and filling them.

They force senior engineers to revisit software engineering fundamentals

After working a long enough time in software, an engineer learns some basic fundamentals. These might be programming paradigms (ex. OOP), engineering principles (ex. KISS), or development methodologies (ex. Agile). While some of these are learned in classrooms and bootcamps, much of it is learned in the industry.

New engineers coming in with no professional experience are expected to learn the fundamentals from senior team members. Experienced engineers must be able to answer the why in addition to the what, and junior engineers ask plenty of whys. For example, it’s not sufficient to explain what DRY means, but why it’s important for maintaining large software applications.

If senior engineers find themselves stumped by why-questions, it might be a good time to revisit and relearn some of these key fundamentals. The ability to teach ideas is an important part of being a great engineer. By having junior engineers on a team, senior engineers can exercise mentorship skills while staying fresh in software development concepts.

They make it essential to write clear code rather than clever code

Some engineers pride themselves in cramming complexity into as few expressions as possible. However, it’s been said time and again: clear code is better than clever code.

Turns out, junior engineers are great at pointing out when code is too hard to read. After all, they haven’t picked up clever tricks or hacks (yet). Sure, certain design patterns and language-specific techniques can be justified, but if a junior engineer has a hard time comprehending some code, it might be worth thinking about refactoring it to be more understandable.

They re-ignite the excitement to grow, learn, and explore

The day-to-day life of a tenured software engineer gets a bit mundane after awhile. Monoliths always need breaking up, technical debt always needs to be paid, and regressions always break production. Pulling tickets, writing code, and deploying every day gets repetitive, and engineers may grow a bit jaded.

However, junior engineers are excited to participate in this “mundane” job. And this excitement, no matter how blindly optimistic it might sometimes be, is contagious. Their enthusiasm to learn and grow in their craft is inspiring. It’s a much-needed reminder for battle-weary engineers just how great software development can be.

“I want to be who I was when I wanted to become who I am now.”

What are your experiences working with junior engineers? Let me know in the comments!