Seven Common Pitfalls to Avoid When Hiring a Freelance AngularJS Specialist

Hiring a freelancer for Angular jobs can be a scary undertaking, especially when filling a hole in your team’s existing skill set. Whether you’re hiring a freelancer to take ownership of an existing AngularJS web development project, to pave the way with a new greenfield project, or to augment an existing team, you’ll need to know what to look for and what to avoid.

Pitfall No. 1: AngularJS vs. Angular

It's important to know the difference between Angular and AngularJS.

It’s just “Angular.”

Even though it sounds straightforward, not all “Angulars” are created equal.

The team that built Angular has specified in its Branding Guidelines for Angular and AngularJS that “AngularJS” should be used when referring to versions 1.x, and “Angular”—without the “JS”—should be used when referring to versions 2+. That means even Angular 4 is just referred to as “Angular.”

Why does this matter?

It’s important for you and your freelancer to be on the same page and use the right name. While AngularJS and Angular may sound similar, they are in fact distinct frameworks. And just as you wouldn’t expect a React specialist or a Vue.js specialist to hit the ground running with your Angular app, you shouldn’t expect an AngularJS specialist to be an expert in Angular, or vice versa. This isn’t to say they can’t take it on—they’ll just require more ramp-up time.

When hiring for an existing project, be sure to know if you need an AngularJS or Angular specialist. If you’re planning a new project, use Angular!

Pitfall No. 2: Hiring a Developer Who Isn’t Fluent in TypeScript

Angular was written in TypeScript, and it is by far the preferred language for Angular apps. This means that the ecosystem (e.g., libraries and documentation) around Angular is predominantly written in TypeScript.

When hiring an Angular expert, you’ll want to make sure that you’re hiring someone who knows TypeScript and can take full advantage of its amazing features. They should be familiar with tools like Atom and VSCode, which support TypeScript and will highlight errors and provide autocompletion.

Hiring an Angular specialist means hiring a TypeScript specialist, so test their chops!

Pitfall No. 3: Lead or Follow?

Are you looking for someone to augment your existing Angular team? Maintain an existing application? Lead or bootstrap a new project?

An Angular lead should know how to set up a new project. This is an incredibly important part of your project lifecycle.

The answers to these questions will help you determine how much Angular experience your specialist will need to have. As with other frameworks, the skill and experience required to be productive in an established codebase is much lower than what is required to bootstrap a new project. If you don’t need an Angular lead, then hiring someone with React, AngularJS, or great JavaScript experience may suffice, although they will require some learning. If you need an Angular lead, or someone to bootstrap a new project, you’ll want to make sure that your specialist is up to the task.

A professional Angular lead should know how to set up a new project. This is an incredibly important part of your project lifecycle! Think of it like a building—you wouldn’t want to build a skyscraper on top of a shaky foundation. Likewise, your Angular lead will be setting up the foundation for themselves and all future developers working on your project, so it needs to be rock-solid.

A good setup will:

  • Follow best practices (for Angular or AngularJS).
  • Reduce bugs.
  • Make it obvious how to add new features and extend your application.

When hiring a lead, make sure to ask them about best practices, directory structure, and how to set up a single page application (since it requires special routing).

Pitfall No. 4: Your Angular Specialist Doesn’t Really Know Angular

You wouldn’t hire a chef without tasting their food, and you shouldn’t hire someone for Angular or AngularJS development without testing their Angular knowledge. (A great starting point for this is our list of AngularJS interview questions.) Both Angular and AngularJS code come with their own set of peculiarities that you’ll want to talk about.

Data Binding and Component Communication

An Angular specialist should know their way around data binding and component communication.

An AngularJS expert in particular should know the different ways to pass data to a component:

  • 1

     for raw text

  • 1

     for a function

  • 1

     for two-way data binding

  • 1

     for optional two-way parameters

Conversely, an Angular specialist should know when to use:

  • 1


  • 1


  • 1


Your specialist should also be able to tell you how to do parent-child or child-parent component communication, for Angular or AngularJS.

Services, Directives, and Pipes

Your Angular specialist should be able to explain to you what services are (hint: they’re singletons!), and when to use them. Services are a great way to provide common utilities to many components, simplify components by pulling out complex logic, and share state throughout your app. Angular makes it easy to control the scope of this shared state through the use of providers (e.g., app-, module-, or component-level state).

