Live By The Platform, Die By The Platform

As a software developer the biggest risk I can take is developing on someone else’s platform. The irony, of course, is that, as a software developer, that is pretty much all I do.

Let me explain: when I write applications for an operating system I am writing on someone else’s platform. I have no control over that underlying platform. If that platform breaks my code, too bad. If that platform dies on me, tough luck. If that platform changes the rules of engagement, so sad.

Often times, as developers, we rely on two platforms or more. Say, for instance, I write an app for Android. Not only am I beholden to every change made by Android but I am also beholden to every change made by every licensee of the Android operating system. Now, let’s compound that problem. Let’s say I require login authentication using Facebook. Oy! Add fuel to the fire. Any changes made to any of those could have a profound impact on my product or service.

I wrote apps for Palm OS, made a good living at it , too, and was highly influential in that space. Does anyone care now? No. I might have been developing for VAX systems. I lived by the Palm OS… and died by the Palm OS.

Look, folks. I know we are all upset about what is happening to Twitter (info here, here and here) but the reality is that developing on top of it has been a questionable decision for a long time now.

The web is open, right? With my own server I’m in control, right? Even the web provides no safety. I do most of Infinity Softworks’ web work in Ruby on Rails. When David Heinemeier Hansson and the crew developing Rails decide to make a change, I’m pretty much stuck. Yes, at least there I can make decisions about when to upgrade to the latest version [1]. All the same, though, it isn’t really feasible for me to run Rails 1 forever. Not only does underlying support and my ability to advance and improve my own software end but I also never take advantage of fixes (like those for stopping SQL injection, one of the more significant problems for any database-based web app).

Don’t buy into that argument and think the web is safe? You’d still be wrong. Even if I can control my own destiny on the server, I still can’t in the browser. As if it would be the first time that Microsoft broke Internet Explorer and left me scrambling at the last minute to make something look right.

The problem is very easy to compound. I’ve been developing Rails apps longer than Objective-C [2]. There is a new framework called RubyMotion that lets me write apps for iOS in Rails and then the framework recompiles it into Objective-C. But iOS 6 launches in a month and how likely is it that RubyMotion can keep up? Will it be able to support all the new software and hardware changes? And if the platform doesn’t take off or the developers lose interest then the problem is even worse. By choosing that intermediate layer, I’ve made a profound business decision that could haunt me horribly in the future.

Even within Objective-C there are various off-the-shelf frameworks (such as frameworks for parsing and creating JSON files used to pass data between an app and a website) that help me write code faster. Choosing one that I rely on, one that isn’t being updated for major new revs of the OS, is an extremely dangerous proposal. If I’m going to pick one, I damn sure better be certain that either 1) I can update and change the code myself; or 2) I can swap it out for a different framework.

Now, let’s get real. Unless I am going to write the operating system and develop all the hardware and figure out my own programming language, it is inevitable that I will write software for a platform. The trick is to minimize the risk.

  1. Choose platforms that will likely be around long-term
  2. Pick platforms that give me some level of control
  3. Decide to work with stable companies
  4. Minimize the number of intermediate layers

We don’t have a choice. As developers we rely on platforms. Let’s be smart about picking the right ones.

[1] Assuming I am running my own servers and have control over such things.
[2] Although I code more in Objective-C and am much better at it.


Thursday morning last week I woke up at 4am in a panic. We had shipped powerOne version 3 to Apple the day before, it was the first time in months I could stop and assess what was going on. And at 4am my world was collapsing.

Sales have slipped. Six months ago we were a top 10 finance category iPad app and then we were a 10-15 ranked app. And then we weren’t the top selling financial calculator app, bested for a day here by a hideously ugly copy of an HP 10b and another day by the HP 12c itself. Our ratings had dropped for a week, into the low 20s then into the high 20s and then into the low 30s. (iPhone stayed steady but when panicking details like this don’t matter.)

It wasn’t like I didn’t see this coming. A couple of our key competitors released iPad versions recently and it had an impact. This wasn’t new but on this day I still couldn’t stop the anxiety.

And then a new product we are releasing next week, a project I couldn’t be prouder of, went into review and stayed there for 12 hours, 18 hours, 24 hours and counting. I never had an app in review that long. My brain went nuts. They were going to reject it! What did we do wrong? What was I going to do to get it approved before Wednesday? Who was I going to beg and plead with because I didn’t want to call two multi-billion dollar companies we developed this with and tell them we can’t launch?

And of course, my brain snowballed from there. The sales will never recover! We are doomed! I’ve never going to get to work on my new project I am so desperate to complete! Our apps suck anyway! There are going to be a million bugs to fix in the new releases and I’m traveling for a week! And the sales are never going to recover anyway! I’m going to have to get a job! My family will have to move! We will be living on the streets! We won’t have anything to eat!

I was gone. My brain was fried. And at 4am last Thursday morning all I could do was lay on the couch and read a book. I couldn’t sleep because every time I shut my eyes the panic returned.

I don’t do that often. Once when I was 19 I went through one of these and I never thought I’d see the other end. I’m a ridiculously rational person and hate being driven by emotion. And all last Thursday was was raw emotion, frazzled and exhausted.

20 years later at least I know better. The stress always subsides, the anxiety always goes away. The key is to just put one foot in front of the other. So I wrote documentation and made my calls and had my Thursday meetings. To most I was a duck on the water: calm as can be on the surface but paddling furiously underneath.

