iPhone Development: Heaven or Hell?

Trism by Demiforce

Inspiration

The day I heard about Trism I dropped everything and bought an iPod Touch. Trism is a sliding puzzle game that uses the accelerometer in the iPhone or iPod Touch to determine which way the pieces slide. The game is good (I bought it!) but what really caught my attention was that Trism made $250,000 in its first two months on the iTunes App Store. Wow.

I had already been making software for Mac OS X for a few years, and I was getting tired of the limitations of developing for the desktop. iPhone programming is a lot like Mac OS X programming, and the power and potential of the device was exciting, so it seemed like a logical thing to jump into. I barely had the money to spare, but to me it was worth it.

You might think my dreams were a lot like the schemes of Ralph Kramden. But you have to remember, this is way way back in 2008 when there only 10,000 apps to compete with. Today there are 100,000 and counting. But frankly, most of them are redundant, and many of them are just plain silly.

Inspired as I was, I purchased a developer account and began learning iPhone programming in my spare time. Once I got comfortable with the basics I decided that my first real project should be something related to music. I had already written a bunch of C++ code to do chord notation and guitar fingerings for FretPet, so it seemed like a chord calculator would be the most natural thing to do. I created a folder named "ChordCalc" and started up Photoshop....

In spite of some experience with Cocoa (Apple's frameworks built on Objective-C) it took me a little while to get used to the iPhone SDK, which employs a pretty strict "model-view-controller" (MVC) programming pattern. I got pretty far along in my education and my project was coming along well. But the excitement didn't last very long.

Life Gets In Your Eyes

I had a full-time web programming job and other projects, so there were long periods when I didn't want to see a computer outside of work. Apart from that, my housing situation was miserable and I was trying to revive an unsettled long-distance relationship. On St. Patrick's Day I received news that my mother had died suddenly, and when I returned from Iowa, where she had spent the last months of her life, I went into an existential funk.

Not long afterwards I went to England to venture the affections of someone close to my heart, but fell into a deep depression when that went completely ass over teacup. In keeping with the spirit of the day I shortly became fed up with my web programming job and went back to spotty freelance work. All my iPhone programming ambitions seemed remote from the trials of this fragile and fleeting life, and the momentum was lost.

The End Is Near

At the beginning of October I got an email from Apple to inform me that my $99 developer account was about to expire. I was pretty much unemployed by that time, as all my contract work had dried up, and I had committed to a 10 day Vipassana retreat scheduled for October 10th. So I figured there was nothing to lose but time.

I got down to work and made a heroic effort to get as much done in my limited time as possible, and try to get it submitted to the App Store before my account expired. I wrote a lot of code in a very short time and ended up with something pretty close to complete by the time I went off to learn meditation.

When I returned from meditation there was still lots left to do, so I devoted myself to that task, putting everything else aside. I turned my life into a programming dojo. I finally got to a point where I felt ChordCalc was ready for its world premiere. It didn't have every feature that I had planned but I figured it was good enough for a version 1.0 release. Besides, there's no such thing as a beta version on the iTunes Store!

I completed the app submission process on October 15th and was informed that I'd have to wait at least two weeks for approval. I had heard lots of horror stories on the web from people who had waited months for approval, so I was prepared for a lengthy delay. But on October 29th I got the word from Apple that ChordCalc was approved and ready for sale!

Glitches in the Matrix

My celebration was short-lived when I discovered I still needed to sign a contract with Apple to complete the process. I did this online and after another day the app finally went on sale. I opened up App Store on my iPod Touch and went looking for ChordCalc in the New Releases section but it was nowhere to be seen. I soon discovered that it had been given a release date of October 15, which was the day I submitted it. That was annoying!

I looked into the situation and found many other developers who had the same problem. I was able to determine that (at least during the period when my app was approved) Apple was using whatever "Availability Date" a developer had set during the submission process. Developers can change this date using the "Pricing" form on iTunes Connect. So I logged in and changed the date to November 2, the current date. My app's release date on the store changed to the correct release date, October 29, but by then it was too late for it to show up on the New Releases list. That was annoying too!

Supposedly Apple has fixed this issue but - just to be safe - when I recently submitted ChordCalc Lite I set the availability date way ahead. I don't want to get bitten by this problem again!

Which Brings Us to the Present...

As of this date it's been three weeks since ChordCalc 1.0 debuted on the iTunes App Store. Sales are hardly spectacular, but they're holding steady at around 3 or 4 a day. According to my napkin calculations that's almost enough to pay the rent, but not quite enough for me to take anyone special out for dinner.

I tried setting a discount price for a few days last week and that actually boosted sales quite a lot. I discovered that there are websites that post notices when apps go on sale, so it turns out that having occasional discount periods can be a good way to move your app to the top of those lists.

I haven't done any other kind of publicity except to tell my Facebook friends and mentioning the app in a few iPhone developer forums, so people are mostly discovering it for themselves doing searches on the store and through websites like AppStoreHQ and iPhone App Index that feature iPhone apps and post short reviews.

The Reviews Are In!

Actually, ChordCalc has received only three reviews so far. Two reviews were very positive - 5 Stars! In the interest of full disclosure, I should tell you that the first review of ChordCalc is from my friend and Vegan Radio co-host Derek, who bought the app the day after was released. I didn't ask him to buy and review it, but he wanted to help promote it after seeing me suffer for so long through those pregnant months. I'm sure this is very common with new iPhone apps on the store, so you might want to take those early reviews with a little grain of salt.

The second review was kind of shocking. It was a really nasty condemnation warning people to "stay away from this app" because it's "full of mistakes." The review was actually kind of personal, not just saying that the app had bugs, but that the author had "a poor understanding of music theory." I thought the reviewer was mistaken on some points, and I posted a rebuttal in the application description on the store. But I also followed up on his complaints and learned that there were indeed some real issues that I needed to fix.

Strangely enough, this review came from a trusted friend too, a composer to whom I had given a promo code hoping for some helpful feedback. As you can imagine I was livid when I learned that he had used his review privilege to undermine my sales rather than giving me a chance to fix any problems he found. In discussing this with him I learned that he felt it his duty to warn unwary buyers, lest they be misled. More than that – he had taken the errors in my notation as a sort of personal affront.

Naturally I'm doing my best to see this event from a positive perspective. Misunderstandings are unavoidable in life, and even our best friends don't always make the kindest assessments about our character and experience. I keep an outdated Dalai Lama calendar next to my desk open to a page bearing this helpful advice:

In the practice of tolerance, one's own enemy is the best teacher. Your enemy can teach you tolerance whereas your teacher or your parents cannot. Thus from this viewpoint, an enemy is actually very helpful - the best of friends, the best of teachers.

My friend's negative review spurred me on to the most diligent effort. I spent three wearying allnighters re-aquainting myself with every aspect of chord notation, writing pages and pages of notes, and combing through my code to understand the depth of the problem. Indeed there were some serious issues. I realized my original approach was too simplistic and I could see it just wouldn't suffice to if I wanted proper chord notation.

The only way would be to write the code over from scratch. Whereas before I had tried to be too clever, this time I went with a "brute force" approach. I thought, I'll use the hammer first and then later figure out a more elegant approach. But the hammer worked so well and was efficient enough that I decided to just stick with it. That's not easy for me! I hate giant "if...else" blocks in my code. They remind me that I don't yet understand the underlying pattern. But you know what? Screw it.

The Future Is Bright

Before "the incident" threw me into the flames, I'd been having a ball fixing bugs and making little improvements. I even submitted the app for review at one point, and it was painful to withdraw it. (I can tell this waiting is going to be torture sometimes.) I really wanted people to have the ability to use the guitar in the sideways orientation. I did a really good job on that bit, and I wanted to show it off, bask in the buzz.

I also made a "ChordCalc Lite" as a way to generate interest in the full version. It took only a few hours to make a second target in XCode with the same Chord and Scale screens, but no Circle, Piano, or Guitar. Under that scheme any changes I make apply to both versions of the app.

At least as far as the programming tools go, I have very little to complain about!

The Waiting Game

I submitted ChordCalc 1.0.1 and ChordCalc Lite 1.0 to the App Store in late November, so if all goes well they should both be showing up on the App Store around December 5th.

Apple's approval process for apps takes at least two weeks whether it's a new app or an update. And during the approval process you can't submit another new version without losing your place in the queue. If I discover a new problem the day before my app is going to be approved, I'll have to resubmit it and wait another two weeks.

This long wait between reviews definitely limits the speed of the development cycle, but it's not such a bad thing. If developers could post a new version every day, many of them would do it just to stay at the top of the sort-by-date list. In fact many developers were already taking advantage of the way new versions of apps were affecting listings in the App Store, and Apple responded by no longer moving new versions to the top. The result is that only brand new debuts are going to show up there. We can only speculate whether Apple would make a separate list for new versions, but I doubt it. This function is already served by the update system for your installed apps, and who cares about new versions of apps they don't own?

The Next Project

The next Thinkyhead iPhone project is already underway, but I'm afraid I can't tell you anything about it or I'd have to kill you. Let's just say it's not as technical nor as niche as ChordCalc. I've decided to just do something simple and fun for a change. So if anyone posts a bad review it really won't bother me.

Really!