← revolut Interview Insights

revolut·Backend Engineer·Technical Phone Screen·Senior

Senior
Jun 2026

Summary

Backend-focused Q&A round at Revolut covering distributed systems, database internals, and architecture patterns. Pretty dense session, felt like they were stress-testing breadth more than depth on any single topic.

Questions Asked (4)

Q1

How does a global bank keep its databases synchronized across multiple regions? Think about replication strategies, consistency guarantees, and what happens when data conflicts arise.

System DesignTechnical Trade-offsData Modeling
Author's notes

This one took me a second to get traction on.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the bank's requirements: data types (e.g., transactional vs. analytical), latency needs, and regulatory constraints. Then propose a multi-region architecture using a combination of synchronous replication for critical data and asynchronous replication for others, with conflict resolution strategies like last-write-wins or CRDTs. Conclude by discussing trade-offs between consistency, availability, and partition tolerance (CAP theorem) and how to handle failures.

Pro tip: Emphasize that in banking, consistency often trumps availability for financial transactions, but you can use eventual consistency for less critical data like user preferences. Mention real-world examples like Google Spanner or CockroachDB to show depth.

1. Clarify Requirements

Ask about data types, consistency needs, latency tolerance, and regulatory requirements (e.g., data residency). This shows you understand that not all data is equal.

2. Choose Replication Strategy

Propose a hybrid approach: synchronous replication for critical financial data to ensure strong consistency, and asynchronous for non-critical data to improve performance. Discuss multi-leader vs. leader-follower topologies.

3. Address Consistency Guarantees

Explain how to achieve strong consistency (e.g., using consensus algorithms like Raft/Paxos) or eventual consistency (e.g., with vector clocks). Mention the CAP theorem and the need to prioritize consistency over availability for transactions.

4. Handle Conflicts

Describe conflict detection and resolution: last-write-wins, application-specific logic, or CRDTs. For banking, conflicts are rare but must be resolved deterministically, often with manual intervention for high-value transactions.

5. Discuss Trade-offs and Failure Scenarios

Summarize trade-offs: latency vs. consistency, cost vs. reliability. Explain how the system behaves during network partitions or region failures, and mention disaster recovery plans.

Key Points to Mention

  • CAP theorem and its implications for distributed databases
  • Synchronous vs. asynchronous replication and their use cases
  • Consensus algorithms (Raft, Paxos) for strong consistency
  • Conflict resolution strategies (last-write-wins, CRDTs, application-specific)
  • Data partitioning and sharding for scalability
  • Regulatory compliance and data residency requirements

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

Walk me through how a database manages concurrent transactions. Cover isolation levels, MVCC, and locking mechanisms.

System DesignTechnical Trade-offs
Author's notes

Felt okay here.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining the goals of concurrency control: isolation and consistency. Then explain the mechanisms (locking, MVCC) and how isolation levels trade off consistency for performance, using examples from real databases like PostgreSQL or MySQL. Conclude with trade-offs and when to choose each approach.

Pro tip: Demonstrate depth by discussing how MVCC handles write skew and phantom reads, and mention that some databases like PostgreSQL use serializable snapshot isolation to prevent anomalies without heavy locking.

1. Define the problem

Explain why concurrency control is needed: to prevent lost updates, dirty reads, and other anomalies while maximizing concurrency.

2. Isolation levels

Describe the SQL standard isolation levels (Read Uncommitted, Read Committed, Repeatable Read, Serializable) and the anomalies they prevent.

3. Locking mechanisms

Discuss two-phase locking (2PL), shared/exclusive locks, and how they enforce isolation, including deadlock handling.

4. MVCC

Explain how MVCC maintains multiple versions of data to allow readers and writers to proceed without blocking, and how it relates to isolation levels.

5. Trade-offs and real-world examples

Compare locking vs MVCC in terms of performance, scalability, and complexity, and give examples from databases like PostgreSQL, MySQL, and Oracle.

Key Points to Mention

  • ACID properties, especially isolation and consistency
  • SQL standard isolation levels and the anomalies they prevent (dirty reads, non-repeatable reads, phantom reads)
  • Two-phase locking (2PL) and its variants (strict 2PL, conservative 2PL)
  • MVCC implementation details: version chains, snapshots, and garbage collection
  • Write skew and phantom reads in MVCC, and how serializable snapshot isolation addresses them
  • Trade-offs: locking can cause contention and deadlocks; MVCC increases storage and complexity but improves concurrency

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

