In this article you’ll learn about project-based learning – how to get started, how to get ideas for a project, and more.

Tutorial hell is real, and it's a terrible place to be in. Project-based learning is the best way to grow as a developer.

You’ve probably heard that piece of advice more times than you can count. It’s a very common piece of advice given to developers, often those new in their coding journeys. That statement is true: tutorial hell is real, and it’s a comfort zone that’s hard to break out of.

Switching to project-based learning is often easier said than done, though. And biggest reason for this may be confusion regarding what the 'project' in project-based learning is supposed to mean.

You might also wonder if watching the occasional tutorial counts as being in tutorial hell, especially if you find it easier to learn new concepts using videos instead of written content.

The point of this article is not to argue that one particular method of learning is better than another. Instead, you'll learn about project-based learning and see the reason project-based learning is the best way to grow as a developer.

Here are some things we’ll talk about in this article:

  • What tutorial hell is and why you should avoid it.
  • If you’re in tutorial hell, how to get out of it.
  • What is project-based learning?
  • How to get started with project-based learning.
  • The benefits of project-based learning.
  • Common misconceptions about project-based learning.

What is Tutorial Hell?

Let's talk about tutorial hell – what does that mean? Does watching video tutorials of something mean you're in tutorial hell? Do you need to consume text-based content only to be counted as someone not in tutorial hell?

I like to think of tutorial hell as a state of stagnation where you're stuck in a loop of relying on tutorials – often video-based tutorials – doing no practical or collaborative learning to solidify the concepts you're learning.

A developer who is stuck in tutorial hell usually cannot build anything using the tools they've learned about without watching several tutorials as a guide. Building the most basic stuff becomes difficult because that person has no depth or practical understanding of coding concepts or programming languages.

There’s nothing wrong with checking a tutorial when you’re stuck on a problem, especially if it’s something you’ve never experienced before. But it becomes cumbersome (and a hindrance to your learning) if you have to check tutorials every single step of the way to build even basic stuff.

Then when you’re done with that tutorial project you jump straight into the next tutorial, typing away. This can give you an illusion of progress. Being in tutorial hell is like having an itch to learn and scratching that itch by consuming tutorial content nonstop.

Like I mentioned earlier, tutorial-based learning is not to be confused with being in tutorial hell. Tutorial-based learning involves learning something new by consuming tutorial content and then using the new knowledge to build something unique. This method of learning is helpful.

Tutorial-based learning has advantages, some of which are:

  • Structured content – Tutorials are typically created in an organized way. And having this structured content makes it easier to learn certain things, for example someone learning a programming language for the first time.
  • Different perspectives – Tutorial based learning can give a wonderful insight into how different languages/technologies work together in ways you might not have thought of. You get to see how others solve a problem or build something differently than you would have done it.
  • Quick access to knowledge – You can quickly solve a problem or build something when there's an example from someone who has done the same thing.

These are some advantages of tutorial-based learning. Just remember that you need to be careful because over-reliance on tutorials is how you fall into the comfort zone of tutorial hell.

If you're not sure whether you're in tutorial hell or you're just someone with a preference for tutorial-based learning, here's a simple test: look at the last project you built. Can you explain what the tools you used do? Will you be able to explain why you chose those particular tools or tech stack? Can you rebuild that project without checking tutorials?

If your answer to any of these is no, you might be in tutorial hell, and it's time to break out of it.

Now it’s time to talk about project-based learning

What is Project-Based Learning?

Project-based learning is a type of learning that takes a practical approach to understanding new concepts.

It’s a type of learning where you build projects using a minimal number of tutorials, instead relying on your existing knowledge, your ability to solve new problems, your ability to pick up stuff as you go, and your determination.

There are a few differences between project-based learning and tutorial-based learning, although there are bits of one kind of learning in the other.

Project-based learning involves:

  • Picking up an idea or problem you have and building that idea or the solution to that problem either alone or in collaboration with others.
  • Deciding on the tools to use to execute that project.
  • Building projects based on the extent of your creativity, environment, and experience.

Advantages of project-based learning

