If you're reading this, it means you're interested at joining Loft. Or you might be at least curious about it, right? That's amazing!
First of all, I have good news for you. We're hiring! And we'll probably keep hiring for a long time after I finish writing this post. 😉 We can't keep growing the way we do 🦄 if we stop hiring great engineers.
We believe that the selection process works both ways: it's a time we spend together so Loft can make sure you're the right person for us, but also for you to make sure that Loft is the place you want to be in.
To have a great match, both for you and for us, we have a thorough selection process. In this post I'll give you a quick overview of how it works and what you should expect if you want to be a Lofter.
Overall, the process is the same for all roles in the Software Engineering career. Depending on your specialization (e.g. backend, frontend, full stack…) there will be some differences here and there in some of the interviews, but the assessed points will be the same.
Even for people in the Management track, the process is pretty much the same, with hands-on technical exercises as well. We want people managers with great technical knowledge to help our engineers and our company grow faster.
Step 1: Applying
Applying to a job opening is easy as pie, simply go to this link right here, choose whatever floats your boat, and click the orange APPLY button.
After applying, we'll reach out to you as soon as possible. 😄
Quick note: maybe you landed here in this post after already entering the process somehow — maybe one of our recruiters or someone in our leadership team contacted you via LinkedIn or WhatsApp. If that's the case, don't worry, you're already applied and can safely skip to Step 2.
Step 2: Online assessment
You'll receive an e-mail inviting you to an online challenge in the Codility platform — an online coding environment. It's like the IDE you know and love, but inside the browser.
In this challenge, you'll have from 45 to 120 minutes to solve 2-3 coding problems in varying difficulties. The time and the quantity of questions vary because we're always testing different formats and different questions. However, "more time" generally means "more complicated" questions.
After clicking "Start" in the platform, the clock starts ticking! ⏰ If the time is over, the code will be submitted as it is.
Make sure you reserve some time in your schedule, you're in a quiet place, you have good connection and enough battery to make every second count! Visiting the restroom before starting the clock is also not a bad idea. 😂
- All you need is a browser. You don't need any development environment in your computer.
- You can choose any language you want, from the Codility supported languages ("Fundamental Tasks" section). Pick the language you're most familiar with, we won't use the language as a selection criteria.
- Read all the questions first to plan how much time you'll spend on each.
- Codility will show you some test cases to validate your code, but it won't show many others. These hidden test cases will impact your score, so make sure your code covers corner cases.
- Performance counts. Make sure your code performs good i.e. it has a good runtime complexity.
After completing the test, we'll reach out to you as soon as possible with your feedback. If you passed we'll also schedule the next step of the process, the In-person interviews.
Step 3: In-person interviews
In this step, we'll schedule with you some remote interviews, using Zoom. At the early stages of the company (about a year ago 😆) we used to do all these steps in-person but, now, mostly due to the social distancing caused by COVID-19, we're doing everything remotely.
Those interviews are:
- 2 chats with our Leadership and People team to assess your background, your soft-skills and cultural fit with us. These chats take from 30 to 60 minutes each.
- 3 technical whiteboards, taking from 45 to 60 minutes each.
Yeah, I know, that’s a lot; but I promise you’ll also have fun and meet awesome people during the process. 😄
Typically, you'll start with the technical interviews in one day and do the other interviews in another, but that’s not always the case. There are candidates who split the interviews in more days or start with the soft-skills interviews. That depends in the availability of everyone involved.
At the end of each of these interviews, you'll have 5 to 10 minutes to either take a break, grab a snack, go to the restroom, have some coffee; or to ask the interviewers about Loft or about themselves.
Some candidates feel awkward to not ask questions during break time, because they think they'll be seen as "not interested enough in Loft" but don't worry about that, use your break time as it fits you, we won't use "if you asked questions or not" as a selection criteria .
There are also candidates who don’t feel comfortable in asking the same questions to different people for the same reason, thinking they already "spent" a question with a different interviewer, but asking the same thing to different people might even be good to gather different points of view on the same subject!
Sometimes the interview will be conducted by a single person and sometimes by two people. The interviews with two people aren't harder (or easier 😝) than the ones conducted by a single person, it's simply a way for us to train other Lofters on how to conduct interviews, in a process called interview shadowing.
Cultural fit interviews
In this interviews we'll ask about yourself and your work experiences. We'll often ask questions in the "Tell me about a time when you did _________" format.
Bring real-life, specific and timely examples, not "generic" ones.
For example, suppose you remember a time where your manager, at your previous company, praised you for a project you delivered:
Tell it like this: "There was this time at company X, last year, where my manager told me I was doing a good job, because project Y that I delivered increased sales by 3% monthly". The situation is clear, your role in it is clear and the outcome is clear.
Don't tell it like this: "I always get good feedbacks from my managers, like in the latest projects my team delivered". This raises questions such as: how often is "always"? Which "managers" are those? Why are you receiving a good feedback? Which part of the delivery was owned by you?
All technical interviews follow a "whiteboard" format, meaning that you'll have to write code, draft ideas and design systems in a… well… whiteboard.
The problems will start small and then grow up in complexity and difficulty as you solve them. Make sure to ask clarifying questions and to be aware of runtime and space complexity trade-offs; responsibility between components trade-offs and architectural trade-offs.
Whiteboard #1: Coding and Algorithms
In this interview you'll be given a problem to be solved using code. The scope of it will be a function/method, very much like the problems you solved in the online assessment step.
One of the criteria we’ll use to assess your code is algorithmic analysis (e.g. runtime and space complexities, Big-O notation) and usage of data structures, so make sure you review those!
Again, use the language you're most familiar with, you won't be assessed by your choice of language, but you might be assessed in how good you know the chosen language.
Whiteboard #2: Code/Component Design
In this interview you’ll be given a problem to be solved using low-level components such as classes and functional namespaces. The scope of it will be an application/service.
You might be asked to write some code to demonstrate some of the features of your application, but not in the same level of detail you did in the Coding and Algorithms interview.
Whiteboard #3: Architecture
This interview will be a bit different depending on your specialization (e.g. Backend, Frontend, SRE, Data Engineer…).
Overall, in this interview you’ll be given an entire business situation to be solved using high-level components such as services and databases for Backend and pages, style and components for Frontend. The scope of it will be an entire business scenario. You'll be expected to evaluate and explain trade-offs and choose between different solutions.
When interviewing remotely, we’ll send you a link to an online tool depending on the interview.
For code, we normally use Codility or a simple Google Docs document. Use the tool in your favor. If it gives you syntax highlighting and compilation capabilities, use that to your advantage, such as using "print" statements to help you debug. On the other hand, if the tool doesn't give you that, you can expect more room to make mistakes, e.g., if you don't remember whether the method is called "length", "lenght" or "size", that's fine.
For the other interviews, we'll probably use some drawing tool, such as Miro or Diagrams.net. Don’t worry about doing a “pretty” drawing and don’t spend too much time drawing the perfect arrows and choosing the perfect graphical representation for your component. Making your point clear is important, but that will be achieved more by talking and explaining and less by “drawing the right 'database shape' instead of a 'square'”.
- If you're interviewing in-person: Remember those years back in school where you had to write with a pen, not a keyboard? 🤣 The whiteboard interviews require you to write code by hand. Prepare for that, write some code by hand when studying coding questions.
- Come up with test cases for the given problems. When walking through your code, walk through the actual code that's written, not the one "in your mind". It's easy to mistakingly read/assume a loop as "i < size", even if it's written "i ≤ size".
- Think out loudly. Interviews are conversations between you and the interviewers and sometimes the process is even more important than the end result. That said, it's always good to let the interviewers know what you're thinking. Describing possible solutions, possible ways of finding a solution, or even describing why you're stuck gives the interviewer a good overview on your thinking process and makes it easier for the interviewer to help you get unstuck.
- You can also check this post with additional tips 😄
After completing all interviews, we'll meet together to compare notes and discuss how well you went in the process.
Typically, in the next week after interviewing, you'll receive an Offer letter if you passed the interviews. 🎉
If you didn't pass, that's not too bad also, you'll receive a feedback letter and you can try again after 3 months. 😉
Step 4: Welcome 🥳
Congratulations, your hard work has paid off! 👏
For an overview of how your first weeks might be, take a look at this post: 30 Dias de Loft (in Portuguese).
Q: “Hey, the process seems really nice! But I have some questions…”
All right! Let me see if I can help you.
Q: “What’s the difference between a Tech Lead, a Software Engineering Lead and a Software Engineering Manager?”
- Tech Lead is the person who leads a Squad technically, defining the technical strategy of it, writing code and promoting engineering quality among other Squads. This person doesn't do people management.
- Software Engineering Lead is the person who manages one or two Squads. This person focuses in people management at a Squad-level. It's important to say that coding isn't part of this person daily job, even though we want leads who can code really well, as they'll have to mentor their teams and review or write code sporadically.
- Software Engineering Manager is the person who manages Software Engineering Leads. This person focuses in people management at a Tribe-level.
No. You can use whatever language you prefer during the interviewing process. After you join us, you can learn here whatever language your team uses.
Q: “Can I work 100% remote?”
Yes! You can work 100% remote from your home or anywhere
Q: "I have another question which isn't covered in this FAQ. Who do I talk to?"
Feel free to reach us out:
- Bruno Assis (Engineering Lead)
- Marcela Sobrinho (Engineering Manager)
- David Robert (Engineering Manager)
- Guilherme Cirne (Engineering Manager)
Or any other Lofter, really! 😄