Beginner, intermediate or advanced, professional, or not, there is one thing all developers have in common - Curiosity.
Developer by Day, Hacker at Night
Ever since I started my coding journey, I always had a side project going on next to school or work. Even if I was already very busy with keeping up with them or let's say: because I was so busy.
Private projects give you something ordered ones can not give you - Satisfaction on a higher level. It was your idea, implemented for you or maybe someone close, so there is this personal connection you build to all these lines, which is way stronger than when coding for a customer.
Anyhow, the benefits are there and everyone who at least started working on a private project knows them. But finding the ideal private project can be very hard. I found myself searching for terms like " project idea" till I stumbled upon the perfect answer to this question.
Of course, you can always work yourself through tons and tons of seemingly endless lists of ideas, but how about searching through your own PC? What I mean is creating clones of your favorite or most used programs!
It not only has the side effect of making you a power user of the particular piece of software (if you are not already), but you may also come up with nice little modifications, which improve productivity, usability and much more.
Taking this idea, a step further, after finishing your clone or having a good insight into functionalities you want to improve or add into the software in question, you may check if it is in fact an open source project, which would enable you to make your wildest software engineering dreams come true.
The advantage of determining whether the software is opensource AFTER you thought through all the details is that you have far less pressure. Sure, if you see the slightest opportunity of you collaborating with someone you want to impress, it is natural and not bad at all to limit yourself in some way or another. But this potentially takes away this special little emotion which makes us one: Curiosity.
You would much rather give the code a quick look through if you already knew what is yet to come, limiting yourself in your own spectrum of ideas and being held back by maybe just one simple line of code. Routine is good but thinking outside the box is what keeps the world turning! For that you don't need to come up with the next big App Store hit or Steam best seller, but limit your information input so that your curiosity is not undermined by the convenience of taking the path of least resistance or the feeling of having to stick to an already introduced pattern.
How you are going to implement certain functionalities is not the important part, the thoughts behind them are.