A few weeks ago, my friend Nico König asked the Twittersphere about best practices when onboarding a new junior developer to your team:
// De...
For further actions, you may consider blocking this person and/or reporting abuse
While this is true of any dev, it's double true of junior devs:
The first weeks, they are going to be anxious to do something - anything - of value. If your code base is particularly complex, this will be difficult. But one thing a team can always use is perspective, and that is easiest to get from a new person.
For years, my go-to task for week one was for the new person to improve the Wiki. Find all of the bugs in our setup docs. Define all of the jargon words we forgot to define. That's all defensibly useful for hiring the next person, which is great, but other than a sense of accomplishment, it doesn't help this person all that much.
In communication or teaching, you want the listener to repeat back what you've just said in order to determine if they actually heard you. Have them work on the high-level overview of the system. Everything they get right, is explained without a bunch of circular reasoning. Everything they get wrong is a teachable moment. And every good teacher knows that they learn as much in the teaching as the student does in the learning. Often this is a good way to find missed features, or solutions to problems you thought unfixable.
I'd always suspected this, but this is the first time I've read it written by someone else.
Developer experience is no different than user experience in this regard. You don't know how many assumptions you assume you're not making, and only outside feedback and the more than occasional ELI5 request (see? I just used an acronym assuming everyone on Dev would know it... That's "Explain Like I'm 5" for those who didn't) can help to undo those assumptions.
Good tips! I wish more companies / teams would give pair programming a serious try. I've had great experiences since I did an internship back in 2006 and the onboarding was basically an introduction to pair programming, a couple of demos showing us how to do TDD, then "okay, partner up with someone and take a task card off the board over there".
Another thing I find helpful is to make sure there are a couple of really well-defined, small-scoped tasks available for them. Or sit down with them and extract several small-scoped tasks from something in the backlog, then pair up. I really don't like welcoming newbies with "here is the link to ALL OF OUR DOCS" or "here is the our Github org -- feel free to browse through all the source code we've ever written". It's much better if they can sit down and discover the relevant parts of our systems (not the dead code from three years ago that's still referenced in our docs), as needed, to do something concrete and easy to measure... so they know what they're doing makes sense.
be aware that folks are different. Not everybody is fan of pair programming. Fore some, following some online courses is a better match. Or even reading a book. Best would be your organisation provides some self-made tutorials, programming guidelines with a lot of examples, template code and snippets to pick from.
My observation: pair programming often leads to silo-thinking and micro-standards but seldom to the quality standards you might need for larger projects. PP heavily depends on the people. Unfortunately the best folks for PP are the most absorbed ones. Knowledge extraction and distribution processes are - at larger organisations and over a longer time period - more important than PP - my very personal observation.
Agreed, but I do think it's a skill that everyone should learn.
I've never worked in a larger org so can't comment on your other points, but I'm tempted to believe that if pair programming leads to "silo-thinking and micro-standards" then you have a much bigger problem that isn't pair programming's fault 🤷♀️
Dear Carolyn,
When you "think" about stuff, that you have never seen, does not make you a professional :-)
It's just wild guessing and is one of the problems that is holding startups back from scaling and growing fast.
All this has nothing to do with IT but with human nature. I am not saying that pair programming is bad. But it is not enough. When you just have pair programming without a programme around it that makes sure, the the right and always different pairs are built, different characters are addressed their way to learn best, trainers are trained and rewarded, folks are fired who never learn, remain dependent on others, never pay back or contribute etc. - you know - all the general HR stuff - you will get efficiency and motivational problems only Microsofts and Googles can afford - but will take lifes when you are an airplane or car manufacturer, responsible for a nuclear power plant etc. ;-)
Seems like you speak from bitter experience, here.
And there's more to the merits of coders learning to pair program than wild guesses. I don't think anybody's saying it's something everyone should do, but it there may be some benefit to learn it in case it's useful in the future, with the right company, colleagues, or program. Tools in the toolbox, and all that.
I have always hated pair programming, as a junior and as a senior dev. It has never not made me feel uncomfortable personally, on either side of it. It's not quite as bad virtually, but still far from great.
I couldn't agree more! I wish I had such kind of onboarding process at the beginning of my programming journey back then. Great post, the topic is worth attention!
Hello Carolyn!
My name is Tatiana, I’m a Brand Manager representing Plarium-South, an international game development company specializing in mobile and browser games (company.plarium.com).
We would like to translate your article and post it in our blog on Habr.com.
We appreciate your consideration of our permission request. Link to the specific original content will surely be provided in the translated version. Looking forward to hearing from you soon!
Regards, Tatiana
Hi Tatiana! I've received your message (and DM, and email). I'm thinking about it and I'll let you know soon.
Thanks! I look forward to
Hi Carolyn! Are you ready to give an answer?
Hi yes sorry for the delay, feel free to translate it 😊
Thank you for offering and thinking of this!
Thanks!
Great post with valuable concepts. Please also consider to make it clear to management, that this process is crucial for mid to long term success. It's an Investment. By the way - I created a pull request and had the junior review it, which made him comfortable with the process and also indirectly pushed him to correct MY mistakes.
💯💯💯
Yeah this is worth tying to risk reduction and revenue.
Great advice!
Many developers often forget how little they knew when they begin. Nothing is too basic for a beginner about Git, that's true, but for many other things as well.
I saw many experienced developers explaining clean code, OOP, and TDD in half an hour. Going little step by little step is, I think, a better idea.
Good tips! I've been implementing almost all of these at MousePaw Media for years, and can vouch for them.
The only one I can't follow is having a "buddy who isn't a direct supervisor". Our particular situation makes that impossible: I have to be both the internship supervisor and primary mentor at this point, since we're so small. But, because of how leadership and decision-making is structured within the development team, that works out pretty well regardless. I also strongly encourage people to work together without me, through pair programming, code review, chat, and other collaborative opportunities, so developers wind up supporting each other anyway!
sometimes it is the same body but different ROLES!
Knowing which ROLE one is playing for a given moment and acting accordingly is something that is even more important the smaller you team!
That's definitely one way to look at it. I will occasionally switch into "Supervisor Mode", but I have to say, it's not often. My management style is already more "guide" than "herd", my philosophy being that it's easier for you to dig yourself out a hole you dug, than to dig yourself out of a hole I dug for you. I'll let individuals decide how they want to approach a particular task they've been assigned, and I'll seldom interject my two-cents until they ask for it (the one exception being if they are about to walk right into a proverbial landmine.)
Anyone choosing to hire junior devs should be prepared to shoulder some of the burden of teaching them. If you can't afford to spend time doing that, you should only hire senior devs (which also has an associated and increased cost). It's unreasonable to hire a junior person and expect them to only have other juniors to mentor them. A junior dev is an investment - they won't pay off right away and require time in place of the higher salary you'd pay someone who could hit the ground running.
Your response sounds like you've had a lot of junior devs foisted on you, which is not the junior's fault. Presumably, a company knows what skill level they are hiring someone at and it doesn't make sense to be angry that they take more time to onboard.
Great article. I wish we had a better word than "junior" for people. I'll never call anyone that.
I like the part about being honest about what we don't know. The illusion or perception that we know everything is harmful. I look for any opportunity to say I don't know something. Even the newest, least experienced developer will know things I don't.
Also distinguishing between opinions and best practices. Even best practices are usually subjective. It's okay for a team to decide to do something and expect new members to go along, but we should be prepared to explain anything and answer questions. The worst thing we can do is portray a practice as something decided by Smart People (You Are Not Included) Who Shall Not Be Questioned.
I especially dislike, "That's not how the team does it," as if the the person we're talking to isn't part of the team. Chances are that's not how we meant it. But we should at least ask ourselves, "How do I mean it?"
Great topic and valuable content. My two cents: I don’t think refactoring is a proper task for a junior, especially a newcomer.
Fair point! Refactoring helped me learn a lot, but definitely not at the very beginning of my first dev job. Plus it needs to be presented in a helpful way (what's the goal, why is the current approach not ideal, etc).
Thank you very much for this write-up. Most of the points are things we are practicing in our company already, some of them by explicit decision, some more established by common sense. Seeing this written down helps reflecting on the things we do and why we do them.
There is one thing I'd like to warn about though and that are a bit of a conflict in your points:
Always be available for questions <-> Respect their time
I'm sure it was not your intention to put it that way, but saying that you always have to be available and stop whatever you are doing when the junior has a question puts a lot of mental stress on the mentor. Interrupting tasks all the time is very exhausting and should be avoided.
So, being respectful with each others time goes both ways in my opinion. Of course, a mentor should dedicate a lot of time to the junior to be available to answer questions. I always like to split this between urgent matters and more general matters. I will interrupt my work for urgent matters when the junior approaches me with a question. But for things that are not urgent, I usually reserve a spot when we go through a number of questions that have arisen over the day or half a day.
This allows me to be fully dedicated to the questions and also fully dedicate myself to other work (often requests from other colleagues).
I do agree... except at the very beginning of the onboarding process. When the junior first arrives to the team, they should be the top priority (unless something is literally on fire). Then once they are more settled, I think working out a schedule like you mentioned sounds nice!
Great advice! They are spot-on. All of this creates a warm and safe environment for junior developers. That's essential since they will feel like they can ask questions and actually do things without the fear of being judged or anything.
I'm being buddy for an SDE who's onboarding our team and it's being a rich experience. I try to keep casual conversations and regular follow up sessions so the new teammate can feel welcomed and confident about making questions.
Who hurt you?
A "Brilliant Jerk," perhaps?
Hi,
This was a greate reading and surely will be helpful. I wanted to push further my curiosity to understand the scenario of hiring first junior developer under non-IT manager. What extra care to be taken in such case because non-IT manager is not going to teach junior developer any coding or best-practices?
Thanks
Jp
Curious, why would you hire a junior without an IT manager?
Actually my friend has a long career in sales and he is not from tech background. He has started his own business and looking to hire junior developer due to his budget limitations (and of course to keep another monopoly type of constraints).
Could you translate that for me?
Also, the sales guy might not be able to find an IT Manager or a well seasoned dev, but he may well want to look through his network for someone to advise him on this stuff.
Great topic. Pair programming is an excellent way to learn but senior devs don’t seem to see the value in it or ceos are acting like overseers trying to get every minute of focused work out of you. Communication is also important sometimes people tell you that you’re messing up without telling you what you’re messing up on.
Great article!
I have a thought...
Business domain: I feel it is important that they are provided with some insight into the business domain as it helps them to reason about things and decisions in a more contextual way.
Also fresh new eyes and talent can also identify some obvious solutions, that us deep in the rough experts might miss.
Oh that's a really good one! Knowing about the business domain and what other departments do improved my experience at my first dev job.
These are very handsome points!
As a self-taught (or however you call it) developer who was lucky enough to find a job without even having a solid base to start, I suffered a lot from these situations. Especially for Git commands and processes... I broke things until I got used to it. And I heard about 'rebase' only months later I started to work and it was not in my workspace but in a face-to-face interview with another company. Since then I have more often been using the command.
Mentor or buddy, pair programming, and constructive code reviews are all valuable points.
Thanks for sharing!
Absolutely awesome advice. Thank you Carolyn!!
It's hard not to roll my eyes any harder. Carolyn's post is not making a list of demands, but rather talking about how to have the best experience onboarding a junior dev. I'm not asking for help becoming a junior engineer - I'm the one who onboards, trains, evaluates, and occasionally has to fire engineers that are not able to progress. I passed out of the junior stage a decade ago.
Anyone who expects a daycare will quickly wash out, whether or not someone takes these measures to onboard them well. Senior devs who are too arrogant to put in the time to onboard a junior dev because they think that they are all "millennials fresh out of their safe space" will certainly lose out on talent by relying out stereotypes. Newsflash, even the youngest millennials aren't just starting their first jobs these days, as they are in their mid-twenties. I think you need to upgrade your insults for the next generation.
May I ask to what putative person or entity you're referring by the word "you" in here?
Did we read the same listicle?
This all seems kind of ballistical.
I 100% agree with this article!
I hope that the industry awareness for the points you mentioned increases!
May I ask to what putative person or entity you're referring by the word "you" in here?
Did we read the same listicle?
This all seems kind of ballistical.
If memory serves me right, he was responding to a comment that no longer exists.
(Not sure what is up with (auto?) promoting responses to comments to top comments in dev.to)
Well I'm going to look really confused in here, then.
You forgot the most important part. Make sure to call them "junior!" They love that.
"Must be a case of the Mondays, Junior, eh?"
tips are really good, problem how to implement the tips lol
What about companies that expect for you to be 10x developer since day 1?
Job title: junior web developer
Requirement: 5 years of experience in 3 year old framework.
Excellent post. Your "ultimate" is the most important. Set peeps up for success, and it will pay you back.
The last point is absolutely the most important, I always make it very clear that not-knowing is a big part of my life!
Oh for sure, that place was horrrrrrible for many reasons. I wasn't a developer at the time so maybe it would've been slightly better if I was... but still 🙅♀️
Great tips!
I would push more towards pair coding in the first couple of weeks.
Yes I agree, now someone remote hire me pls don't say I need experience to gain experience as a junior dev :(!
Great article :)
Share with us!