Problem-solving practice
Each challenge is a brief someone could plausibly hand you — a sentence, a ticket, a proposal, a dashboard — deliberately incomplete where a real brief would be. Produce your actors, requirements, data, first slice and unknowns before you open anything else, and read the trap on every one: it is the move that produces artefacts and leaves the problem untouched.
The whole brief: "Build a task management application." No users named, no platform, no deadline, no examples. Produce, before writing any code: the actors, the requirements you can state, the data, the first vertical slice, and the unknowns as questions.
Ticket: "Design a payment service for the online store. It should take a card and charge it." That is the entire ticket. List the requirements that are missing before you design anything.
A colleague proposes an architecture for a personal todo app for one user: Kafka for task events, Redis for caching the task list, Kubernetes for deployment, and five microservices — users, tasks, tags, reminders, search. Simplify it. For each component you remove, say what requirement would bring it back.
You have the online store framed: actors, workflow, data, unknowns. Now pick the first thing to build. The tech lead suggests "the database schema for everything, then the API." Choose, and defend the choice by what it proves.
"A customer places an order containing several products, pays for it, and may later return some of them." Find the entities, the relationships, what must persist, and which fields must be snapshots. Do not draw a schema until the last step.
Support reports that the store's checkout sometimes shows "Payment failed" although the customer's bank shows a charge. Identify the layers between the message and the bank, say what evidence each can give, and decide the first observation. Do not change anything yet.
You need the store's backend to learn that a payment succeeded. The provider's documentation is several hundred pages (illustrative). You have an afternoon. Say what you will read, in what order, and what you will run before reading more.