The Application Architecture Guidance 2.0 Project

clip_image001

About the Application Architecture Guidance 2.0 Project

The purpose of the Application Architecture Guide 2.0 project is to improve your effectiveness building applications on the Microsoft platform.   The primary audience is solution architects and developer leads.  It provides design-level guidance for the architecture and design of applications built on the .NET Framework. It focuses on the most common types of applications, partitioning application functionality into layers, components, and services, and walks through their key design characteristics.  The guidance is a collaborative effort between patterns & practices, product teams, and industry experts.   The project consists of a Knowledge Base (KB) and a guide.

The Application Architecture Guide 2.0 is a map of the terrain and a way to frame and name the space for meaningful conversations.  It's not a step-by-step, tutorial in application architecture.  That's an important distinction.

Results at a Glance

clip_image002

It’s 3 ½ months into the project.  Here’s the key results so far:

v Shipped Beta 1 of App Arch Guide 2.0 on 10/27.

v Top 10 downloads in CodePlex since launch.

v 110,000 views of the App Arch KB since launch.

v Featured on ServerSide.NET.

Raving Fans

It’s early but here’s a sampling of the verbatums from some of our customers:

v “Patterns and Practices is about to release what I consider one of the best Architectural Guides I’ve seen for Microsoft’s platform”

v This guide just rocks!!! Awesome stuff. I just finished browsing through the whole guide and I concurred with one of my TSPs… it is what we were waiting for!”

v “I find this sort of stuff hugely valuable, not just for my own understanding and reference, but in discussions with customers. The p&p deliveries give us a perfect answer for the eternal customer question 'how does Microsoft do it?' or 'what does Microsoft recommend?'.”

v “You've done a really nice job logically laying out the whole thing in a technology agnostic way. I plan to leverage your work and apply it to my projects.”

v “Do you have hard copy of the Guide which I can borrow? Xxxx is my Dev Lead and he wants everyone in his team to go through it”

clip_image003

Application Architecture Guide 2.0 Beta 1 Release

clip_image004

We released Beta 1 of the Application Architecture Guide 2.0 on October 27th.  Within days, it climbed to the top 10 downloads in CodePlex, where it’s remained there since.

Key Features

Here’s a summary of the key features of the guide:

v Canonical app frame - describes at a meta-level, the tiers and layers that an architect should consider.

v App Types - Canonical application archetypes to illustrate common application types. Each archetype will be described in terms of the target scenarios, technologies, patterns and infrastructure it contains.

v Arch Frame - a common set of categories for hot spots for key engineering decisions.

v Quality Attributes - a set of qualities/abilities that shape your application architecture: performance, security, scalability, manageability, deployment, communication, etc.

v Principles, patterns and practices - Using the frames as backdrops, the guide overlays relevant principles, patterns, and practices.

v Technologies and capabilities - a description/overview of the Microsoft custom app dev platform and the main technologies and capabilities within it.

App Arch Knowledge Base (KB)

The Application Architecture KB is where we put our modular prescriptive guidance.  It includes step-by-step How Tos, as well as Guidelines, Videos … etc.  It’s a supplement to the Application Architecture Guide 2.0. 

The KB allows us to ship modules out of band, as well as test and vette the guidance as we go.  The main focus so far has been on modules that directly support the guide, but we’re making a wish list of future modules to add to the KB.

clip_image005

App Arch Poster

clip_image006

To build awareness of the project, Javed Sikander, Ajoy Krishnamoorthy, and David Hill created a full-sized poster to spread the word.  The poster is a mash up of some of the key ideas.  For example, you can see how the heart of the poster is the reference architecture.  Attached to the layered architecture are various clients, including a Web app front end, as well as a mobile client.  The business logic is exposed as a service.  Most importantly, the super hero promises in the lower left gives you confidence that you too can design an effective architecture for your scenario.

Tag Lines

One of the best ways to share the heart of a project is a metaphor.  Here’s some of the favorite metaphors used to explain the guide:

v “How to put the legos together.”

v “… Microsoft playbook for application architecture!”

v “Stand on the shoulders of giants.”

clip_image007

Photo by Michale.

Stand on the Shoulders of Giants

clip_image008

Don’t go it alone.  One of the main ideas behind the guide is that you can stand on the shoulders of giants.  Rather than start from scratch, you can build on the insights and experience from others.  The guide is a consolidation of many of the best principles, patterns and practices from people inside and outside of Microsoft.  Here’s a snapshot of the extended team ….

