How to identify junior software engineers with high potential?

SE Factory is an intensive full stack web development bootcamp that has been running since February 2016 in Beirut, Lebanon. Unlike other bootcamps, our mission is not to solely teach the techniques of web development. In fact, we’ve adopted a mode of operation catered to the Lebanese ecosystem to solve a very specific problem in our market.

The Lebanese Universities graduate up to 4000 Computer Science students every year. With the 5000 job openings in the Lebanese digital sector annually as of the year 2013, one would expect the unemployment rate to be the closest to 0%. However, that is not the case! After a closer observation and feedback sampled from local companies, we understood that most graduates do not have the high-caliber technical and soft skills that employers are looking for. This results in hundreds of graduates getting employed in unrelated positions, while others leave the country.

Our solution was to develop a program that receives these students post their University graduation and take them through a journey of intensive technical training, mindset polishing and soft skills guidance for a grueling period of 3 months. 5 days a week, 9 hours a day these students will be exposed to the industry standards uplifting them to become productive junior software engineers that the market is demanding.

The program is free for students. They pay a symbolic fee of 100$ for the entirety of the 3 months. SE Factory is funded through sponsorships and grants, and is part of a non-for-profit initiative. Charging students high tuition costs goes against our mission to increase accessibility for technical education in the country.

The above means that acceptance into this program is not open for anyone. Candidates go through a very selective recruiting process and this post is dedicated to describe this process and the results we have achieved with it.


What does our recruitment process look like?

Step #1 — Online Application

We start with a lengthy online application that all potential students have to fill. The questions are quite diverse ranging from the personal to the technical. The purpose of this application is to collect data on 3 indicators:

  1. Understanding of the program’s mission: It’s essential for candidates to have at least a broad understanding of the purpose of the program. We have shared all the necessary information about SE Factory on 3 main channels: our website, our Facebook page and 3rd party online publications. We need to make sure that the candidate has done some level of research before applying.
  2. Basic written communication skills and English proficiency: Our curriculum is taught in English, the language of the tech world. Our Lebanese schools teach it as a second language while the majority of Universities adopt it as their primary.
  3. Enthusiasm: Applicants need to show some levels of enthusiasm when applying to our program. This enthusiasm, usually stemming from a particular drive, is primordial for the students to be able to go through the entire 3 months without breaking, quitting or getting burned out.

We screen every application, we go through all the nitty gritty details. Grammar and syntactical mistakes are deadly and in general lead to an immediate disqualification.

Step #2 — Personal Interview

Each interview lasts for about 30 minutes during which behavioral, technical, and personal questions are covered and graded. During these interviews we give a subjective score per candidate on 7 main areas:

  1. Verbal Communication: Can the applicant properly communicate her ideas with ease? Can she speak English with a business level proficiency? Does she understand our questions and answer them properly? A grade between 0 to 5 is given.
  2. Technical Skills: We meet a lot of candidates who don’t have a portfolio of side projects (which is considered a plus for our target), so we ask them about their final year projects and/or specific course projects and we go into the details. The further the depth we can go into with the applicant the higher the grade goes.
  3. Foundational / Theoretical Knowledge: We cannot stress enough the importance of having a deep understanding of the major topics of Computer Science. No, knowing the syntax of 5 programming languages doesn’t matter as much as one’s understanding of Complexity Analysis, Programming Languages Design and Paradigms, Data Structures, Database Theory, some level of Discrete Mathematics, Logic, Operating Systems etc… Each applicant is asked up to 3 or 4 questions in any of the topics above and scored based on their response.
  4. Enthusiasm: Again, we measure the levels of enthusiasm one more time during the personal interview. Is the applicant excited about the opportunity? How bad do they want to join our program? We have found that this factor is so important (along with a few other character traits) that we sometimes give it more weight than Technical and/or Foundational Knowledge in our decision making.
  5. Compliance: Does the candidate provide specific answers to our questions? Do they comply with our interviewing guidelines? Do they branch out a lot and divert the subject to avoid answering? Did they arrive on time? Our program is very strict and requires high levels of personal discipline, and compliance is a good indicator of the applicant’s ability to conform with our intensive environment.
  6. Awareness: The best applicants who have shown great progress throughout our program are those who understood early on, the gaps in their knowledge and have identified up to a decent level of accuracy their current situation. This is critical for us and for them to develop their progress path. Without understanding one’s lacking areas, one cannot strive to fix them.
  7. Critical Thinking: This is probably the most difficult category to quantify. However, we do ask some trick questions and provide the applicant with guidelines on some of our expectations for her answer. We’re not looking for an accurate answer, we’re more interested in the process.
  8. Subjective score: Lastly each candidate receives a subjective score from the interviewer with the same weight as all the above areas. The purpose of this score is to allow the interviewer to cater her feelings and non quantifiable nuances about the interview.

The scores of all these categories are then averaged and each applicant receives a grade that will either qualify or disqualify her from the final round.

Step #3 — The Technical Challenge

This is the final step of our interview process. The technical test is a take-home assignment with 3 important characteristics:

  1. The assignment is to be solved with a programming language that the applicant should learn (we select the language which we’re sure the candidate doesn’t know) within the duration we allocate for the challenge.
  2. The solution should compile, should be written to the best of the applicant’s abilities and submitted even if incomplete.
  3. The solution should be considered by the applicant as the number 1 priority within the duration allocated for the challenge.

We also list a very specific set of rules that the applicant must adhere to in their submission, and we make it clear that any violation, no matter how trivial, will lead to an immediate disqualification.

Once we receive the submissions, each solution is reviewed with care and graded on:

  1. Basic Coding Style: Proper indentation, descriptive commenting / variable / function / class and file naming, adoption of either CamelCase or snake_case in variable and function naming but definitely not a hybrid.
  2. Solution Design and its Elegance: Is the code efficient? Can it be optimized? Does it run? Does it solve the given problem?
  3. Adherence to the guidelines and rules: Did the applicant respect our guidelines?

Step #4 — Decision making

Based on steps #1, #2 and #3 a decision is made to either accept or defer the application to a future round. We do not reject any candidate.

We have a strict policy to provide every candidate an equal chance to be part of this program, to provide guidance on their shortcomings and a list of resources for them to go through before attempting to apply again in future rounds. Non-acceptance into any given cycle of SE Factory will not be held against any applicant and they are free to apply again in future cycles and they will be accepted if they demonstrate substantial progress.


Some numbers to date

  • We have screened a total of 173 applicants through 3 cycles.
  • 35 were admitted into our program leading to acceptance rate of ~20%
  • 3 out of 24 applicants (from cycles #1 and #2) have dropped out.
  • 18 out of 21 have received full time job offers as either Software Engineers, Automation Engineers, Mobile Developers and Back-End Developers from local companies within 2 months of the graduation date leading to an employability rate of 85%
  • During cycle #2 out of the 16 applicants accepted, 6 were young, and highly capable ladies
  • We accepted candidates from 10 different Lebanese Universities including but not limited to: Lebanese University, Lebanese International University LIU, American University of Science and Technology AUST, American University of Beirut AUB, Lebanese American University LAU, Notre-Dame University NDU, Beirut Arab University BAU, Arab Open University AOU, Arts, Sciences and Technology University in Lebanon AUL.

Cycle #3 started on January 23rd 2017 and with it we look forward to learn from these amazing ladies and gentlemen as much as they learn from us!

Thank you Constantine Nicolaou for reading a draft of this article.