He who molds public sentiment goes deeper than he who enacts statutes.

Abraham Lincoln

Good advice for President Obama.

Predicting the End of Native Apps

Technology review:

But stripping browser chrome off of web apps seems like far less of a challenge than developing for an ever expanding array of devices. With web apps, developers could code once and be reasonably confident their app will work on any object – phone, tablet, laptop, etc. – with a standards-compliant browser. The implications for developer time and resources are profound.

There’s a lot of truth to this, especially for tablet apps, which are qualitatively more work to develop than phone apps. I was part of a project for a large institution that built an iPad app that wasn’t much more than a port of their website. If non-iPad tablets ever gained any significant market share, I think we’ll see a quick shift back to building web apps. Large institutions aren’t creative enough to build something more imaginative than a port of their websites, and if they have to pay for the development and maintenance of 2 or 3 native tablet apps, most will pass and stick with their website.

Will iCloud Be Easy for Developers?

The general trend since the late 90s and early 2000s has been to move computing away from native software and into the browser. Note that I used the term “browser,” and not the word “cloud.” They’re not the same thing.

The early days of the mainstream Internet were dominated by native software interacting with online content. Think AOL, Compuserve, and Prodigy. As the Internet evolved, though, and as web browsers became more mature, they eventually rendered those native programs irrelevant. Browsers provided universal access to everything the Internet had to offer. If you were a content provider, it became much more attractive to just put your content on the web where everyone could find it, rather than host specific content on one or more of the different proprietary networks.

The trend toward the browser as the primary gateway to the Internet continued unabated for almost 15 years (depending on when you start counting), until the iPhone App Store ushered in a renaissance of native software development. Today, it’s native mobile apps that are leading the way in terms of innovative interaction design, social integration, or new business models. Think Flipboard or Instagram or The Daily. But in a way, these mobile apps can be thought of as being in the tradition of the (shudder) AOL Windows app inasmuch as they provide a native interface to rich online content.

Steve Jobs laid out his vision for this future as far back as 2007 during a joint interview with Bill Gates at the All Things D conference. The interview took place after the unveiling of the original iPhone in January, but before it was available for sale in June.

Walt Mossberg asked Jobs and Gates specifically about the industry trend toward web apps, and whether companies like Apple and Microsoft, with their legacy of building native apps, were threatened with being made irrelevant by the rush toward migrating software into the browser. Jobs says what’s obvious now but wasn’t necessarily obvious at the time: if you really want a great UI, you just can’t use the browser. While the browser is becoming more capable with time, progress is slow, and in the meantime, sophisticated native software is increasingly able to run effectively on less capable hardware. Here’s the clip:

Sync Ain’t Easy

Why has web-based software become so popular in the first place? After all, it’s not as if web developers don’t care about UI design, or weren’t frustrated by the myriad issues web apps have integrating with the user’s desktop environment, or didn’t grow tired of hacking around browser limitations.

The reason web-based software became so popular is that web software offers significant technical advantages over traditional native software.

Web apps are accessible by anyone with an Internet connection, regardless of which OS they’re using; no more herculean efforts to port code from platform to platform, Photoshop-style. With free software stacks and commodity hardware, the barrier to entry to building a web app is minimal. Developers can choose their own implementation programming language and software tools, something most developers care about deeply. Since the software runs on the web server, bug fixes and new features are made available to the user instantly. It’s much simpler to automatically detect and report bugs encountered by users, and to control the environment in which they’re running to minimize bugs. And software piracy ceases to be a meaningful problem.

For the purposes of this discussion, though, a crucial advantage of web applications is that they instantly and elegantly solve the data sync problem.

Syncing data across native apps running on different machines has been an intractable problem for decades. Joel Spolsky wrote about how former Microsoft chief software architect Ray Ozzie basically devoted his career to the sync problem and ultimately failed. Dreaming in Code tells the story of how Mitch Kapor built a team of rock star software developers and poured millions of dollars into solving sync for calendars through a distributed, peer-to-peer solution. They ultimately failed, and the problem domain was soon rendered irrelevant by Google Calendar. Closer to home for the Mac and iOS software communities, the folks at Cultured Code have invested years in a custom sync solution for their excellent Things task management app that’s only recently entered private beta.

Sync is really hard. With the web, sync just vanishes. Apple is betting they can defy history get sync right 1.

Will iCloud Sync Be Easy for Developers?

