Design a basic task management system

Quick Overview

This question evaluates a candidate's ability to design a simple task management service, covering competencies in data modeling, API and class design, storage selection, concurrency and consistency control, ID generation strategies, performance considerations (indexing, pagination), and testing approaches.

Design a basic task management system

Company: Amazon

Role: Software Engineer

Category: System Design

Difficulty: medium

Interview Round: Technical Screen

Design a simple task management system that supports: ( 1) Add a new task with a unique ID and description, ( 2) Mark a task as completed by ID, ( 3) Get all incomplete tasks, ( 4) Get all completed tasks, and ( 5) Get a task by ID. Specify the data model and core APIs/classes, choose in-memory vs. persistent storage, and describe how you'd ensure thread safety and consistency. Discuss ID generation strategies (auto-increment, UUID, or timestamp plus attributes hash) and their trade-offs (ordering, collisions, sharding). Outline performance considerations and a brief testing strategy.

Overview: This question evaluates a candidate's ability to design a simple task management service, covering competencies in data modeling, API and class design, storage selection, concurrency and consistency control, ID generation strategies, performance considerations (indexing, pagination), and testing approaches.

Amazon logo
Amazon
Sep 6, 2025
mediumSoftware EngineerTechnical ScreenSystem Design
12
0

Design a Simple Task Management Service

Requirements

Design a simple task management system that supports:

  1. Add a new task with a unique ID and description.
  2. Mark a task as completed by ID.
  3. Get all incomplete tasks.
  4. Get all completed tasks.
  5. Get a task by ID.

What to Deliver

  • Data model (entities, fields, and indexes).
  • Core APIs/classes (language-agnostic or your preferred language).
  • Choose in-memory vs. persistent storage and justify.
  • How you ensure thread safety and consistency.
  • ID generation strategies (auto-increment, UUID, timestamp-based/Snowflake-like): trade-offs for ordering, collisions, and sharding.
  • Performance considerations (time/space complexity, pagination, indexing).
  • Brief testing strategy (functional, concurrency, and performance).

Assume this is a single service used by multiple threads/clients. You may make minimal assumptions explicit to keep the design coherent.