When people normally build things from scratch, it’s because they’re trying to solve a problem that they have a personal connection to. This also encompasses the work they deal with at their job as well.
Because they have that personal connection, it’s much easier for them to understand where to start. For instances, if I’m at work and I have problem where I have a hard time keeping track of my virtual machines that I own, and there’s not an easy way to track them within a dashboard, then I have a problem which I face. Therefore, my solution to that problem is to create a dashboard which pings these VMs that have my name on it and displays their statuses all in one place. The problem is personal to me or my team as I may not be the only one who experiences this.
This is why I don’t recommended doing tutorials or a project from a list on the internet for the sake of just learning a concept. You have to have a personal attachment to that concept other than it’s just something you need to know for some long term goal.
So when you jump into the backend work and decide to do a project in that section, be honest, would you really care about that voting app you put together? Are you going to have a real-world use for it when you’re done? The chances are high you won’t. Therefore you won’t have much retainment of the code either because if you’re not going to have a personal connection to that codebase, then why even retain the programming concepts being used within?
It’s best to solve an immediate problem you have in your life that’s small enough for you to handle. That’s how developers retain programming knowledge through experience
All computer programs are born out of necessity. The problem that program or app solves was once a manual solution. Therefore, the first thing you need to do is write out the steps needed to do that process manually. Then, once that’s out in the world on paper or in some todo list software you need to create a simplified design of your app. It doesn’t have to be anything crazy, just something high level that helps you visualize what your code is doing.
Once you have structured and visualized your manual process, then it’s time to code. Don’t worry about getting it right the first time, just write something out that works. You can make it right later.
In fact, as you start coding our your solution you soon realize that a task you written out is a lot bigger then you originally thought. Only then, it will make sense to break down that task into smaller tasks.