External Contributors/Reviewers

Adwait Ullal; Andy Eunson; Christian Weyer; David Guimbellot; David Weller; Derek Greer; Eduardo Jezierski; Evan Hoff; Gajapathi Kannan; Jeremy D. Miller; Keith Pleas; Kent Corley; Mark Baker; Paul Ballard; Norman Headlam; Ryan Plant; Sam Gentile; Ted Neward; Udi Dahan

Microsoft Contributors / Reviewers

Ade Miller; Anoop Gupta; Bob Brumfield; Brad Abrams; Brian Cawelti; Bhushan Nene; Burley Kawasaki; Carl Perry; Chris Keyser; Chris Tavares; Clint Edmonson; David Hill; Denny Dayton; Diego Dagum; Dmitri Martynov; Dmitri Ossipov; Don Smith; Dragos Manolescu; Elisa Flasko; Eric Fleck; Erwin van der Valk; Faisal Mohamood; Francis Cheung; Gary Lewis; Glenn Block; Gregory Leake; Ian Ellison-Taylor; Ilia Fortunov; J.R. Arredondo; John deVadoss; Joseph Hofstader; Koby Avital; Loke Uei Tan; Manish Prabhu; Mehran Nikoo; Michael Puleio; Mike Walker; Mubarak Elamin; Nick Malik; Nobuyuki Akama; Ofer Ashkenazi; Pablo Castro; Pat Helland; Phil Haack; Reed Robison; Rob Tiffany; Ryno Rijnsburger; Scott Hanselman; Serena Yeoh; Srinath Vasireddy; Tom Hollander; Wojtek Kozaczynski

Architecture Meta Frame

As part of the App Arch Guidance project, we've created an organizing frame to help think about application architecture.  We use the frame to explore and gain insight into different aspects of application architecture.  App arch is a big space.  We'll be using the frame to catalog and organize our various principles, patterns, practices, and assets.

Anatomy of the App Arch Meta Frame

You can see from the figure, we have a few parts that work together:

v Scenarios - You can't evaluate an architecture in a vacuum.  Scenarios are the backdrop and the context.

v Quality Attributes / Qualities - This is your classic set of reliability, security, performance, flexibility, maintainability ... etc.

v Requirements / Constraints - These are the user, business, and technical rules that shape your architecture.

v App Types - This is your overall shape.  This includes Web app, Rich Client, Mobile, ... etc.  While the line may blur, there's important distinctions among application types.

v Architecture Styles - This includes architectural patterns such as N-tier, client-server, SOA, ... etc.  You can see shifts in styles over the years such as from object-orientation to message-orientation.

v Architecture Frame - These are the architectural "hot spots."  This is where your key engineering decisions happen.

Keep in mind that this is a meta-frame (so it's a frame of frames.)  We'll have a collection of frames that shine the spotlight on more focused areas.

clip_image009

Reference Application Architecture

clip_image010

One of the most common questions we’ve heard is, what are the layers and tiers of a typical application and what goes in each layer.  To address this question, we created reference application architecture.   It’s a simple blueprint or map of the layers and which components go into each layer.

Agile Architecture

How can you more effectively design your architecture?  One of the most important innovations in the project is a meta-process for designing architecture.  We call it the Agile Architecture Method.  As part of the Agile Architecture Method, you scope and focus your architecture exercise.  You use scenarios to drive the design and evaluate potential solutions.  This method helps you think through your choice of application type, deployment, architectural style and technologies.  Most importantly, it helps you quickly iterate through potential solutions. 

Agile Architecture Method Steps

Here’s a summary of the key steps:

· Step 1. Identify Objectives.

· Step 2. Key Scenarios.

· Step 3. Application Overview.

· Step 4. Key Hot Spots.

· Step 5. Candidate Solutions.

clip_image011

Application Architecture Guidance Team

The core Application Architecture Guidance team includes:

J.D. Meier , Alex Homer, David Hill, Jason Taylor , Prashant Bansode , Lonnie Wall, Rob Boucher Jr, and Akshay Bogawat.

Follow Along At ….

You can follow along the project at the following sites:

· App Arch Guide 2.0 Site (CodePlex) – https://www.codeplex.com/AppArchGuide

· App Arch KB (CodePlex) – https://www.codeplex.com/AppArch

· J.D. Meier’s Blog – https://blogs.msdn.com/jmeier