How to escape a local minima when choosing your next project

5 min

learning

Here you are, you been writing code for a while now. You know some syntax, and you've built a few projects. But then, you realize that you've been building projects that are fundamentally the same, they are mostly CRUD, they are mostly just utlizing a lot of libraries, "yet another dashboard"...etc. Feels you've plateaued, but you know that you are still early, so what's the problem? The answer is that you are not growing. you are dealing with the same stuff. reading the same content, at the same level of depth.

So... How to grow? the core idea is that you have to interact with production systems. It allows you to see other people's code, not any code, but coding running in actual production systems.

On how to interact with those production systems: go to repos of tools you like, and by interacting I mean you do one of the following:

  1. reading the code1
  2. solving problems, or just tinkering with the code
  3. finding bugs, which requires highest level of understanding about the system

Doing this is not only about the code, but also about the discussions in PRs and issues across those repos. All of that exposes you to different ways of thinking and helps you take on increasingly complex problems. As you do, the problems you encounter become more challenging, and there’s always another layer of the system to understand.

When choosing a repo, just jump into it. Don't get stuck thinking, "I don't know how to run this on my machine," or "I don't know how I'll set up my development environment for this." You might be interested in filesystems, for example, without having any idea what working on one would actually look like. That's fine. Figure it out as you go.

There are many repos you can choose, a lot of experiments to run, mixing and matching concepts from here and there to make new projects. You can choose between compilers, build systems, containers, projects about networks, simulators, databases, operating systems, filesystems, programming languages, distributed systems, storage systems, virtual machines, interpreters, schedulers, proxies, web servers, version control systems, and much more.

If you get really stuck, pick something, and just read about it, like it? keep going, not that interesting? change subjects, found something that interests you enough? dive deeper.

The intention of this blog is to help you stop repeating the same core ideas in your projects and start developing a deeper understanding of the systems you’re working on so that you can continue to grow.