A few days ago, I shared my new repo of organic, feasible, and at least somewhat original/unsolved side project ideas. Rahul Pandey and I have seen that a lot of engineers, junior ones in particular, have trouble exercising the product ideation muscle, which makes sense as they’re still learning how to code. This repo solves that problem, but I was quickly presented with another one from folks who were trying to build these ideas: “How do I build out these ideas? I don’t know where to start.”
This is a good question, and it’s a very understandable question to have when you’re a junior developer. It is especially understandable if you come from a structured educational background, which is, well, what most education is from my experience. The technique that is the answer to this question is extremely important for 2 reasons:
- Conceptually, it is how you tackle any big problem, and this is literally a huge portion of what Rahul Pandey and I do all the time as tech leads at top tech companies like Facebook.
- It is a vital process for truly understanding system design. At its core, system design is about knowing what components exist and how they fit together; this technique will teach you all of that.
So what’s this technique that you can use to take in any big, scary software project and actually bring it to life? Simple: Break it down into smaller and smaller sub-problems until each problem isn’t scary anymore.
Of course, 1 sentence probably isn’t enough for you to fully understand this concept, so let’s break it down with an example across a series of steps. For this article’s “big software project”, we are going to use the Food Button app.
Step 1: Plot Out The User Journey
Put yourself in the shoes of the end-user and figure out what the flow looks like for them step-by-step. For Food Button, it looks something like this:
- I open the app and see a big button.
- I tap on the button.
- After some loading, I am taken to a page with a chosen restaurant.
- The restaurant shows relevant information like name, rating, thumbnail and location, so I can judge if it’s a good…