AlgoMaster Logo

Design Splitwise

Last Updated: February 7, 2026

Ashish

Ashish Pratap Singh

medium

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:

1.1 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

1.2 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.