Software Engineering, Project Management, and Effectiveness
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
Key Links
patterns & practices Acceptance Test Engineering (Beta 1) is now available.
Key Scenarios
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.
What's New
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's New?
Key Features
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.
5 Parts
Chapters
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
My Related Posts
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
Data Patterns
Enterprise Solution Patterns
Integration 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.
Modularity
Testability
Data Movement Patterns
Deployment Patterns
Distributed Systems
Performance and Reliability
Services Patterns
Web Presentation Patterns
Integration Layer
Integration Topologies
System Connections
Web Service Services Security Patterns
Authentication
Authorization
Exception Management
Message Encryption
Message Replay Detection
Message Signing
Message Validation
Deployment
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.
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.