Today was the first day of the Patterns & Practices Summit in Mountain View, CA. This three-day conference is focused on providing Enterprise and Application Architects with the guidance they need to design large scale applications using Microsoft's .NET technologies.
The presentations today started with a keynote from Blake Stone, former CTO of Borland and currently an Architect for Microsoft, about what it's like to build software at Microsoft. The presentations that followed covered topics such as architectural patterns of the .NET Reference applications (and what's wrong with them) and Smart Client Architecture. The day then wrapped up with a presentation and Q&A session by Ward Cunningham on social programming and Wikis.
During the keynote presentation, Blake Stone talked a bit about what its like to develop software for Microsoft. In particular he discussed some of the difficulties they've faced with compatibility and how other developer's dependence on the operating system and/or .NET Framework affects the overall design and development of new releases.
One anecdote he shared was of a company that had built their very popular flagship commercial software to perform a complex check to ensure that it was running on the proper version of Windows. This check involved a four-level stack trace combined with reading from a memory offset for a specific series of characters that just happened to be Windows- specific. When the next version of Windows was built, this major Windows application aborted because it could no longer read the same characters at that memory offset.
Rather than going back to the maker of the software to have them fix the problem, the Microsoft developers embedded code into the operating system to check if the running application was that commercial product and if so, it would fake the stack trace and memory offset. All of this to ensure that products that run on older version of Windows will run on new ones.
To avoid these types of dependencies in the future, Microsoft is designing their products to ensure that developers cannot inadvertently create unwanted relationships to the operating system or the .NET Framework. As an example he said that in the .NET Reflection APIs, when you call a method that returns a list of members for a type, it randomizes the list. In doing so, they keep poorly skilled developers from creating a dependency on a certain method being at a specific index in the MemberInfo array.
Roadmap & Application Architecture
Patterns ⪻actices organizer Keith Pleas presented the next session on the current architectures for several of the common .NET reference applications such as Duwamish Books, Fitch and Mathers, and Petshop 3.0. In comparing the architectural approaches for each of these applications he pointed out flaws in the architecture and their use as examples for architects. He then talked about the upcoming architecture guidance reference application called the Global Bank Integration project, the first reference application to use Indigo services.
The second session of the day was by Fernando Guerrero, a SQL Server MVP, and was about how new features in SQL Server 2005 can affect the design of a .NET applications. Some of the features mentioned were SqlCacheDependencies, notification services, etc. He also showed some interesting examples of how common thinking about database applications can actually hinder performance and how important it is to design the application with multiple users and multiple connections in mind.
Smart Client Architecture
In the next session Billy Hollis discussed the reasoning behind the movement to browser based applications and how .NET Smart Client applications are changing the necessity for distributed applications to have HTML interface. He then offers architectural guidelines for determining if an application should be a smart client and how choosing to build an application as a smart client application affects the logical architecture. In doing so, he creates a definition for what is and is not a smart client application and even shows applications that are best left as browser based apps. He then provides some ammunition for those architects hoping to convince enterprises of the merits of smart client applications. He uses as an example the overall architecture for a Healthcare application that he designed that uses architectural patterns to allow the client application to be deployed as a Smart Client.
Thanks to both Billy's and the Summit's generosity, TheServerSide.NET is pleased to be able to bring you the entire presentation here.
Normally I wouldn't write up lunch as part of conference coverage, but, in order to truly get a feel for this event I need to tell you about a typical lunch experience. No, I'm not talking about the food -- which was fine, by the way. Unlike other conferences where after a speaker does a presentation you can generally find them holed up in a Speaker's Lounge, this conference is designed to give architects access to the industry leaders who speak. It's for that reason I found myself sitting at a table for lunch with Gregor Hohpe and Ward Cunningham along with several other Summit participants. We talked about what you would expect hard core .NET pundits to discuss -- Java!
Actually there were many topics and all of them interesting, including Java and EJB comparisons to the .NET Framework. But the experience of any participant being able to discuss his or her applications with industry experts is what sets this conference apart from the Tech-Eds and PDCs.
The next presentation was from James Newkirk, architect for the Microsoft Patterns and Practices group and co-author of Test Driven Development with Microsoft.NET gave a presentation on test-driven development and how it can be used to improve the quality of an application. In the talk he worked to dispel some of the myths about TDD including stating, "There is no relationship between code coverage and quality". He followed this statement up by using Visual Studio Team System's unit testing features to show a flawed test that still provided 100% code coverage. He also went over the development process cycle for TDD from building the failing test to refactoring. In one slide he hammered home the three most important aspects of TDD.
- Test to Fail
- Test to Succeed
Declarative Design for Smart Clients
In this presentation Billy Hollis discusses the concept of building components that allow developers to create programs through declarative statements. In this paradigm, the architect of an application would provide the users with a set of functionality that can be implemented declaratively by the developers as they see fit. He showed an example of this using ExtenderProviders to enable controls on a form to track their own dirty/clean status. He also showed how to use ExtenderProviders to provide validation functionality to a WinForms application similar to an ASP.NET WebForm.
Software Asset Reuse
The last presentation of the day was by Logic Library, one of the sponsors of the event. In this presentation the speaker showed the importance of identifying and tracking software assets and how to manage software assets to ensure maximum reuse.
KickBack with Ward Cunningham
After a quick dinner break involving huge quantities of pizza and an appalling lack of beer, the participants joined Ward Cunningham for a presentation entitled "How I Let Other People Simply My Life with Technology". In this presentation he discussed the impact that the development of the Wiki has had and how his site WikiWikiWeb has dealt with issues such as WikiSquatting, WalledGardens, and plain old spam. He also touches on XP concepts for social programming such as paired programming. Unfortunately he didn't have a lot of time for questions as he was whisked off to SD West (also happening this week) but we'll have more time with him tomorrow.