My favorite client came to me with this great idea for a photo reminder app. Not only does she run a successful digital scrapbooking community, but she’s also a total Disney fanatic.
Disnophile? Disney-atic? I don’t know. I feel like there’s a proper term.
Anyway, the idea was basically to build an app that would help people remember to take all of the pictures they want to get when they take their family to Disney. Initially, I doubted this was a problem, but it turns out when you have more than 3 people in your family, it becomes very difficult to remember anything anymore, let alone which ride is Timmy’s favorite and that, even though you’ve always meant to, you never seem to grab that photo of him in front of it.
What it does
You create vacations and add people to them. You then go through the massive list of Landmarks and Memories that the app is pre-loaded with, and you create photo op reminders to which you add people. During your trip to the park, you can access your list of photo ops, sorted by their proximity to you. If you get close enough to one you’ll get a notification.
When you take a photo with the camera (or mark it as taken with Disney’s PhotoPass, or maybe you took it with your DSLR or something), the app makes a note of it and adds it to the Taken List, which you can email to yourself so you know where all the photos you took are, who was in them and what they’re of.
- The vacation selection screen (you can have more than one going at once, so feel free to plan way ahead).
- The Vacation Editor, where you add people, cameras and photo ops to your vacation.
- The Photo Op screen, where you add people to photo ops and take the pictures.
- The Export List email, which is sort of the whole point of the app.
Location, Location, Location
Having fun with the CoreLocation API
The biggest problem for this app, I knew from the beginning, was going to be the location awareness stuff. It turns out that getting hyper-aware location updates constantly while the app is in the background is really tough, and for good reason. It’s a big hit on the battery life, so Apple has built the API specifically against the precise use-case I was trying to build.
With the update that just shipped (late Feburary of 2013), the app now puts itself to sleep instead of letting the OS kill it, so the user is made aware that the app is turning off the location updates. This should guide the users’ expectations to be more in-line with reality.
You can view your photo ops either by list-view (ordered by proximity) or by a map view, showing you all the ops you can quickly get right now.
Green pins are ops that have been taken, red pins are still on your list.
And that’s what I learned from all this; expectations are the first step towards disappointment, and managing user expectations is a huge part of the experience.
I get the feeling that this is a hard lesson to learn, which might explain why it’s taken me so long to learn it.
An Object-Oriented Lifestyle
At some point during the development of this app, a switch in my brain flipped and I finally understood the concept of object-oriented programming. I don’t yet understand it well enough to explain what the difference is in English (or any other language), but it defintely upped my game.
When I had to write the JobScout API for the iOS app, I ported most of the site functionality to an object-oriented structure. I just couldn’t live with the old system anymore; the way I saw code had changed, and there was no going back.
If nothing else, that makes this entire project worth all the heartache and stress that comes with any non-trivial undertaking.
Why? Because we like you!
The journey from idea to App Store was around 5 months. Two updates have shipped since then, addressing some of the location awareness issues.
I ship a lot of stuff, but most of my day is spent alone at a keyboard. I don’t really tweet, I don’t use Facebook very often, and so I don’t have access to a lot of feedback about my work, except when presenting it to a client or a user myself.
But the Disney community is vibrant, and there are a few podcasts that have mentioned the app, and they’ve all been very complimentary. One person said that, at least visually, it was one of the best looking apps he’d ever seen.
I’m always striving for “impressive”, but I’m as afflicted by the designer’s myopia as much as anyone else. I forget that The User is a person that is probably mostly, if not completely, unlike me, and the products I build have to serve them, and while I do believe that my default position of “no, this isn’t good enough” is why I’m at all successful, I have to learn to let go and trust my users.
I can’t believe how long I’ve missed such an obvious truth.