An Angular specialist should also know when to use directives and how to set them up. Directives are an amazing way to extend HTML by attaching custom behavior to elements in the DOM. For example, you could set up a directive to add on-hover tooltips to an element, set up hotkey event handling, or register when a user clicks outside of your element (to close a dropdown, for example).

Any non-trivial application will most likely have its own custom pipes, so your specialist will need to be versed in these, too. Pipes (or filters for AngularJS) are specifically used to transform your displayed data. Angular comes with many built-in pipes, and AngularJS comes with many built-in filters. Ask your specialist about these handy tools, and make sure they won’t repeat the same transformations across the app when they could use pipes or filters!

Promises and Observables

While not strictly Angular-specific, promises and observables are paradigms that are common in the Angular world, and your specialist should be familiar with these as well.

Thanks to promises, we no longer have to live in fear of callback hell, and your specialist should know when and how to use them (such as wrapping REST API requests). Additionally, Angular introduces the use of ReactiveX’s Observables, which provide an awesome way to stream data.

Pitfall No. 5: Not Doing a Code Review

You can talk the talk, but can you walk the walk?

So, your prospective specialist sounds like they know what they’re talking about, but can they actually break down a problem and write quality code?

Do a code walkthrough of some of their existing code that they can share with you. It doesn’t need to be perfect (but if it isn’t, they should be able to explain to you how they’d improve it). Additionally—or if they don’t have any open source code to share—have them code an example component within your problem domain (e.g., a checkout shopping cart, a web form for teachers to add lesson plans, or a to-do list). Alternatively, you can set up some example code and have them explain it and identify bugs and cleanups.

Checking their code can really give you an insight into not only their competency, but also their style. Good style goes a long way in keeping code maintainable and bug-free, and is just a good general indication of their seniority.

Things to look for:

  • They follow best practices (for Angular or AngularJS).
  • Consistency in their style (casing, format, etc.).
  • They use TypeScript for Angular.
  • They can explain how their code works and defend their decisions.

Read up on good codecommon JavaScript mistakes, and common AngularJS mistakes. And if you’re hiring someone who has yet to be vetted, you should also test their general programming skills (there’s a reason FizzBuzz weeds out so many freelancers).

Pitfall No. 6: Proceeding without a Testing Strategy

Tests are an essential part of every code base. They’re like a warm, snuggly security blanket for your engineers, giving them confidence that they aren’t breaking anything and costing the company money. Good tests and a good testing strategy will boost your technical wealth, while bad tests, or lack of strategy, will be a constant source of frustration and major code debt.

A good freelancer will advocate for tests and understand their benefits:

  • Guarding against regressions (preventing “What do you mean users can’t sign up anymore!?”).
  • Acting as codified documentation of your codebase, making it easier for other developers to understand, maintain, and extend it.
  • Validating functionality and preventing bugs in pesky edge cases.

If you don’t understand testing, you’ll likely fall into the “We need tests!” trap. This can lead you to hire someone who doesn’t truly understand tests, but will happily write tons of less-than-useful or incredibly fragile tests.

When considering Angular consulting, you’ll want to explore your potential hire’s understanding of tests and determine how they’d go about testing your app.

Things to look for:

  • They understand the fragile nature of front-end testing and how to use constructs like page objects to DRY up test upkeep in the face of template changes and refactorings.
  • They can explain how AngularJS’s digest cycle works, or how Angular’s asynchronous change detection works, and how that impacts testing. (Hint: You need to explicitly resolve asyncs or use wrapping functionsto wait for them.)
  • Mocking! They should know how to use spys and stubs/test-doubles in order to isolate tests and remove their dependence on any network calls.
  • An Angular specialist will know that services and pipes are ripe for unit testing. Components are also unit-testable, but with a bit more boilerplate. This is why it is recommended to move complex logic into a service.
  • End to end (E2E) tests will depend on your back-end framework, but an Angular specialist should know about Protractor (although other tools like Nightwatch.js will also work).

To aid in your probing of their abilities, you could provide an example component, service, or directive and ask them what they’d test—maybe even have them write up the “it should (blank)” descriptions of all of the tests they’d write for it, and also write one of them up.

When hiring a professional Angular specialist, don’t superficially ask about tests. Instead, explore their understanding of what to test and how to test it.

Pitfall No. 7: Having Only Non-Developers Interview Your Freelancer

