Hiring guide for Erlang Engineers

Erlang Developer Hiring Guide

Erlang is a concurrent, general-purpose programming language and runtime system developed by Ericsson in the late 1980s to build robust telecommunication systems. Named after the Danish mathematician Agner Krarup Erlang, it was designed to handle distributed, fault-tolerant, soft-real-time, non-stop applications with hot swapping capabilities. Open-sourced in 1998, Erlang's key strengths are its support for concurrency, distribution and fault tolerance. It is widely used in telecommunications, banking, e-commerce, computer telephony and instant messaging systems. Today, it serves as the backbone of several high-profile production systems such as WhatsApp and T-Mobile’s SMS infrastructure.

Ask the right questions secure the right Erlang talent among an increasingly shrinking pool of talent.

First 20 minutes

General Erlang app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Erlang application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

How would you define Erlang?
Erlang is a functional, concurrent, general-purpose programming language and runtime environment developed by Ericsson. It's used for creating distributed, fault-tolerant systems.
What are the main features of Erlang?
Erlang has several key features including concurrency, distribution, fault-tolerance, hot code swapping, and real-time garbage collection.
How would you create a process in Erlang?
In Erlang, a process is created using the spawn function. For example, spawn(Module, Function, Args) would create a new process.
What is the role of OTP in Erlang?
OTP (Open Telecom Platform) is a set of Erlang libraries, which consists of the Erlang runtime system, a number of ready-to-use components mainly written in Erlang, and a set of design principles for Erlang programs.
Describe the difference between lists and tuples in Erlang.
In Erlang, lists are used when the number of elements is variable, while tuples are used when the number of elements is fixed. Lists are denoted by square brackets, while tuples are denoted by curly brackets.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Does the candidate have a solid understanding of Erlang's syntax and semantics?
How well does the candidate understand concurrent programming?
Can the candidate effectively debug Erlang code?
Does the candidate have experience with OTP (Open Telecom Platform)?

Next 20 minutes

Specific Erlang development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

How would you handle errors in Erlang?
Erlang follows the 'Let it crash' philosophy for error handling. It's designed to handle errors in a different process than the one where the error occurred. The common approach is to use 'link' and 'monitor' functions to get notifications about errors.
What are ETS tables in Erlang?
ETS (Erlang Term Storage) tables are in-memory databases with constant time data access. They provide the ability to store large amounts of data in Erlang's terms and allow constant time access.
How would you implement recursion in Erlang?
Recursion in Erlang can be implemented by having a function call itself. For example, a factorial function can be implemented as 'factorial(0) -> 1; factorial(N) -> N * factorial(N-1).'
Describe the difference between synchronous and asynchronous message passing in Erlang.
In Erlang, synchronous message passing means the sender waits for the receiver to process the message and send a response. Asynchronous message passing means the sender sends a message and continues its own processing without waiting for a response.
What is pattern matching in Erlang?
Pattern matching in Erlang is a powerful feature that allows a function to execute different code paths depending on the shape and value of the input parameters. It's used extensively in function clauses, case expressions, and for assignment of variables.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Erlang engineer at this point.

At this point, a skilled Erlang engineer should demonstrate strong problem-solving abilities, proficiency in Erlang programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Erlang.

What does this simple Erlang code do?
-module(hello).
-export([start/0]).
start() -> io:fwrite("Hello, World!\n").
This code defines a module named 'hello' and exports a function named 'start' with zero arguments. The 'start' function prints 'Hello, World!' to the console.
What will be the output of this Erlang code?
-module(test).
-export([start/0]).
start() -> io:fwrite("~p~n", [1+2*3]).
The output of this code will be '7'. The 'start' function prints the result of the expression '1+2*3', which is '7' due to operator precedence.
What does this Erlang code do with a list?
-module(test).
-export([sum/1]).
sum(List) -> lists:foldl(fun(X, Sum) -> X + Sum end, 0, List).
This code defines a function 'sum' that takes a list as an argument and returns the sum of all elements in the list. It uses the 'foldl' function from the 'lists' module to accumulate the sum.
What does this Erlang code do related to concurrency?
-module(test).
-export([start/0]).
start() -> spawn(fun() -> io:fwrite("Hello, World!\n") end).
This code spawns a new process that executes the anonymous function, which prints 'Hello, World!' to the console. The 'spawn' function is used for creating new concurrent processes in Erlang.

Wrap-up questions

Final candidate for Erlang Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Erlang application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you perform hot code swapping in Erlang?
Hot code swapping in Erlang can be performed using the module system. By loading a new version of a module into a running system, the next call to any of its functions will use the new code.
What are the limitations of Erlang?
Some limitations of Erlang include lack of support for imperative programming, difficulty in interfacing with hardware and other low-level operations, and a smaller community and ecosystem compared to other languages.
How would you optimize performance in Erlang?
Performance in Erlang can be optimized by using built-in profiling tools to identify bottlenecks, optimizing data structures, avoiding unnecessary list operations, and making use of Erlang's concurrency features.

Erlang application related

Product Perfect's Erlang development capabilities

Beyond hiring for your Erlang engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Erlang projects, and can engage in multiple capacities.