Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 623 » Attack of the Hybrid Apps

nerd nouveau

Attack of the Hybrid Apps

Brent Simmons has written a great post about how the line between web apps and desktop apps is actually blurred by something called “hybrid apps”. This kind of application is technologically rooted in the desktop domain, but has the web tightly integrated into its architecture. Examples for hybrid apps are iTunes (whose store is powered by web technology) or Google Desktop (which has access to both your local computer and content on the web).

However, I wouldn’t go as far as Brent and call an application such as SubEthaEdit a hybrid app. Just accessing the network is not enough: To my mind, what defines a web app is persistence of data between multiple sessions. Basically, that means that there must be some sort of dynamic presentation layer (often powered by a scripting language like PHP or Ruby) and a backend database. If these facilities are not present, I would just call it a “networked application”.

What I find most interesting, though, is the relation between web apps and desktop apps, and if the emergence of hybrid apps is just an intermediate step towards a fully web-driven computing experience or if they are their own branch of software?

I believe that a good approach to thinking about this question is to take a look into the past. There has already been a big shift from one type of application to another, and a very obvious one, too: From command-line applications to graphical user interfaces (the WIMP approach).

What has made this shift so dramatic are the totally different paradigms underlying each approach: For command-line applications called from a shell, the main interaction technique is syntax-based. In a UNIX terminal, you delete a text file by typing rm someFile.txt. If you misspell the filename or the command, you get an error. If you swap their positions, you get an error, too.

The syntactic approach becomes even more evident the more complex the intended action is: You can pass multiple arguments to a command (and often, their order matters!), you can also specify flags (such as -f), but they also have to appear at a certain place in the command-line statement. If you mess up the syntax, your command will either not be recognized at all or it will not work as expected.

With a graphical user interface, the paradigm is totally different: Rather than being syntax-based, it’s object-oriented. To delete a file, you simply drag it to the trash can. No danger of mistyping the filename, nor can you drag a file that doesn’t exist: A non-existent file simply doesn’t show up in the file browser. Similarly, you can open a file by either double-clicking it or dragging it onto an application. If you need to specify additional options to process the file, the application can display a dialog or even a wizard to guide you through the process. Little to no syntax here.

Also, there is no turn-taking: Rather than specifying the whole action at once, you can do it incrementally: For example, you could type a term into a search box, and as you type, the application shows all the records that match your current search term in a text area. For example, you have this “search as you type”-approach implemented in MacOS Tiger’s Spotlight. Note that this also takes away syntactic load from the user, as the search terms need not be known in advance. If the search results aren’t satisfying, the terms can be modified on the fly.

Obviously, these two main paradigms are quite different (of course, there are other differences between graphical and textual interaction, but I think that this one is the most fundamental).

Now the web basically employs the same graphical approach to user interaction: We still have our (browser) windows, our images and our mouse pointer. It is pretty similar to the desktop interaction at the instrumental level, but there also is a fundamentally new usage paradigm: The one of a database. Long before the Web 2.0 buzz, we have already been using the web this way. We’ve never known about all the content on the web, so we have been relying on ways to search it. Right now, “using” the web is closely related to opening some search page in your browser (be it Google or anything else) and typing a term into it. Similarly, we have bookmarks, i.e. pages to which we keep coming back to, much like saved search results. This is also very similar to database views. An RSS feed is not much more than an auto-updating bookmark. Now Web 2.0 just gave us write-access to the database, too: What we produce is what somebody else will find (or possibly search for).

However, rather than shifting from one paradigm to the other, the database approach has been merged back into the WIMP approach, honing the similarities between the web and the desktop rather than pondering on the differences: Today, we search our own computers much like we search the web, using Google Desktop. Or we tag our files the same way we tag our links on It’s not only the desktop experience that is brought to the web, it is also happening the other way around.

Thusly, rather than ditching one paradigm for the other, there has been a process of confluence. Searching files on our own computer doesn’t conceptually differ from searching the web in the eyes of the end-user. Before the web, you were expected to know where the files are on your computer: Though methods to search for files have always existed, they’ve been mostly rudimentary. Since we’ve become so used to the database paradigm, however, it has made its way onto our desktop.

Hybrid apps are not the intermediate step between a self-contained desktop and completely web based computing. They rather aim to unify: The web is brought to our desktop (i.e. data is being cached so that it can be accessed as quickly as any other local file), but they also bring our data to the web (i.e. we can upload data to share it with others). They combine the desktop experience with the web experience. In this way, they rely on both worlds, without preferring one over the other. Consequently, they do not prime us to ditch them over fully web-based apps later.

Let’s not think of web apps and desktop apps as a dichotomy, let’s rather think of them as a spectrum, with hybrid apps sitting somewhere in between. Let’s not think of them as opposites, but as different implementations of the same thing, both with their own strengths and weaknesses. A web app shines when it comes to sharing your stuff with others. It shines when you are away from your own computer. But does that mean that it is a direct competition to the whole class of desktop apps? Is it really so fundamentally different? Me, I don’t think so.

In the end, we will just be using whatever works best for us. We won’t be using a web app for the sake of being a web app, we will use it because it works better for us than the desktop app: Users will ditch a desktop app for a superiorly-designed web app, but in the same way, they will ditch the web app for a better desktop app. They are not competing with each other as classes of applications, they are competing at a per-application level, much like one desktop app is competing with another, similar one.

Consequently, let’s not say that web apps are going to do away with the desktop apps, let’s just say that the good implementations of an idea will do away with the bad ones.

1 Comment

Comments are closed | Comments RSS

  1. Deprecated: Function ereg() is deprecated in /nfs/c03/h02/mnt/52932/domains/ on line 445 » The iPhone and Implicit Synchronisation
    wrote on Jun 13, 2007 at 23:32

    [...] you could argue that with a full-blown SDK, people could write hybrid apps to achieve essentially the same effect. Or that there are applications that don’t need to [...]


Hi, how are you? My name is Georg Kaindl, and I'm a twenty-something from Vienna, Austria. During the day, I'm a CS student at the Vienna University of Technology, but at night, I turn into an independent software developer for the Macintosh platform, social nerd, lazy entrepreneur and intuitive researcher.

I like to write about everything that matters to considerate technology enthusiasts, but humbly retain the right to go off-topic from time to time.

My posts are licensed under a Creative Commons Attribution 3.0 License.


You can reach me by email if you have something to say that's not related to a blog post or that you don't want to have publicly available as a comment to a post.

However, you'll have to prove that you are human! Even though I personally like robots very much, I'm less of fan of SPAM. It's just a simple riddle to solve, but a SPAM bot won't cut it!

To get my email address, take the word before the .com in my domain name first (Hint: The word you are looking for starts with a "g" and ends with an "l"). Next, simply attach to this word.

Boom, there's my email address. Simple, isn't it?

Powered by WordPress

Comments RSS

Entries RSS