Work Flow & Process… Building side projects

Many people have asked me how I have time to work on personal projects while juggling a full-time gig and having a social life. Friends will often say things like “you’re crazy man, seriously when are you not working on something?” to which I typically respond “I’m always working on something that applies to me.” It’s really a simple idea: I build for myself. I find a problem I have, then I solve it. This alleviates the need to impress anyone but myself, and allow my creative juices to spill as they please. At the end of the day, I love building tools and I’ve always been pragmatic so I want to build useful things. Here are some examples of items I’ve worked on in the past.

  1. HelloBirthday – A Facebook application that manages and delivers personalized birthday messages to my friends. I always forget birthdays and desperately needed a way to stay on top of my online social network.
  2. SimplyFor.us – A stand-alone web application that allows me to privately maintain a list of my ideas, and voluntarily share those ideas via time limited access codes.
  3. ThatWasMean – A web application for posting and scoring things people did that were mean. It was a joke 😉 but it kept my co-workers and I laughing for hours.
  4. ThinkEffect’s CMS – A web application I build to spawn easy to customize web applications for clients. I did this for fun on the side and later incorporated it into my small design group.
  5. AnswerWise – A web application, and mobile app, that crowd-sources answers to any kind of question. So I could be sitting around in some new city and see something cool, snap a picture, and ask “What the heck is that?”
  6. SyncedHost – A small web application that queued requests for free web hosting applications and allowed me to approve or deny the apps. I ran a small web hosting company and was inundated with requests via e-mail and needed something to track applicants and automatically create web hosting accounts and e-mail details out.

There are plenty of other, less glamorous, projects but these highlight a solution to a need. If other people also find them to be useful, that is just a bonus.

The reason I’m such a stickler about building for me is that my motivations come and go and as they do I like to have projects that fill different areas of interest. Context switching is what I’m all about. Further, it’s a dive into how I think. Technology should benefit the one who is building it. If a secondary market pops up (i.e. everyone else) then that is wonderful and I will happily introduce new features by popular vote. But for now, it’s all about solving lots of little problems.

One common problem that people run into is that they can’t think of anything to work on. It’s really easy: look at what you do every day and ask if there is something that you’d want to do differently. More likely than not you’ll have a project in no time. Looking at my projects above, there are even a few that have been solved by other people but I still want to build my own. The motives behind building my own could be that I am looking for just one feature out of many or a simplified version of a specific feature. It’s not out of the question to rebuild something just to see how to do it! In fact, I often search for what I have in mind before I start building to see how others solved the problem. It keeps me honest and provides one of the most valuable insights to developing solutions: not all problems are easy to solve; respect people who have solved them and made the solution easy to use and look pretty 😉

OK. So we now know that the projects I build are mostly point-solutions to my day to day routines. Great, so finding time to work on them actually makes sense: I’m investing in saving time. And sure enough, it works. Take SimplyFor.us as an example, I used to carry around a notepad to write down my ideas during the day. Eventually I would somehow lose or misplace that notepad and all of the ideas written inside of it. Creating a web application to store all of my ideas solved the main problem, losing ideas. Additionally I created an easy way to share my ideas with others which solved my other annoyance of having to send e-mails to people requesting feedback. Now I store my idea on the go and share it whenever I want. I can update my ideas at any time, allowing them to truly evolve, and also keep notes on who else is working on a similar idea or what progress I have made on any of them. I bet I used to spend at least an hour a week messing with tracking and managing ideas that popped into my head. SimplyFor.us took about 8 hours to build and deploy. I’ve been using it for months. It solves for my needs.

Fair enough. How did I go about building it? This is the fun part. SimplyFor.us actually integrates into my build stack nicely. When I feel like working on something I first check my “bank of ideas” and if nothing pops out worth tackling I go back to the drawing board and work on something I’ve already built.  In the case where I want to build something new here are the steps I follow:

  1. Write a few sentences describing the goal of what I’m building.
    1. What’s it supposed to solve?
    2. How will it get done?
    3. What’s the one use case that I could ship this tool after completing.
  2. Next, design the user experience around that one use case.
    1. Get into Balsamiq, OmniGraffle, or some other UI mock tool and design.
    2. Share the design with my friend Jon Kupferman and see what he has to say. If he OK’s, on to step 3.
  3. Build the use case. I use Ruby on Rails. Yes, I always do.
    1. Start an SVN/Git repository and check in the Rails base
    2. Write a few tests (not all the time. I’m trying). Make those tests pass.
    3. Style up a front-end worth looking at.
    4. Make sure the use case is solved.
    5. Push it to one of my web hosts and give it a domain.
  4. Use the damn thing for a few weeks. Sharing with friends as I go, if I think it will help people or if I want some more feedback.
    1. But never push it onto people. I don’t spam it on Reddit. I rarely do any promotion outside of posting to my own blog. It’s for me after all.
  5. Iterate, if necessary.

Pretty straight forward. I’m no prodigy, genius, mastermind, etc. I just stick to a pattern, rinse and repeat. If I get bored, I context switch until I’m entertained again. Eventually I will go back to a project that gets left in the dirt, brush it off, and continue. I call this strategy nothing and it consists of identifying what would be great, designing what is necessary, and building what works.

(I’d like to post some mockups from the flow I described above and hopefully will get around to that one day soon)