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.

Hulu+ Fail

As I mentioned before, my wife and I finally pulled the plug on cable. We had gone down to a very basic package but realized we don’t even need that since the signal at our house is so strong. We have been on Netflix for a long time and then, with the cable canceled, added Amazon Prime. There are some movies there we don’t get streaming on Netflix, plus free two-day shipping and the potential for the Kindle Lending Library.

It doesn’t mean we don’t watch tv. Most evenings, by the time the kids are in bed, there just isn’t time for a movie. We usually have some tv show queued up. It has been fun to revisit shows from our youth (some of them anyway) and watch new stuff that we haven’t seen before. When they are streamed we are in great shape as we will sit down and watch 3 or 4 episodes of a 20 minute comedy in a couple of hours. We focus on a series, get into the story lines, and literally watch an entire series in a few months.

So when I saw that Hulu+ had come to Apple TV I got all excited. Hey! A channel specifically dedicated to streaming tv shows! That’d be awesome!

Oh, was I wrong.

To be honest, I am not certain what the benefit of Hulu is. I guess if you missed an episode of a current tv show Hulu+ would be there as a backstop. But when it comes to old episodes, it is really hit or miss. For instance, Hulu+ had the last half a year or so of House but was missing earlier episodes. Seinfeld had the last season but only a few episodes per season for earlier stuff or snippets of shows, all of which were mixed together and hard to decipher what was what. I also have heard that you still have to watch commercials on the paid service, but I didn’t get that far as the incomplete seasons was a deal breaker.

It’s a real shame, honestly, as I was ready to throw money at the service.

Here’s what I’d like to see: a service that says for $10 per month you can watch all the movies and tv shows you want. I know that this isn’t really feasible for the studios so here’s the deal I’d try to make if I was running on my streaming service: I will only make available stuff that is 20 or more years old. The studios get to charge a premium for the “current” stuff and a service for the rest. Each month we’d get new content based on what was released 20 years ago that month. It’d be a great deal and provide plenty of excellent content.

Rewarding Those Who Care Enough To Write

Brad Feld wrote a couple of days ago about rewarding early feedback with features:

Occasionally you get feedback. Sometimes it’s precise – a feature request, a suggestion for how to do something differently, or a description of something that’s not working correctly.

Reward this feedback with features. Fix the bug and then tell the person who reported it that you did and thank them for pointing it out. Implement the requested feature and tell the person that suggested it that you did it. Write a blog post about it and name the feature after the person. Be public about thanking the person for the suggestion.

Every time we get a feature request it goes into a database attached to that feature. (Really just a field with a bunch of names and emails.) When we implement the feature, we email those who requested it thanking them for doing so and telling them it will be in the next release. It definitely makes a profound impact — like handwriting a thank you note — and guarantee it has increased customer loyalty. I have some customers who have stuck with us for over 10 years, following us from one platform to the next as Palm then Windows Mobile then BlackBerry and now iOS and Android come and go from favor.

This isn’t the only way to do it. I’m sure there are many. But I do know that making customers feel special never hurts, especially early ones who are taking a big risk on you and your product.

Evernote, The Exception To The Rule?

I enjoy using Evernote and am a paid subscriber. I store a lot of notes and information in there, stuff that is very easy to share with my co-workers and others that need to know. It’s a great service and their CEO, Phil Libin, has helped start-ups everywhere by 1) meeting with many of them in person and 2) sharing a lot of data and information publicly that most won’t do.

This is exceptional in and of itself but I want to talk about something else about Evernote that might be exceptional as well: it’s lack of product design. In some ways, Evernote is a throw-back to an era when functionality was vastly more important than form as Evernote’s products are nothing special to look at and oddly rough around the edges in many cases.

It seems in the last few years that the emphasis on form has taken center stage. I’m not certain whether that is because Apple’s iPhone and aesthetic has been dominant. After all, Apple loves some good looking apps. Maybe aesthetic emphasis has to do with trying to stand out in a market of 700,000 apps and growing. But whatever the case, it seems that to get noticed these days your app has to be a beautiful, groundbreaking design. Oh, and be highly functional, too.

My Processes Are Being Destroyed

I was 13 when I got my first computer, 25 years ago, and bought my second computer when I was 20. (Between 13 and 20 I either used my Apple IIc or the school’s Macintosh computers.) I bought a Mac that year (1994) but switched to Windows in early 1996. It was a Gateway desktop system, followed by a few Dell laptops and Sony desktop systems before switching back to Mac in 2007. Since then I’ve been all Mac. Outside of the original Apple IIc, I have never owned a system that didn’t use a mouse or worked via touch. In fact, I refused to use Windows until Windows 95 as Windows 3.1 was a joke.

I tell you all this for a reason: I’ve spent 25 years using computers and 18 years using mice in graphical interfaces. In that time, most of my processes for getting stuff done in this very awkward world have been baked. And frankly, I don’t want to change. My processes work.

This is why I am a little concerned about all the changes Apple and Microsoft are making to OS X and Windows. In a time when I have far more important things to do then figure out new processes within the way Apple and Microsoft want us to do things, both companies are undergoing massive changes in their operating systems.

Windows 8, of course, moves us to a hybrid model of computing, partly with the style formerly-known-as-Metro and partly with the “classic” Windows style. Apple’s new operating system OS X Mountain Lion coupled with changes made in the previous revision known as Lion, also are attempting to change us from a file structure to an app orientation. In short, to launch files, go to the app, find your file and work on it. No need to save anymore as Apple does it automatically.

I understand the benefits: it is easier for new users and matches up with a uniform computing approach across mobile and desktop systems. But it sure is hard to swallow all the changes for us old timers who have built processes based on the computing structure we have all known for 30 years. I have files everywhere and rarely launch apps. Instead, I usually find the file I want to work on and launch the app by double-clicking on it.

The rate of change is escalating. Apple’s releasing a new OS every year and my guess is Microsoft will soon do the same. I am having a hard time keeping up with all the changes. I can only imagine how hard it is for my less technical family members and friends.