Project based learning has a lot of advantages. Some of them are:

  • Freedom for creativity – With project-based learning, you get to decide your project, the scope, and the tools to use.
  • Better understanding of tools – You’ll have a firmer grasp of the frameworks and technologies you implement in your project. You get to choose tools based on the needs of your project and not because of what someone says.
  • Opportunities to connect with people – Exploring different solutions to problems can lead you to unexpected places. You may get to connect with people, learn from them, and in my case, it led me to my first open-source contribution.
  • Develop useful skills – Project-based learning helps you develop skills you need to tackle other projects. You develop debugging skills from repeated exposure to bugs, you get used to errors, you figure out how to solve them, and you learn how to avoid them later.
  • Builds confidence – One of the best things about project-based learning is the fact that you actually own your project. You can explain your project to anyone, you can justify your choice of tools, and this is an excellent source of confidence. Taking a project from idea to deployment is a beautiful feeling no matter how small the project is.

These are just a few advantages of project-based learning. There are many more benefits to implementing project-based learning as a developer.

Now that you've seen the advantages of project-based learning, let's address some things that may be confusing to someone looking to start project-based learning.

Common Obstacles to Project-Based Learning

Project-based learning isn't as straightforward as its name sounds. So in this section, we’ll talk about some obstacles and sources of discouragement that can come from project-based learning and how to overcome those obstacles.

Where do I get project ideas?

This is arguably the biggest obstacle new developers have when starting project-based learning – and the answers are actually simple.

The first and most reliable place you can get project ideas is your life and your environment.

Is there a problem you have that doesn't have existing solutions? Build your own.

People often underestimate how much they can learn just by building something that resonates with them and their environment.

The second source of project ideas is at the software you already use. Is there any improvement you'd like to make? Build your version of it.

Talk to your friends and family. Is there a problem they would like to be solved using software? Build it for them.

Here are some resources filled with great beginner-friendly and intermediate projects you can build:

  1. Python project ideas
  2. More Python project ideas :)
  3. JavaScript project ideas
  4. React project ideas

I’m inexperienced and don’t know where to start

Starting a new project can be daunting, especially if it's something you've never done before – but that's the point and beauty of project-based building.

Project-based learning pushes you to do some research by reading documentation, writing down your ideas, finding new bugs, and then solving them. You get to learn what works and doesn’t and you'll go from inexperienced to a lot less inexperienced quickly.

A piece of advice I've found to be helpful when starting a new project is to take it apart piece by piece, write out what that project will involve, write what you can implement without help, and start from there.

For example, are you new to JavaScript and building a to-do list that adds tasks, displays tasks, and deletes tasks? Does the add task functionality look a bit difficult? No problem, start by using your existing HTML and CSS knowledge to build the UI for your idea and gradually add minor features

For example, you could break the feature into small steps like this:

  1. First, you'll need an input where you can type in some text.
  2. Next you'll need a button to add the tasks. To do that you have to create a button with an id in HTML and style the button using CSS.
  3. Then you'll use JavaScript to give the button a click event that logs a message to the console anytime the button is clicked.
  4. After that, you'll make your button log whatever is typed in the input to a console.
  5. Finally, you'll create a div to display the tasks and make your button append the text to that div.

It might take a few more steps that this, but you'll notice how breaking the task down made it simpler and helped you see what you know and what you don't.

Breaking a problem down to smaller pieces will help you know the starting point and give you a clear map of the actions to take. For every problem you solve, you'll slowly build up your experience and gain the confidence to do bigger things.

"Everybody has to start somewhere. You have your whole future ahead of you. Perfection doesn't happen right away." – Haruki Murakami.

What if I get stuck and can't figure out the solution?

Sometimes, despite our best efforts, we just can't figure out the solution to a problem even after breaking it down to small pieces and reading the documentation (make sure you actually read the documentation).

