Weblog

Weather View iPhone App Retrospective

It seems like project ”postmortems“ are trendy these days for software development. I wanted to do one for my first iPhone application, Weather View, but ”postmortem“ seems like the wrong word to use. The application is far from being dead—I've just finished the first version, and have many iterations to go. So instead, here's my retrospective; a look back at how I first came upon the idea and a look into how the project progressed over time.

Available in the App Store


Preface: The Cubicle Window

In 2008, I made a quick and dirty website that had its entire background an HTML5 canvas view animating the weather for a location, as provided by the Yahoo! Weather API. It worked great… in Safari and Firefox, which were the only browsers that had any support for canvas. As I worked at my little desk, far from any window to the outside world, I thought to myself, ”How great would it be if I had a window at my desk?“

Thus, an idea was born. At the time, I had neither an iPhone nor an iPad (it was 2008, the iPad wasn't even a real thing at the time). So I set out to make a desktop application—which I quickly grew tired of attempting to make.

Fast-forwarded 2 years. The iPad is a reality now. Everyone rejoices. Hooray! I have a little, old, iPhone 3G. It works, sort of (the iPhone 4 was the new hotness). Seeing the iPad sitting on a dock at a desk reminded me: why couldn't that be my window to the outside world?

So I set off designing my application, ”Cubicle Window“ for the iPad.

Round 1: Giving Up

Design

From the start, I knew that I wanted to keep things as simple as possible from a design perspective; let the view do that talking, not the flare around it.

I set off a built up a real window within the iPad. Wooden frame, pull shade, and a nice little view of a field and sky. Overall, it worked—sort of.

Round 1 design of Weather View

Development

At the time, I wasn't comfortable diving into Objective-C, so I pulled up resources that I knew. I chose Titanium Mobile as the platform to create the application in, because I could write the entire application in JavaScript. HTML, and CSS. This was my first mistake.

I really enjoyed working with Titanium. I was able to replicate all of the iOS-standard controls really easily and the only learning curve was Titanium's API documentation (which has gotten much better since).

However, after nearly completing the application, I was finding more and more that I just could not get any decent performance out of the animation. I got to the point of crippling my iPad's memory limits and soon gave up.

Round 2: Just Learn It Already

Come February I was transitioned at my day job to become the tech lead of an experimental mobile games division. Not a single one of us knew any real Objective-C, but we all knew that in order to get the performance we needed out of the game, we'd have to write native code (let's not argue this any more right now). So we started learning it.

And learn it I did, in the only way I know how. I went home and started rewriting Cubicle Window from the ground up with native iOS Objective-C.

I set out to build this with ”minimum viable product“ in mind, but not until now did I realize how fast my timeline actually ended up:

  • In 1 day, I had clouds, a sun, and rain.
  • By day 3, I had a pull shad, basic settings, and a decent window sitting on my desk.
  • By the end of my first week, I had up-to-date weather reporting and mostly visualized, including the night sky.
  • I changed my app from iPad-only to Universal in less than a day.
  • In just 1 month, I had beta builds pushed out to the hands of friends for testing.
  • In 2 months and a couple days, I had my 1.0 release submitted to the App Store for approval.

I chose Cocos2D to handle all of the visuals and animation over openGL, while keeping the rest of the application using built-in Cocoa Touch controls. This worked absolutely great. I was able to put two libraries to use exactly how they were intended to be used.

Not only was I quickly iterating on code, I also changed design elements many times over the course of this. However, most of them were relating to the actual view of the weather. Clouds needed touching up, rain just didn't look right, snow was laughable at times, but it all came together. Most of the major elements of my initial design stayed. The one notable piece that was removed right away was the wooden window frame: it was cheesy and frivolous.

What Worked

Cocos2D
The documentation and community around it made there no question of using another library for animation.
Solid, prototyped design prior to development.
While the first iteration with Titanium took almost as long to build, I count it as my prototype for the design. It worked well enough to visualize how the application would work and I was able to iterate quickly at the time, but it became clear early on that it would never be a complete project developed as it was.
Having the solid design meant that I didn't have to make large code refactorings for the sake of design. No time wasted!
Git
Any time I was unsure of a code path I was going down, I quickly made a branch. If it worked, I could easily continue on it or merge it back to the master branch. If it didn't? git branch -D thisbranchsucked.
Beta Testers
I used TestFlight to distribute builds to some friends around the world. They offered great help in tracking down some really nasty bugs.
Thanks, Testers!

What Didn't Work

(Besides Titanium Mobile's performance, of course)

Demanding Perfection
I'm a perfectionist at heart. It was incredibly difficult to hold myself back from tweaking every little thing until it got just perfect. I indulged quite a bit and it set me back.
I likely could have shaved off 2, maybe 3 weeks of development were it not for my demands.
The Icon
It's not very good. I mean, did you look at it?
Thinking the Name Was Final
Cubicle Window was a pretty good name. But it was limiting. For a very long time, I resisted even considering a name change. Once I finally changed it, from lots of feedback from my wonderful beta testers, it was alright… However, it's a huge pain in the ass to change a project name in Xcode for some reason, so now Weather View is just codenamed ”Cubicle Window“ forever. Ugh.

Not much didn't work. I really made a stretch to list the first one here. I more or less stayed focused on the idea of a ”minimum viable product“ for first release. Considering the application made it from zero code to released in 2 months, I'd say it was a success.

In The End

I don't think that I could be happier with the way I picked up and finished this project from the depths of my unfinished work vault. Needless to say, I'll be continuing to support and expand the features of Weather View and create many more projects for iOS in the coming months.

Weather View Final Marketing image


Oh, hey. Weather View is pretty awesome. Did you get it yet?

Available in the App Store

Presentation: You're Still Doing It Wrong

Yesterday's presentation at MinneWebCon '10 was a success. I had a great time watching the other presentations and keynotes, as usual, but the highlight of my day was having the chance to get up and speak about form design and remind everyone that we can always do thing better. As promised, here are my slides, also available on Slideshare.

Speaking at MinneWebCon 2010

As a follow-up to my presentation at MinneWebCon, 2009, the University of Minnesota’s web conference, I’ll be giving a giving the next iteration of my engagement, "It’s the Little Things, Part 2: You’re Still Doing It Wrong". This year, I’ll dive in deeply to the most used, and arguably most important, interaction elements of the web: forms.

WebSlide At MinneDemo

Last Friday, I had the great opportunity to demo WebSlide at MinneDemo, the local geek show & tell event for Minneapolis, MN. As always, it was a great chance to catch up with peers and colleagues and see the awesome stuff that everyone has created. This year, Tech.mn was able to provide us with live video feeds via ustream.

2009: The Year in Review

Outside of being awesome all the time, I have accomplished quite a few other things this year. It actually surprised me to look back and be reminded of all of the things that I’ve done. Not counting freelance and client work, I really feel like I’ve accomplished a lot towards my goal of helping make the web more awesome.