Software Engineering, Project Management, and Effectiveness
We posted our patterns & practices Security Engineering Cheat Sheet to our Application Architecture Knowledge Base on CodePlex. It’s a bird’s-eye view of applying our security techniques to the life cycle. The techniques and approach shipped with VSTS/MSF Agile starting in 2005.
Security Engineering Overlay Here’s a view that overlays our key patterns & practices security techniques alongside common software engineering activities:
Key Activities in the Life Cycle The core activities you should consider performing include the following:
You can read more about these techniques and how to apply them to your software architecture and your software development life cycle on our Cheat Sheet – patterns & practices Security Engineering.
My Related Posts
We posted our patterns & practices Performance Engineering Cheat Sheet to our Application Architecture Knowledge Base on CodePlex. It’s a bird’s-eye view of applying our performance techniques to the life cycle. The techniques and approach shipped with VSTS/MSF Agile starting in 2005.
Performance Engineering Overlay Here’s a view that overlays our key performance techniques alongside common software engineering activities:
Key Activities in the Life Cycle The core activities you should consider performing include the following:
You can read more about these techniques and how to apply them to your software architecture and your software development life cycle on our Cheat Sheet – patterns & practices Performance Engineering.
Additional Resources You can find more information on performance engineering at:
In my previous post, Choosing the Right Presentation Technology, I mentioned that we posted our cheat sheet on Microsoft presentation technologies to CodePlex. Now, we’ve finished posting our cheat sheets for data access, workflow, and integration on CodePlex:
Technology Coverage Here’s a summary table of the technology coverage in the cheat sheets:
Agile Architecture Methodology You can use the Agile Architecture Methodology to help map and test relevant technologies to your scenario. At the end of the day, the best techniques for choosing technologies include architectural spikes, scenario-based testing and scenario-based evaluation. My Related Posts
Today we released our patterns & practices Application Architecture Guide 2.0 Beta 2. This is our Microsoft playbook for the application platform. It's our guide to help solution architects and developers make the most of the Microsoft platform. It's a distillation of many lessons learned. It’s principle-based and pattern-oriented to provide a durable, evolvable backdrop for application architecture. It's a collaborative effort among product team members, field, industry experts, MVPs, and customers. This is the guide that helps you understand our platform, choose among the technologies, and build applications based on lessons learned and proven practices.
Key Changes in Beta 2 Beta 2 is a significant overhaul of the entire guide. We carried the good forward. We made some key additions:
Key Scenarios The guide helps you address the following scenarios:
Conceptual Framework At a high level, the guide is based on the following conceptual framework for application architecture:
Reference Application Architecture We used the following reference application architecture as a backdrop for explaining how to design effective layers and components:
Core Dev Team
Contributors / Reviewers
As part of our patterns & practices Application Architecture 2.0 project, we created a set of application architecture checklists to help sweep our guide. The act of creating the checklists, forces us to revisit the guidance. We're still sweeping the guidance, but we're ready to share the checklists. Improving the checklists improves the guide. As a side benefit, you get handy checklists you can use as a baseline for your own checklists for application architecture.
Application Architecture Checklists
Feedback on the Checklists To provide feedback on the checklists, you can make your comments either here on my blog or in the App Arch KB forums.
How do you choose among the Microsoft .NET presentation technologies? Use scenario-based evaluation. At the end of the day, a technology is a set of capabilities. Map those capabilities to your scenario and requirements. OK, great, but where do you start? That's where our cheat sheet comes in. As part of our Application Architecture Guidance 2.0 project, we created a cheat sheet to help you quickly find your way through the technologies:
Cheat Sheet – Presentation Technology Matrix We posted our latest cheat sheet to CodePlex:
Presentation Technologies Here’s the technology combinations that we identified, evaluated and cataloged:
That’s a lot of options, but that’s a good thing. In a mature market, expect lots of options and specialization. This helps you use the right tool for the job. The challenge, of course, is knowing which one is the right tool, but that’s where our cheat sheet should help. Ultimately, the cheat sheet is a support aid and doesn’t replace your own thinking or analysis. Instead, it helps you consolidate some key information on the technologies, and help you consider some of the benefits and considerations.
Organizing the Technologies To organize the technologies, we use a simple frame:
By pinning the technologies against common application types (Mobile, Rich Client, RIA, and Web App), it made it very easy for us to slice and dice the technologies by relevancy, capabilities, and scenarios.
How We Created the Cheat Sheet
We started from a base set of application types and scenarios. We vetted from experience among the p&p development team. Next, we reviewed with various product team members, including Brad Abrams, Pat Helland, Glenn Block, and Ian Ellison-Taylor. Next we vetted with some customers. It’s a work in progress and we’ve been through several iterations. In fact, the version we posted today is version 35. Now it’s time to share with a broader community.
Today we posted our updated software architecture best practices at a glance to CodePlex, as part of our patterns & practices Application Architecture Guide 2.0 project:
They’re essentially a brief collection of problems and solutions around building software applications. The answers are short and sweet so that you can quickly browse them. You can think of them as a bird’s-eye view of the problem space we tackled. When we add them to the Application Architecture Guide 2.0, we'll provide quick links into the guide for elaboration.
This is your chance to bang on the set of problems and solutions before Beta 2 of the guide.
I presented our new patterns & practices Agile Architecture Method for the first time at the patterns & practices Summit. Our Agile Architecture Method is an iterative and incremental approach for designing architectures.
To summarize, it’s a technique that:
I’ve summarized the approach below, and we’ve posted a step-step how to on CodePlex:
Input Here’s the key input into the process:
Output Here’s the key output of the process:
Summary of Steps
Step 1. Identify Architecture Objectives This is a scoping exercise. The purpose of this step is to figure out how much time and energy to spend on subsequent steps as well as guide your overall effort. You should know what you want in terms of outcomes. Here’s an example of potential goals:
Step 2. Identify Key Scenarios Identify relevant scenarios to focus your design on what matters most, and to evaluate your candidate solutions. In this case, you want to identify architecturally significant use cases. Architecturally significant use cases are those that meet the following criteria:
You can draw key scenarios from your user stories, business stories and system stories.
Step 3. Create an Application Overview Create an application overview. The application overview serves to make your architecture more real, connecting it to real-world constraints and decisions.
An application overview consists of the following steps:
A good test of an application overview is whether you can whiteboard it.
Step 4. Analyze Key Hot Spots Identify key hotspots based on quality attributes and the architecture frame. These are the areas where mistakes are most often made when designing an application.
Quality Attributes Frame Understand the quality attributes that are important for your application and scenarios. For instance, most applications need to address security and performance and will be traded against usability, flexibility and other attributes that may be more or less important to you depending on your scenarios and requirements. You can use the following frame to identify key quality attributes to consider:
Architecture Frame The architecture frame represents cross cutting concerns that will impact your design across layers and tiers. These are also the areas in which high impact design mistakes are most often made. Use the architecture frame to identify hot spots in your design that require additional attention to get right. You can use the following architecture frame to identify cross cutting concerns in your design:
Step 5. Create Candidate Solutions Create a candidate architecture and along with architectural spikes and evaluate it against your key scenarios, hot spots, and deployment constraints. The outcomes of this step are:
Iterative and Incremental Design You can iteratively flesh out your architecture as you work through your design and discover more details that impact your architecture. You don’t have to design your architecture in a single iteration. Do not get lost in the details; focus on the big steps and build a framework on which you can base your architecture and design.
patterns & practices SharePoint Guidance is now available.
Abstract patterns & practices SharePoint Guidance helps architects and developers build SharePoint intranet applications. The guidance contains a reference implementation (RI) that demonstrates solutions to common architectural, development, and lifecycle management challenges. This guidance discusses the following:
Out of Scope
Distributed Agile Development at Microsoft patterns & practices (PDF) is now available.
Abstract Distributed development is a fact of life for many teams. Unfortunately most agile methodologies or approaches assume that the team is located in a single team room. Until recently there has been little guidance about how to apply these approaches with a geographically dispersed team. Microsoft’s patterns & practices group has been following an agile, distributed development approach for the past five years. During this time teams within the group have experimented extensively with different approaches to best address the challenges of distributed agile development. This paper outlines the challenges faced by geographically distributed agile teams and details some proven practices to address these issues and build successful distributed teams.
Contents at a Glance
patterns & practices Acceptance Test Engineering (Beta 1) is now available.
Here’s the key scenarios the guide addresses:
How The Guide is Organized The guide is organized in 3 parts:
Unity Application Block 1.2 is now available.
Key Features The Unity Application Block (Unity) is a lightweight, extensible dependency injection container. It facilitates building loosely coupled applications and provides developers with the following advantages:
Enterprise Library 4.1 is now available.
What Is Enterprise Library? Enterprise Library is a collection of reusable software components (application blocks) designed to assist software developers with common enterprise development challenges (such as logging, validation, caching, exception handling, and many others). Application blocks are a type of guidance encapsulating Microsoft recommended development practices; they are provided as source code, tests plus documentation that can be used "as is," extended, or modified by developers to use on complex, enterprise-level line-of-business development projects.
What are 3 great results for today? That's the question I ask to bootstrap my day. As simple as it sounds, I find it's the most effective way to cut through the fog each day. There's a lot of things I can do and there's lots of activities I'll be doing, but what are 3 great outcomes for today. That's it.
Example This is an example of my 3 great results for this past Monday:
Great is relative.
Why 3 things? It forces me to prioritize among a sea of potential results. Also, I can remember 3 things without writing them down, so throughout my day, I know what I'm working towards. I can say it in the hall.
If you manage endless to do lists and work on a bunch of stuff but don't actually get anything done, try focusing on 3 great results each day. It works.
Today we released our patterns & practices App Arch Guide 2.0 Beta 1. This is our guide to help solution architects and developers make the most of the Microsoft platform. It's a distillation of many lessons learned. It’s principle-based and pattern-oriented to provide a durable, evolvable backdrop for application architecture. It's a collaborative effort among product team members, field, industry experts, MVPs, and customers. Keep in mind it’s Beta so there’s still moving parts and we’re processing quite a bit of feedback across the guide. Now’s the time to bang on it.
As part of our patterns & practices Application Architecture Guide 2.0 project, we've been hunting and gathering our patterns from across our patterns & practices catalog. Here's an initial draft of our patterns & practices Patterns Catalog at a Glance:
Pattern Catalog To collect the patterns, we first identified the key projects that focused on patterns:
Next, we organized the patterns and summarized in tables. You can browse the tables below to see which patterns are associated with which project.
Composite Application Guidance for WPF
Enterprise Solution Patterns
Web Services Security Patterns
Pattern Summaries The following pattern summaries are brief descriptions of each pattern, along with a link to the relevant MSDN pages.
Data Movement Patterns
Enterprise Solution Patterns
Performance and Reliability
Web Presentation Patterns
Web Service Services Security Patterns
Message Replay Detection
At Microsoft, I regularly mentor some fellow softies. It can be tough to navigate the waters, find your strengths, figure out worklife balance, and deal with the stresses of the job, all while making things happen. I help my mentees learn the most effective ways for getting results in a tough, competitive environment. It's challenging. It's rewarding. I've had several great mentors throughout my life at Microsoft, so mentoring is a way that I give back, sharing my lessons learned and helping others grow. While my 1:1 sessions are the most effective, I try to share key practices more broadly in posts. Here's a roundup of my various posts for improving effectiveness at work and life. I organized them by meaningful buckets and provided an A-Z list at the end. Enjoy.
Career Learn how to find your path and get more from your career. Work with the right people on the right things making the right impact. These posts focus on career and worklife balance:
Communication Communication is among the most important skills for getting results in work and life. Empathic listening is the most important communication skills. Improve the quality of your communication, and improve the quality of your life. These posts focus on communication skills:
Email Don't be a slave to your mail. With the right approach, you can spend less time in your inbox and enjoy an empty inbox on a regular basis. These posts focus on email management:
Intellectual Horsepower Thinking is asking and answering questions. Learn ways to improve your thinking through question-driven techniques and changing perspectives:
Leadership Leadership is influence. Amplify your results by improving your sphere of influence. Leadership starts with self-leadership. These posts focus on leadership skills:
Learning Learning is a life-long process. Adopt practices that help you grow. These posts focus on improving your learning:
Motivation Motivation is your energy or desire to make something happen. It's also the energy or desire for others to make something happen. Learn how to improve your own passion for results as well as how to influence and motivate those around you. These posts focus on motivation:
Personal Development Personal excellence is a path, not a destination. In life you're either climbing or sliding. One key is to find ways to climb faster than you slide. Another key is balancing your multiple demands and growing in your mind, body, career, emotions, financial, relationships and fun. These posts focus on personal development:
Personal Productivity Make stuff happen. Drive or be driven. With the right approaches, you can carve out time for what's important and prioritize more effectively. This is the key to getting results. These posts focus on personal productivity:
Project Management If you need to get something done, make it a project. Whether it's a small-scale, personal project or a large, team-based project, there's patterns and practices you can use to be more successful. These posts focus on project management:
Teamwork Effective teamwork is a key skill in today's workplace. Learn how to get more done with your colleagues. These posts focus on improving your teamwork:
Time Management You can't add more hours to the day, but you can spend your time more effectively. You can also add more power hours to your day. These posts focus on time management:
Questions Questions are a powerful way to shape your thinking and mindset. Ask better questions and get better answers. These posts focus on asking and answering better questions:
A-Z Here's the posts organized in a flat A - Z list for easy scanning:
Sources of Insight If that's not enough for you, check out my project blog: Sources of Insight. Sources of Insight is a browsable KB of insights and actions for work and life. It's where I share my lessons learned from books, heroes and quotes. You can read more about the mission and vision in the About page.
A Scenario and Feature Frame is a matrix that shows incremental value and dependencies. It's a simple way to show management your baseline release, your nice to have scenarios, and your vNext planning. It's also a great way for your development team to see how their effort fits into the big picture, as well as recognize any dangerous cross-dependencies.
I summarized how to create a Scenario and Feature Frame on ShapingSoftware.com. Enjoy.
As part of our patterns & practices Application Architecture Guide 2.0 project, we've been hunting and gathering our patterns & practices solution assets. Here's our initial draft of our catalog at a glance:
You can use it to get a quick sense of the types and range of solution assets from blocks to guides.
Architecture Meta-Frame We used our Architecture Meta-Frame (AMF) as a lens to help slice and dice the catalog:
Here's some examples to illustrate:
The frame is easily extensible. For example, if we include our Engineering Practices Frame, we can group our process, activity, and artifact related guidance.
Catalog at a Glance Here's a quick list of key patterns & practices solution assets at a glance:
Application Types Guidance assets listed by application type.
My Related Posts
As part of our patterns & practices App Arch Guide 2.0 project, we'll be creating step-by-step How Tos. The How Tos help turn some of the concepts into action. They are particularly helpful for some areas where there's friction or complexity. Here's our initial batch of draft How Tos on CodePlex:
They're still works in progress, but this way you can start to bang on them and give feedback.
I added a brief over deck of our patterns & practices App Arch Guide 2.0 project to codeplex:
It's actually a pretty fast slide deck. The first handful of slides give you a quick overview of the project goals and scope. The appendix is all visual. You can flip through and see how some of the key parts of our story are unfolding.
As part of our patterns & practices App Arch Guide 2.0, I put together a short list of resources I want to make sure my team is spending time in:
As far as some community sites, here's a short list of ones I've found helpful:
What's your favorite haunts for architecture nuggets?
I'm a fan of scenarios. Whether you use scenarios for scenario-driven development, scenario-based evaluations, competitive assessments or for shaping products ... scenarios are where the rubber meets the road. I think scenarios are particularly effective for evaluating architectures and for making architecture trade-off decisions. I wrote a short post on Shaping Software that reiterates a mantra I frequently use ... you can't evaluate architecture in a vacuum.
Today we posted our Arch Frame to CodePlex. Wednesdays are ship days (I don't ship on Fridays.) The App Arch Frame is a collection of hot spots you hit when building line of business (LOB) applications. The key to the buckets is that they organize actionable principles, patterns, and practices. They also help us overlay patterns & practices solution assets. You give feedback either in the comments here, or on the CodePlex page:
A few people have asked me for an abstract on the patterns & practices Application Architecture Guide 2.0 project (a work in progress). Here it is.
Conceptual Framework A picture is worth a thousand words. Here's the conceptual framework for the guide:
"How to put the legos together"
Abstract The purpose of the Application Architecture Guide 2.0 is to improve your effectiveness building applications on the Microsoft platform. The primary audience is solution architects and developer leads. The guide will provide 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.