I didn’t sleep well Thursday night, either. No big surprise. But Friday was better. Again, 4am. But this time our category position recovered some and our sales recovered some. By Friday I could remember that we have an amazing revision coming plus three new revenue streams, all in the next week or so. I dove into my new project, feeling creative and refreshed after a forced hiatus from our new product, and got a ton done before the sun rose. And before lunch the app that sat in review for over 40 hours was approved.

The stress is there — we need to get the revenues up — but the excitement about the new opportunities returned.

Of course I still won’t sleep. I’m too excited!

Growing Up

At 26 I thought I was ready to run a company.

In the preceding few years I had done pretty much everything while putting the first building blocks of Infinity Softworks in place. I’d written much of the code, did support, managed the finances, sold and marketed the products, built relationships.

And then in 2000 I met a few good guys and we agreed that we wanted to build something bigger. The stock market was still going strong, the mobile market was growing 100% per year and we were afraid someone would pass us. So we decided to raise a round of funding. And that became my job while I left everyone else to run the company.

But me walking away like this left the company rudderless. I never shared my vision for the company and never pushed my ideas. I didn’t do a good job of defining roles in the company. I can’t even say I even believed in my own abilities.

Infinity Softworks, over the next seven years, failed. By 2007 the revenues were gone and the employees were gone and I was left by myself, again, for the first time since 1999.

But then something funny happened. A spark, an idea, a belief. And I started to build around that idea and I was able to convince one of my previous employees to come back, too. And the idea became more formed over the next year and a half and a few other people offered to help, some with money and others with time.

And now the ideas are solid enough to pursue as a bigger company again. The mobile market is growing better than 100% per year and we are attracting even more people to help out, with money or time or both.

But this time it is different. Not just because the ideas are different and more fully formed but also because I am different.

At 38 I am ready to run a company.

I understand my vision and I understand my strengths and limitations. I have a hiring strategy and a business strategy and a product strategy and the beginnings of a marketing strategy. I am comfortable with who I am. I am no longer ashamed of my attention to detail, my desire to get everything just right, my unbending rule that you don’t ship half-ass crap. I have the personal fortitude to take in other people’s opinions and let them influence the direction without losing my own perspectives. Heck, I have perspectives.

It took me 12 years but I’m ready to lead.

Follow me.

Choose: Win the Battle or Win the War

Yesterday a friend sent me a disturbing post from a California investor. His post talked about the kinds of people he likes to invest in. His example was a CTO of one of his companies, a guy who “works 20 hours a day as CTO, and rides motorcycles, mountain bikes, and numerous other high speed vehicles on weekends.” The investor sees his actions — including after a horrific accident making calls from the ICU and working non-stop from his bed even though he couldn’t move one arm — as signs of “a great leader” who “puts his heart and soul” into his company and “would do anything not to let his team down.”

I have no doubt he is right. I only doubt the misplaced priorities.

Let’s juxtapose this post with two others: one from Fred Wilson, also a venture capitalist, and another from Jeff Atwood, an entrepreneur. Fred today talks about how important it is to build an ecosystem not just in the product but also in the community:

We want to build a world where entrepreneurship is available everywhere. But we also want to do everything we can to grow and nurture the entrepreneurial community in New York City. And we believe that the things we support in NYC can and will be copied throughout the world so that our local ecosystem efforts support our global ecosystem efforts.

And then there is Jeff Atwood who quit Stack Exchange, hugely influential in the development community, to spend more time with his growing family. “We just welcomed two new family members into our family, and running as fast as you can isn’t sustainable for parents of multiple small children.” Jeff, it isn’t sustainable for anyone.

And here’s what’s frustrating to me. The first guy is, in my mind, advocating short-term gains and to hell with any long-term success. He is, for all intents and purposes, celebrating a guy who leads a wholly unsustainable and unhealthy lifestyle, insomuch as it practically killed him. (How, by the way, is that good for the start-up?)

And then there are Fred and Jeff, both of whom point out indirectly that this is about long-term success, this is about sustainability, this is about success-begetting-success. This isn’t just about this generation but about the next one and the one after that.

We can all kill ourselves, literally and figuratively, for our businesses. But winning is an act of attrition as much as it is an act of dominance. The first VC equated starting a company to waging a war. I don’t disagree. But the battle is won in a year. The war is won in a lifetime.

Thinking About The Product Box Theory of Marketing

A few weeks ago I wrote abut the single box theory of software design. I have another one I’d like to add: the product box theory of marketing.

Here’s how I believe each customer’s mind works: I need to do “x” so I need to go to this service to do it. I need to share files across computers so I need to put them in Dropbox. I need to exercise so I will go over to 24 Hour Fitness. I need to buy a book so I will go to I need to buy soap so I will go to Target.

As humans we like to sort and categorize, we like to put things in little boxes. We know when we need to do “blah” we can go to that little box to get it done.

If your product doesn’t fit into a box then don’t ship until it does. And if your product doesn’t satisfy the entire box, don’t ship either.

We almost learned this the hard way. When developing powerOne calculator we realized that the customer says, “I need to do a calculation so I use powerOne.” But early on we considered leaving off the general-purpose calculator. It is a real pain to develop and maintain and the iPhone had one bundled. But after a couple of customer interviews it became clear quickly that the calculator needed to be there. The customer didn’t want to say when I need to calculate this I need powerOne but when I need to calculate this other thing I need the iPhone calculator. No, the customer wants to say I need to calculate and then grab powerOne.

This box is critical for success. Without it the customer will never really latch on to using your product or service.