Duo didn't make it into the top 100 (let alone the top 50), which has
been very hard for me (I hate losing!) but since people here expressed
a lot of enthusiam for our project, I thought you might enjoy reading
about its development in more detail. You can watch a short video of
Duo here if you haven't already:
http://www.youtube.com/watch?v=fwSBLdGCjnY
Although we lost the contest, Duo is alive and kicking. For now we
are shifting our focus to other platforms (for practical reasons, not
out of spite). If anyone is interested in investing in Duo or
contributing to it, or if you know someone who might be, please
contact me here:
michael AT codality DOT com
So this is the story of Duo and its development. If you're more
interested in technical details, you might want to skip to the next
post where I talk about "what went right" and "what went wrong".
Awhile back I quit my job as a game developer to work on my own
project. I used my savings to support myself while I developed a new
game development tool. Over the course of several months I made good
progress. In November of 2007 I heard about Android and Google's
development competition. I thought: hey, here's a good short-term
opportunity. But my project at the time wasn't a good fit for Android
and I didn't have any good ideas for new mobile applications, so I
didn't look into Android any further.
Then, one evening in late 2007, I had an enlightening conversation
with an industrial designer friend of mine. She had recently
interviewed for a position with Microsoft's mobile division and she
told me about their grueling interview process. They were hiring for
people to help develop innovative new mobile applications. She told
me that one of their interview exercises was to design a solution for
telling stories using your mobile phone. This was a deliberately open-
ended exercise. The solution could be anything you imagined. I love
exercises like this, so it planted a seed in my mind.
That seed germinated in early January 2008. One night I thought to
myself: what would my solution to the storytelling exercise be? I
thought it would be cool to use your phone to record information as
you traveled around, and then to share that information with your
friends. This could include text, tags, photos, audio, video, and
ratings. I thought that if there was a way to combine all of these
forms of information using a cohesive and elegant interface, you'd
have a very powerful tool for recording and sharing a huge variety of
location-based information, including not just your personal stories,
but also things like restaurant ratings. I called these potential
blobs of information "footprints". The idea would be to create
software that lets you leave footprints in your wake for your friends
and perhaps the public to experience.
In hindsight I realize that this wasn't a particularly innovative
idea, but at the time I was fairly naive about the state of mobile
application development, so it seemed new and exciting to me. I kept
thinking about it and, after sharing the idea with some trusted
friends, we started coming up with a bunch of other (fairly obvious)
ideas: automatic friend finding, connecting footprints together to
create paths for things like guided tours, creating "future
footprints" for coordinating events, various corresponding business
models, etc.
In early January I decided to download Android and start tinkering to
see what we might be able to develop in the time remaining before the
contest deadline. The results were promising. I hadn't coded in Java
in years (my background is C/C++), but I was able to get up and
running with Android very quickly. I found the documentation to be
very good for an early release of a new SDK. Where documentation was
lacking, decompliation could be used to look under the hood, revealing
a solid design with code that was easy to follow (except the
obfuscated mapping classes...argh!)
Satisfied with Android as a development platform, I knew I wouldn't be
able to do this alone, so the next task was to find a team. A very
good designer friend of mine was also excited by the idea and wanted
to contribute part-time. His involvement would prove invaluable,
particularly during the final stage of UI iteration. He also had a
good friend who was a server development wiz. We approached him with
our idea and he wanted to contribute part-time to develop all the
backend tech, which was great.
Within a few days I developed a very simple prototype comprised of a
map and a list of fake footprints. Our server wiz created a simple
backend and we connected the two successfully. This was extremely
encouraging. So much progress in such a short time!
The three of us were also actively posting new ideas in a private
forum. As a result of our early prototyping and brainstorming, I
experienced one of those "aha" moments where you end up pacing around
the room excitedly, thinking non-stop about all the implications of an
idea. The idea in question emerged in the following way. Our
prototype was built with GPS in mind. You'd create footprints at your
GPS location. This worked well for creating footprints, but what
about browsing them? What about finding footprints in places you
visited previously, or in places you hoped to visit in the future?
What if we introduced a lightweight, game-like interface that allowed
you to easily travel "out-of-body" to explore your city and the entire
world? I wrote a lengthy post about this and the other guys were
excited by it too. They extended it with lots of ideas of their own.
We knew it would be challenging to combine a fun interface together
with locational information, but we felt we were onto something, and
there was huge potential. The business models with this approach
would be much more varied and potentially lucrative. Thus Duo was
born. Many more ideas kept flowing after that.
Meanwhile, I had been in the process of applying for a government
grant for my game development tool. After a great deal of inner
turmoil, I decided to change this grant application to be for Duo
instead. While awaiting the outcome of the grant application, I
continued developing the client prototype, spending a lot of time
establishing a solid framework for networking and storage, and testing
different UI ideas. I also converted everything to the new SDK
release.
At the end of February our grant application was successful, which
meant the government would cover half the cost of hiring two part-time
Canadian contractors to help us (I paid for the other half). A friend
of mine from university was interested in helping us with programming,
and I advertised for an artist to help us too. As of Feb 27th we
entered proper development based on a loose but ambitious schedule.
Our team was comprised of:
- Me, full-time client programmer
- Fred, part-time server programmer
- Eric C, part-time designer
- Eric T, part-time client programmer
- Jasper, artist
Everything progressed very smoothly throughout March. The framework I
had built in the previous month allowed me to fairly quickly connect
to the backend as Fred found time in his busy schedule to implement
it. I developed the tech we'd need for an avatar and buildings while
Jasper worked with Eric C to start cranking out art. Eric T made
solid progress each week with the interior tile renderer.
By April 1st, we had an app that could do all kinds of stuff, but the
interface was still very rough around the edges. Other major problems
included: you couldn't properly login yet, you couldn't delete what
you created, dynamic updates weren't really working so it was
impossible to see friends creating footprints, etc. The amount of
work we did in the final two weeks to bring it all together was
remarkable and I'm really proud of our team.
We spent all our time developing, and barely any time on documentation
or "marketing" because we believed that this competition would be
about results. We thought the best way for judges to understand Duo
would be to try it, and we thought the judging process would involve
several people using it for at least several minutes each.
Unfortunately, according to our logs, only a few judges tried Duo, and
their experiences were brief. Maybe the client crashed and they
couldn't be bothered to login again. Maybe they didn't know you can
leave your house and go outside. Maybe they thought the underlying
premise wasn't promising enough. Maybe they didn't read our
document. Maybe they did read our document but they didn't like it.
We'll probably never know, but in retrospect I wish I had spent time
creating a demonstration video to submit as part of our document
(rather than creating it after-the-fact). Perhaps that would've
helped us score better.
That's the story of Duo in a nutshell. Next I'll go into more
technical details about what went right and what went wrong during
development.