Tips for Assessing Awesome AngularJS Developers
Hiring AngularJS developers is, on many levels, no different than hiring any other front-end software developer. You need someone with a good understanding of core programming concepts, good JavaScript fundamentals, in-depth browser skills, and a decent understanding of HTML and CSS.
Beyond these basic skills, however, AngularJS introduces programming paradigms that haven't been as common in the front-end world, as well as some features that are unique to AngularJS itself. Most of these skills are hard to acquire simply by playing around with the framework, and instead only come naturally after having built an actual product with it.
When looking to expand your AngularJS team, it's important to make sure you test for these concepts - possibly even more important than testing for traditional algorithm skills.
Note, for this article, I'm focusing on the still highly popular AngularJS 1.x, but many of these concepts will apply to AngularJS 2.x with some adjustment.
Programming Concepts from the Back-End
AngularJS brings several very powerful concepts to the front-end which make it possible to build out larger applications in the browser.
Modular Design
Medium-to-large AngularJS applications will require a solid understanding of best practices for modularizing their codebase. Not only in using external libraries, but also in breaking apart the core program into reusable and testable concepts. To test for this, you'll want to make sure you provide a large enough challenge to see that the candidate can think about splitting a project into multiple modules.
Dependency Injection & Inversion of Control
AngularJS brought Dependency Injection (DI) and Inversion of Control (IoC) to the front-end. These two concepts make it easier to build out inter-dependent components without needing each component to "know" about how to instantiate the other. AngularJS makes heavy use of DI, and understanding how AngularJS makes this happen is important as the web application grows.
Testing DI in AngularJS is mostly baked into just providing a challenge more complex than binding data to a form. Once you introduce services, remote API access, and - for best results - testing, you'll have a good sense if the candidate understands how the components work together.
Reusability & Separation of Concerns
AngularJS makes it easy to build small, reusable components that aren't heavily interdependent, facilitating clean separation of concerns between each service or component. A good developer will be keen on breaking down the parts of your applications into small, reusable components to increase testability and to reduce complexity and interdependence.
This ties in directly to having the candidate build out something more complex that simple a simple test. If the application is too simplified, it might not have any obvious places to create reusable components.
Unit Testing
Very few front-end frameworks made unit testing practical (even impossible in some cases). AngularJS brought with it complete tooling for unit testing all aspects of your front-end. You'll want to make sure your developer has at least a basic understanding of automated testing concepts, if not knowledge of testing techniques unique to AngularJS. The best way to ensure a candidate understand front-end testing is to get them to write their own tests. You can either be explicit in your requirements ("write a test to make sure component A handles action B"), or you can ask the candidate to come up with their own testing solution.
AngularJS-Specific Features
AngularJS is a complete framework with some core features that are exclusive to it. Other core features exist in different frameworks, but have functionality exclusive to AngularJS.
Directives & Components
Of course, the most prominent feature of AngularJS is its vision of UI components, which are achieved through complex Directives, and in v1.5, simpler Components. If you are looking for a developer that can get started quickly, making sure they understand how to build directives is a great way to evaluate their skills. Pretty much any Angular test will include Directives, but this highlights why it's important to look deeper into your potential candidates than simple algorithm tests. Being comfortable with AngularJS-style components takes time, and a good test will ensure they have had a chance to work with them in the past.
The Built-Ins Bonus
AngularJS comes with a large set of built-in directives, and having a strong knowledge of which ones to use when, and the differences between them, will often stand as a strong identifier of a candidate's skills.
Make sure your test gives the candidate a chance to use these built-in directives, especially since many have small edge cases that they probably won't know to account for unless they've implemented them in a real-world product.
Promises and $q
Although they are becoming much more common in JavaScript programming, Promises are still relatively new, and can take some time to wrap your mind around. They make it easier to deal with complex asynchronous function calls, and are critical for building out a modern AngularJS app.
Make sure your test forces the developer to deal with asynchronous functions. This usually means moving beyond a simple UI test, either adding in animation or delays, or integrating with a remote API (see the next section). You'll also want to make sure your developer can correctly respond to both successful (resolved) and failed (rejected) promises.
Working with the $http service
Tightly connected to Promises is the AngularJS $http service, which encapsulates and enhances the traditional AJAX request model. This isn't a huge change, but there are enough features you can really explore the depth of a candidate's AngularJS knowledge here. You'll want to make sure your candidate not only understands basic AJAX concepts, but also how $http augments this model through the use of Promises and HTTP interceptors.
The $digest cycle
Perhaps no feature of AngularJS is more unique than the $digest cycle. A good developer will be aware of how the cycle works, it's limitations, and how to avoid, track down, and fix the dreaded infinite digest error (Error: [$rootScope:infdig] 10 $digest() iterations reached). Being more than just superficially aware of this issue is often the difference between an AngularJS newbie and a proficient developer.
There are several ways to dig into this knowledge, including asking them if they've experienced the error, and how they dealt with it. You can also quiz them on their understanding of integrating non-AngularJS code into an AngularJS application, and how (and when) to make sure those changes are propagated through the application.
Selecting Developers With the Right Skills
If you want to make sure you are hiring top talent, you can learn a lot of the information above through one-on-one interviews. For deeper insights, the only way you'll really know if a potential hire has the right skills for your company is to review code written by them. You just won't get a clear enough look into their experience without reviewing real code.
There are many ways to get this data, including take home tests and in-person whiteboard style interviews. Both will give you deep insight, but both also will require a lot of time, and when you are trying to filter hundreds of candidates, you don't want to have to manually review every candidate.
Here at Qualified we believe that the most efficient way for your team is to use as much automation as possible.
That's why we've taken the time to build a complete, in-depth assessment you can use for screening your AngularJS candidates. Our test covers a large spectrum of the AngularJS framework, while being contained within an automated testing environment. You'll be able to see the results of automated scoring as the candidate is walked through building a complete mini user interface. You'll be able to playback their code to see how they arrived at the final solution, and you'll be able to confidently choose which candidate to move forward with.
Setup Qualified's AngularJS assessment today to start testing your AngularJS candidates in just minutes.