At the point of this writing, my Github account has 24 public repositories, about ten of which could be considered small unfinished or abandoned side projects. Here are some examples:
- contentful-utils: a small CLI tool to help managing content types and entries on Contentful, a headless content management system.
- carousel: my very unfinished attempt to build a nice, responsive, touch friendly slider that I could use on a photography portfolio site, which I never started building.
- twitter-tail/twitter-tail-server: a client/server application that was supposed to let you follow a topic or location on Twitter using the streaming API. I started it to get a feeling for Angular 2 after attending AngularConnect 2016.
None of these projects are in a state where I would consider them complete. I still had/have many ideas for potential features. I even went though the trouble of creating custom colored tags for some of the repositories and created lists of issues. I bet there are many other developers who have this same problem.
We developers have ideas for cool side projects all the time. We like learning new things and tinkering with new technologies. We want to improve our skills and fight off this feeling that we are not learning quickly enough — I know this is at least true for myself. In my experience, however, these side projects often become too big for what they should be: very small prototypes that allow us to learn something and feel a sense of accomplishment. We get lost dreaming up a list of potential features, we will not finish in the little amount of coding time we have next to work and social life. I have the additional problem of quickly losing interest, after my initial curiosity for a problem has been satisfied.
Not completing your projects to a satisfactory level can have several bad effects. I constantly hear a nagging voice reminding me that I still have not finished the cool things I wanted to build; that I never finish the cool things I want to build. I get disappointed and maybe even somewhat anxious about not advancing my skills quickly enough. Basically, I am unable to follow through with anything, right? 😔 When you think about it, that’s not true, of course. These unfinished projects helped me acquire new skills. I did solve problems I had not faced before. But this does not register.
So what might be a good strategy to help yourself feel happy about these accomplishments? How can you turn our small projects into successes? I think, the answer to these questions is: “By finishing”. Because finishing is going to give you a sense of accomplishment. But how are you going to finish? Was this not the problem in the first place? Yes, but now you are going to set small limited scopes for all projects you start. You will figure out the absolute minimum you need to do in order to
- learn something new and
- have something complete to put on the shelf and be happy about.
Whenever you feel the urge to add another feature to a project, put it on a list for potential future versions. Do not try to add it before your project’s initial version is complete. This should help you stay focused. If a project turns out great or you have some actual real-world use for it, you can always come back to that list of nice ideas.
If you find you cannot complete a project for whatever reason, having a very small scope will help you not feeling like you wasted a lot of time. Your idea just did not work out and you can move on to the next.
I for myself, am going to try and follow this strategy. In fact, I wrote this blog post after finding myself unable to implement a JSON/file-based “API” with nothing but Jekyll running on Github Pages, this weekend. I wanted to build a small prototype and write about it. When I found my idea would not work out as planned, at first, I felt like I had wasted time. Then, I realized I had just tried something for an hour or two and I could write about my experience. Suddenly I had this blog post and accomplished something after all. Success! 💪🏻