A few weeks ago, I decided to spend my spare time after work tinkering on a side project. I tossed around a few ideas in my head and decided on something small and doable, yet challenging enough to make it worth my while. Although I do plan to charge some money for it, I'm not looking to make a huge profit out of it. This is mostly for my own fun and learning new things that I don't get to do in my day-to-day work.

It's been a few weeks, and while there have been moments of fun, there have mostly been incredibly frustrating moments during this process.

For this little project, I'm using a bunch of tools that I had never used for any extent of time before. As expected, there's a learning curve to every single thing that I use. I love learning to use new things and putting them to use. But it just feels like I'm moving at a glacial pace and will never speed up. I occasionally find myself thinking "If I were doing this in Ruby, I would be half done already."

After one particularly frustrating moment this evening where I just couldn't figure how to do something quickly, I stepped away from the keyboard - always a good idea when you feel frustration or anger while programming - and took a nice walk outside. I could just feel myself getting bothered by this one thing I couldn't figure out in a few minutes.

As I was thinking about my issue, I realized that I was being a perfectionist, which is the quickest way to ensure that you don't get anything done. No one is perfect, and trying to be perfect will just end up in a ton of frustration, anger and a whole lot of nothing to show for your efforts.

I was getting frustrated for no reason - it should be fully expected that if I'm using a new tool and learning about it for the first time, it will take me a while to know how to use it to its capacity. That brought me to another thought - I was actually using some tools that just a few weeks or months ago I either never used them in my life or didn't even know that they existed.

I came back home and began writing down in my notebook some of the things I had accomplished in the last few months. What I wrote down blew my mind - I did a lot more than I ever thought I did. Here are just a few things I had learned in the past 2-3 months alone:

  • I had heard about Express.js for years, but I never knew how to even get started. Now I have a full application up and running with a lot of functionalities.
  • After trying (and failing) to understand how many of the popular front-end Javascript frameworks work, I now have a solid grasp of React and am using it in multiple projects.
  • I had no clue about the existence of RethinkDB, but now I'm using it to power a real-time messaging system.

Had I not sat down to think about it, I would have been still pondering about how little I have done with my side project when, in fact, I've made a ton of progress with the project. That insight has energized me a lot, and it eliminated my frustrations, which were completely invalid.

It's easy to forget the little wins when most people only see and celebrate the final result. Take some time to reflect on what you've done - I'm pretty sure you'll be amazed at all the things you've done without realizing it.