Since we are working with an offline problem, we have higher expectations. Your system design should have the following sections in order: Problem Statement, Assumptions, Requirements & Scope, Functional Requirements, Non-Functional Requirements, High-Level Design, Architectural Analysis, and Potential Limitations. It's a common mistake to start thinking about the entire solution and write the document later. It should be the other way around. Start by working on the document up until the non-functional requirements. If you do this without thinking about the solution, your solution is halfway there. This process showcases your software development skills since it follows the software development lifecycle process.