This is a transcript of what I was planning to say in that 30 minutes... :)
Hi there, so I am Nóri and as you might already know I'd like to talk about side projects and convincing all of you that they are great!
But before I start, I would like to mention that this is my very first time in Bulgaria and I am more than happy to visit this country, to get to know the culture, see the beautiful sights and make some new friends here. This is a photo made from our hotel room:
First things first I have a few questions for you:
- How many of you have ongoing active(!) side projects at this holy moment? Please just put your hands up! :)
- And how many of you are planning to start one in no time? Hands up again! :)
All right. So what comes to your mind when I say side projects? To me, it is something like this.
Maybe you know CommitStrip, it's a blog about the daily life of developers and I just love reading their stuff, but one of my favourite strip from them is this one. I mean this is only a part of a strip but I think this is the most meaningful part. It shows a very typical situation.... like having millions of unfinished never-going-to-end projects? How many of you have ever felt like this?
So in some way I am here to motivate you do this. To start new side projects, of course also to finish them, but to be able to finish one first you have to start them! But why would anyone wants to do them?
To get the idea of what side projects are really are, first check out a few famous ones. I guess I have to start with the most famous side projects, Gmail and AdSense. Both were created by enthusiastic Googlers in their 20 percents. But I will talk about that a bit later.
Twitter, ProductHunt even GitHub were once a side project. And the list of side projects that became million-dollar startups goes on...
But don't rush forward! You might think that I must be crazy about side projects and the thruth is, I am. And so now I would like to show a few of my side projects that I am really proud of...
The very first one I'm telling you about is only slightly related to development as it is a programming competition for high school students. A few years back I was a participant myself, but then they asked me to help. The other one is a week-long camp for smaller kids where they can learn the basics of programming or build some nice Bluetooth controlled robots and we usually keep it in the summer.
Going on this is something I am currently working on, Karancs-Medves Kalauz. It is a tourist guide I am planning to help my local community with. Around my hometown, there are a lot of beautiful sights but we have quite a few tourists, and the ones we have are not really aware of the sights, either. This is the problem I would like to solve with this website. It is, in fact, a Spring Boot application with Vue.js frontend and I am planning a mobile app, too. You can also check its Instagram feed.
And one that might even be your very first side project is solving my very first coding-challenge, the Cretan Maze. You're trapped in a maze and have to get out in under 1 hour. First, you have to collect 3 gold coins and you control the game through a REST API. I am hosting this on Heroku and if we check the site you can see here all the people successfully finished the challenge, so no, it is not impossible to win this!
(I wrote about it on DEV.to earlier, see here)
Now that we have an idea of what a side project can be, let's ask a question: Why would anyone want to spend time on a side project?
I mean... you might say that you don't have time. I guess most of you are full-time developers. You could say that after working 8 hours in the office you are tired and you don't care at all or you have a family you would like to spend more time with. And at the weekends you want to be far away from the keyboard, hiking in the mountains or playing in the local football team.
But remember, people say that you have time for what you make time for. I know it is an overused saying, but it is very true. Once I read a post about a dad who learnt how to program in the evening hours and he could not even sleep a lot as he had a new-born daughter to look after but a few months later he got his very first developer job.
But think about it for a second. He put this time into it and he got a reward. A job offer. Sounds great, isn't it?
You might say that it is something that no one would pay for, and no one would praise you for your effort and time you put into a side project if you fail or abandon it. The bitter truth is, undoubtedly, most side projects will fail. We all know this. The majority of them will not even reach the first release, and those which do, often will become abandonware, no longer supported by the developer. And GitHub is a graveyard for them.
You could also say that it is useless. Spending time on dummy stuff. Creating another note taking app or an alternative to one used by millions, even billions of people, what for?
Let me show you all the advantages!
The very first advantage I would like to enphasize is about learning new technologies, new dev skills.
For example if you are a Java coder, why not try Python with a data science project? Or if you are a backend developer, why don't you try some new shiny frontend framework out? Or let's say you usually do the coding stuff, but deploying your own app to Heroku maybe and setting up a database, Jenkins jobs or SonarQube to analyze your code could be a challenge for you!
We live in a world where we have nothing else but contantly changing technologies. So all you can and all you should do is keeping up with the new trends I think. And the best tool for this is side projects by making some dummy or not so dummy projects trying out a new library, framework or tool.
Another great benefit of side projects is that you are practising a lot outside of your office hours. Maybe if you use the same technologies at work and for your hobby projects, then you might meet the typical bugs, pitfalls beforehand, so that you can feel more confident at work. You will get to know the best practices, so you might be able to help others to make the right decisions, to give advice on using library A rather than library B, and save time for you and even money for your company.
The next advantage I would like to mention here is simply the joy of building something. It’s nice and fulfilling when you can show your product to others, or take a look at something and know you’re the one that created it. You should be really proud of yourself if you have completed a project that others can use or download. The feeling when other people are happily using your product is quite satisfying. I hope that many of you have already felt it. If not, I hope at least once you will.
If you have a big bunch of abandoned git repositories than you must know what I was talking about when I showed you the comic strip earlier. It is funny to find a long-forgotten folder on your computer filled with code written by your 17-year-old self. I even have a text file to collect the funny pieces of code names 'funny-codes'.
A friend of mine once told me that it is normal to see yourself grow as a developer. Be glad if you can laugh at your old code because if you can’t then you are definitely not improving your skillset.
And it is another skill that could be simply improved by these old pieces of codes: refactoring. Think about it as working on legacy code that you have to make work, to do what it needs to do, by turning buggy, vulnerable codelines into something beautiful, making changes line by line, small, but powerful improvements on the long run.
Side project are also great because they look great on your CV and during the interview when they ask about your projects you will be happily saying that you had this, that and even some other stuff too. It helps building online presence and that certainly won’t do any harm to your CV, career, network and professional evolution.
You should always have a side project as it is one of the best ways to advance your career as a software developer, bar none, is through side projects. In my opinion it is even more important in the very first years of your career. Especially, when you are a newly-graduated student I expect that interviewers will be more than happy to hear about all your apps, websites, etc... even the unfinished ones.
And I mean that not only a long list of successful products will take you there. One of my friends told his storiy of how a little Android app made all the difference in his life and career.
If one of your projects will get serious, then you can even quit your workplace, start a business, and become an entrepreneur.
Although am not encouraging you here to quit your workplaces now, but it might happen...
Building up a company from scratch has other advantages, too. First if you are on your own or with a friend, then you will have to make almost everything... I mean like marketing, sales, support and system operations as well. These are again I think are great things to know about even a little bit.
There is another saying of a friend of mine that a good side project makes you money while you sleep... But sometimes it might do some harm, as some people go crazy when their projects starts to make even a very little money, also generally the primary goal is not making money, but to learn, to advance, to grow.
I have a few more advantages of side projects for you. For example if you collaborate on an open source project or build something for a community, then you will be able to connect with other developers from all around the world, make some new friends and connections. That sounds really good, isn't it?
Also, it is refreshing. It’s a great way to get out of your comfort zone and do something different from your day job.
Last but not least, I would say that it's FUN! Think about it! You have the freedom to do whatever you want, there is no boss, or a client to tell you what to do and how to do it! You don’t have to spend hours in useless meetings. You don’t have to convince anybody of your own point of view. Your code will be super consistent and strictly follow all the code conventions: Yours.
Now that we know all the disadvantages and the advantages, I would like to give you some advice on how you can get the most out of the time you are willing to spend on working with your them.
Step one. 1. Find a topic.
Usually, when I want to learn new technologies, I build something real because getting your hands dirty is the only way of actually making sure that you got it right. You need those “aha!” moments you won’t have that just by reading / watching tutorials. Most people build To Do List apps. Please just do not make another To Do app! If you’re going to spend your super precious time on something, make sure to at least spend it on something that has the least chance of adding value to other people. Make something useful.
Another suggestion: use some note-taking app as ideas can come anytime, so be prepared! Otherwise you will forget them.... :(
If you are clueless what you could do, I have a list on my website filled with project ideas and it is growing. I put the link there. But of course you can find millions of other ideas on the internet, too.
Step 2. If you have decided on the idea the first goal is a plan
Don't worry I'm not saying that you should start by writing a 100 pages long detailed document I guess you are usually used to because of your day jobs. I say that it could even be a random text file, a few lines, with the core features, your goals and milestones. It is usually useful to seperate the file for the MVP level and for your the changes, new features, etc. And do not forget to limit the scope and set a deadline!
Step 3. Find a community
You can find online forums, groups, too that are for sharing and receiving constructive feedback on side projects. One of my favourite is the Side Project subreddit. It is very active, well-moderated and you can even get some new ideas from here, when using it for brainstorming or if you are out of ideas.
Step 4. Build something minimalist. I mean, really.
Believe me: If you are an experienced developer, chances are that you are going to overestimate your own capacity. It’s common to feel like you’re more productive alone than you are inside your organization, and this is true to a certain extent.
Also if you don't make your feature list short enough, chances are more likely that you will never finish the project as you will lose your motivation and interest in a short time.
Step 5. Become a finisher!
Despite all the effort you put into a project, things can happen so you will always have a good reason not to finish a project. Like going on holiday, taking German lessons or just simply reading funny stuff on the internet. But sometimes you have to say yourself, “Hey, you are going to finish this app and put it into the Android app store. It doesn’t matter how long it takes, but you are going to work on this app at least an hour each day, until it’s done.”
Step 6. Go live!
Going live is not just about publishing your app to the app store or deploying your website to the web. It can be publishing a library to npm or even just open sourcing the code so people can see it, use it and learn from it.
Also spread the world! Post about it on your blog, subreddits, HackerNews, dev communities even ProductHunt. You will love receiving feedback from people who are your actual users / contributors.
+1. One more tip for you: Go to hackathons!
Hackathons are getting more popular and more frequently organized as it is a great way to get people work on something. You are usually closed up with a few people to work on a project for a few day up to even 3 or 4 days. At the end you will have a team, a detailed concept or even a demo version of the product. Sounds too good, isn't it?
+2. Last but not least try to Change your workplace
At the company another friend of mine works for, they have an ‘Experiment Day’ every month. This is great for trying out some interesting technologies. Similar ideas are found across a lot of tech companies - and it’s easy to see why. You could even be a person who organizes these events, right?
Also, I heard that at some places they have Demo days where anyone from the company can show what he or she is working on in their free time.
There is also Google’s famous "20% policy", which means that you can work on anything for up to 20% of your work time. Why would a company do that? Because they recognized that it is benefitial for the eployee and the employer too.
So why not start one?
As you can see your precious time spent working with side projects can be beneficial and your small ideas can even grow into big companies.
I hope that you are all motivated now to start one and to finish one! In the end, the most important thing to do is to keep going and gain experience.
Thank you very much for your attention I hope you found it useful! :)