Requirements discovery is the first phase of a system design problem, where you clarify what is actually being built before touching any architecture. The output is a short, agreed list that every later decision can be traced back to.
The four things you must leave this phase with:
Why it comes first: every later choice - SQL or NoSQL, cache or no cache, sync or async - is only defensible with reference to a requirement. Without this phase you are guessing, and an interviewer cannot tell a good guess from a lucky one.
Functional versus non-functional. Capture both. Functional requirements say what the system does ("a user can upload a video"). Non-functional requirements say how well it must do it ("playback starts within 2 seconds at p99"). The non-functional ones usually drive the architecture more than the functional ones do.
Finish this step by repeating the agreed scope back in one or two sentences, so the rest of the design is anchored to something you both signed off on.
Sign in to save your progress and continue exactly where you left off.