Starting Somewhere

Becky Hansmeyer has an interesting challenge for app developers:

If you want to encourage and inspire newbies like me, write a blog post about your first app. Share some screenshots from that good ol’ version 1.0 and talk about what was good and not-so-good about your first effort. Everyone says things like “yeah, the first apps I built when I was learning to program were terrible.” But like…pics or it didn’t happen, amiright?

I'm game.

Isis. That's a name that hasn't stood the test of time. Much like the creators of the FX show Archer, being able to cry "FIRST!" doesn't make the word any less loaded now a days.

But anyway that was the name of my first app. At the time I was a (miserable) full-time employee in the (metaphorical) trenches of government contracting. I had always wanted to be a Mac developer, so when the shiny new iOS iPhone SDK thankfully left me no excuses. In my free time I was also doing a lot of contracting as a web developer, which included a bit of server management. So I decided my first project would be a bit self-serving: I wanted something that I could use to keep an eye on the various servers I was responsible for.

A co-worker and I got to work: he took on the server daemon and I took the app. It didn't take us long to have a .NET backend and an iPhone client that would work on both Linux and Windows servers. It had most of what you'd expect for a product like this: monitor all the major hardware (disks, RAM, processor, networking), support for historical aggregation of data, all with a pretty tiny server footprint.

I whipped us up a nice-looking icon and we were in the App Store at $3.99.

In writing this I opened up the old Xcode project and it's kinda fun to recognize all the stuff I take for granted now a days. Retain/release, manually @synthesize'ing properties, storyboards, segues, auto layout, a modern networking and JSON stack, attributed strings.

One conversation I keenly remember having with my partner on this venture was about the app's worth. After nights and weekends spread out over a few months we had 1.0 in review for the store. We were talking next steps over lunch and he brought up his idea to approach the big-wigs in the server monitoring space about selling the app to them. For "easily $50,000+" as it existed today, he asserted.

"Lets be realistic", I asserted. "This didn't take us that much time to write, maybe 100 hours of real work, and it isn't compatible with their existing server tech. Why pay $50k knowing they'd have to rewrite the app to work with their tech when they could pay 2 engineers 1/3th that, over less time than any acquisition process would take, to match the capabilities of our very 1.0 client? We don't even have a customer base to sell them yet."

He was thinking in the right direction: that's where the money was, he was just over-estimating our position. After that conversation he realized how much work was required to get us to look tasty for any kind of acquisition, and didn't want to put in the effort.

So Isis lived in the App Store in maintenance mode while I kept using it to monitor my servers. I made a nice homepage for it and, as with many app developers, let is sit there with a "if you build it they will come" mentality.

Isis sold 6 copies over its lifetime. I'm pretty sure one of those was my mom, trying to encourage me.

So that's the story of my first app, Isis. But back to Becky's challenge: what worked / didn't work?

What worked? I'd like to think the design worked pretty well. While it looks dated today, on iOS iPhone OS 2.0 that was a pretty professional design for my first app.

What didn't work? All the things you'd expect of a first app on a new platform. I had no idea how things were to be organized in Objective C. It was arguably identifiable as clean-ish code, but looking back it just feels so out of place on the platform. Specifically my understanding of how to structure UI code was lacking. ViewControllers vs views vs NIB/XIBs, drawRect vs layers vs using views - the entire graphics stack really took a while to get my head around, and I didn't fully grasp it before launching 1.0, and it shows in the code.

Remember how I mentioned being thankful for attributed strings? I made the unit next to any metric a slightly different font, just a bit smaller. "4.8 MB" for example. Oh god...the frame management and math that came along with that was enough to send a new iPhone developer into a corner crying. That didn't work so well, but that wasn't my fault.

In writing this I realized something that's still pretty universal almost a decade later. What really didn't work: a terrible business plan, no marketing, and unrealistic expectations (at least one of us). Those are skills I've been working hard on, and while I'd like to think I've improved significantly, I'll admit I still feel like I'm flailing here a decade later. As much as I feel amateur-hour in that department, the work I've put into improving here has paid off more than any tech the SDK has thrown at me.

So newbies: welcome! As much as you're struggling with new code, make sure you take time to hone your business skills. WWDC will come every year and deprecate half of the tech you think you understand, but those business and marketing skills give you an advantage over all the other developers out there for life.