I got home from the gym yesterday and decided I should start tracking my progress and performance with different lifts. I've played around with an iPhone app (iFitness; other apps were too expensive or didn't seem so great), and found the interface too clunky and slow to actually use. So I figured, I'm a programmer, I should be able to come up with something, right?
I decided no matter what, I don't want to use my iPhone to record reps/sets/weights at the actual gym, pen and paper work best (old skool, I know). So really, I want a program I can transfer those stats to and chart some performance.
I pulled out the pen and paper and started doing a bunch of diagrams... "Let's see. User's will have workouts, will have lifts, will have sets, will have reps, will have weight. So we've got six models to start..." etc. In my head I was building this enormous app that I would publish, then I started thinking about servers... my personal development server isn't big enough for lots of users! Then timelines popped in my head; I need to launch this before I go lifting again (tomorrow!!). What about graphs and charts? Email updates? Workout suggestions? The feature list was building at a crazy rate!
After my ten minute panic, I took a step back. Why do I need to build this for a huge user base? Why do I need user accounts at all? Why can't I just start with one model with some input fields? Why do I need to impose time limits and deadlines? This is a project for me after all... I'll run it locally on my laptop and make it work for just me. The important thing is that I start recording my data.
This revelation spawned several more: If it's just for me, I can use all the cool methods (agile, BDD, Getting Real); I can implement only the features that will make it better for me; I can start with a shitty, ugly app and build on it slowly; I can analyze my own needs, and move from there.
Then I got excited. More excited than I've been for a project in a long time. Like, "OMFG this is gonna ROXXORS!" excited. I actually look forward to getting home from the office and working on this project; all because I realized it's purely mine.
Try it with an idea for an app that you want to build just for you. Pull out anything that doesn't help your goal right now. Work with technologies and ideas that seem exciting to you, but you don't have time to work with normally. Get it up and running right away, so you can actually use it, and get some reward from your effort. You'll be amazed at how quickly the energy and excitement transfers to your everyday "work" projects.