Before we dig into this topic. I want to make it clear that these are my personal views on what I look for when hiring an apprentice or reaching out to a potential candidate. These views may not reflect those of every employee at the company (8th Light). As an aside, I use the term “Software Crafter” often as it is the term my company uses to refer to its developers. Once an apprentice finishes their apprenticeship, they are considered a “Software Crafter”.
At 8th light, we have an apprenticeship program whereas we hire both experienced and inexperienced software developers. Throughout their apprenticeship, developers are taught how to write well crafted, tested & reliable code. They are also taught the essentials of being a consultant for our clients.
Someone recently asked me what it is that I look for in an apprentice. While having the suggested technical skills are pretty essential to apprenticeship and being a crafter, I honestly don’t place a ton of weight on these skills in my decision making process. Reason being, I personally did not have the technical knowledge when starting my apprenticeship. So, my viewpoint on the weight of technical skills vs other skills that I believe to be a necessity to being a good apprentice and eventually, a good software crafter are different from what some others may believe to be true. Having a magnificent technical skillset does not always equate to one being a good apprentice. Nor does it mean one will eventually be a good software crafter & consultant.
There are some key traits that I look for when hiring an apprentice or reaching out to someone whom is interested in being an apprentice for the company. And almost none of them actually involve technical knowledge. As I believe the technical things can be taught whereas teaching other aspects of what it is to be a good apprentice cannot. Nevertheless, technical skills are important. As they are a pretty big part of the job. I’m going to list some of the traits that I look for in a potential apprentice that I believe will help them excel as an apprentice and eventually, as a software crafter. After touching upon some of the non-technical traits that help me in adopting an apprentice, we will take a brief look at some of the technical traits as well. The first non-technical trait that I look for when adopting an apprentice is someone who has the ability to take feedback, criticism and apply it.
One of the toughest things about being a software developer is the fact that your work will eventually be critiqued to some degree. And having someone tell us that the work we’ve poured our heart & soul into isn’t amazing, can be a tough pill to swallow. When a potential apprentice submits their code for me to review or asks my opinion about their work, it is my duty to be honest & empathetic with them about their work; if their goal is to progress as a software developer. In my experience, the apprentice candidates who take feedback and apply it to their work to the best of their ability have a higher chance of succeeding as an apprentice. This does not mean applying feedback from a code review blindly. It means figuring out what the feedback means, asking the necessary questions to make sure both parties have a clear understanding of expectations and making a plan to apply what was learned from said feedback. I am always open for opportunities for discussion around whether something should or shouldn’t be done. And if my apprentice feels strongly against my advice, I will gladly hear them out. However, if it’s to the point of immediate pushback and disagreement with the majority of my advice, the chances are, our mentor-apprentice relationship will not last very long.
At some point during apprenticeship, I give my apprentices the assignment of teaching their fellow apprentices about a technical topic. My apprentice must learn about the topic before hand (if they don’t already know it). They must also be able to answer questions in relation to said topic. I don’t necessarily expect them to be experts on the topic, but I do expect them to know enough about it to teach it thoroughly. A pretty big part of the job as a software crafter entails helping educate our peers on things such as new technologies and codebase domain knowledge. I believe that apprentices who not only enjoy teaching but approach it from an empathetic viewpoint make great apprentices. And eventually become great software crafters. A big part of 8th Light’s culture is its apprenticeship program. Eventually, all apprentices become mentors in some form or fashion. Whether formally or informally. And having the enthusiasm to help others learn is vital to a successful apprenticeship.
I can’t sugarcoat the fact that the apprenticeship program is anything but difficult. There are a lot of concepts to pick up in relation to software development and consulting practices. As an apprentice you’re expected to work full-time (40 hour weeks). And there will be plenty of things for you to learn during that time. However, in order to have a successful apprenticeship, I’ve found that dedicating at least 5-10 extra hours outside of the normal business hours learning about the “unknowns” increases an apprentices chances of success. Does this mean working tirelessly till you’re on the edge of sanity? Not at all. I am a firm believer in avoiding burnout. That said, life as a successful software crafter entails embracing the idea of continuous learning. Learning new things that interest you personally and can help you professionally. This can come in the form of software related blog posts, books, attending conferences and meetups. All of which are things that can help an apprentice improve as a software developer. I look to find apprentices that believe in continuous learning and are excited to learn new things; because that’s a pretty big part of the job as both an apprentice and software crafter. As a mentor, I can only guide my apprentice down an educational path. I cannot force my apprentice to want to learn. I can only do my best to help inspire them and aid them in achieving their goals.
This is another key trait that I look for in an apprentice. And it’s one of the traits that a lot of people do not possess. For whatever reason, we as developers sometimes feel the need to pretend to be more knowledgable about a topic than we are. Or we generally have the belief that we know enough about a topic that we can only actually talk about in the abstract. This can be harmful for us, our peers and the companies we work for. So, finding someone who is willing to openly admit that they do not know something is valuable. It shows that they’re willing to place ego and overconfidence aside. It allows for me as a mentor, to become aware of the gaps in an apprentices knowledge so that I can work with them to help fill those gaps. Having an apprentice who is willing to admit to their lack of knowledge on a topic generally helps an apprenticeship go by much more smoothly and increases the likelihood of success. As opposed to me assuming or being under the false pretense that my apprentice knows enough about a topic to actually apply it in professional world (as a software crafter). Which could have negative implications for my apprentice during or after their apprenticeship.
This is a grey area in terms of how much experience you should have as a software developer. And while I may be willing to take on an apprentice who knows as little about software development as I did; the fact is, having experience developing software will undoubtedly help increase an apprentices chances at completing their apprenticeship successfully. How much professional experience a potential apprentice has isn’t a huge deal to me personally, as long as they show that they’re actively looking to learn, willing to take feedback & criticism and apply it. And they enjoy teaching others and are happy to be taught by others. I place these traits above technical skills as I feel technical skills are something that can be taught more easily than the other traits I’ve mentioned in previous points.
That said, when I’m reviewing an applicants code submission for apprenticeship, there are several traits within their code that I do take into account. I ask questions such as:
These topics are things that are taught within the apprenticeship program. If a potential apprentice practices these ideals when writing code it will likely help in their ability to have a successful apprenticeship.
I also take a look at a potential apprentices background in software development. I ask questions such as:
These questions help me figure out whether or not someone will be a good fit for apprenticeship as well.
In conclusion, these are just some of the traits that I look for in a potential apprentice. As I said before, I believe the non-technical traits listed above help aid me in figuring out who will be a good fit as an apprentice. This does not mean one must hold each and every one of these traits. Some of them can be developed during their apprenticeship. It’s simply a guide on things to look for prior to initiating a mentor-apprentice relationship (and during). While I place more weight on the non-technical skills, the technical skills are also very important and could help in my decision for deciding who I would take on as an apprentice.
Almost every one of these topics could be given a deeper dive and discussed further. I may follow some of them up with future blog posts as well upon request or personal inspiration to discuss them =)