A user reports the service feels slow. How do you investigate that end-to-end?

Root Cause AnalysisSystem Design
Author's notes

Structured it as: reproduce and scope the problem, then work through the stack layer by layer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the user's report: which endpoint or feature, when, how often, and what 'slow' means (latency, errors, timeouts). Then systematically trace the request through the system—from client to load balancer, application, dependencies, and database—using metrics, logs, and traces to localize the bottleneck before proposing fixes.

Pro tip: Always quantify the problem first (e.g., p95 latency, error rate) and compare against baselines; this prevents chasing phantom issues and shows you're data-driven. Also, consider whether the slowness is user-specific, region-specific, or global—this narrows the search space immediately.

1. Clarify and quantify the issue

Ask the user for specifics: which operation, when it started, frequency, and impact. Define 'slow' with concrete metrics like p95 latency, throughput, or error rate.

2. Check dashboards and alerts

Review monitoring dashboards (e.g., Grafana, Datadog) for anomalies in latency, error rates, CPU, memory, and network across services. Look for recent deployments or config changes.

3. Trace the request path

Use distributed tracing (e.g., Jaeger, OpenTelemetry) to follow a sample request through each service and identify where time is spent. Correlate with logs for errors or warnings.

4. Isolate the bottleneck

Drill down into the suspected component: check database query performance, external API latency, thread pool exhaustion, or resource contention. Use profiling if needed.

5. Mitigate and prevent

Apply a short-term fix (e.g., scale up, rollback, cache) to restore service, then implement long-term improvements (e.g., query optimization, circuit breakers) and add monitoring to catch regressions.

Key Points to Mention

  • Use of observability tools: metrics (Prometheus, CloudWatch), logs (ELK), and traces (Jaeger, OpenTelemetry).
  • Check for recent changes: deployments, feature flags, configuration updates, or infrastructure changes.
  • Differentiate between latency sources: network, application code, database, external dependencies, or client-side.
  • Consider scaling issues: CPU/memory limits, connection pools, thread pools, and database connections.
  • Establish a feedback loop: communicate with the user and verify the fix resolves their issue.
  • Document findings and add alerts to prevent recurrence.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

What is Domain-Driven Design and how does it differ from CQRS?

System DesignTechnical Trade-offs
Author's notes

Honestly a bit of a curveball after the infra-heavy questions.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clearly defining Domain-Driven Design (DDD) as a strategic approach to modeling complex business domains, then define CQRS as a tactical pattern for separating read and write models. Highlight that they are not alternatives but complementary, and explain how they differ in scope, purpose, and implementation.

Pro tip: Emphasize that DDD is about understanding the business domain and aligning code with it, while CQRS is about optimizing performance and scalability by separating concerns. Mention that using CQRS without DDD can lead to anemic models and misalignment with business needs.

1. Define DDD

Explain that DDD is a software development approach that focuses on modeling the core business domain, involving collaboration between domain experts and developers to create a ubiquitous language and bounded contexts.

2. Define CQRS

Describe CQRS as a pattern that separates read and write operations into different models, often using different data stores, to optimize performance, scalability, and security.

3. Compare Scope and Purpose

Contrast DDD as a strategic, domain-centric philosophy with CQRS as a tactical, architecture-centric pattern. DDD addresses complexity in business logic, while CQRS addresses complexity in data access and scalability.

4. Explain Relationship and Complementarity

Discuss how DDD and CQRS can be used together: DDD helps define the domain model and bounded contexts, while CQRS can be applied within those contexts to separate read/write concerns. Note that CQRS is not a requirement of DDD.

5. Provide Real-World Example

Give a concrete example, such as an e-commerce system where DDD defines aggregates like Order and Customer, and CQRS separates order placement (write) from order history queries (read).

Key Points to Mention

  • DDD is a strategic approach focusing on domain modeling, ubiquitous language, and bounded contexts.
  • CQRS is a tactical pattern that separates read and write models to optimize performance and scalability.
  • DDD and CQRS are not mutually exclusive; they can be combined, but CQRS can be used independently.
  • DDD addresses business complexity, while CQRS addresses technical complexity in data access.
  • CQRS often involves event sourcing, but it is not mandatory.
  • Using CQRS without DDD may lead to anemic domain models and misalignment with business goals.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.