sub specie aeternitatis

Is My Personal Project Worth Doing?

March 4, 2014

Almost 3 months ago, I started a new project I call Miles Chat. I run a home server, named Miles, and on this server I had been using an open source chat application called Ajax Chat, for a user base of 2. It served its purpose for us (my friend and I), but I wanted more functionality and had the idea to build my own. I batted around this idea for months, but didn’t do my first commit until the middle of December last year. From there I’ve been slowly building it in my free time and pushed it out to Github a few weeks ago. It lives here if you’re interested.

Yet even almost from the beginning, I’d been plagued with a sense of doubt as to whether or not I should even be attempting to write yet another real time chat application. Isn’t this re-inventing the wheel for the 1000th time? If my friend and I wanted to simply chat why not use something like IRC, Skype, Google chat, Hip Chat, Campfire, etc, etc? I even tried out another great open source chat application, Kandan, but funnily enough my friend didn’t’ like the theme so since 50% of the user base didn’t like the looks, I abandoned it. My time is limited, what I can build is finite, and if I spend it building a product that already exists in so many shapes and forms, am I not ultimately wasting away part of my life?

These nagging thoughts bounced around in the back of my head for several weeks after I started coding in earnest, but the longer I’ve pushed forward with development, the more they’ve lessened and the more confident I’ve become that this a good use of my time, not a way to waste it. Why?

First, it solves a personal itch and fills a niche product market, if you will. Sure, the market is an audience of two, but ultimately if we find the product useful then it has “succeeded” (whatever that means for a software product). We were using a product that didn’t satisfy all our needs and, even with what little I’ve built so far, the current iteration of miles chat does everything our previous platform did (at least the features we used) plus a number of things I wished the older platform could do. It is custom built software for a tiny audience, and if either of us decides it needs to do something it doesn’t, then I can incorporate that into the application. I get to solve my own pain points in the software, and that’s awesome.

Second, this is another chance to learn. The world of software development never slows, and my work on this project is another way to learn new things, to use technologies I might never use in my day job. My violin teacher used to say “You don’t have to practice every day, just the days you eat”. I might have hated having to practice so much when I was a kid, but these habits of practice have served me well as I switched fields from music to programming. I am never finished learning, there is always a different way, perhaps a better way, to accomplish any given task. There is always another language to pick up, a new framework to look into, yet another javascript library to investigate. Time spent learning something new is not time wasted.

And, above all, it gives me joy to work on this. The process of crafting something for myself is something I love. I love immersing myself in the code, the technologies, the problem solving and even the bugs (to a certain extent). There exists this, thing, that didn’t exist in the world before I came along and created it. It may never be used by anyone but me and my friend, but the hours I spent creating it are, in some very real sense, all the reward I need. If anyone else ever comes along and uses it, that’s just icing on the cake.