Founded as a transparent solution to expensive cross-border spending, Revolut currently helps make 400 million transactions a month. Its services were initially limited to the UK, but Revolut now has expanded to 37 countries, including the US. Revolut also has grown its catalog to cover stock exchanges and cryptocurrency trades.
As an app-based business, Revolut significantly depends on software engineers like yourself to elevate the product experience, develop backend services, and establish server-side integrations. So, the interview for the software engineer role will be a bit detailed and thorough, requiring you to have a degree of understanding of several programming languages, algorithms, and frameworks.
In this article, we’ll delve deeper into the interview process for the Revolut software engineer role and discuss a few recurring behavioral and technical questions.
As a software engineer candidate, you’ll be thoroughly vetted to assess your technical prowess and alignment with Revolut’s culture. Depending on the category of software engineer role (Android, backend, data, Java, etc.), expect a multi-stage interview process with an assortment of phone and on-site rounds. Here is how it typically goes:
Revolut has embraced a streamlined approach to job applications with a single-page online form. Apart from leaving contact details and uploading your CV, you’ll need to answer a few surface-level questions about the specific software engineer job role. If you haven’t been approached by a Revolut recruiter, you can find the job you want at Revolut Career Portal.
Consider going the extra mile to upload an updated and tailored CV to increase your chance of getting shortlisted for the primary interview rounds.
Someone from the Revolut hiring team will contact you to verify the details of your CV and ask a few pre-defined questions regarding your experience in the industry and in specific roles. Hiring managers often bypass this step and make direct contact to accelerate the process. If this happens, expect behavioral questions and a discussion about your technical background.
Next, you’ll move on to the technical problem-solving stage, engaging in live coding challenges, take-home assignments, and technical discussions. Depending on the job role, specific programming language-related questions will also be asked. Be prepared to face multiple Revolut software engineer interviewers.
After successfully passing the previous interview stages, you will be invited to your nearest Revolut assessment center. During this session, you’ll meet the hiring manager and other key stakeholders for multiple one-on-one interviews and a group assessment.
This is potentially the final stage of the Revolut software engineer interview. You’ll meet senior engineers and team directors to discuss your responsibilities and answer behavioral questions. Following that, you’ll receive a call or email confirming your employment details.
Revolut software engineer interviews usually revolve around SQL, Python, and algorithm problems, followed by behavioral questions. Here are a few of them discussed with ideal answers:
This question will assess your ability to manage time effectively and stay organized under pressure. These are essential skills for a software engineer at Revolut, where development is fast-paced.
How to Answer
Mention how you prioritize tasks based on their urgency and impact on project milestones. Discuss tools like task trackers or project management software to track deadlines and progress.
Example
“I prioritize multiple deadlines by first assessing the urgency and importance of each task. Then, I break down each task into smaller, manageable subtasks and allot time accordingly. Using tools like Trello or Jira helps me stay organized by visualizing deadlines and tracking progress.”
Revolut may ask this question to gauge your ability to handle conflicts diplomatically, crucial in a team environment.
How to Answer
Discuss how you approach conflicts calmly and objectively, finding common ground and understanding the perspectives of others, even if you don’t particularly like them.
Example
“In resolving conflicts, I maintain a professional demeanor and address the issue objectively. I work to understand the other person’s perspective and find common ground to reach a resolution, even when personal feelings are involved.”
This question evaluates your communication and collaboration skills, essential for fostering a productive team environment at Revolut.
How to Answer
Mention your listening skills and how you use them to address your colleagues’ concerns and perspectives. Let the interviewer know you encourage open dialogue and collaboration to find a mutually acceptable solution.
Example
“When my colleagues disagreed with me, I initiated a discussion to understand their concerns. By listening and considering their perspectives, we found common ground and adjusted to address their concerns.”
As a software engineer candidate at Revolut, you may be asked this question to evaluate your problem-solving skills and resilience, crucial for tackling complex projects.
How to Answer
Explain how you broke down the technical challenge into smaller, manageable components. Mention research and resources like documentation, forums, or talk with colleagues. Discuss how you iterated and tested potential solutions until the challenge was resolved, keeping stakeholders informed of progress.
Example
“In a recent project, I faced a technical challenge with optimizing database queries for performance. I broke down the problem, researched optimization techniques, and consulted with senior engineers. Through experimentation and testing, we implemented query optimizations that significantly improved performance and met project requirements.”
This question checks your communication skills and ability to convey complex technical concepts clearly and understandably for collaborating with non-technical stakeholders at Revolut as a software engineer.
How to Answer
Mention tailoring your explanation to the audience’s level of understanding, avoiding jargon and technical details. Discuss how you use analogies, visuals, or real-world examples to illustrate complex concepts.
Example
“When explaining technical concepts to non-technical stakeholders, I focus on simplicity and relevance. For example, when describing machine learning algorithms, I use everyday analogies like how recommendation systems work like personalized movie recommendations on streaming platforms, which resonates with non-technical audiences.”
Symbols | Values |
---|---|
I | 1 |
IV | 4 |
V | 5 |
IX | 9 |
X | 10 |
XL | 40 |
L | 50 |
XC | 90 |
C | 100 |
CD | 400 |
D | 500 |
CM | 900 |
M | 1000 |
Input:
nums = [1, 4, 179]
Output:
["I", "IV", "CLXXIX"]
Your interviewer for the software engineer role may ask this question to evaluate your ability to manipulate data structures and implement algorithms.
How to Answer
Create a function that iterates through the given integer list. Inside the loop, you can use a dictionary to map integer values to their corresponding Roman numeral symbols. Then, implement logic to convert each integer into its Roman numeral representation based on the provided table.
Example
roman_symbols_values = {
"M": 1000,
"CM": 900,
"D": 500,
"CD": 400,
"C": 100,
"XC": 90,
"L": 50,
"XL": 40,
"X": 10,
"IX": 9,
"V": 5,
"IV": 4,
"I": 1,
}
def integer_to_roman(n):
roman_numeral = ""
for symbol, value in roman_symbols_values.items():
while n >= value:
roman_numeral += symbol
n -= value
return roman_numeral
def convert_integers_to_romans(nums):
roman_numerals = [integer_to_roman(num) for num in nums]
return roman_numerals
normalize_grades
to normalize the values of the grades to a linear scale between 0
and 1
.Example:
Input:
grades = [
('Jason', 94),
('Tessa', 80),
('Carla', 38),
('Matt', 43),
('Jessica', 100)
]
Output:
def normalize_grades(grades) - > [
('Jason', 0.9),
('Tessa', 0.68),
('Carla', 0.0),
('Matt', 0.08),
('Jessica', 1.0)
]
Your ability to manipulate data and perform mathematical operations will be assessed through this question by your Revolut interviewer.
How to Answer
Determine the minimum and maximum grades in the input list. Then, normalize each grade using the formula: (grade - min_grade) / (max_grade - min_grade). Finally, return the list of normalized grades.
Example
def normalize_grades(grades):
min_grade = min(grade for _, grade in grades)
max_grade = max(grade for _, grade in grades)
normalized_grades = [(name, (grade - min_grade) / (max_grade - min_grade)) for name, grade in grades]
return normalized_grades
# Test case
grades = [('Jason', 94), ('Tessa', 80), ('Carla', 38), ('Matt', 43), ('Jessica', 100)]
print(normalize_grades(grades))
# Output: [('Jason', 0.9), ('Tessa', 0.68), ('Carla', 0.0), ('Matt', 0.08), ('Jessica', 1.0)]
rotate_matrix
to rotate the array 90 degrees clockwise.Example:
Input:
import numpy as np
array = np.array( [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8], [5, 6, 7, 8, 9]] )
array
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
2 | 3 | 4 | 5 | 6 |
3 | 4 | 5 | 6 | 7 |
4 | 5 | 6 | 7 | 8 |
5 | 6 | 7 | 8 | 9 |
Output:
5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|
6 | 5 | 4 | 3 | 2 |
7 | 6 | 5 | 4 | 3 |
8 | 7 | 6 | 5 | 4 |
9 | 8 | 7 | 6 | 5 |
This question assesses your ability to manipulate matrices and implement algorithms as a software engineer candidate at Revolut.
How to Answer
The approach involves transposing the matrix and then reversing the order of rows to achieve a 90-degree clockwise rotation.
Example
import numpy as np
def rotate_matrix(array):
transposed = np.transpose(array)
rotated = [list(row[::-1]) for row in transposed]
return rotated
# Test case
array = np.array([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8], [5, 6, 7, 8, 9]])
print(rotate_matrix(array))
# Output:
# [[5, 4, 3, 2, 1],
# [6, 5, 4, 3, 2],
# [7, 6, 5, 4, 3],
# [8, 7, 6, 5, 4],
# [9, 8, 7, 6, 5]]
Your technical interviewer at Revolut will assess your understanding of probability distributions and your ability to use relevant libraries.
How to Answer
Your approach would be to utilize libraries like NumPy to generate samples from a standard normal distribution.
Example
import numpy as np
def get_normal_distribution_sample(size):
return np.random.standard_normal(size)
# Test case
sample = get_normal_distribution_sample(10)
print(sample)
numbers
. Write a function to return any subset of numbers
where the elements sum
to zero
and that does not contain the number 0
. If there are no combinations of elements that sum to zero, return an empty list.Example 1:
Input:
numbers = [1,-2,6,7,1]
Output:
def zero_sum(numbers) -> [1,-2,1] # only possible combination
Example 2:
Input:
numbers = [0,0,1,3,6,-4,-1]
Output:
def zero_sum(numbers) -> [1,3,-4]
or
def zero_sum(numbers) -> [1,-1]
or any other subset that sums to zero and doesn’t include 0
.
This question assesses your problem-solving skills and ability to manipulate lists efficiently, which are critical as a software engineer at Revolut.
How to Answer
Iterate through subsets of the given list and check if the sum of elements in each subset equals zero. Return any subset that meets the criteria.
Example
def zero_sum(numbers):
numbers = sorted(numbers) # not needed but makes the function more efficient
result = []
def recursive_scan(index, current_sum, current_numbers):
nonlocal result, numbers
if current_sum == 0 and len(current_numbers) != 0:
result = current_numbers
return
elif index >= len(numbers) or current_sum > 0 or len(result) != 0:
return
recursive_scan(index + 1, current_sum, current_numbers)
if numbers[index] != 0:
recursive_scan(index + 1, current_sum +
numbers[index], current_numbers + [numbers[index]])
recursive_scan(0, 0, [])
return result
Note: A page can sponsor multiple postal codes.
Example:
Input:
page_sponsorships
table
Column | Type |
---|---|
page_id | INTEGER |
postal_code | VARCHAR |
price | FLOAT |
recommendations
table
Column | Type |
---|---|
user_id | INTEGER |
page_id | INTEGER |
users
table
Column | Type |
---|---|
id | INTEGER |
postal_code | VARCHAR |
Output:
Column | Type |
---|---|
page | INTEGER |
postal_code | VARCHAR |
percentage | FLOAT |
Revolut may ask this question to evaluate your SQL proficiency, as understanding user behavior and demographics is crucial for optimizing product features and marketing strategies.
How to Answer
You’ll need to join the page_sponsorships
, recommendations
, and users
tables on the appropriate keys (page_id
and user_id
). Then, group by page and postal code, calculate the count of users in the same postal code who recommended the page and divide it by the total count of users who recommended the page to get the percentage.
Example
SELECT
p.page_id AS page,
ps.postal_code,
COUNT(r.user_id) / COUNT(DISTINCT r.user_id) AS percentage
FROM
page_sponsorships ps
JOIN
recommendations r ON ps.page_id = r.page_id
JOIN
users u ON r.user_id = u.id AND ps.postal_code = u.postal_code
GROUP BY
p.page_id, ps.postal_code;
Note: Assume bin buckets class intervals of one.
Note: Comments that were created outside of January 2020 should be counted in a “0” bucket
Example:
Input:
users
table
Columns | Type |
---|---|
id | INTEGER |
name | VARCHAR |
created_at | DATETIME |
neighborhood_id | INTEGER |
VARCHAR |
comments
table
Columns | Type |
---|---|
user_id | INTEGER |
body | VARCHAR |
created_at | DATETIME |
Output:
Column | Type |
---|---|
comment_count | INTEGER |
frequency | INTEGER |
This question evaluates your SQL skills, as a software engineer, in data aggregation and manipulation, specifically in generating histograms.
How to Answer
You’ll need to use the users
and comments
tables and group comments by user, counting the number of comments per user in the month of January 2020. Then, generate a histogram by counting the frequency of users in each bin bucket.
Example
SELECT
COUNT(c.user_id) AS comment_count,
COUNT(*) AS frequency
FROM
comments c
LEFT JOIN
users u ON c.user_id = u.id
WHERE
YEAR(c.created_at) = 2020 AND MONTH(c.created_at) = 1
GROUP BY
c.user_id
ORDER BY
comment_count;
Your interviewer for the software engineer role at Revolut will check your understanding of Python generators and their practical application in memory optimization in backend services.
How to Answer
Explain the concept of generators and how they differ from regular functions, and provide a scenario in a backend service where memory optimization is critical, such as processing large datasets or streaming data.
Example
“Python generators are functions that allow you to generate a sequence of values lazily, on the fly, rather than storing them all in memory at once. They are defined using the yield keyword instead of return. For example, consider a scenario in which Revolut’s backend service needs to process a large number of financial transactions stored in a database. Instead of fetching all transactions into memory at once, which could lead to memory exhaustion, we can use a generator function to fetch and process transactions one by one. This way, we can optimize memory usage by only loading a small portion of the data into memory at any given time, making it suitable for handling large datasets efficiently.”
Technical interviewers at Revolut may ask this question to evaluate your ability to write robust and reliable code that can handle errors gracefully and provide sufficient logging for traceability and debugging.
How to Answer
Explain the importance of error handling and logging in financial transaction processing systems. Discuss techniques such as try-except blocks for handling exceptions and Python’s logging module for logging informative messages. Provide examples of implementing error handling and logging in Python code to process financial transactions.
Example
“In Python code used for processing financial transactions at Revolut, implementing robust error handling and logging mechanisms is crucial for ensuring reliability and traceability. I would use try-except blocks to handle exceptions that may arise during transaction processing, ensuring that the system gracefully handles errors without crashing. Additionally, I would use Python’s logging module to log informative messages, including transaction details, error messages, and timestamps. By configuring different log levels (e.g., DEBUG, INFO, ERROR), we can control the verbosity of logs and ensure the needed information is captured for auditing and debugging. Overall, combining effective error handling and logging practices would help enhance the reliability and traceability of the Python code used in processing financial transactions at Revolut.”
As a software engineer candidate at Revolut, your answer will demonstrate your ability to design robust and fault-tolerant Python code for interacting with external APIs, considering factors like rate limits and retries.
How to Answer
Explain the importance of handling API rate limits and retries to prevent service disruptions and ensure a seamless user experience. Discuss strategies such as rate limit monitoring, backoff mechanisms, and exponential retry strategies. Provide examples of implementing these strategies in Python code to handle API rate limits and retries effectively.
Example
“In designing Python code to interact with external APIs for Revolut’s mobile app backend, it’s essential to handle API rate limits and retries effectively to maintain a smooth user experience. One approach is to implement rate limit monitoring, where we track the rate limits imposed by the API provider and adjust our request rate accordingly to avoid exceeding the limits. Additionally, we can incorporate retry mechanisms with exponential backoff strategies to handle temporary failures or timeouts gracefully.”
Your understanding of database consistency models and their implications for designing databases in a financial institution setting will be assessed through this question.
How to Answer
Explain the concepts of ACID (atomicity, consistency, isolation, durability) and BASE (basically available, soft state, eventually consistent) consistency models in database systems. Discuss the differences between these models, highlighting their implications for database design, transaction processing, and data consistency.
Example
“The ACID (atomicity, consistency, isolation, durability) and BASE (basically available, soft state, eventually consistent) consistency models represent two different approaches to ensuring data consistency and reliability in database systems. ACID emphasizes strong consistency guarantees, where transactions are atomic, consistent, isolated, and durable. In contrast, BASE prioritizes availability and partition tolerance over strong consistency, allowing for eventual consistency and trading off immediate consistency for improved system scalability and fault tolerance. In Revolut, where data integrity is paramount, ACID consistency may be preferred for critical transactional systems, and for non-transactional data or systems requiring high availability and scalability, BASE consistency may be more suitable.”
This question evaluates your SQL skills and ability to interpret financial data to derive meaningful insight to help implement budgeting features and provide financial insights to Revolut users.
How to Answer
Describe how you would structure SQL queries to retrieve and aggregate transaction data for a user’s account, focusing on transactions within a specific month. Discuss techniques such as filtering by date range, grouping transactions by category or merchant, and calculating total spending.
Example
“To calculate and present monthly spending trends for a user’s account in Revolut’s budgeting feature, we can use SQL queries to aggregate transaction data for the desired month. First, we would filter transactions by the user’s account ID and the transaction date falling within the target month. We can then group transactions by category or merchant and calculate the total spending for each category or merchant. For example, to calculate total spending for January 2024:
SELECT
category,
SUM(amount) AS total_spending
FROM
transactions
WHERE
user_id = [user_id]
AND transaction_date >= '2024-01-01'
AND transaction_date < '2024-02-01'
GROUP BY
category;
This query retrieves transaction data for the specified user’s account for January 2024, groups transactions by category, and calculates the total spending for each category. Similar queries can be used to calculate spending trends over multiple months or to compare with previous months to track changes in spending.”
The interviewer at Revolut may ask this question to assess your problem-solving skills and knowledge of algorithms for optimizing currency conversion.
How to Answer
Outline an algorithmic approach to finding the best conversion rate for a given currency pair in real time. Discuss factors to consider, such as current exchange rates, transaction fees, and liquidity of currency pairs. Consider approaches like direct conversion, triangular arbitrage, or querying multiple liquidity providers.
Example
“To optimize currency conversion for users in real time, we can implement an algorithmic approach that considers factors such as exchange rates, fees, and liquidity. One approach is to query multiple liquidity providers and compare their conversion rates for the given currency pair. We can then factor in transaction fees and any additional costs associated with the conversion. Additionally, we can consider triangular arbitrage opportunities to leverage cross-currency rates and minimize conversion costs. The algorithm should dynamically adjust based on market conditions and user preferences to provide the best conversion rate while minimizing fees.”
Revolut may ask this question in the software engineer interview to assess your ability to compare algorithms based on time and space requirements.
How to Answer
Define time complexity as the measure of the time an algorithm takes to complete as a function of the input size. Explain space complexity as the measure of the memory space required by an algorithm as a function of the input size. Discuss Big O notation and its significance in expressing the upper bound of an algorithm’s time and space complexity.
Example
“Time complexity refers to the measure of the time an algorithm takes to complete its execution as a function of the input size. It helps us understand how the runtime of an algorithm grows as the size of the input increases. Space complexity, on the other hand, refers to the measure of memory space required by an algorithm as a function of the input size. It helps us see how much memory an algorithm consumes based on the input size. Both time and space complexity are commonly expressed using Big O notation, which provides an upper bound on the growth rate of an algorithm’s runtime and memory usage. By assessing the time and space complexity of algorithms, we can compare their efficiency and choose the most suitable algorithm for a problem based on its performance characteristics.”
Your understanding of dynamic programming and its application to solving complex problems will be assessed through this question at the software engineer interview at Revolut.
How to Answer
Define dynamic programming as a method for solving complex problems by breaking them down into simpler subproblems and storing their solutions to avoid redundant computation.
Example
“Dynamic programming is a problem-solving technique that involves breaking down complex problems into simpler subproblems and storing their solutions to avoid redundant computation. One classic example of a problem that can be solved using dynamic programming is the Fibonacci sequence. Instead of recursively computing Fibonacci numbers, which leads to redundant computations, we can use dynamic programming to store the solutions to smaller subproblems and build up to larger Fibonacci numbers efficiently.”
This question could be asked in a Revolut Software Engineer interview to assess your problem-solving skills, particularly your ability to work with arrays and implement efficient algorithms.
How to Answer
In Python, we can solve this problem by using a hash map to count the frequency of each number in the array. We then iterate over all pairs of numbers in the array, and for each pair, we check whether k minus the sum of the pair is in the hash map.
Example
“To solve this problem, I would start by sorting the array, which allows for easier manipulation when searching for the desired triplets. Once the array is sorted, I would iterate over each pair of numbers in the array and determine what third number is needed to reach the target sum, k. By using binary search, I could efficiently check if that third number exists in the remaining part of the array. This approach should help in balancing between simplicity and performance, making the solution both intuitive and optimized for the problem at hand.”
This question tests your understanding of data structures (lists) and requires you to implement logic that accurately models the scenario described. Additionally, it evaluates your ability to handle lists with corresponding elements.
How to Answer
When answering, explain that you combined the color counts into a new list (new_jar) to represent all the balls in the jar. Then, you used random.choice() to simulate a random draw, ensuring the selection accurately reflects the distribution. Highlight the simplicity and effectiveness of this approach in handling the problem.
Example
“To tackle this problem, I would first combine the colors and their counts into a single list that represents the jar, making sure each color is correctly represented based on its count. Then, I would use a random selection method to simulate drawing a ball. This approach ensures that the selection reflects the true distribution of balls in the jar while keeping the implementation simple and effective.”
To crack the Revolut interview, you will need to prepare yourself in other domains of software engineering, including problem-solving scenarios, case studies, and coding challenges. Here is a guide on how to effectively prepare:
Carefully read the job description to determine where you shine and what skills you lack. This will also help you tailor your CV and answers to the keywords in the job description. For example, if it says that you’ll be building mobile APIs as a software engineer, emphasize your proficiency in that aspect.
During the technical and on-site interview rounds, you’ll be given real-world problems to solve with your analytical thinking and coding knowledge. Ensure you understand how to interpret and approach complex problems, particularly in Python and SQL. You may also take coding challenges and answer our software engineer interview questions to prepare better for the Revolut interview.
Since Revolut emphasizes practical skills, proficiency in technical fundamentals, such as data structure and algorithms, is critical. Assuming you already have the basics covered, dive deeper into understanding linear regression, random forest, SVM, and sorting algorithms.
In addition to the questions we discussed, practice more behavioral and technical questions to prepare for the Revolut software engineer interview. Our database, with hundreds of potential questions with their solutions, will help you improve your interview skills further.
Participate in our P2P mock interview sessions to refine your communication skills. In addition to improving your skills and refining your answers, familiarity with the process will ease your nerves and help you relax during the actual Revolut interview.
Average Base Salary
Average Total Compensation
Software engineers at Revolut earn an average basic salary of $109,000 with a total compensation of $131,000 per year. Senior engineers, however, command a more robust base salary of over $160,000 and over $260,000 in total compensation. Read more about the industry standards in our software engineer salary guide.
We have a strong Slack community where interview details are shared, and new candidates can ask about the process. Feel free to join us and leave your impression of the Revolut interview process afterward.
Yes. Discover available job positions through our Job Board and apply to your desired role directly. Moreover, some organizations share their requirements directly with us so you can apply immediately.
We’ve discussed the process, common questions, and a few tips to crack your software engineer interview at Revolut. Hopefully, you’ll now be able to prepare better for the behavioral and technical rounds during the interview. Before we part, consider exploring our main Revolut interview guide to gain more insight into the company and learn about other roles, including data analyst and data scientist jobs.
Best of luck with your Revolut software engineer interview—we’re rooting for your success! You’re welcome to share your experience with us after the interview.