I started my first day as an associate design and development engineer with a healthy dose of imposter syndrome:
Imposter Syndrome - psychological pattern in which an individual doubts their accomplishments and has a persistent internalized fear of being exposed as a “fraud”.
I had worked for three years since graduation in random jobs (supermarket, recording studio, major ISP) with increasingly technical roles, always aligning myself towards a job in software development. After years of off-hours learning and making crappy personal websites, I finally had a title with “engineer” in it.
But I felt totally inept at my new job. I didn’t know Git. I wasn’t familiar with Macs or iOS development. Everyone else was busy implementing Hazelcast and reading up on Chef while I was wasting hours on a typo in a unit test. I wondered why we weren’t writing red/black trees and designing algorithms to traverse mazes all day like in college.
I felt like I was still a cashier who lied his way into a programming job.
As a junior engineer, one of the first observations that you make is that everyone around you is so damn smart. And they’re all proficient in, well, everything. The senior engineers really know their stuff. Often they’re opinionated on technical matters, too, which makes them less approachable. Either way, you quickly learn that the people surrounding you are better equipped to do the job and can contribute much more than you can.
For some, this is a self-esteem killer. While a student, the bar is relatively low: get good grades and pass your classes. As a professional, the bar is much higher: contribute to your company in a way that justifies your salary. When you are surrounded by coworkers who visibly contribute much more than you do, it’s easy to convince yourself that you do not deserve your job. If my coworker can accomplish in 1 hour what took me 1 day with assistance, why did they hire me?
It’s worth explicitly reaffirming your expectations for your junior engineers from time to time. There are many skills required for professional software development that go completely untouched in college classrooms and coding bootcamps. There is no way for a junior to enter the workforce knowing those nuances, and it will take months and years for them to catch up, and that’s ok.
Guiding new engineers towards tangible goals will help alleviate the problem. Probe for deficienes that the new-hires themselves observe, and set short-term goals to overcome them. If a junior notes that a senior is really proficient with language X, encourage them to pair with the senior and do tutorials during down time. If the junior observes that a senior is very adept in a certain IDE, have them take an hour to learn the shortcuts and plugins.
Not Everyone is the Same
I’ve seen the entire gamut as far as “readiness” goes in new software engineers. Sometimes your new developer is an intern with literally no college programming classes, and sometimes he or she is a 4.0 student with a Computer Sciences degree. Personally, I fell somewhere in the middle of the two when I started my first real job as a developer.
Regardless of the experience that a junior developer brings from school, there are invariably large gaps in knowledge that make it difficult for first-time engineers to hit the ground running. It’s important to explicitly acknowledge those gaps and help the new developer address them so he or she can feel like they are contributing to the team earlier.