Hiring guide for Aurelia Engineers

Aurelia Developer Hiring Guide

Aurelia is a modern, open-source JavaScript framework for web, mobile and desktop application development. It was introduced in 2015 by Rob Eisenberg, who was a part of the AngularJS development team. Aurelia stands out due to its simplicity, forward-thinking standards compliance and strong emphasis on web standards. It supports ES5, ES2015, ES2016 and many other types of compilation targets. The information about Aurelia can be found on its official website (aurelia.io) and various tech blogs such as SitePoint or InfoWorld.

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

First 20 minutes

General Aurelia app knowledge and experience

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

How would you install Aurelia?
You can install Aurelia using npm or yarn. For npm, use the command 'npm install aurelia-framework'. For yarn, use 'yarn add aurelia-framework'.
What are some of the benefits of using Aurelia?
Aurelia offers a range of benefits including its simplicity, extensibility, and adherence to modern web standards. It also provides a clean and intuitive syntax, and a strong focus on web components.
Describe the difference between one-way and two-way data binding in Aurelia.
One-way data binding in Aurelia allows changes in the model to update the view but not vice versa. On the other hand, two-way data binding allows changes in the model to update the view and changes in the view to update the model.
How would you create a custom attribute in Aurelia?
To create a custom attribute in Aurelia, you would need to use the @customAttribute decorator and export a class with the same name as your attribute. The class should have a method called 'valueChanged' that will be called whenever the attribute's value changes.
What are the lifecycle hooks in Aurelia?
The lifecycle hooks in Aurelia include canActivate, activate, canDeactivate, deactivate, bind, unbind, attached, and detached.
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 Aurelia's core concepts?
Has the candidate demonstrated experience with JavaScript and TypeScript?
Is the candidate familiar with modern web development practices and tools?
Can the candidate solve problems and debug issues in Aurelia?

Next 20 minutes

Specific Aurelia 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 routing in Aurelia?
Routing in Aurelia is handled by the aurelia-router module. You can define routes in the configureRouter method of your ViewModel. Each route has a name, a route pattern, and a moduleId that points to the ViewModel for that route.
What is the purpose of the Aurelia CLI?
The Aurelia CLI is a command line interface tool that helps with creating, developing, and testing Aurelia applications. It can generate project scaffolding, manage dependencies, run tests, and bundle your application for deployment.
How would you implement dependency injection in Aurelia?
Dependency injection in Aurelia can be implemented using the @inject decorator. You can use it to annotate a class with the dependencies that it requires, and Aurelia will automatically provide them when creating an instance of the class.
Describe the difference between 'attached' and 'bind' lifecycle hooks in Aurelia.
The 'bind' lifecycle hook in Aurelia is called when the databinding engine binds the view to the view-model. The 'attached' lifecycle hook is called after the view is attached to the DOM.
What are the different ways to bind data in Aurelia?
In Aurelia, you can bind data using one-way binding, two-way binding, and event-to-method binding. One-way binding is used to bind data from the model to the view, two-way binding is used to bind data between the model and the view, and event-to-method binding is used to bind DOM events to methods in the view-model.
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 Aurelia engineer at this point.

At this point, a skilled Aurelia engineer should demonstrate strong problem-solving abilities, proficiency in Aurelia 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 Aurelia.

What does the following Aurelia code do?
export class App {
  message = 'Hello World!';
This code defines a class named 'App' with a single property 'message' that is initialized with the string 'Hello World!'. This is a simple Aurelia component.
What will be the output of the following Aurelia code?
This code will output the value of the 'message' property inside an h1 tag. If 'message' is not defined in the corresponding ViewModel, it will not output anything.
What does the following Aurelia code do?
export class App {
  items = ['item1', 'item2', 'item3'];
This code defines a class named 'App' with a single property 'items' that is initialized with an array of strings. This array can be used for data binding in the view.
What does the following Aurelia code do?
import {TaskQueue} from 'aurelia-framework';

export class App {
  static inject = [TaskQueue];

  constructor(taskQueue) {
    this.taskQueue = taskQueue;
This code imports the 'TaskQueue' from 'aurelia-framework' and injects it into the 'App' class. The 'TaskQueue' can be used to queue tasks that will be executed in the next JavaScript event loop.

Wrap-up questions

Final candidate for Aurelia 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 Aurelia application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you handle form validation in Aurelia?
Form validation in Aurelia can be handled using the aurelia-validation plugin. This plugin allows you to define validation rules for your model and validate user input against these rules.
What is the role of the 'canActivate' lifecycle hook in Aurelia?
The 'canActivate' lifecycle hook in Aurelia is used to determine whether a route can be activated or not. If the canActivate method returns false or a Promise that resolves to false, the navigation will be cancelled.
How would you implement internationalization (i18n) in an Aurelia application?
Internationalization in an Aurelia application can be implemented using the aurelia-i18n plugin. This plugin provides a set of APIs and conventions to translate your application's text into different languages.

Aurelia application related

Product Perfect's Aurelia development capabilities

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