01 / THE PROBLEM
A small build, designed to stay understandable.
I wanted a project that would force me to use classes for a reason—not simply write one giant main method. The goal was a small task manager with a clear model, a service layer, and a straightforward command-line flow.
02 / DESIGN DECISIONS
Keep the task data and its status together in a small, understandable model.
Put create, read, update, and delete operations in one service instead of burying them in menu code.
Use an in-memory Map for the first version. Persistence can come later, after the core flow is clear.
Make missing tasks and invalid operations explicit so the program can explain what went wrong.