Software Engineering, Project Management, and Effectiveness
patterns & practices Parallel Programming with Microsoft .NET is now available. The book shows design patterns to help developers use the .NET 4 Task Parallel Library (TPL) to write parallel applications successfully.
Contents at a Glance
The Patterns The book describes six key parallel patterns for data and task parallelism and how to implement them using the TPL.
The Code Samples
This is a quick visual tour of some whiteboard solutions and common application patterns for Windows Azure. It’s a look at some of the most common whiteboard solutions for Web applications, Web services, and data on Windows Azure.
Here are the app patterns at a glance:
Web Applications Here are some common Web application patterns on Windows Azure:
Pattern #1 - ASP.NET Forms Auth to Azure Tables
Pattern #2 - ASP.NET Forms Auth to SQL Azure
Pattern #3 - ASP.NET to AD with Claims
Pattern #4 - ASP.NET to AD with Claims (Federation)
Web Services (SOAP) App Patterns on Windows Azure Here are common Web service app patterns on Windows Azure:
Pattern #5 - ASP.NET to WCF on Azure
Pattern #6 - ASP.NET On-Site to WCF on Azure
Pattern #7 - ASP.NET On-Site to WCF on Azure with Claims
REST App Pattern on Windows Azure Here is a common REST application pattern on Windows Azure:
Pattern #8 - REST with AppFabric Access Control
Data Patterns on Windows Azure Here are common data application patterns on Windows Azure:
Pattern #9 - ASP.NET to Azure Storage
Pattern #10 - ASP.NET to SQL Azure
Pattern #11 - ASP.NET On-Site to SQL Azure Through WCF
Contributors / Reviewers Many thanks to the following folks for contribution, collaboration, and review:
I learned that in life, one of the best ways to roll with the punches is to look at the funny side of things. Many thanks to Dilbert, The Far Side, and Calvin and Hobbes for adding fuel to that fire and giving me lots to work with. Work also goes a whole lot smoother when you can find a way for it to amuse you (and you always can, if you decide to.) Humor is a key way to stay curious, light-hearted, and avoid falling into the bitterness trap.
I’ve baked comedy into my life in various ways. For example, I regularly go to comedy clubs. You can learn a lot from comedians about timing, how to work a room, and how to be comfortable in your own skin. You can also learn how to shift your perspective from a serious tone, to the lighter side of life, or at least the zany side.
One of my favorite comedians is Craig Shoemaker. He’s a real pro and he’s funny in multiple ways, from his skits to his impressions. I’m honored to have a guest post from Craig on 10 Lessons Learned in Comedy.
Imagine if you were tasked with mapping out the existing Microsoft developer content spanning Channel9, the MSDN Dev Centers, MSDN Library, Code Gallery, CodePlex, the All-in-One Code Framework, etc.. How might you go about it?
Imagine if you had to create an information architecture that encompasses customer scenarios, content types, products and technologies, publishing channels, etc. that could be rationalized across the larger content ecosystem including various internal Microsoft teams, as well as partners, and community contributions … What would you do?
Just start. Start with something simple. So that’s what I did.
The “Simple IA” Here is an example of something I’ve been working on. I call it the “Simple IA.” IA in this case, is simply short for “Information Architecture.” I specifically called it the “Simple IA” because Information Architectures are prone to complexity and get over-engineered.
This lets me basically connect the dots between our content story, our publishing story, and pillar areas of focus. In the figure above, the Hot Spots are a simple Heat Map to step back, look across the Microsoft application development platform and see the forest from the trees. The channels are a way to step back and look across the various places where Microsoft developer content gets published. The IA piece above, is a simple way to walk the customer scenarios, the product features, and our various content types, such as Code Samples, How Tos, etc.
So yeah, even simple seems complicated, but believe it or not, it all comes together. (I’ll share the results in the near future.) The beauty here is that it’s systematic and repeatable. I can simply change what I point it at and I can repeat the process for any product or technology. Even thought I put specific instances in the channels, those can be changed too. It’s basically principle-based and pattern-driven … and it works!
One thing I’ll point out right here before we move on is, if it was easy to simply browse the Code Samples and How Tos for a given technology, life would be easier for everybody.
Platform Hot Spots You can think of the application development platform as a Heat Map with relevant Hot Spots. Here is a simple example:
All the Heat Map is showing is some common application paths. For example, when you go to build a phone app, you can choose Silverlight or XNA, so they are the “Hot Spots” or focal points in this case.
There are many ways to slice and dice the application development platform. At a high-level, you can think of it as an application framework, languages, tools, process, and technologies. The Hot Spots you focus on depends on what you need to show or highlight.
Channels Channels are where producers put their stuff. For example, various teams publish to places on the Web and within Visual Studio:
.NET site would include www.ASP.net, www.Silverlight.net, etc.
Information Architecture (Scenarios, Features, and Types) This is where the rubber meets the road. For each channel, you can surface content using simple lenses:
Here is a simple model of a page that would surface content for a given product or technology
Here is an example of this model in action on the Windows Dev Center:
Notice that you can browse a large collection of Code Samples, How Tos, and Videos.
As part of creating an "information architecture" for developer guidance at Microsoft, one of the tasks means mapping out what we already have. That means mapping out out our Microsoft developer content assets across Channel9, MSDN Developer Centers, MSDN Library, Code Gallery, CodePlex, the All-in-One Code Framework, etc.
You can browse our Developer Guidance Maps at http://innovation.connect.microsoft.com/devguidancemaps
One of my favorite features is the one-click access that bubbles up high value code samples, how tos, and walkthroughs from the product documentation. Here is an example of showcasing the ASP.NET documentation team’s ASP.NET Product Documentation Map. Another of my favorite features is one-click access to consolidated training maps. Here is an example showcasing Microsoft Developer Platform Evangelism’s Windows Azure Training Map.
Content Types Here are direct jumps to pages that let you browse by content type:
Developer Guidance Maps Here are direct jumps to specific Developer Guidance maps:
The Approach Rather than boil the ocean, so we’ve used a systematic and repeatable model. We’ve focused on topics, features, and content types for key technologies. Here is how we prioritized our focus:
The Maps are Works in Progress Keep in mind these maps are works in progress and they help us pressure test our simple information architecture (“Simple IA”) for developer guidance at Microsoft. Creating the maps helps us test our models, create a catalog of developer guidance, and easily find the gaps and opportunities. While the maps are incomplete, they may help you find content and sources of content that you didn’t even know existed. For example, the All-In-One Code Framework has more than 450 code examples that cover 24 Microsoft development technologies such as Windows Azure, Windows 7, Silverlight, etc. … and the collection grows by six samples per week.
Here’s another powerful usage scenario. Use the maps as a template to create your own map for a particular technology. By creating a map or catalog of content for a specific technology, and organizing it by topic, feature, and content type, you can dramatically speed up your ability to map out a space and leverage existing knowledge. (… and you can share your maps with a friend ;)
As part of rounding up our available developer content, one area I can’t ignore is code samples. Code samples are where the rubber meets the road. They turn theory into practice. They also help eliminate ambiguity … As Ward Cunningham says, “It’s all talk until the code runs.” This post is a quick rundown of how I’m looking at code samples.
Code Snippets, Code Samples, and Sample Applications I’ve found it useful to think of code samples in three sizes: code snippets, code samples, and sample applications. Sure there are other variations and flavors, but I’ve found these especially useful on the application development and solution architecture side of the house. Here is a quick rundown of each code sample type:
Additional Types of Code Samples …
Examples Here are some examples to help illustrate code snippets vs. code samples vs. sample applications:
A theme of the economic downturn is that the world won't simply go back to "business as usual" -- it's a fundamental shift.
Gartner says the World of Work Will Witness 10 Changes During the Next 10 Years:
# 8 is especially interesting to me. Gartner says:
"Gartner expects to see a significant growth in the number of organizations that create groups specifically charged with detecting divergent emerging patterns, evaluating those patterns, developing various scenarios for how the disruption might play out and proposing to senior executives new ways of exploiting (or protecting the organization from) the changes to which they are now more sensitive."
Lucky for me, patterns are my forte.
Some of the biggest shifts I see are:
I created a simple map of the MSDN Developer Centers. I’m doing a quick assessment and evaluation of the Information Architecture across the various Dev Centers. I exposed the URLs so I could see at a glance, where the Dev Center actually lives. Before I give my feedback on the Dev Centers, I like to do my homework and walk all of them and compare the site designs, the patterns, the antipatterns, and the user experiences.
All I really care about is how well they help me know what’s going on with the given technology, and find the most relevant resources, including the product documentation, code samples, how tos, videos, training, etc. as well as what’s going on in the community. Ideally, a Dev Center helps me understand the story for the technology, how it fits in with other technologies, and what the roadmap is.
Here are the MSDN Developer Centers at a glance …
MSDN Developer Centers at a Glance
A-Z List of MSDN Developer Center
Our Windows Azure Security Notes are now available under the Highlights section on TechNet’s Security TechCenter.
It’s a collection of common applications scenarios for Web applications, Web services, and data on Azure, and it’s a map of common threats, attacks, vulnerabilities, and countermeasures. It also explains the approach we used to understand the security impact of the various application models on Windows Azure.
You can use the examples from the application scenarios in the notes as a way to help you map out and model your application scenarios. Even just knowing how to whiteboard Windows Azure application scenarios can go along way, especially bridging the gap between application design and runtime deployment.
When you’re building applications, it helps to have a lay of the land so you can see the forest from the trees. This is a quick visual tour of some whiteboard solutions and common application patterns for Windows Azure.
Canonical Windows Azure Application Here is a simple and common Azure application pattern:
One App, Multiple Clients Here is an example of a whiteboard solution for one cloud application, with multiple clients:
Mapping to the Application Architecture Guide Here’s an example of mapping an application to the canonical application architecture in the Microsoft Application Architecture Guide, second edition:
Information Architecture, or “IA” for short, is an over-loaded word that means many things to many people. I’ve found it helpful to think in terms of three flavors, summarized in the following table:
This helps me balance and address competing concerns and trade-offs, as well as think about the bigger picture. For example, who cares about a bunch of content types like Code Samples, How Tos, etc. if there’s no useful information in them, or if they are misused and abused? That’s where the Technical or Domain IA come into the picture. The Tech IA helps you dive deep into a particular technology or scenario. But who cares in either case, if you can’t even find the information or knowledge? That’s where the Site IA comes into play. The Site IA is about finding and browsing information on a page and connecting to relevant information in a simple way.
Examples are worth a thousand words so here is an example of each …
Content IA Here is an example of some parts of a content IA. Here is a simple example of a few content types:
Here is an example of a schema for the code example type above:
Tech Domain IA Here is an example of a domain IA for Windows native. It’s a simple collection of common topics and an organized set of product features:
The topics are derived by grouping customer scenarios into buckets or categories. For example, here is a set of scenarios for performance:
For more information on the Windows IA, see my related post, Windows IA (“Information Architecture”).
Site IA Here is a very simple pattern for a user interaction pattern with information that supports …
Here is an example using the Windows Dev Center:
See my related posts:
These are some of the best ways I’ve found to master time management, get great results, improve your productivity, and amplify your impact:
For more patterns and practices for improving results, see my book, Getting Results the Agile Way.
One of the best ways for making sense of a space is to have a lens for looking at it. The productivity and results space are well-traversed and the body of knowledge is enormous. That’s part of the problem. Without an effective lens, it can be difficult to find, organize, and share the productivity strategies, tactics, etc.
Knowledge Areas You can think of a “frame” or a “lens” as a set of knowledge areas that make it easier to learn a space. Together, the knowledge areas form a constellation of knowledge. For example, the PMBOK (Project Management Body of Knowledge) and SWEBOK (Software Engineering Body of Knowledge) use knowledge areas to cluster related topics, concepts, tasks, and terms to help share the information more effectively. It’s a way to frame out the space.
Productivity Body of Knowledge While working on Getting Results the Agile Way, one of the first things I needed to do was carve out the space into meaningful buckets. By “framing out” the results and productivity space, I created a more effective lens to look at productivity. This is how I created a “Productivity Body of Knowledge". I named the collection of knowledge areas for productivity and results, the Results Frame. Giving it a name and putting it into a simple table, made it easier to refer to and to share as a mental model with others.
The Results Frame (Productivity Knowledge Areas) Here is the Results Frame:
The key with these knowledge areas is that they are can contain insight and action. They are great containers or buckets for productivity principles, patterns, and practices. To create the buckets, I first gathered up all the “rocks” (the individual principles, patterns, practices, terms, concepts, etc.) , then I group the collections, and then I labeled the buckets. This is the opposite of making up buckets and then looking to fill them. I was more interested in creating buckets for proven practices and applied knowledge, rather than treating productivity as an abstract or academic exercise.
Not only did the Results Frame help with organizing my own body of knowledge for results and productivity, but it made it incredibly simple for me to very quickly parse just about any body of knowledge or significant work in the productivity space. This frame also helped me quickly pressure test productivity systems against a more holistic view, as well as to find their more specific strengths and weaknesses. Interestingly, you can also use the categories to help evaluate project management approaches and software development approaches. The frame is useful whether you use it to organize your own knowledge base on productivity, or you use it for teams, or organization. Don’t just take my word for it though … test drive it and you decide what works for you … you’re the ultimate expert on your context and scenario.
Here is a simple map of the Silverlight videos available from www.Silverlight.net.
While making our map, I was surprised to see how many Silverlight videos there are, compared to code samples or How Tos. That said, if you need a Silverlight video, I think you’re in luck. Currently this is a flat list. There are many possible improvements. For example, now it should be easy to bubble up the favorite videos. It’s also possible to add a “Getting Started” section at the top and group all the videos related to getting started.
Categories The categories are simply groups based on the existing videos mapped to common areas of concern. We used the following categories to chunk up the video collection into common tasks and topics:
Events and Delegates
Graphics and 3-D
Layout, Input, and Printing Security
Networking and Communication
Styles and Templates
Text and Rich Text
Video and Audio
WCF RIA Services
To Be Sorted …