AlgoMaster Logo

Design Splitwise

High Prioritymedium42 min readUpdated June 27, 2026
Practice this Problem

In this chapter, we will explore the low-level design of a splitwise like service in detail.

Lets start by clarifying the requirements:

1. Clarifying Requirements

Before starting the design, it's important to ask thoughtful questions to uncover hidden assumptions and better define the scope of the system.

Here is an example of how a discussion between the candidate and the interviewer might unfold:

Functional Requirements
  • Support adding users with basic profile information (name, email, phone)
  • Support creating groups of users for shared expenses
  • Support adding expenses with three split types: equal, exact amounts, and percentage-based
  • Track pairwise net balances between users (who owes whom and how much)
  • Support partial and full settlements between any two users
  • Notify users when expenses are added or settlements occur
  • Handle rounding differences in equal splits so the total always matches
Non-Functional Requirements
  • The design should follow object-oriented principles with clear separation of concerns
  • The system should handle concurrent expense additions without race conditions
  • The system should be modular and extensible to support new split types
  • The components should be testable in isolation

After the requirements are clear, lets identify the core entities/objects we will have in our system.

2. Identifying Core Entities

Premium Content

This content is for premium members only.