Beginners are often told to get involved in the community, contribute to open source or work on projects. But how does one even start? Here's the story of how I created a project that got hundreds of GitHub stars - all before I even started working as a developer.

It's hard to describe the feeling I got the first time a GitHub project of mine reached 10 stars. I was elated. I couldn't believe it. This was before I was even comfortable calling myself a developer. I was only a few months into my learning journey and had never worked as a one. But those stars kept coming. Little did I know that over time tens would become dozens, and then hundreds.

So how can an absolute beginner end up with an active project on GitHub that is getting attention and participation?

In this article, I will show you the path I took to get there: how I took the time to take a deep dive into subjects that excited me; how I spotted a need; how I dedicated time and energy to creating a project. And how it ended up being more helpful and popular than I anticipated.

Let's dive in.

Contribute

The project I created is based on a simple idea. It's called Contribute to This Project. I know, not a very creative name, but hopefully direct and self-explanatory.

In essence, it's a tutorial created for absolute beginners containing basic Git and GitHub that leads to a real contribution to the project's live site. It takes someone who has never used GitHub step by step through the process culminating in submitting a pull request to the project itself.

It's simple enough to follow, but it involves adding code that will end up visible on a live website, which I believed was a thrilling idea for a beginner.  Contributors get to add a card like the one below with a bit about themselves.

syk-houdeib-github

So, now that you know what the project is, let's talk about the process that got me here.

Take a deep dive

Dedicate time during your study to take a deeper dive into subjects that interest you.

This is a hard one to do. If you are a total beginner there's usually an overwhelming amount of concepts and technologies that you need to learn for your chosen role. There's never enough time to cover it all. If you want to be a front-end developer, for instance, you'll need to be familiar with HTML, CSS, JavaScript, a JS framework, Git, GitHub, a code editor, NPM, and lots more.

But despite the instinct to rush to try and cover everything it is a good idea to take a brief pause. Explore one of the concepts you encounter in a little more depth. In my case, it was Git and GitHub. But it could be anything: Vs Code shortcuts, how to properly use Stack Overflow, HTML accessibility, drawing with CSS, or JS loops.

It doesn't matter what you choose, as long as it interests you. We aren't talking about specialising or spending months doing this; just a short detour from your usual work, and a closer look This has the great effect of making you feel a bit more confident about that one thing. At a time when almost every conversation with more experienced developers will sound alien, having that one thing that you know a bit more about will be a great bonus.

But how does that relate to creating interesting side projects? Well, this could be exactly the right source for a side project or a chance to contribute.

Find a need

Find something that others have a need for. This really doesn't have to be grandiose. It could be a simple or a niche thing. But it's a great way to make your side project useful for others.

The story of how I found a need begins in an online course I was doing at Udacity. The course had a very active forum. Students collaborated, worked together, and answered each other's questions. There was a lot of mutual support and people sharing their knowledge.

I frequently participated in the forum. Despite still being a beginner - I'd only been coding for a few months at that point -  I found myself able to help many fellow students who had less experience. Because of the deep dive I mentioned above I was regularly answering questions about Git and GitHub. I recommended learning these essential tools and even ended up helping several people get started.

This gave me the idea that I can help in a more efficient way by setting up a tutorial that I could share with everyone - a tutorial that gives everyone a chance to directly make their own first open-source contribution. I knew this would be helpful to many of my peers.

So I identified a need and I had an idea of how I could help. Now it was time to turn the idea into action. But how do you do that when you are not an expert?

You are not an expert, at first

Thinking that you need to be an expert to do something is a big misconception. It's one that holds back many from participating and contributing. This affects a lot of people in the early stages of their programming learning process, but also affects many beyond that stage.

It's quite the opposite in fact. You become an expert by doing stuff. If you write the article, start the project, contribute or participate, your understanding will drastically improve.

