In "Designing Web 2.0-native Products for Fun and Profit", Tom looks at some guidelines for building web apps in the spirit of Web 2.0 and it was all good stuff. His main thrust was that the web has the opportunity to move from isolated sites to a model based on interconnected services.
Every service can be built upon existing services and this makes them all the more powerful. This all incorporates the use of APIs of course which has the effect of embedding your service within the community. An interesting point was that the combination of GoogleMaps and GoogleAds could enable everyone's favourite search engine to target their advertising geographically. This ties into Tim O'Reilly's assertion that the race is one to 'own' certain types of data - eg location, identity, calendaring of public events. It is these services which will form the basis of the web as a platform.
He then went on to identify the 'Architectural Principles' of Web 2.0, citing Matt Biddulph's 'The Application of Weblike Design to Data'.
- Add value to the aggregate web of data.
- Build for normal users (consumers); developers (give them hooks to build on); machines (predictability).
- Start designing with data not pages.
- Identify your first order objects (eg tv programmes, people, events) and make them addressable. Give them a unique and well-structured url, a single page for services to reference so everyone knows they are talking about the same thing - means aggregation can be effective.
- Readable, reliable and hackable urls. Use directories to represent hierarchies (enables hackable urls) to reflect the structure of the data. They shouldn't reflect the underlying technology so use mod_rewrite or equivalent to clean them up (3 out of 3!). This goes most of the way towards making them as humanly readable as possible.
- Correlate with external identifier schemes - knowing what you are referring to and linking to other sources eg IMDB for movie information.
- Build list views and batch manipulation interfaces to go with the destination (first order) pages. These are the 3 core types of page. You can then use Ajax/Flash to manipulate the data within each type of page -only manipulate the concept within the page in question eg don't edit tags within a list page.
- Parallel data representation. Reuse the data in parallel to the original page eg RSS for the list page and XML for the destination page. Del.icio.us uses RSS really well. Microformats can be used too.
- Make your data as discoverable as possible.