Top examples like Google, Facebook, YouTube or Wikipedia all using JS should leave nobody unconvinced. Actually, about 90% of all websites globally utilize this coding language. What makes JS great? Firstly, all you need is a browser and a text editor, nothing else to install. Secondly, it will work everywhere, as every modern web browser supports it. Thirdly, it improves user experience: in simplest terms, a page doesn’t need to reload in response to user’s actions.
- Integration into HTML by default (unlike Java applications which one has to compile before running on web);
- Dynamic tasks like animations, whereas the HTML only defines the static content and web page structure;
What type of developer do you need?
It is important to check experience, code samples or past works, surely, though you should start with defining what exact kind of JS developer you require. It depends on several factors.
- What’s your product?
Is it a simple website with pretty much static content, a site with renewing data, or a big site with data storage, like e-shop? Because different skill sets could suit for each of those.
- Do you start from scratch or have already started?
- Is experience really crucial? Is a portfolio of all past activity more important to you than developer’s most recent area of experience?
- What is the scope of project?
The amount of work, how long will it last, specific tasks. Writing a brief with provide context and purpose of a project can help as well, coordinating everyone’s efforts. Define your business goals and target audience, reasons for a project, mockups and infrastructure schematics if possible, deadlines, and budget.
Front-end, back-end, full-stack
- Pre-screen by HR. The goal is to reject bad or inappropriate job applications. Out of those who seem to fit the job, check English and communication skills, personality and motivation. If candidates use cliches in resumes, like claiming skills without evidence, or make grammar mistakes, that’s a first warning.
- General interview. The goal is to check whether a candidate would fit the position and team. Find out as much as possible about his/her personality. How good a candidate expresses ideas? Does a candidate stick to his/her opinions or bends under superiors? And so on.
- Coding task. To inspect person’s ability to learn new technologies as well as skills in claimed area. Writing code is a straightforward task – if the result is robust and meets expectations, an applicant moves ahead. CTOs recommend that such task should be similar to company’s actual daily activities, thus more competent evaluation.
- Technical interview. First, verify the coding task, i.e. check if it was not copy-pasted from Internet or done by another person. Secondly, you can ask to write a code during this interview – to reveal actual programming skills. Something of a small riddle that requires 10-20 lines would be enough. Overall, the goal here is to unveil the thought process.
If a candidate passes all stages and you feel (s)he would fit, the firth and final stage is going to be hiring and signing a contract.
- What is functional programming? What is function purity and function composition? Also, first class functions and lambdas?
- What’s the difference between prototypal and class inheritance? Which one to use and when?
- What is two-way data binding and what is one-way data flow? How are they different? What are the examples of each?
- How monolithic and microservice architectures are different? What are pros and cons to each of them?
- What front-end frameworks do you prefer and why?
- What are closures in JS? Why and when you would want to use them?
- How do you conduct code testing of your code? What tools would you utilize for those purposes?
Of course, there’s more, but you get the idea, stick to top-level issues. If a candidate is able answer and operate all terms confidently, he/she surely will be able to figure out syntax as well. Essentially, your task is to find out whether a candidate knows how build the whole application.
A good way is to give out a couple of tasks that a potential JS developer should be able to finish in few hours, or a day at most. As said, such tasks better be close to the daily work of your team. Besides purposes of evaluation, this will show a candidate what kind of job awaits him if he/she gets hired. In other words, if you work with React.js, make the task about React, not Angular or Node.
Let’s show one example. This is called “event delegation”, a scenario when you have to attach events to buttons or images, so when a user clicks it, a page would perform a certain action. Taking a to-do list as an example, the task is to add this functionality based on the following HTML code:
Often candidates attach an event listener to every item individually, which is fine for 4 elements, but not if there are thousands. You can also ask a person directly what the maximum number of elements is ok – not more than 10 is good for the most apps. In case an app ends up with hundreds of events, it would be better to attach one event listener to the container. Here is the proper code for the task:
The tricky part to any coding task is measuring solution quality. It also depends on whether you prefer a robust code result or few possible solutions with context. Are you ok with finding a mistake and how many would it take to reject a code? Bare in mind, that is reasonable to reject 3 out of 4 candidates based on the coding task. If you feel someone is close but not quite there to be hired, you can welcome such applicant to re-apply in few months.
Two point at this stage: coding task verification and writing code on the spot, accompanied by argumentation. Check the code and ask the reason behind specific classes, notations, error labels, modifiers, etc. Ask about reasons for such and such choice of class in CSS. This undoubtedly will help determine if a candidate had solid ground for his/her code.
Your purpose is to learn about the thought process, don’t pay too much attention to minor things or lexical knowledge. Also, have an alternative task in case a candidate is struggling with the first one. It should imply a different thought process and constructs to give a second chance. Some people are usually stressed out in interview situations, so be a calming presence and point to no time limit.
Where to find
There’s also no shortage of freelance finder websites:
Directories like Codementor, X-team, and since recently ThinkMobiles, also have useful tools for people yet undecided with the type of developers they need. For example, you can browse developer profiles and companies specializing in JS. For even deeper search, you may want to visit forums on Webdeveloper, Coding Forums or Stack Overflow.
JS developers of all specialties (React developers, Angular developers, Node Developers, etc.) are always in high demand. Rates depend on skills, experience, region, and project scope. Average rates, according to Upwork, are $35-50 per hour, so you can expect a range between $200 and $800 to pay per day.
To be able to calculate the cost of hiring a developer, which largely depends on skill set, consider three types of programmers:
- Basic front-end/back-end devs. With command of fundamentals like HTML, CSS, JS, jQuery, WordPress, MySQL. Average rate $30-$50.
- Intermediate. Basic level plus skills in certain frameworks like Angular, Node, Meteor, server environments like AWS, etc. Average rate: $35-$100.
- Pro/Full-stack. Combining skills in both front-end and back-end, command of MEAN and/or MERN stack. Average rate: $50-$150.
Another cost factor is hiring a developer individually or hiring a software development agency. In short, the upside of agency is access to the whole team (devs, designers, testers, etc.) while the downside is overhead costs involved.