There is No Application Model

One of the whimsical things that members of the Avalon Application Model team like to say is that “Avalon doesn’t have an application model.” If that is truly the case, have we utterly failed at our jobs? Should we just go home now? Or perhaps take a vacation until Avalon ships?

Rene MagritteWell, not quite. Unfortunately that long vacation may need to wait until after we ship. ;)

In fact, the absence of what many think of as a traditional application model is the result of a deliberate decision that was made back in the early days of Avalon. One of the things we have intentionally tried to do is avoid making cumbersome decisions about window management, application data, UI model, server-client interactions, and other aspects of development that are often associated with an “application model.” Our guiding principle is to keep the app model low policy, and to stay out of your way.

As such, we’ve aimed to provide a set of application-level services that developers can opt into as they choose. A few examples:

  • The Application object is a convenience for developers, which provides some object model for window management, starts and stops the message loop, enables simple system interaction, and enables storage of app-wide state (either via the Properties collection or by providing custom properties when sub-classing).
  • We provide a built-in framework for navigation, so that it’s painlessly simple to create an application that can be browsed like a website (think TurboTax or Microsoft Money). App authors may choose to use this UI metaphor exclusively, limit it to certain aspects of the app (e.g. wizards), or not to use it at all.
  • There are multiple options for storing app state: storing files on the filesystem, using Isolated Storage, using .config settings, using cookies, or even (gasp!) the registry.

Other examples abound, but the above should give you an idea of the types of decisions we made.

I love this simple model, because it doesn’t impose any unnecessary constraints. We don’t assume to know too much about how you want these things to work, we just give you some simple tools that you can opt into and customize at will. We also know that there will be scenarios where a much more specific application model is required. However, these will be verticals, and any Avalon customer should be able to write her own application framework that is suited to her specific needs.

Ashish on Avalon Deployment

Ashish, one of my fellow Avalon AppModel PMs, has posted a good summary of Avalon’s deployment options. If you want to know all about distributing powerful client applications using slick web-like deployment, or creating rich browser applications that use the power of the platform, Ashish is your man.

Old and New

Three years ago today, I started work as an intern on the Windows Application Compatibility team. This team represents what Joel Spolsky likes to call “the Raymond Chen camp” at Microsoft — a team full of individuals committed to making old apps work on newer versions of Windows. I wasn’t directly involved in the types of heroic projects that Raymond describes — I spent more time thinking about tools that would help developers avoid the common pitfalls that necessitated that heroic work.

One of my projects was helping to beef up the security tests in the Application Verifier, a runtime code verification tool that developers can use to catch all kinds of common pitfalls in their apps — e.g. heap corruption, using certain APIs incorrectly, creating weak ACLs, etc. The AppVerifier ships as part of the Application Compatibility Toolkit, which is now in its third version (I worked on version 2.50). I even got to contribute to Michael Howard’s security column, with an article describing the new security features that I spec’ed that summer (of course, this didn’t actually get published until after I started at Microsoft full-time, to coincide with the release of AppVerifier 2.50 :)).

Now I’m here full time, working on the Avalon team (it’s been almost 2 years already!), trying to revolutionize the way applications are built. And today, a new intern started working for me. I hope he’ll have as much fun as I did in the summer of 2002.