I recently published a website that was built with technologies I was unfamiliar with. I accomplished my goals for the side-project and I learned a lot about those new techs. Yay!
I didn’t feel good about the quality of my work. I took lazy short-cuts and found “creative” workarounds which ran counter to the spirit of the technologies I was supposedly trying to learn. I knew this was a problem from the start, because I’ve been down this road many times before and I recognized that I had conflicting motivations.
I wanted to learn the new techs, but I also wanted to ship before the end of the holiday season. The deadline was self-imposed, sure, but I thought it was important because the vast majority of my attempted side-projects wither up and die long before making it to the mausoleum.
Ever heard of the project management triangle? The idea is that all projects take time, quality, and resources and you always end up skimping on one of the three.
In my case, the resources were essentially fixed so I had to choose between my self-imposed deadline and the quality of the website. I made a conscious decision to sacrifice on the quality because I thought that it would give me the best shot at a successful outcome…and the project was a success!
I believe that the way we code in our side-projects contributes to the habits that we bring into our professional programming. By taking short-cuts, I am encouraging bad-habits and building unfavorable “muscle memory”.
Given the project management triangle idea above, the “right” answer is hold quality above all and either sacrifice the time or resources required for the project.
Ultimately, I am happy with the way things turned out. If I had opted to focus on the quality then I would probably still be researching the techs, and the side-project would have been downgraded to an idea I had once.
I completed my goals, and now that I have some experience with the new technologies I an making an informed decision to invest more time into learning them properly. I skipped a few steps along the way so I’m heading back to square one. I am going to learn these technologies from the bottom up so that the next time I have an idea for a website, I can do a better job with less compromise.
So, what’s your philosophy on side projects? Did I make the right decision?
PS: The project is open-source if you're curious about the project or my crappy code. It's on Github.
Photo by Michał Parzuchowski on Unsplash