When working in software development, there are very few things that create an exhilirating sense of happiness and excitement than when you ship software. Whether it's because you're curious to see how the people will react to it, or simply just sheer relief that all the time and the hard work you put into something is not all lost, the feelings of putting something - anything - out there for the world to see are one of the great joys of working in this field.
As great as that feeling is, I will admit that I haven't shipped as much as I would have liked in the past few years. Sometimes stuff happens in full-time jobs where your ability to ship something is minimized or comes to a standstill. Other times real life gets in the way and you feel like you don't have any time to do anything. But we live in an age when shipping something is so easy, there really should be no excuse to put some work out there. In my case, I rarely shipped anything because of two types of concerns I brought upon myself.
The first reason is that I felt like some parts of my work would be inadequate to release, even to the point where I would be ridiculed or made fun of in some way. Particularly, my front-end skills are not my strong point. I tell everyone that while I can get things done when it comes to designing a website, it'll probably take me a long time to get something in a usable state, and there won't be any guarantees of it being something that's aesthetically pleasing.
The second reason was perfectionism. I would often start to work on a project and getting something going. But midway through, I would spend way too much time on something because I had to get it "just right" before proceeding. This, in turn, would rapidly burn any energy I had towards the project and eventually I would stop because I felt like I didn't build things well enough, even though it's something that probably no one else will see.
This year, I decided that I would not let those things hold me back. I started by working on a smaller project for something I needed, doing my best to not fall into those traps that I felt into before. After two weeks, I'm proud to ship a project that I built from scratch, start to finish - Trello Echo.
The reason I built this project is because Trello is an awesome tool, and I use it quite frequently. But one of the things it doesn't have that I found myself desiring is the ability to create repeatable cards on a repeatable schedule. I looked around and found very little regarding this, and it didn't seem like Trello would be building this any time soon, so I decided to build my own tool.
That's the functional reason why I built Trello Echo. But there was a deeper psychological reason for me doing this. As I mentioned, I haven't shipped much lately, and I had zero momentum going for me in that regard. Last year I built and shipped a site called WaniKani to Anki to help me with my Japanese studies. It was a great feeling to not only ship that small project, it was amazing how others in the WaniKani commnity found it useful. It was also good to see some people take interest in the project after I open-sourced the project.
But it was one of the very few things I shipped last year - full-time job included. I had zero momentum. My thoughts of inadequacy, along with all that fear, uncertainty and doubt, were kicking my ass every single day.
With this project, I feel like I was able to slay both of those aforementioned demons. The front-end of the site is super-simple and there's nothing special. The logo was something I whipped up in five minutes because I didn't want ot spent too much time on it. The screenshots on the home page are not very well done. There are very few options for creating Trello cards after you log in. I used Bootstrap, but the site is not really all that responsive and doesn't work well on mobile devices. I don't even know if it looks right outside of my fancy HiDPI screen. Some of the backend code is pretty messy. I did TDD for the most part but there are still some places with little to no test coverage.
However, the site is functional, and these issues did not deter me from releasing this site. In the past, I would immediately be thinking "That logo looks ridiculous, they'll laugh at me!" or "I need to make sure people can use this on their phones! or "This method is 40 lines long - I need to immediately refactor this!" or even "There's only 85% test coverage? Unacceptable, I cannot release this!" It sounds really silly, but that was my mentality. These are things that I plan to address at some point. It's a huge step for me, since in the past, I would have had to address these issues before even releasing anything.
By releasing a project like this, warts and all, it helps get some momentum to move forward with other projects, knowing that I don't have to be perfect and that I can build something functional even if it's not the best looking website in the entire world. I'm already feeling the urge to create and release more of my ideas out to the world. That, more than anything else, makes shipping this project with its many flaws entirely worth it.