You start with a basic idea about the subject. Then as you start working on it and researching your understanding grows. The further you go the more you understand. By the time you finish working on it, you will understand the subject on a much deeper level. That's the attitude you need to have to throw yourself into challenges that seem above your capabilities. That's learning at its best. I spoke about my deep dive into Git and GitHub, and it's time to come clean. It was still a very shallow dive in reality. By the time I set out to create this project I still knew very little about the subject. It's not like I had it all figured out. I just had a better idea about this than other subjects I was learning and dedicating the time to creating the project solidified my understanding.

Also bear in mind that to create my entire project required almost no coding; just basic HTML and the tiniest bit of JS - it was mostly a markdown readme document. So you don't have to wait until you have high coding skills to be able to do something interesting either.

Dedicate time and effort

None of this is of any use if you don't dedicate time and effort into the idea. Nothing magically happens. If you need to create any type of content that is going to be useful, it will always need time and effort.

I had to take the time from my studies and my personal time to complete the project. I dedicated many hours to it. There were a lot of details, it needed planning and organisation, and it needed research. I had to go back to refine and improve it again and again.

Even after I finished and published it, it required my attention and care. I had to listen to contributors. I had to figure out problems that people were having with the tutorial and then fix those.

In short, be prepared to work hard on it but know that it will be worth your time in the end.

Result

Finally, the project was ready. You can imagine my excitement to share it with my fellow learners in our course forum.

People seemed to like the project and feel that it helped them get over that hurdle in their learning. Once they finished they felt a sense of accomplishment. They had used Git. Opened a GitHub account. Created their first project.  Followed a typical git-flow by forking, branching, and submitting a pull request. Then they received PR reviews and in some cases had to make changes. This is the basic flow everyone will need to know when working in software development.

And once their PR was approved and merged they could see their own code appear on the live website.

It was wonderful to see people being grateful. Even more satisfying was to see that I was genuinely helping. Many of them started recommending the project to others. Eventually, it went outside the bounds of the course forum. It started getting shared on Twitter and I started getting contributions from people from around the world.

Like the university student from Mauritius working on a university project; she went beyond the basic tutorial and added a night mode to the live page. Or a coding workshop in the north of Spain; the instructor used the project to help their students make their first contribution to open-source. Or more recently, a contribution that had a full translation of the tutorial into Portuguese! Isn't that awesome?!

You can imagine the sense of satisfaction this gives me. And oh -of course, I almost forgot, it's in the title of this article- all those tasty, tasty GitHub stars :)

Benefits

I found the entire experience to be rewarding. The dedication of time to value I get from the project is more than worth it.

I learnt more and understood Git and GitHub better at the time. It made me more confident to use those tools and that was helpful when shortly afterwards I got my first developer job (here's the story of how I did that).

As a happy side effect, I ended up learning many advanced markdown skills while working on the readme tutorial and made lots of mistakes that I learnt from. These are skills that I find very useful on a day to day basis.

The project got me in touch with a community that went beyond my course. The feeling of contributing back gave me more confidence. Anything that makes you feel like an active part of this community is a good thing in the long run.

As the project got more and more contributions I started picking up new and valuable skills. I had to learn to deal with being a maintainer.  How to manage a lot of pull requests.  How to give better code reviews.  How to communicate better with contributors.  How to use tools like Prettier to deal with and fix code style problems among others.

And finally, this project occupies a proud place in my portfolio and helps reflect who I am as a developer.

Outro 

I hope this article helps beginners (and many non-beginners too) to see how there is always a chance for you to contribute. You can create something that can be useful to others, even when your knowledge is still basic.

You've got to be open to possibilities and willing to put in the effort necessary to create something of value. But you should know that the rewards are handsome if you get lucky and cover a need that other learners and developers have.

Finally, thank you for reading my article and I hope you find it useful. If you are curious you can follow the tutorial yourself and make a contribution. You can even go further and make a contribution to the project that goes beyond adding your card. You could review the tutorial and update out-of-date parts, fix any mistakes, add a new translation, or propose new features to the live site. How about adding a button that reverses the order of the cards for instance ;)

Good luck on your journey.