When hiring a freelance developer for Angular(JS) web development, you’ll want to make sure that a developer interviews them. Just because a freelancer is confident, it doesn’t mean they are competent, and a non-developer has a higher risk of making a costly mis-hire. A good developer will be able to recognize someone who knows what they are talking about. Your developer should also validate that the freelancer can walk the walk, through interview questions and challenges.

If you don’t have a senior developer, you can ask a friend or stick with vetted developers.

This Up-Front Effort Will Save You Time and Money in the Long Run

Exploring AngularJS development services can seem like a difficult, opaque, and potentially costly process. After all, if you’re looking for a freelancer to contribute to your existing project or team, it’s incredibly important to find someone who is a good fit and whose chops are up to par. And if you’re building a new project from scratch, in many ways, your project’s future success will depend upon the early-stage decisions made by your specialist.

But don’t panic. By taking the precautions discussed above, you can ensure not only that you’ll be hiring a skilled developer, but also that your project will be on the right track to succeed and to take advantage of all the powerful features that Angular has to offer.

This article is originally publisheed at Toptal.

On the way

from Instagram:

Getting Started with Elixir Programming Language

If you have been reading blog posts, hacker news threads, your favorite developers tweets or listening to podcasts, at this point you’ve probably heard about the Elixir programming language. The language was created by José Valim, a well known developer in the open-source world. You may know him from the Ruby on Rails MVC framework or from devise and simple_form ruby gems him and his co-workers from the Plataformatec have been working on in the last few years.

According the José Valim, Elixir was born in 2011. He had the idea to build the new language due the lack of good tools to solve the concurrency problems in the ruby world. At that time, after spending time studying concurrency and distributed focused languages, he found two languages that he liked, Erlang and Clojure which run in the JVM. He liked everything he saw in the Erlang language (Erlang VM) and he hated the things he didn’t see, like polymorphism, metaprogramming and language extendability attributes which Clojure was good at. So, Elixir was born with that in mind, to have an alternative for Clojure and a dynamic language which runs in the Erlang Virtual Machine with good extendability support.

Getting Started with Elixir Programming Language

Elixir describes itself as a dynamic, functional language with immutable state and an actor based approach to concurrency designed for building scalable and maintainable applications with a simple, modern and tidy syntax. The language runs in the Erlang Virtual Machine, a battle proof, high-performance and distributed virtual machine known for its low latency and fault tolerance characteristics.

Before we see some code, it’s worth saying that Elixir has been accepted by the community which is growing. If you want to learn Elixir today you will easily find books, libraries, conferences, meetups, podcasts, blog posts, newsletters and all sorts of learning sources out there as well as it was accepted by the Erlang creators.

Let’s see some code!

Install Elixir:

Installing Elixir is super easy in all major platforms and is an one-liner in most of them.

Arch Linux

Elixir is available on Arch Linux through the official repositories:

pacman -S elixir


Installing Elixir in Ubuntu is a bit tidious. But it is easy enough nonetheless.

wget && sudo dpkg -i erlang-solutions_1.0_all.deb
apt-get update
apt-get install esl-erlang
apt-get install elixir


Install Elixir in OS X using Homebrew.

brew install elixir

Meet IEx

After the installation is completed, it’s time to open your shell. You will spend a lot of time in your shell if you want to develop in Elixir.

Elixir’s interactive shell or IEx is a REPL – (Read Evaluate Print Loop) where you can explore Elixir. You can input expressions there and they will be evaluated giving you immediate feedback. Keep in mind that your code is truly evaluated and not compiled, so make sure not to run profiling nor benchmarks in the shell.

The Break Command

There’s an important thing you need to know before you start the IEx RELP – how to exit it.

You’re probably used to hitting


to close the programs running in the terminal. If you hit


in the IEx RELP, you will open up the Break Menu. Once in the break menu, you can hit


again to quit the shell as well as pressing



I’m not going to dive into the break menu functions. But, let’s see a few IEx helpers!


IEx provides a bunch of helpers, in order to list all of them type:



And this is what you should see:

Those are some of my favorites, I think they will be yours as well.

  • 1

    as we just saw, this function will print the helper message.

  • 1

    which is the same function, but now it expects one argument.

For instance, whenever you want to see the documentation of the


method you can easily do:

Probably the second most useful IEx helper you’re going to use while programming in Elixir is the


, which compiles a given elixir file (or a list) and expects as a second parameter a path to write the compiled files to.

Let’s say you are working in one of the Elixir exersices, the Anagram exercise.

So you have implemented the


module, which has the method