It’s one thing for Apple to nail data sync for their operating systems and their core applications like iWork. They have the expertise and the resources to devote to getting it just right. It’s another thing entirely to develop a general framework in which your average developer can nail data sync for their own applications.

Making things easy for developers is a crucial component of success in moving adoption of any technology. iCloud is no different. Apple is trying to make it as simple and transparent as possible for app developers. We just need to see how leaky the abstraction will be in practice.

One comparison that comes to mind from a development perspective is writing multi-threaded code. Writing multi-threaded code that’s actually concurrent is extremely difficult. Most developers understand the details of how to use mutexes and semaphors and condition variables. Very few developers, however, know how to use those constructs in such a way that they’re able to write truly concurrent code. What they end up writing is almost always either buggy, or full of lock convoys and thus not very concurrent at all, or both. (I’ve also never met a developer who thinks that that developer is him, but that’s a story for another day.)

iCloud needs to be easy enough for the average developer working on, say, a todo list app or a note taking app to sync her app data without getting caught up in all the complexity that traditionally comes attached to native sync. To take just one potential scenario that jumps to mind, how do you deal with new versions of your document that may be downloaded asynchronously from iCloud in the background while the user is working on it? Does Apple allow this scenario? If that is a realistic scenario, then based on what I know about iOS and Mac development, it doesn’t seem like an obviously straightforward problem to solve 2. But it needs to be.

This is just one example of a real-life use case developers will be required to handle. There will be others. If the solution to these problems is qualitatively more complicated than just, say, adding Dropbox support to an app, then it’s going to be difficult for iCloud to gain adoption among the legions of tiny development shops that make the App Store what it is today. Apple and other larger firms with the resources to invest will support iCloud. Everyone else is either not going to go through the hassle, or their implementation is going to be a buggy mess.

I do want to qualify this pessimistic outlook by saying that I have tremendous respect for Apple from an engineering perspective. Typically their technology architecture and public APIs are elegantly and thoughtfully designed. However there were a few moments in the iCloud session I attended at WWDC where I thought, “Ohhh, this might not be as easy as it appears at first glance.” That feeling is what has me wondering what else may be lurking when trying to solve real-world problems.


  1. Jobs seemed to avoid using the word “sync” during the WWDC keynote last week. It doesn’t matter, though, because that’s what iCloud is doing. 

  2. I should be clear that while I am a paying member of the iOS Developer Program and bound by its terms, aside from a 20,000 foot overview session I attended at WWDC, I know nothing about the iCloud API for either Mac or iOS and am thus at great risk of completely talking out of my ass, but also am not violating the terms of my NDA. 

David Brooks on the dismal state of American politics

A few exerpts. Make sure you read the whole thing:

This election is about how to avert national decline. All other issues flow from that anxiety.

The election is happening during a downturn in the economic cycle, but the core issue is the accumulation of deeper structural problems that this recession has exposed — unsustainable levels of debt, an inability to generate middle-class incomes, a dysfunctional political system, the steady growth of special-interest sinecures and the gradual loss of national vitality.

And later:

The Republican growth agenda — tax cuts and nothing else — is stupefyingly boring, fiscally irresponsible and politically impossible. Gigantic tax cuts — if they were affordable — might boost overall growth, but they would do nothing to address the structural problems that are causing a working-class crisis.

Republican politicians don’t design policies to meet specific needs, or even to help their own working-class voters. They use policies as signaling devices — as ways to reassure the base that they are 100 percent orthodox and rigidly loyal. Republicans have taken a pragmatic policy proposal from 1980 and sanctified it as their core purity test for 2012.

As for the Democrats, they offer practically nothing. They acknowledge huge problems like wage stagnation and then offer… light rail! Solar panels! It was telling that the Democrats offered no budget this year, even though they are supposedly running the country. That’s because they too are trapped in a bygone era.

Mentally, they are living in the era of affluence, but, actually, they are living in the era of austerity. They still have these grand spending ideas, but there is no longer any money to pay for them and there won’t be for decades. Democrats dream New Deal dreams, propose nothing and try to win elections by making sure nobody ever touches Medicare.

Covering this upcoming election is like covering a competition between two Soviet refrigerator companies, cold-war relics offering products that never change.

I don’t know of a single other way to take a document I am working on with my iPad and jump to my Mac having the document up-to-date and the cursor in the same position without pressing an extra button — to me, that is magic. It’s magic because logically that is how everything should have always worked, but in reality it is how nothing works.