27.3.2023

How to hire Ruby on Rails developers (and 12 key questions for a job interview)

Staff Augmentation

Keywords:

Staff Augmentation, Outsourcing, Advices, Managed Services, Consulting, Executive Search, Ecommerce

Whenever we want to hire a Ruby on Rails developer for our team, we need to understand certain key concepts regarding the position this person will fill and the responsibilities they will have.

If the developer that is going to be hired will be in charge of writing the APIs, the architecture that will be used has to be very clear for that person, for instance, RESTful, which is the most used, demands that the candidate knows about HTTP verbs, also, about status codes, headers and client-server architecture. 

Developer’s best practices 

Some things that should not be underestimated are the developer’s best practices, that he implements when it comes to writing the code in the back-end. We can point out some such as: 

  •  API versioning to structure endpoints correctly.
  • Security using techniques such as data input validation or implementing CORS.
  • Authentication through any method like OAuth or JSON Web Tokens.

Interview questions

The questions to interview a candidate for the Ruby on Rails developer position can be classified by individual knowledge about the Ruby language and others focused on the Rails framework. Let's take a look: 

Ruby language:

  • What is the difference between a class and a module?
  • What are the three levels to access control to methods for classes and what do they mean?
  • What does “self” mean?
  • Explain what singleton methods are. What is Eigenclass in Ruby?
  • What is the difference between false and nil in Ruby?

Rails Framework 

  • What is Asset Pipeline?
  • Explain the “Active record” pattern.
  • What is a Polymorphic Association in Rails?
  • Explain the difference between optimistic and pessimistic locking in Rails?

Security

  • What does CSRF consist of? How does Rails protect an application against this security failure?
  • How should we store insecure data such as passwords?
  • Why do we need to use HTTPS instead of HTTP?

Take-home tests as a complement to the interview

Home tests are the best way to see how the developer is able to implement solutions in Ruby On Rails. The idea is to assign him a task and describe the requirements  that the application must fulfill.

An example of an application to do at home can be:

There’s the need of an application that allows us to manage the productivity of a company’s employees by managing the task flow in three boards that will represent the three states: Ideas, in progress, finished.

Objective: To build an API that allows the front-end developers to meet the visual specifications. 

Functional requirements 

After describing the objective, it is essential to define which are the functionalities that the API must have, this will give us a perspective about the experience that he has and will allow us to determine the amount of time someone can take to deliver a small application.

The idea is that most of the home projects have a maximum duration of one week, since many candidates are having other interviews and can get to be exhausting for them to deliver several projects at a time. 

Let's see the functional requirements for this case:

  • I want to be able to log in and sign in with my email.
  • I want to be able to add projects.
  • I want to be able to add, update and delete tasks from the projects.
  • I want to be able to change the tasks state, based on the three states defined before: ideas, in progress, finished.

Technical requirements 

  • An API developed in Ruby On Rails, in an AWS production environment, has to be delivered .
  • It must have authentication through JWT.

Lastly, the developer should deliver a repository, whether in Github or Bitbucker, and one of the team’s engineers or technical interviewers should be able to evaluate things like the code’s quality in terms of variables’ name definition, project structure, usage of designing patterns and security practices implemented in the API.