If the goal is to merely fill a position with a body, as in find a coder but not a true problem solver, then determine if the candidate meets certain basic qualifications only. The preferred questions are how questions, because such questions demand some amount of creativity and expect a certain quality of answer. Such questions are also extremely limited to the provided subject, and can be narrowed as desired. It is best to think of how questions as an internalizing force where creativity is channeled only inward to the given subject. For this kind of candidate, a basic coder, it is best to find someone who is either technically proficient or desirous to become so, but lacks deep experience in the given field. Entry level candidates looking to start their career would be ideal. Such a position suggests a technology plan, of some sort, is already in place and disruption is not preferred.
If the goal is to hire somebody who is capable of mentoring, advising the business, and generally worthy of lone wolf special forces type missions you need to identify a superior technician. A superior technician is somebody who is capable of making advanced technical decisions, solving any problem (in the given technology) placed before them, and has the desire to selflessly share these capabilities with co-workers. This elite individual is confident in their ability to perform so much so that they run towards challenges opposed to curling up into a defensive posture with thoughts of cowardice. Such an individual is also humble enough to realize that they did not build this confidence in a single day and it required exhaustive training and mentoring from past masters. While this individual may jump into fires with a plan for resolution they secretly prefer educating people and finding ways to be helpful.
These candidates can be identified through three key qualities
- Experiences
- Technical capabilities
- Honesty
Elite masters tend to enjoy technical interviews, because they will view it as either a review of what they already know or a new perspective of known skills. These individuals didn't gain a mastery of their art without some amount of personal passion for the subject, so be prepared for the candidate to talk you through a subject into the point of exhaustion. Since you, the interviewer, are asking the questions about a subject they love it is only rational for the candidate to mistakenly believe you may love the subject as much as they do. Also be prepared that their answers may not be what you would expect as the candidate may have been working in the field longer than you have been an adult and may have various solutions to the problem which predate your birth. If such answer mythic answers arise take notes. Web technologies are additive, so old technologies tend to remain viable unless expressly killed in a forth coming technology standard. Don't be afraid to challenge this ancient wisdom by asking for more modern approaches to the problem and then follow up with why the candidate believes the old approach is better. A true master will be able to nail this line of questioning in a way that leaves you dumbfounded.
Honesty is often not what many people expect. Honesty is the ability to speak to a truth even if disagreeable, offensive, or unpopular. A devout sense of honesty can be instantly shocking like stepping outside to a large ice cold fresh breath. It is the ability to instantly kill any question with a simple answer of "I don't know".
Many elite masters find honesty challenging, because while they are confident in their own experiences they do not wish any disrespect in their approach or to sound condescending. This is the most challenging part of interviewing for extremely seasoned veterans, how to soften their answers (temper their honesty) to be more acceptable to interviewers who do not share or understand their perspectives. While all the fear and intimidation to determine the appropriate level of honesty might appear to fall upon the insignificant shoulders of the candidate this is entirely a subject of challenge for the interviewer. Candidates who have done this long enough and interviewed enough will use disruptive levels of honesty and uncertainty to informally interview the interviewer as a way of determining if they really want that job. Even a completely humble candidate might unintentionally use a mix of their superior understanding of the technologies and interpersonal communication facets to their advantage in ways they do not realize to make non-cognitive decisions on how to proceed, which creates a deeply manipulative inverse in the balance of power during the interview. It is in the best interest of the interviewer to keep the candidate calm and reassured so as to encourage and appreciate all technically valid answers even if not internally acceptable.
If the goal is to realize business objectives into practical application then it is absolutely imperative to hire a superior candidate. A superior candidate does not necessarily mean a stronger and more experienced technician. It would be safe to secretly assume this means a superior human. A superior candidate is able to satisfy three primary considerations:
- adversity
- technical prowess
- creativity
Notice that those three criteria are all behavioral considerations opposed to learned skills. This is important.
Adversity is more than merely being happy or having a positive attitude. It is the ability to reach down deep inside and lead people, who violently hate you, to security even while the zombie apocalypse occurs and your children are being eaten alive. Recent behavioral studies[1] using micro-expressions indicate corporate leaders who are generally in fear and or thinking in terms of disgust are more likely to generate favorable returns. Fear and disgust are far removed from happiness or anything positive. More important is the ability to conquer any given task through sheer cunning and leadership, which requires an ability to envision a plan and then influence and direct available resources. One way of interviewing a candidate for this quality is to propose an absolutely horrid scenario and then ask the candidate to talk through a resolution as precisely as possible. Be sure to interrupt candidates while they are deep in thought by injecting additional problems to the scenario. It is ok if the candidate struggles so long as they refuse to give up, regulates their frustration, and are willing to quickly change positions to adapt to changes. At the end of this stressful exchange the most important thing is to evaluate whether the candidate's attitude is positive. For instance joke with the candidate and then ask if they would like to do that again in a serious voice (watch their face closely).
Technical prowess does not indicate a mastery of a technology skill. It suggests an ability to quickly grasp abstract concepts, both theoretical and practical, in a way that is generally accepted by those that are experienced skilled technologists. It should be safely assumed that a given skill can be sufficiently learned in an acceptable amount of time provided a person is willing to learn the skill and capable applying the learning. When such a time frame is impractical or violates business objectives the candidate must be capable of communicating technical criteria in a precise and well understood way to somebody who can perform the work. Interview for this ability by asking the candidate to solve a problem they are completely familiar and comfortable with, and then once the answer is complete ask the same problem again in an environment where the candidate is entirely unfamiliar and inexperienced. It is important to keep the candidate calm and relax, because the assessment is only able problem solving and envisioning. It might be necessary to help the candidate along from time to time to ensure they don't get nervous when they get stuck.
Creativity is a quality that suggests an innate capacity to formulate thoughts that are original and originality is exquisitely rare. Such thoughts can be decisions, ideas, suggestions, or expressions. Creativity suggests an ability to formulate ideas that exist outside of popularly held beliefs and conventions, and in some cases may even directly violate such popular ideas. Since creativity is a rare quality this is perhaps the easiest quality to evaluate. The standard approach is a divergent personality assessment[2]. A more simple approach is to ask candidates for a simple technical solution, emphasize simplicity as the most important technical quality, to a problem they would never imagine encountering. Consider asking the candidate how they would extract all the comments from an HTML page or .
These three criteria are easy to interview for. Since they are innate behavioral qualities the results are always predictable and challenging to prepare for. They are also more challenging to lie about.
The single biggest failure in a candidate's potential towards becoming an incredibly great developer is their inability to perceive complexity[3]. This is often referred to with the colloquialism not being able to see the forest for the trees due to a person seeing trees immediately before them and never realizing the start of a larger collective, the forest. This is a cognitive limitation that impairs a person's ability to retain awareness of certain key aspects of a complex system. The common behavior in the face of complexity is to reduce a complex unit into various simple units. This behavior becomes a hinderance when engaged prematurely without accounting for the economic consequences upon the larger system aside from the single unit of focus.
I hesitate to refer to this behavior as a disorder since it is likely common even if it is a debilitating impairment. Typically this issue is close to irrelevant in the immediate since developers will generally have assistance to identify impact and severity in the near term, which makes the behavior challenging to identify. Unfortunately the behavior influences all abstract decisions from style of code, to tools, and even to architecture. When these decisions build upon each other the risks and costs associated compound into the concept of technical debt. Since the fault is a cognitive limitation the distressed parties are completely unaware of the problem and are incapable of identifying or appreciating the consequences even when presented with evidence and documentation.
This behavior can be identified by asking a candidate to explain complexity and how to solve for it. After the initial answer show the candidate an economic model of various interwoven pieces like a hypothetical trade international trade network or an animal food chain. Now ask the candidate, given the data represented in the model, to reduce complexity and increase yield. Unfortunately, this is a trick question. Complex systems are only self-sustaining when achieving a balance of involved factors, constraints, and actors so therefore a complex system is naturally balanced and complexity is an economic quality of the system. The system can be reduced or simplified, but at considerable expense and increased risk. Most candidates won't identify with larger implications to a grand system when told to focus on a minor aspect.
It is important to understand that you are just yet another candidate in a long line of candidates and probably wasting their (the interviewer's) time. This is more true in web development than other fields given that many developers are incredibly under qualified and hopelessly lacking of confidence in the very technologies that defines their purpose of employment, and yet these are people who are actually employed and won positions over even more worthless candidates. The worst mistake a web development candidate can make is to be arrogant or snarky. The candidate should feel lucky and grateful they even made to the interview in the first place. Understanding that they don't need you and won't shed a tear at your absence is just the start of humility.
The greatest challenge for entry level candidates is to balance the need to get a job against the need to emerge from entry level, which are often competing qualities. The common expectation in the market for fresh developers is that they can write the minimally required code. If you are of the mind that this is acceptable you have already killed your career.
It is the responsibility of the candidate to do what they can to get that first major employment in their career. This can be a tough step and expect competition for the position to be high. Learn the skills the posted job requirements dictate and do not appear to be a disruptive force in the job interview. Always be honest and be prepared to answer questions with I don't know instead of attempting to fake an answer. Entry level candidates will not be expected to know everything, but the stronger your understanding of the required technologies the better.
Once the first job is landed a line of relevant employment exists for that future resume. If the first job means taking some abuse then just take it. If the job doesn't work out the experience helps in getting the next job. Be humble and learn what you can.
The hardest part is discovering how to elevate from being a mere coder to becoming a seasoned senior developer. The corporate world is really bad at mentoring and the path forward is often a complete mystery. To make matters worse there is a lot of really horrid advise that will ensure you never get to the next level.
The path forward demands a couple of qualities of which none are easy:
- relearn the basics
- diversify your education
- practice on your own time
- seek diverse opportunities
Relearning the basics is harder than it sounds. Ever write a single page application without any framework code? It can be done and it isn't hard, but its not something that is figured out over night. Ever try to get data from XML using JavaScript? What about from attributes, text, or comments? Again, this is easy to do, but you need to practice the very basic web technologies. Practice solving hard problems with simple organized solutions is the only thing that builds stronger coding skills.
Sometimes knowing or identifying problems worthy of a solution can be tough. What things are worth investing your time outside of the job? This is why it is important to diversify your education. See the education guide to get started. These aren't just hypothetical theories to consume some time. These are qualities that senior developers are ultimately responsible for. In order to step up to the next level there must be a willingness to accept such responsibility.