in the anagram.exs file. As the good developer you are, you have written a few specs to make sure everything works as expected as well.

This is how your current directory looks:

Now, in order to run your tests against the Anagram module you need to run/compile the tests.

As you just saw, in order to compile a file, simply invoke the


executable passing as argument path to the file you want to compile.

Now let’s say you want to run the IEx REPL with the Anagram module accessible in the session context. There are two commonly used options. The first is you can require the file by using the options


, something like

iex -r anagram.exs

. The second one, you can compile right from the IEx session.

Simple, just like that!

Ok, what about if you want to recompile a module? Should you exit the IEx, run it again and compile the file again? Nope! If you have a good memory, you will remember that when we listed all the helpers available in the IEx RELP, we saw something about a recompile command. Let’s see how it works.

Notice that this time, you passed as an argument the module itself and not the file path.

As we saw, IEx has a bunch of other useful helpers that will help you learn and understand better how an Elixir program works.

Basics of Elixir Types


There are two types of numbers. Arbitrary sized integers and floating points numbers.


Integers can be written in the decimal base, hexadecimal, octal and binary.

As in Ruby, you can use underscore to separate groups of three digits when writing large numbers. For instance you could right a hundred million like this:









Floare are IEEE 754 double precision. They have 16 digits of accuracy and a maximum exponent of around 10308.

Floats are written using a decimal point. There must be at least one digit before and after the point. You can also append a trailing exponent. For instance 1.0, 0.3141589e1, and 314159.0-e.


Atoms are constants that represent names. They are immutable values. You write an atom with a leading colon


and a sequence of letters, digits, underscores, and at signs


. You can also write them with a leading colon


and an arbitrary sequence of characters enclosed by quotes.

Atoms are a very powerful tool, they are used to reference erlang functions as well as keys and Elixir methods.

Here are a few valid atoms.

:name, :first_name, :"last name",  :===, :is_it_@_question?


Of course, booleans are true and false values. But the nice thing about them is at the end of the day, they’re just atoms.


By default, strings in Elixir are UTF-8 compliant. To use them you can have an arbitrary number of characters enclosed by




. You can also have interpolated expressions inside the string as well as escaped characters.

Be aware that single quoted strings are actually a list of binaries.

Anonymous Functions

As a functional language, Elixir has anonymous functions as a basic type. A simple way to write a function is

fn (argument_list) -> body end

. But a function can have multiple bodies with multiple argument lists, guard clauses, and so on.

Dave Thomas, in the Programming Elixir book, suggests we think of fn…end as being the quotes that surround a string literal, where instead of returning a string value we are returning a function.


Tuple is an immutable indexed array. They are fast to return its size and slow to append new values due its immutable nature. When updating a tuple, you are actually creating a whole new copy of the tuple self.

Tuples are very often used as the return value of an array. While coding in Elixir you will very often see this,

{:ok, something_else_here}


Here’s how we write a tuple:



Pattern Matching

I won’t be able to explain everything you need to know about Pattern Matching, however what you are about to read covers a lot of what you need to know to get started.

Elixir uses


as a match operator. To understand this, we kind of need to unlearn what we know about


in other traditional languages. In traditional languages the equals operator is for assignment. In Elixir, the equals operators is for pattern matching.

So, that’s the way it works values in the left hand side. If they are variables they are bound to the right hand side, if they are not variables elixir tries to match them with the right hand side.

Pin Operator

Elixir provides a way to always force pattern matching against the variable in the left hand side, the pin operator.


In Elixir, Lists look like arrays as we know it from other languages but they are not. Lists are linked structures which consist of a head and a tail.

Keyword Lists

Keyword Lists are a list of Tuple pairs.

You simply write them as lists. For instance: [{:one, 1}, 2, {:three, 3}]. There’s a shortcut for defining lists, here’s how it looks: [one: 1, three: 3].

In order to retrieve an item from a keyword list you can either use:

Keyword.get([{:one, 1}, 2, {:three, 3}], :one)

Or use the shortcut:

[{:one, 1}, 2, {:three, 3}][:one]

Because keyword lists are slow when retrieving a value, in it is an expensive operation, so if you are storing data that needs fast access you should use a Map.


Maps are an efficient collection of key/value pairs. The key can have any value you want as a key, but usually should be the same type. Different from keyword lists, Maps allow only one entry for a given key. They are efficient as they grow and they can be used in the Elixir pattern matching in general use maps when you need an associative array.

This article originally appeared on Toptal