Cross Platform Development, Round 2

Even though my blog is now over six months old, I continue to be flattered when I see links to my posts on other sites. I love clicking through each one, and seeing what the author found interesting about my comments and my site.

Most of the links incoming to my site recently have been about coins. Apparently, my write-ups on the new Presidential $1 Dollar Coin program are finding a fan base.

However, I saw an interesting incoming link from the blog of an old friend of mine, Tony Chor, who runs the Internet Explorer 7 team up at Microsoft. It’s called, Cross Platform Development, and it’s basically a refutation of my recent comments about Joost.

I left a comment on Tony’s blog, but I thought it was worth a follow-up post here.

First, let me just say, Tony has been a Program Manager at Microsoft since before I even declared Computer Science as my major at Stanford.  So he knows what he is talking about.

However, in this case, I want to explain a bit more about why I think that high-quality, cross-platform development is an excellent indicator of a great software team.

As Tony points out, writing great cross-platform code is hard. It is very easy to end up with “lowest common denominator” code. Also, if approached poorly, cross-platform development can include layers of code that hurt performance and optimization for any platform:

Also, in order to ease development, cross platform apps often have intermediate layers to factor out the underlying OS. These layers can impede performance and may prevent the app from taking advantage of native services like DirectX or Quartz. The resulting apps aren’t usually as fast as their native counterparts. Microsoft’s Mac apps certainly ran into this problem when writing cross platform “core code” apps on our Windows Layers for Macintosh (WLM) back in the mid ’90s (anyone remember Mac Word 6?)

Yes, I do remember Word 6. Ugh. What a mess. Unfortunately, that was a classic example of a very poorly implemented cross-platform framework, in my opinion. Rather than find commonality across high-level OS services, the Windows Layer Framework attempted to “reassemble” native high level services by re-aggregating low level services. Result? Great Windows application, since that was the model for Windows applications at the time. Terrible Mac application.

I know where Tony is coming from. IE 7 is a platform-specific application. They have not made the browser cross-platform, and Firefox has. Strategically, I believe this was likely a mistake, since it left an opening for a new entrant (Firefox) to enter a market that long since should have been closed. But I’m sure Tony & team have put a lot of thought into the implications of taking applications cross-platform.

It’s actually Tony’s last comment that I want to take issue with, however, in relation to my impression of Joost.

Finally, developing cross platform reduces the overall innovation a developer can provide. Building for multiple operating systems (or browsers) is never less work than building for one. The time spent architecting, coding, testing, and debugging for multiple platforms is time not spent adding new features, making the product more reliable or secure, or satisfying other user demands (or saving investors’ money).

There are certainly no guarantees of a gorgeous, OS-exploitive, fast application when you target only one OS, but it’s way harder when you are trying to serve multiple masters.

There’s no doubt that teams that can execute cross platform consistently well over time are probably great, but just think what they could accomplish if they chose to focus all that talent and energy on one platform.

This is where I have to humbly disagree. The top 10% of software engineers are not just a little bit better than the average software engineer. They are many, many times better. And in my limited experience, I have found that the great engineers can and do produce cross-platform applications that are best-in-class.

More importantly, I believe that being cross-platform makes great engineers better. Some of the best Windows engineers that I worked with in the late 1990s had a history of working on the Mac OS. There is something about an engineer who stays cross-platform that is like someone who learns multiple languages at an early age. They end up with an innate sense of architectural design and trade-offs that is so much deeper and more robust than a single-platform specialist.

True, I believe my biases are based more on entertainment applications than productivity applications. Bungie, before Microsoft acquired them, was an example of a company that produced great cross-platform games with simultaneous cross-platform release. Blizzard, makers of World of Warcraft, currently release their titles with simultaneous cross-platform release. Would their games be better, or more optimized, if they focused on a single platform? More importantly, would their releases be any more successful if they were single platform?

Maybe the difference is that an entertainment application, like a video game, has a custom interface that doesn’t have to live or work with other applications. They just take over your machine, for the most part. Productivity applications have to “play nice” – they need to look and behave like all of your other applications.

I’m not sure, but I will tell you this – I still believe that when you see rapid or simultaneous release of high-quality, cross-platform applications, in general you are looking at a very strong development team.

Many thanks again, Tony, for reading my post, and taking the time to respond. And sorry, by the way, that your site is now filled with Mac OS and Firefox ads… 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s