MBO - Evolution of an iPhone/iPod/iPad App
Creation of a Suitable Environment
Some time around the end of 2009 I came across a reference to a free iPhone programming class given by Stanford University on iTunesU. It sounded like fun. (I earned my money for over 30 years as a programmer. My idea of fun and yours may not be the same.) The next time it was offered I signed up. In the intro I found out that I needed a Mac for development. I still wanted to do it so I bought a used one on eBay.
The course was great. It's the same course that they offer to paying students on their campus. They tape all the lectures and post them online along with notes, assignments, sample code, etc. The only thing missing is interaction with the instructors.
Birth of an App
So I after I finished the course I fumbled about looking for an idea. I asked family and friends. Silence. Well, I did get two responses. One was impossible and the other was boring.
I consider myself a birder, although I haven't done too much recently. I live on Chincoteague Island, VA now. Great place for birds with it's own NWR and National Seashore. I started wondering how I could combine birds and programming.
My first idea was Chincoteague Birder where one could share sighting info. I'm not a complete idiot so I researched whether there was already an app(s) for this. I found BirdsEye which is certainly far better than anything I could do. This led me to eBird. What a great site! I studied what data they made available for iPhone and the site in general. I found their new import data option, a wonderful time saver and completely user unfriendly. I thought about ways to programmatically create import files.
I envisioned a bird list app that could create input to eBird. What's the point of having the information on your device and nowhere else? No more double input work! I searched for apps and didn't find any that did that. Yay.
Building Version 1.1
I needed a digital file of bird names to build a lookup database. eBird had a downloadable file of their taxonomy so I used that. I massaged the data into alphabetical order like a book index. It seemed the obvious way to go - easy for everyone including first-time birders. (More on that later.) Created fields and buttons to get required input without making it all manditory.
I needed a way to get data from device to eBird. Hmm, not so easy. eBird import files have to be on a regular computer. It's very difficult to send data directly to your computer. Think, think, think. Maybe I could use a free online file-sharing site. I found box.net. It's free and set up to get data from iPhone. Yay.
Code, test, code, test, ...
I had it working pretty well. Then I tried to add sightings of birds one might see in Thailand. Not found. What!? A bug? Noooo, eBird only covered Western Hemisphere and Australia. AAAAAARRRGGHHHH. What fun is that?
I went looking for free site for tracking WORLD sightings and found BirdStack. BirdStack also has import data option. It uses IOC's world bird list, 10,000 birds. IOC had a downloadable file of their taxonomy. Yay. Switched to IOC bird names.
Code, test, code, test, ...
Loaded test files to eBird and Birdstack. Some bird names kick out of eBird import validations. What's this? eBird and IOC have different names for some birds! AAAAAARRRGGHHHH. I had to combine the two taxonomies somehow.
Massage, massage, code, test, code, test, ...
Ok, It's looking pretty good, but so far all my testing has been on a simulator on the Mac. I didn't own an iPhone or an iPod Touch. I needed to get a device. iPhone was out. They're expensive, I'd have to switch carriers, and pay for a data plan. So I bought an iPod. So far my free course has cost me about $700 USD. I began field testing. Fixing bugs as I found them. Tweaking performance issues. A couple of functions were slow without the processing power of the computer.
I tried to find beta testers. I had to make sure it was OK on an iPhone. I tried some birding forums and facebook pages. No takers and one snooty deletion of the posting because it was not a free app. Geeze. I finally begged my niece to try it. The only person I knew with an iPhone.
It was ready. I had to pay a $99 annual App Store fee. I was going to call it Easy Bird Lists, but did some checking and found an app with a very similar name. For the icon I used an illustration from the kid's book I wrote - Nicio and Cedar Fire. I set a price that I would be willing to pay. I waited for news of acceptance or rejection. I had read that a lot of apps are rejected. I had braced myself for rejection when the approval notification came. Yay.
Oh yeah. I also created a free app, Refuge Bird Lists, so people would able to get a feel for my style without investing any money.
Oh yeah. I had to make a web site.
Oh yeah. I had to figure out how to create screen shots.
In the App Store
How do you get people to try your app? I'm not going to pay to advertise a $2.99 app that has already cost me $800 and a huge chunk of my time. I approached a couple of web sites and blogs. Review my app, please. My treat. No reply. Except eBird! Yay. They'll give it a whirl. I thought, "Just in time for the World Series of Birding in NJ. Yay". Never heard from them again. Sigh.
My free app got it's first rating. One star. ONE STAR! As far as I'm concerned a free app deserves one star just for being free. It would deserve one star if it didn't work at all. Did I mention that I don't take criticism too well? There was no review, just a number. I was bummed for weeks. Why only one star? Give me an explanation, at least.
Careful what you ask for. The first review for My Bird Observations was scathing. Entitled - "Useless". Can't find birds in alphabetical index. And there's no way for a developer to rebut. Which is a good thing, really. If I had been able to fire off a reply, I probably would have ended up banned from iTunes.
Then I heard from someone who liked it. Yay. And someone on Facebook wanted to beta test. Better late than never. I got feedback from the volunteer. He likes it. Yay. But he can't upload because his company phone blocks box.net site. Uh Oh. Upload is most important part of app as far as I'm concerned. Think. think, think. Email attachment?
Code, test, code, test, ..
It works. Yay. I like the email option. He also would prefer taxonomy index instead of alphabetical. Oy. I don't get it. Yeah, I know you've been birding forever and you have your field guide memorized. Well, suppose you've just started birding. You've seen robins all your life. You're going to look in Thrushes? Right. He also wishes he could cut down the bird database list to local area. Me too. I have to think about it. I pictured myself trying to manually decide where 10,000 birds should go. That would take, Oh I don't know, an eternity?
Turned out IOC file has a field for a general geographical area. I added some filtering. Yay.
Some one else wants taxonomy ordering. I surrender. And eBird now has global bird capability. eBird file has insufficient data for matching bird families and IOC file has some that are undefined or extinct. AAAAAARRRGGHHHH. I finally decided to add another file to bridge the gaps - Clements. Bird database is now a mix of IOC, eBird and Clements info. I'm either a genius or an crazy person. I finally beat the taxonomy ordering into submission. I don't like it. Oh well. It's the best I could do.
More feedback. Someone would like more control of life list. Honestly, that had never occurred to me. I think I thought of this as transient data, not something that would be stored forever. To make the life list processing more robust a big database reorganization was needed. I did it. Yay.
I decided to add filtering by life list. After all, how often is a life bird going to turn up at my feeder?
Someone wants to copy sightings from one list to another with 0 counts. Good idea. Make custom templates (lists of birds) that can populate lists or be used as a filter.
Use eBird 'recent sightings' info to create templates.
User-managed Life List
Make a prettier version for the iPad.