You will design a system where users prepare for technical job interviews. There are users, editors, and companies. Editors prepare both coding challenges, coding contests, and non-coding questions. Coding contests have several coding challenges. Users will try to solve challenges, answer questions and participate in contests. Companies also should be able to prepare a series of coding challenges and non-coding questions as a part of their interview process. Coding contests can be sponsored by companies. Both challenges and questions should have categories such as dynamic programming and system design, respectively.