Challenge 3: Hacker Hero

If you were asked to build a project like Hacker Hero from scratch, how would you go about building this?

Key Features

  1. Admins can create new learning modules and put title, short description for the module and long description for the module.
  2. Admins can create multiple challenges for each learning module where each challenge has a title, description, problem statement, test cases, and a video solution.
  3. There are two types of learning module admin can create: one without any sub-topics (e.g. like Learn to Code module), or a learning module with sub-topics (e.g. like the Adv. Algorithm and Data Structure module).
  4. Admins can add challenges or "forum" module (like this page) where users can engage in a dialogue.
  5. Users should be able to solve a challenge in any of the programming language possible, initially starting with PHP, Ruby, Python, C#, Javascript, Java, but with the ability to easily extend to other languages such as Perl, R, Go, Erlang, Scala, etc.
  6. Each challenge needs to have multiple test cases.
  7. Users are given say 10 credits when they join the platform. Watching each video solution consumes 1 point. Each month, they are given 5 more credits if they ran out of credit.
  8. Your project needs to record what each user is doing on each challenge and be able to play a video playback on how they approached each challenge.
  9. You need to analyze all the log files and create a nice visualization board where admins can see important key activities.

You're also told that at least 5-10 backend engineers will be working on this project for full time and for months.

Analyzing how you would design Hacker Hero

Apply the principles you were taught about system design to answer the following questions, for EACH of the "service" you would create.

  1. What language/framework would you use to build this particular service?
  2. Why did you pick that particular language/framework?
  3. Where you would store the data? Would you have relational, non-relational, or something else? If you're going to have a relational or non-relational database, create the database table diagram (using Excel spreadsheet or using tools such as MySQL workbench to create a full Entity Relation Diagram), upload to Github and share a link to your Github repo that has either a PDF or an image of your database diagram.
  4. Would you use Github flow or Git flow for managing your source code for this service?
  5. (Optional if you have multiple apps/services) What tools would you use to manage your multiple apps/containers?

Please do an in-depth dive into these 5 questions and provide your thoughtful response below (include link to your Github repo).

Submitted answers •