Time to stop talking and start coding

December 23, 2007

I was in the middle of a lengthy blog post on Java complexity when it hit me: I’ve been opinionating this whole time, with nothing but vague references to my work to back it up. So much for credibility :)

Obviously I can’t spill the beans about work, other than in very specific instances of technology use, like I have been. But that is of limited interest. Who really cares what I think about technology X , or that I got in a flame war about Code Coverage? I think more people would be interested in what I’m using for code coverage, how I’m using Spring, or Rails, or Ext or {insert technology x here}.

Something that would be even better would be to document an actual application, one outside of work that I can be completely transparent about.

So…I’m a data geek. I love data, and I love the way it has become so easy to mash up. For me collecting and exposing data is what motivated my early involvement in the project that eventually became a real company. While Evri has a noble mission statement that is applicable to data in general, an itch I have that is not getting scratched right now is the juxtaposition of exercise data with geoloc data in a way that is actually useful to me.

When I strap on my Garmin 305, I want to be able to:

(1) Track my HR, speed and location for any activity that I happen to do outside.

(2) Upload my data, and with little to no extra configuration

(3) View/Pivot on the data in the following ways:

  • I want to be able to view my stats — specifically, how hard am I working over the course? What is my average HR, average pace, average elevation gain, etc, for that run ?
  • I want to see that run/bike/run on the richest map UI possible. Right now that’s Google Earth, tomorrow it might be something else.
  • I want to be able to track those stats over a specific segment of my bike/run/ski. I want to break them out per mile, but also be able to be able to select a segment of my bike/run/ski and view them.
  • If the route I have just run correlates (within an adjustable delta) to a route I have previously run, I want those two to be grouped together.
  • I want to be able to view my progress (or lack thereof) over those routes by graphing the stats over time. If I run course X on week Y, then run it on week Y+1, I want to see how my average HR compares. I want to see how my average pace compares.

That last point was the important one to me. One way to measure fitness is Actual Effort Expended — how hard did I work vs how fast did I go? Ideally, if E = effort and P = pace, you would want E to drop while P increases. In other words you want E/P to go to zero. I might graph it the other way so that it looks good on a graph (going to infinite instead of zero.

Every solution I’ve looked at so far does (1) and (2) above, but they don’t quite do (3). If they do,

(1) they charge you for that kind of calculation.

(2) they make you do the calculation.

First of all, I don’t think that anyone should be charged for that. I think that the ability to mash up and pivot data is very close to being commoditized, and that the cost of that should be underwritten by ads. Additional services, like personal training, should be subscription based. But the ability to view and manipulate your data should be an inalienable right, goddamnit.

Second, I want to be able to view and pivot on this kind of data with little to no effort. I don’t want to do anything more than adjust standard defaults if and only if needed. I don’t want to have to create or update or enter new routes, I want them to emerge from the data. I want my data to tell me when I’m in shape, when I’m out of shape, when I’m having a bad day, when I’ve got a new favorite route, when my route starts to change, etc.

I dont want to think too hard about manipulating my data. I may be a data geek, but I want to have a low to no barrier experience once I upload the data.

Over the next year I want to treat this like a real software project. I want to

  1. determine feasibility
  2. evolve requirements
  3. evolve user scenarios
  4. build a data model that supports those scenarios
  5. start implementing trace route prototypes of the software using things that I want to, and processes I want to.
  6. move the app off of my box to an EC2 stack.
  7. point my friends at it (and make them write their own filters if they use some other kind of GPS).

I want to have some fun, on my own time, with something I might actually use, and sharpen up my total stack skills on the way. Stay tuned fearless reader (even if that fearless reader is the fearless writer :) This one actually excites me.

The first step in the feasibility process is to make sure I can actually parse Garmin 305 data….I’ll update when I get some more details.