It's difficult to make consistent progress when learning software engineering fundamentals.

  1. Many platforms help you learn one-off algorithm problems, but don't tie concepts together into a cohesive narrative that's optimized for remembering and for recall when solving new problems.
  2. Coding entire solutions to leetcode-style questions is mentally draining and causes a mental barrier to getting started.
  3. It's difficult to come up with a clear study plan and stick to it, partially because the scope of knowledge to learn seems so vast.
  4. Knowledge decay makes it feel like you're constantly slipping back down the slope and adds anxiety to the process because you don't know where you really stand.


  1. Use pattern-oriented teaching with visual explorations of the knowledge base. The knowledge base is divided into layers: Facts, patterns, and problems. Each datum is annotated with tags. Nodes are clustered by similarity in the visualization. The level of detail increases as the user zooms in to a region to inquire further.
  2. Multiple learning modes are provided that range from passive to active. Traditional leetcode-style problem solving is considered active. Shadow typing solutions with visual explanations synced to your typing is considered passive. Multiple choice, fill-in-the-blank, etc, lie in between.
  3. Learning is treated as a game of exploration. The user learns a concept and then expands to neighboring concepts.
  4. Progress statistics are tracked. Learning effeciency is improved by controlling the environment around the user, presenting tasks and challenges to reinforce their knowledge where needed. Progress is visually manifested in the game state.