Earlier this month I gave a talk at Rails Israel.
And while trying to come up with an idea for the talk I found myself coming back again and again to the same concept. The one thing that makes my current job feel so different and special then any other job - and that's passion projects.
You can view both the video and slides here.
But I really wanted to give a more indepth post about my musings.
So, What are Passion Projects?
Passion projects have a million and one names, you might know them as hackathons, side projects, weekend projects, 20% projects, pet projects and more. It doesn't matter what you call them, just that you do them :)
I'll start by defining what they're not, passion projects are not your normal 9-5 day job. They're not what you're paid to do every day at work. Even when you're passionate about your work (which I hope you are) passion projects are something else.
I've been doing them ever since I started programming whether it was to learn something new, practice something I haven't done in a while, build something cool or an outlet for my creativity and need to code when things were boring at work.
From this experience and from the last 3 years I started categorising passion projects into 3 different areas.
These are projects where we feed our need to build cool stuff.
Whether we want to build a coffee infographic because no one makes you your coffee just like you want to drink it,
or maybe you write a small command line utility because you're sick and tired of getting warning because you forgot to run
rake db:migrate after you pulled the latest version of the code from the repo.
As developers we have a unique ability - we can solve a lot of our own issues. If something annoys you during your normal flow, solve it. If you have a cool idea, build it. And if you have a scratch to itch, scratch it :)
The next kind of projects are ones where the HOW is more important then the what. These are projects focused around learning a new library, framework or maybe even a new language.
I find that most of these types of ideas come after browsing sites like HN or twitter, or after visiting a conference and hearing a lot of smart people talk about a lot of smart stuff.
These projects are good to do as passion projects because you have a 'sterile' environment where you can experiment with technology without bringing down the house.
The last kind is the hardest one to define, these are projects where you want to improve and hone yourself, your team or the process.
Maybe you haven't been doing TDD lately and you want to jump back in
or maybe you want to try and Pair with your new team member. They are more about the process then the idea or the tech.
Why work on Passion Projects?
Well first and foremost, we're calling them passion projects so we expect them to be something you're passionate about. You need to WANT to work on them and they should be FUN projects.
Getting that out the way, passion project are a SAFE ENVIRONMENT to work on things. A place where failing or delaying doesn't have a disastrous impact on the business. Having NO PRESSURE also leads to more innovation and trying out new ideas. Both things are a lot harder to accomplish during normal work day.
You also get to work on a lot of greenfield projects, and from my experience we developers love working on greenfield projects. New projects, ones that we get to call the shots from day one and we get to choose the -
Technology, either new or exotic tech. For most of our time, while working we only get to use so many different languages, frameworks and such. We don't always get to play around with the new hotness, the shiniest things out there. Passion Projects let you mix-in and work on anything you can get your hands on to.
While working alone or with a small group you also get to FOSTER YOUR CREATIVE SIDE. Stretch your right brain muscles so to speak. You get to practice being your own Project Manager or Designer. Skills which I believe every developer should at least understand how to do - even if you're not very good at it right now.
You also get to work with people outside your normal team, maybe even outside your company. Actually working on (and not just talking about) code builds a special relationship between you and the other person.
And last but not least, building these one off projects can help you get your name out there. Whether it's having the repo up on GitHub for a future employer or having the project go viral in the geeky channels. I also found that working on these types of projects helps you find material for you blog posts (Ooo so meta)
So, When to work on Passion Projects?
Most passion projects don't happen at work. Usually they either happen before work - while sitting at your local coffeeplace before heading to work or late at night at home, hacking away until everything is quiet outside. It doesn't matter when as long as you find the time for it.
Working during office hours & getting your company to understand the benefits is not an easy task to accomplish. At the IIC we have been dedicating time each week for these projects for almost 3 years now and it's been amazing. I'll talk more about that in a different post. A lot of knowledge learned during passions projects finds its way to our main job - At least for us, it’s a safe place to learn and experiment on new things.
When you can’t get dedicated office hours - go to a coffee shop. I have a group of friends where on Fridays if someone has a craving to code but doesn't want to do it alone, you message the group and most of the time at least one person will join you for a 3-4h coding session. This is just about getting together with different people at a work-friendly coffee shop. You don’t necessarily have to work with the other people there but it really helps set the mood. You actually get things done. Plus if you ever get stuck you have people there who can help you.
BUT THE NUMBER ONE TIP ON WHEN TO DO THEM IS - SCHEDULE THEM
Make sure to add them to your calendar, set them as a reoccurring event. You have to make the time for them or else you will neglect it. I promise that you won't regret working on the things you love.
How do I do a passion project?
It starts with a spark, an idea. Something you heard about and want to check out, a cool idea you had with friends or during a eureka moment in the shower. It doesn't matter :)
Write it down, a notepad, Evernote, send yourself an email. Collect all these ideas in a place you can easily come back to. Setting them aside helps you stay focused on whatever you need to be doing and as an added bonus if there ever comes a time where you don't have new ones you'll always have this collection of ideas to come back to.
Next I want you to talk about your idea with people, flesh it out. If you're doing a LEARNING project and want to learn something new. Try marrying the new tech with a simple idea. That way when you work on learning something new you won't build the world's #6,522,29 Todo list. You can also steal ideas. If the purpose of your project is to learn something and not necessarily release it out to the wild, you can steal an existing concept and rebuild it in whatever tech you want to learn.
Then you need to sit down and DESIGN you project, make sure you know all the moving bits and pieces, what screens you have and so on. This should take too long but will help you make sure that you're aligned on what you're trying to build.
Now THROW away half of what you planned. Find your MVP for your MVP. Get rid of that unnecessary authentication, those excess sharing options and the unneeded windows phone support. Make sure the scope of what you're trying to build is SMALL and MANAGEABLE.
After you finish WORKING on your project comes the most important part and that FINISHING IT. A lot of people fail here, including me - but most project mean nothing if they are abandoned or never finished. It's better to burn out, than to fade away - and that's true for passions projects. Some of them may become ongoing projects that you have to maintain but it's crucial to take that last step and get your project out there to the world.
And when you do that, make sure your project is SPECIAL. Hundreds of projects and mini sites are launched every day - you have to make sure yours stands out. Apply a nice coat of paint, buy that $10 domain - It's the little things that go a long way. I promise you that in the end you'll be proud of what you've built.
This is where my post deviates from the talk. Instead of continuing to talk about services and site I use regularly, giving examples or talking about what we do at the IIC. I'll take a short break and allow you, and me to take a breather.
Thanks for listening to me babble, hope you enjoyed the post.
You can always find me on twitter @yonbergman.
See you next time :)