I started this post as a thought of recommended Architectural Tenants for 2012 and realized that things change so rapidly that I would probably not keep these thoughts beyond a few months... hence the Q1 :-)
Obviously there is no single solutions that fits all. So lets make a few assumptions :
1. We are looking for an architecture leveraging Microsoft Technologies.
2. It is a simplistic project being developed from scratch.
Given the above, I'd lean heavily towards the architecture defined in
Microsoft Project Silk. There are few aspects of this that I really like and that I think makes it to my list of Architectural Tenants for 2012Q1.
Tenant 1: Think of solutions for tablets.
Most solutions for tablets would also work on desktops. But they can also be morphed into solutions for mobile devices. Keeping the form factor aside, design all solutions so that they would work on tablets. My definition of tablet is one that where the user does not sit at a desk to use. So they would be on battery, would be mostly connected to the internet via WiFi or 3G, would also occasionally be disconnected, could have external devices like webcam, gyroscope and Geo-location that can be leveraged and so forth. The app should - where ever possible - leverage these local capabilities.
Tenant 2 : Build web based solutions.
I believe most applications should be web based. Even with the talk of iOS, Android, Metro UI (for Win8 and Mango), I think that most applications are well off starting off as web applications. Does this contradict Tenant 1? Well not actually. As its not practical to build a common solutions for the various devices (ObjectiveC, JavaScript, Silverlight!!!), it makes sense to build web based solutions that render themselves according to the device. Wordpress has done a great job of build themes that are specifically tempered for iOS.
Tenant 3 : Build Single Page Apps
Single page apps use a strong JavaScript framework to do most of the UI related work on the client side. A Single page app essentially mimics a Winforms app - Each page is like a form and holds on to the context locally till we 'close' it. In order to understand this - think of a scenario. We'd like to search for an item in the list - which is displayed across multiple pages. Once we select an item to read/edit and complete working on that item, we would like to come back to the list at exactly the same place where we left it. That's the problems that are solved by designing Single Page Apps.
Tenant 4 : Build Async Request Handlers
We like synchronous operations (we like to click a button and actually wait till the 'save' is DONE). But unfortunately, the servers can't scale this way. In fact, most cloud computing designs automatically incorporate an asynchronous mode of operation. In this metaphor, whenever the user chooses to 'save' or 'post' an action, the action is logged into a queue with a token. The server then performs the entire operation based on the token and once done, reverts back to the user with a message against the token. This enables the solutions to scale vastly on the server side.
Tenant 5 : Design for Long running transactions
Transactions are gradually becoming old school and the reason is that the data is getting distributed. In such a case, solutions like Biztalk introduced the concepts of long running transactions which are essentially an application based process of 'undoing' what was done as against the concepts of 'rollback' in transaction based systems.
Tenant 6 : Design an offline data store.
Whenever I has asked users - would your system need to work offline - the answer is NO. Tablets and mobile devices are always connected through 3G. But even so, there are areas of no connectivity. Operation rooms, storage areas, elevators, parking lots and whole lot of places might affect the network connectivity. A strong requirement is the ability to continue working in such scenarios with the option to 'sync' or 're-connect' when the network becomes available. In some case this can be for extended periods (think of the time in flight).
Tenant 7 : Use Flow layouts.
Microsoft is moving to a "Metro" style UI in Win8. While this was surprising, I think that this marks a move to a flow layout. All Windows apps in VB/C++/Winforms or WPF were essentially a canvas layout that could track your mouse position (They get Mouse_Move events). In contrast, flow layouts like Office apps like Word, browsers that use HTML etc use a flow layout that re-sizes based on the text being rendered. While the canvas layout is important for games and rich editing, the flow layout is more pleasing to the eye. With "Metro" Microsoft is signifying a move to a hosting a canvas inside of a flow layout instead of the reverse.
In my opinion, these are a set of tenants that I think will stand in good stead at least for the first Q of 2012. In the subsequent posts, I will talk about each of these in more detail and will also put up videos for each of these 'Tenants'