Task Management System (Todo List) – Low Level Design Interview Practice
Practise the Task Management System (Todo List) low level design problem the way an LLD round actually runs. You are asked for requirements first, then a class model, and then to extend the design when a new requirement lands part way through – the follow-up that separates a design that was memorised from one that was understood.
The round checks the things interviewers grade: whether your classes carry single responsibilities, whether you reached for a design pattern or reinvented one, whether the design absorbs a new requirement without rewriting what exists, and whether you can explain a trade-off out loud. Feedback covers class modelling, SOLID principles, use of patterns, extensibility and communication.
What this question is really testing
Deceptively plain. It is graded on hierarchy, on search and filter without a conditional thicket, and on whether activity history is a first-class concept.
Requirements to establish first
- Create tasks with title, description, assignee, due date, priority and status.
- Organise tasks into projects, and support subtasks.
- Filter and sort by any combination of assignee, status, priority and due date.
- Track status transitions with who changed what and when.
- Notify an assignee on assignment and before a due date.
Core classes
- Task – The unit of work. Holds its own fields, not the rules about who may change them.
- Project – A container of tasks, and often of a workflow definition.
- TaskStatus / Workflow – The legal statuses and the transitions between them, which differ by project.
- User – Assignee and reporter.
- ActivityLog – An append-only record of changes. The thing that makes history answerable.
- TaskFilter – A composable predicate, so filters combine rather than multiply into cases.
Design patterns that apply
- Composite – Subtasks. A task containing tasks is the textbook composite, and it makes "percent complete" a recursive question with one answer.
- Strategy – Sorting and filtering, kept composable rather than enumerated.
- Observer – Assignment and due-date notifications.
- Command – If undo is required - and interviewers often add it late.
Follow-up questions to expect
- A parent task is marked done while a subtask is open. Allowed? Where is that rule?
- Filter by three fields and sort by a fourth. Show that adding a fifth does not change existing code.
- Reconstruct a task's state as of last Tuesday. Does your ActivityLog support that?
Where candidates lose marks
- A parent-id field with no composite behaviour, so rollups are computed ad hoc at every call site.
- A status enum with no transition rules, so any status can follow any other.
- Filtering as a method per combination, which grows factorially.