If you find yourself in this situation, here are some steps you can take:

  • Take a break – Sometimes your brain just needs a bit of rest. Going on a walk or doing something relaxing or taking a nap could be the fuel your brain needs.
  • Read your code out loud – Reading your code out loud and explaining each line as you read it can help you subconsciously connect the dots between where you are and where you want to go. (This is often referred to as "Rubber-Duck Debugging".)
  • Get help from others – Places like the freeCodeCamp community forum, Stack Overflow, and Reddit will probably have the answers you need – so don't be afraid to reach out to people there.
  • Ask AI – This should be the last resort, but since AI is a useful tool that is here to stay, it would be odd to exclude it.  AI tools such as ChatGPT can provide solutions to your issue and explain the logic behind it. Be very careful with using AI though, especially if you do not have a good grasp of your problem. AI answers can be a poisoned apple, you might end up worsening your situation if you blindly accept AI answers without understanding. Just make sure to fact-check.

These methods of solving problems are known as debugging and you can learn more about debugging using this article.

My idea has already been done/is not impressive

It can be tempting to drop a project idea because it's common. But remember that the point of building a project for the sake of learning is not about competing with others for originality.

Building a project should help you grow your skills and knowledge. So don’t worry if you see thousands of other people who have built your idea. Remember that what sets yours apart is the problem it solves and what it teaches you.

How do I know if I’m doing the right thing?

The process of building the project itself will often show you if you're on the right track (if it doesn't work, you know something's wrong). But if you need a different pair of eyes or perspective on your project, try asking for help. For example, you can just post a screenshot/video/link of your project on social media and politely ask for feedback. There's a good chance someone will reach out and give you tips.

When you receive feedback, don't take it to mean your project is terrible or you're doing something wrong. Instead, use that feedback to improve your project. With each bit of advice, you'll grow.

How do I stay motivated while building projects?

Tutorial-based learning feels good. There’s a feeling of accomplishment that comes from finishing a tutorial, especially a lengthy tutorial. That feeling could tempt you to pick up the next tutorial, and then another. This is an easy way to go back to the warm comfort of tutorial hell, so you need to know when to stop.

With project-based learning, there will be times when you’ll run into a seemingly impossible problem and feel discouraged and close to giving up. There will also be times when you’ll solve a problem and feel good seeing your problem-solving skills improve.

The best way to keep going is to build something you need and enjoy building. That way if you get discouraged, overcoming the discouragement will be easier.

How to Plan Your Project

What if you already have an idea – how do you get started? The first step is not immediately opening up your editor and writing code. I mentioned in an earlier section that the first step to building a project is writing your ideas down.

Writing your ideas down allows you to:

  • Plan your activities
  • Understand the project
  • Add more ideas before you build
  • Decide on the best steps to build it
  • Pick a timeframe to build it

Jumping straight to development the moment you have an idea could eventually lead to discouragement especially if you're adding and removing features frequently and the project drags on longer than you thought it would. Writing your ideas might seem old-fashioned and unnecessary, but trust me – you'll be happy you did once you do start building.

While building your project, you might have new ideas you want to implement as you fall in love with your idea more and more.

Write these ideas down immediately so you don't forget them. Now build the main features you had in mind at first and add the newer features later. Saving the newer ideas for later will help you remain focused instead of getting distracted by planning to add something else midway.

Figure out what type of learning works for you

There are people who like to learn progressively by building the smallest pieces of a project and then gradually gaining momentum and moving up to bigger things. There are also those who prefer to dive straight into the complex stuff.

For example, some front-end developers might start their journey by building a simple to-do list and then slowly move up to more complex things. But others prefer to start by building something more intricate like the full clone of a popular website and learning as they go.

While it is easier to start small and gradually move up, remember that programming is a marathon not a sprint. No matter how long it takes, the most important thing is to understand deeply what you're learning and have fun doing it.


Project-based learning is an awesome way of learning, and the benefits massively outweigh any disadvantages or challenges.

You’ve seen how to get started with project-based learning, the advantages of project-based learning, and common sources of discouragement when starting out. So, if you’re not already actively implementing project-based learning, use this article as a guide.

Your preferred method of project-based learning is totally up to you, whether you go slow and gradually pick up the pace or jump straight into the most ambitious stuff – it doesn’t really matter. All that matters is that you stay out of tutorial hell and actively implementing project-based learning. By doing that you’ll eventually reach and surpass the goals you set for yourself.