Software Engineering, Project Management, and Effectiveness
As part of our patterns & practices Application Architecture Guide 2.0 project, we created sets of videos to help get you up to speed fast. We have a train the trainer video, step-by-step How To videos, Explained videos, and some videos About the Guide.
Index of Videos
Train the Trainer
About the Guide
I wrote a post, Keys for Skilled Happiness, on Sources of Insight. Some people are born with a better disposition, while others have to work at it. You don't have to work harder, you have to work smarter. Luckily, we have a great body of knowledge on happiness to draw from now. My notes are based on Carlin Flora's article, The Pursuit of Happiness in Psychology Today. Some insights are obvious, while others are surprising.
Here's a summary of the keys:
We posted our Service Architecture Pocket Guide to our Application Architecture Guidance KB. This is in response to customers who expressed interest in more modular guides as a supplement to our Application Architecture Guide 2.0.
Chapters At a Glance Here’s the chapters at a glance:
My Related Posts
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
As part of our App Arch Guide 2.0 project, we're creating scenario frames to organize customer problems into meaningful lists. These particular frames are an elaboration of our App Arch Meta Model. This helps scope our guidance. We also use them to test effectiveness. The value of the guidance is the value of the problems solved.
Scenario Frames on CodePlexYou can review and contribute to our scenario frames on CodePlex:
Presentation Layer Scenarios Frame Heres' the key hot spots for our presentation layer frame:
Business Layer Scenarios Frame Here's the key hot spots for our business layer frame:
Data Access Layer Scenarios Frame Here's the key hot spots for our data access layer frame:
Services LayerHeres's the key hot spots for our services layer frame:
As part of our patterns & practices App Arch Guide 2.0 project, we've created a set of application archetypes ("app types" for short.) You can see our app archetypes on our Application Types (Archetypes) Index page. To keep it simple, we focused on a small set of common application types that customers identify with. Here's the cool part ... for each application type, we're taking a principle-based approach, then showing relevant patterns, p&p solution assets, and Microsoft technologies. Keep in mind we're still hashing it out.
Mobile A mobile application will normally be structured as a multi-layered application consisting of user experience, business and data layers.
When developing a mobile application you may choose to develop a thin web-based client or a rich client. If you are building a rich client, the business and data layers are likely to be on the device itself. If you are building a thin client the business and data layers will be on the server.
See Mobile Application Type (CodePlex)
Rich Client Rich client user interfaces can provide high performance, interactive, and rich user experiences for applications that must operate in stand-alone, connected, occasionally connected, and disconnected scenarios.
Windows Forms, WPF, and Office Business Application (OBA) development environments and tools are available that allow developers to quickly and easily build Rich Client applications. While these technologies can be used to create standalone applications, they can also be used to create applications that run on the client machine, but communicate with services exposed by other layers (both logical and physical) that expose operations the client requires. These operations may include data access, information retrieval, searching, sending information to other systems, backup, and related activities.
See Rich Client Archetype (CodePlex).
Rich Internet Application (RIA) A Rich Internet Application (RIA) runs in the browser in a sandbox. The benefits of a RIA application include richer user experience, better responsiveness and network efficiency over traditional Web applications.
See Rich Internet Application Archetype (CodePlex).
Service A service is a public interface that provides access to a unit of functionality. Services literally provide some programmatic ‘service’ to the caller who consumes them.
Services are loosely coupled and can be combined from within a client or within other services to provide more complex functionality. Services are distributable and can be accessed from a remote machine as well as from the local machine on which they are running. Services are message oriented, meaning that service interfaces are defined by a WSDL file and operations are called using xml-based message schemas that are passed over a transport. Services support a heterogeneous environment by focusing interoperability at the message/interface definition. If components can understand the message and interface definition they can use the service regardless of their base technology.
See Service Application Archetype (CodePlex).
Web Application The core of a Web application is its server-side logic. The Web application layer itself can be comprised of many distinct layers. The typical example is a three-layered architecture, comprised of presentation, business, and data layers.
See Web Application Archetype (CodePlex).
Template for Application Type Guidance Here's the approach we're using to organize the guidance for each archetype:
You can walk the Web application example to see it in action.
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.
The most powerful pattern in Agile Results is: Monday Vision, Daily Wins, Friday Reflection
I introduce Agile Results in my best-selling book on time management Getting Results the Agile Way. (For a quick overview, benefits, testimonials, and videos, check out the landing page for Getting Results the Agile Way.)
The Monday Vision, Daily Wins, Friday Reflection pattern a big deal.
Because it creates a simple approach for personal results in work and life.
You learn how to quickly flow value each day and each week. Through Friday Reflection, you add a learning loop. By setting simple targets, chunking things down, and delivering little chunks of value, you get better and better at driving results.
You’ll astound yourself, and you’ll awaken new levels of resourcefulness and productivity you didn’t even know you had.
How do you get started?
It’s real simple.
One of the simplest ways to build your Agile Results habit is to add 3 reminders to your calendar:
You can literally prompt yourself to better performance.
It’s so simple in fact that you have to wonder how could something so simple create such profound results.
In fact, if you’re not sure how significant this can be to your life, watch Alik on Getting Results the Agile Way (Video), and how it changed his life.
Keep in mind, there is a lot to Agile Results.
But you don’t need it all at once.
Start small and go from there.
As I help more people go Agile, I try to simplify the most important concepts.
For me, one of the most important changes in Agile is what it means to the product development cycle.
I think a picture is worth a 1,000 words. I’ve put together a couple of simple visuals to show what it means to go from a Waterfall development approach to an Agile development approach.
Contrast the Waterfall Model with the Agile Model:
With these visuals, I attempted to show a couple of key ideas:
If you need to keep up with the pace of change, deal with changing requirements, keep up with user demands, while shipping value faster, Agile might be what you’re looking for.
I'm a fan of simple maps to help drill in. After all, it's hard to explore the concepts if you don’t know they exist, or you don’t know what they are called. Below is a work in progress. I’m making a quick, simple map of the key activities for a some software project-relevant processes.
I’m sure I’m missing key practices and some of the names have changed. So I’m sharing it, so that folks can help share what they know, to get to a map that includes the right top level names of key practices.
A code sample is worth a thousand words. Here are a few projects to take a look at that go beyond just code snippets to show you how to put key technologies together in the form of sample applications. (Note, if you are looking for just code snippets and focused code samples, you can check out the Microsoft All-in-One Code Framework project site on CodePlex.)
Layered Architecture Solution Guidance Project Site - http://layerguidance.codeplex.com
”Designing and creating layered applications can be a challenging task to developers. Layered Architecture Solution Guidance is a Microsoft Visual Studio 2010 extension that provides a set of tools and guidance aimed at simplifying the development of layered applications. Layered Architecture Solution Guidance is a Guidance Automation Extension that integrates with Microsoft Visual Studio 2010 to allow developers to easily create and organize their projects in a layered fashion following the structure that is illustrated in the Layered Architecture Sample for .NET. It provides a set of solution templates integrated with a suite of code generators to make developing layered applications much simpler and quicker.
Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App Project Site - http://microsoftnlayerapp.codeplex.com/
The main goal is to show how to use .NET 4.0 wave technologies implementing typical DDD patterns: N-Layered Architecture, Domain Entities, Aggregates, Repositories, Unit of Work, Domain Services, Application Services, DTOs, DTO-Adapters, etc.
Improvements in the Domain Layer
Improvements in the Application Layer
Improvements in the Data-Persistence-Infrastructure Layer
Improvements in the Presentation Layer
Improvements in the Distributed-Services Layer
When you can speak the language, it’s easier to find your way around. One of the key things I’ve learned at Microsoft is that I can find my way around the platform fast, *if* I know the language. The language usually consists of scenarios or topics, features, and APIs.
The toughest part is usually mapping out the features. The beauty is that if you know the features, they tend to be a token or a handle that connects you to various documentation sets, presentations, samples, and a plethora of other resources. The other value of knowing the feature names is they tend to be unique names, so they are more precise and they help cut to the chase when searching through vast seas of information.
Here is an initial map of the Microsoft Application Platform from a topics, features, and API perspective. It’s effectively a language for the Microsoft application platform. Note that while many of the feature or API lists may be out of data, you can use the idea to build your own maps. Once the frame is in place, it’s a lot easier to update it with current information. In fact, this would actually be useful as a Wiki map. It would serve as a master map of the application platform, that would make it easy to connect to relevant resources, using a common frame and vocabulary.
The map starts off by focusing on the most common application types, and then walking each core technology building block, then drilling into topics, features, and APIs.
Enjoy the map … and please extend.
Application Technology Patterns
ADO.NET Topics and Features Map
ASP.NET Topics and Features Map
View more …
Silverlight Topics and Features Map
View More …
WCF Topics and Scenarios Map
Windows Azure Topics and Features Map
Windows Client Topics and Features Map
Windows Phone Topics and Features Map
"I honestly think it is better to be a failure at something you love than to be a success at something you hate." -- George Burns
I should have written this a long time ago. This can potentially be one of the most important tools you add to your mental toolbox. It's life changing.
I'm giving you a recipe for success. Along the lines of Bruce Lee, I call it, The Way of Success. I named it "The Way of Success", because it's about working backwards from the end in mind, while enjoying the journey forward. Enjoying the journey forward, doesn’t mean that it’s a bed roses, but instead it’s more fulfilling and you can have confidence in the path, as well as enjoy more ups, than downs.
What is the Way of Success What exactly is "The Way of Success"? It's a proven practice for producing outstanding results in your life. Whether you want to change your lot in life, or improve your impact at work, or grow yourself to another level, this is a timeless technique for making it happen. Life can also throw us plenty of curve balls, so this is a way to work on your swing, and knock more out of the park.
The Way of Success at a Glance Here are the key steps in the process:
I explain each step in my article, The Way of Success. Note that while I share it as steps, the process is iterative and incremental.
It’s Not Easy, It’s Effective This is not an "easy" way to success. Instead it's an effective "path" for success. Unfortunately, sacrifice is often the price of success. To make it worse, it's easy to sacrifice a lot of time and energy, only to hit a dead-end or a glass ceiling. The solution is to use models and maps from working examples to avoid the pitfalls and streamline your success. So while it’s not easy, it can be “easier.”
The Balcony View is the Key to Success There really is a pattern for success and the beauty is that anybody can use it to do anything better. You can model the success and excellence of others and apply it to your own life. And there actually are short-cuts for speeding up your success, without cutting corners. The trick is finding the critical paths that work. The real trick though is to take the balcony view and look across the patterns of success from working models. By looking across, you can find the most likely models that will work for you, and you can find the nuances and distinctions that make them work. This is the ultimate formula and recipe for success that will help you get more leverage from the time and effort that you already put in.
The next time you see somebody succeeding in amazing ways, now you know how the magic trick was done, but better yet, how you can do it too.
Call to Action Read the The Way of Success. Apply it to an important area or challenge in your life. Test your results. Share your stories and feedback with me. Share the approach with others. Share it with anybody you know that needs an advantage in life, and would want a proven practice for improving their success.
I’ve made Sources of Insight available on the Kindle. You can find the sign up on Amazon at:
* Note that UK customers can purchase blog subscriptions only from the UK Kindle Store.
If you haven’t taken Sources of Insight for a test-drive, it’s my blog for sharing insight and action for work and life. It’s all about how to make you great, and growing your own personal garden of greatness.
Here are a few of the things you will find …
Cross-Cutting Skills for Life As far as key topics, I cover the following hot spots:
Deep Dives on Skills to Solve Real Problems and Improve Your Abilities I do dive deeps on key topics in a pragmatic way. I basically used what I’ve learned from building prescriptive guidance on the Microsoft patterns & practices team to create a knowledge-based of cross-cutting skills for life. For example, here’s an article on How To Think Like Bill Gates, where I share the non-obvious ways to improve your intellectual horsepower.
Book Nuggets I use books as my short-cut to the latest and greatest thinking and ideas (aside from people and mentors.) I also use books to learn fundamental skills and techniques I can apply on the job. One of my favorite blog posts to write is what I call a “book nugget” where I write about a specific insight or technique from a book, and show how I apply it on the job, or how you might immediately test it in your life. Here are a few of my favorite book nuggets I think you’ll find useful:
Best-Selling Authors Periodically, I feature best-selling authors. They write articles for Sources of Insight about their top lessons or their “ah-ha” surprises in life. Here are a few of my favorite examples:
Great Books I created an extensive book recommendations collection. For many months (well, years now I guess), I’ve spent ~ $300 on books. As you can imagine, I go through a lot of books. Here are a few of my key book recommendation lists:
Great People One of my favorite sources of insight is people. I share and distill lessons learned from a variety of key people. Here are some of my favorites I think you’ll enjoy:
Great Quotes Quotes are one of the simplest ways to share wisdom of the ages and modern sages. The right words really can light up insight or inspire action in new ways. Here are some of my favorite quote lists:
If you find it useful, please share the link with others and write a review on Amazon so others can benefit from your experience.
If you’re a Windows Azure developer or you want to learn Windows Azure, this map is for you. Microsoft has an extensive collection of developer guidance available in the form of Code Samples, How Tos, Videos, and Training. The challenge is -- how do you find all of the various content collections? … and part of that challenge is knowing *exactly* where to look. This is where the map comes in. It helps you find your way around the online jungle and gives you short-cuts to the treasure troves of available content.
The Windows Azure Developer Guidance Map helps you kill a few birds with one stone:
Download the Windows Azure Developer Guidance Map
Mental Model of the Map The map is a simple collection of content types from multiple sources, organized by common tasks, common topics, and Windows Azure features:
Special Thanks … Special thanks to David Aiken, James Conard, Mike Tillman, Paul Enfield, Rob Boucher, Ryan Dunn, Steve Marx, Terri Schmidt, and Tobin Titus for helping me find and round up our various content collections.
Enjoy and share the map with a friend.
If you’re interested in Microsoft data access (ADO.NET, Entity Framework, etc.), this map is for you. Microsoft has an extensive collection of developer guidance available in the form of Code Samples, How Tos, Videos, and Training. The challenge is -- how do you find all of the various content collections? … and part of that challenge is knowing *exactly* where to look. This is where the map comes in. It helps you find your way around the online jungle and gives you short-cuts to the treasure troves of available content.
The Windows ADO.NET Developer Guidance Map helps you kill a few birds with one stone:
Download the ADO.NET Developer Guidance Map
Mental Model of the Map The map is a simple collection of content types from multiple sources, organized by common tasks, common topics, and ADO.NET features:
Special Thanks … Special thanks to Chris Sells, Diego Dagum, Mechele Gruhn, Paul Enfield, and Tobin Titus for helping me find and round up our various content collections.
The MSDN Library is the primary showcase of our Microsoft product documentation. It’s a treasure trove of gems. The problem is, if you don’t know where to look, sometimes finding the documentation you’re looking for can be a challenge. Part of your success hinges on finding the right information, so let’s see what we can do about that.
I put together a mockup of the MSDN Library Home for the MSDN Library team as an example of one way to showcase some key starting points for some popular technologies on the MSDN Library Home. Here is the model:
Here are some key points about the model:
Special Thanks … Special thanks to the following people for helping me find the main starting points and put the frame together: Alik Levin, Eric Peterson, Jesse Liberty, Joe Stagner, Jon Galloway, Paul Enfield, Pete Brown, Rey Bango, Rob Boucher, Sam Landstrom, Scott Hanselman, Tim Teebken, Wade Pickett
If you have thoughts on the model, send my way.
This is a guest post by Paul Lidbetter. Paul is a seasoned Enterprise Architect on the Microsoft Enterprise Architect and Strategy Practice in the UK. His specialty is business value, strategic alignment, and Cloud transformation opportunities with customers.
Paul is also an active member of the Innovation Value Institute Consortium, a Chartered Engineer, Fellow of the BCS, and member of The Institution of Engineering and Technology (The IET).
Without further ado, here’s Paul on Value Realization …
Value realization is talked about, but is less frequently achieved because it is hard to deliver! Value realization tends to be thought of by many organizations as the magic that will happen at the end of a project/program.
Value Realization has evolved to become one of the most used phrases in project proposals, value propositions and investment discussions, but do we really know what the implications are or what we are promising by agreeing to Value Realization as part of a program of work?
Cost of ownership and business benefit measures have been and are still used as the focus for a business case, which is, at worst, simply a gate to justify a business investment, after which any focus on managing and delivering the expected business benefits, from the agreed investment, is long forgotten.
In my experience Value Realization is hard because it assumes some level of maturity for process, reporting, measures and decision making, as part of a value based culture, which supports long term ownership of change and value management over extended time lines. For example in the worst cases I have experienced;
As Value: = (Benefits - (Operational Costs & Investment-Capital Costs)) Realized Value is impacted by delivering more or less benefits and/or incurring more or less costs/investments needed to deliver such benefits over time. Indeed the investment is very much part of Value Realization. Value therefore needs to be measured over the life time of the change, for example some metrics may be evident early in the adoption cycle and others such as overall ROI may take years. Because of the time line, investment time/resources needed tend to increase and benefits fall/become less relevant with time, thereby leaking value from the business also impacting opportunity costs.
Realization means that the value defined by the business case (or agreed sub set) is actually delivered, is visible and has an agreed impact on business goals, KPIs, revenue and budgets. Until value is actually realized it is remains as potential value and no more. For example finding a cost saving and then not reducing budgets or reallocating the funds to drive new opportunities is not Value Realization, it is pretending that value has been delivered.
A more top down approach may increase accountability for delivering benefits, but the very same people may not want the benefits (e.g. they see dis-benefits based on cuts to their budgets, staff, maybe major personal and career change), or they may want the benefits, but are still dependent on another group, who may own the budgets/resources and have other priorities on time and resource, to enable solutions and deliver change.
So stakeholder management and alignment are key issues that can be a source of delay and indeed failure to optimize Value Realization.
Value Realization therefore demands a value culture or shift in an organization around value governance and increasing levels of maturity/capability to focus on qualifying decisions based on Realizable Value and managing value as part of delivery programs. Hence, successful Value Realization needs to be planned as part of any project/program from the start, not in panic at the end of the project based on smoke and mirrors. Of course if there are no defined measures to start with then smoke and mirrors can work every time.
Value Realization is/should become more critical to organizations as the ability to source new cloud services and capabilities accelerates and lowers the risk and costs for the design and deployment cycles, thereby throwing the internal focus on doing the right things and ensuring value is being created within shorter cycles. This is further driven by both business and accelerating technology trends which in some industries can be enabled to deliver value faster for competitive advantage. Being able to demonstrate that a program has delivered on time and on budget is no longer good enough, pretending that value just appears is no longer good enough to remain competitive.
Some organizations focus on realization in the short term, in order to mitigate this issues above and also to ensure that opportunity costs are maximized. Indeed some organizations I have worked with, both commercial and public sector, have banked the benefits at the start of the project. For example a CFO reduced the travel budgets at the start of a Unified Communication program to accelerate the program, business change and adoption. The final value delivered is still dependent on the overall level of investment, but this did drive behavior and accelerate change.
In a Telecommunications customer, although the initial discussion was with IT and around deployment, the focus for change was in fact the business (HR), which allowed both relevant measures and accountability to be established. Also the focus on delivering value was integrated into the PMO and associated change managers which enabled the Value Realization process to be part of the overall plan, as part of a Microsoft Enterprise Strategy Services engagement. In addition the number of measures where kept small and easy to verify. E.g. a cost saving metric, a productivity measure and a program acceleration measure (to demonstrate the value of the Microsoft Enterprise Strategy Services engagement)
A further example from a financial organization had some of the challenges, but the approach taken ensured that a culture and process change was slowly introduced with support from Microsoft Enterprise Strategy Services. Projects/Programs were delivered with measures that were more about cost and time, but in order to demonstrate the value of both Microsoft Enterprise Strategy Services and customer projects, some projects were evaluated for post Value Realization in which the benefits were signed off ( or not, by stakeholders) and accumulated with investments to provide a snap shot in time of value realized. Importantly this also allowed potential value, to be identified along with a portfolio based value management process and relevant accountabilities to be successfully introduced moving forwards.
Some of the key enablers are therefore;
Value Realization is a powerful tool when you use it as an approach to help connect business and IT, justify investments, accelerate business value, and drive adoption and change.
Martin Sykes on Value Realization
Mark Bestauros on Value Realization
Graham Doig on Value Realization
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
Chapters At a Glance Here’s the chapters at a glance:
My Related Posts
Pocket Guides Here’s the Pocket Guides available so far:
You can browse the list of pocket guides on the Pocket Guide Index page.
I posted my Lessons Learned in 2008 on Sources of Insight. 2008 was a pretty insightful year for me. I met a lot of great people, read a lot of books, and learned a lot along the way. I recapped my top 10 lessons here.
Top Ten Lessons for 2008
Now's your chance to influence patterns & practices Enterprise Library 5.0. You can do so by taking the Enterprise Library 5.0 Product Backlog Prioritization Survey. The current backlog includes more than 100 stories. You can suggest priorities for these items as well as suggest up to 3 new stories. Each story has a "T-Shirt size", which is a rough estimate of the cost. You get 100 points to spend on your priorities. For example, you might spend all 100 points on your most important priority or you might spread your points over several stories.
T-Shirt Cost Sizes / Cost Here's a summary of the T-Shirt sizes and relative costs:
Story Categories The Enterprise Library 5.0 product backlog is organized by the following categories:
Enterprise Library 5.0 Stories List Here's the list of stories in the tentative Enterprise Library 5.0 Product Backlog:
Resource Management & Localization
This post is a simple way to browse the bulk of my patterns & practices work on MSDN and CodePlex. After I walk customers through things, the next question is usually, "OK, so where do we find this?" This is the link I'll be sharing.
Books / Guides
Practices at a Glance
Threats and Countermeasures
Questions and Answers
ASP.NET Security How Tos
WCF Security How Tos
Visual Studio Team System
My Architecture Journal article is live, A Language for Architecture. I wrote the article to share the map of application architecture we created during our patterns & practices Application Architecture Guide 2.0 project. It's a simple language for helping you get in the ballpark when you're traversing the very large space of software architecture. By framing and naming the space, we can more effectively share our principles, patterns, and practices for application architecture. This also helps consolidate all the great information spread over time and space and threads and heads. More importantly, if we simplify how we talk about architecture, we can move up the stack as well as pave paths for others and help mentor others in our field. Instead of asking basic questions like what is architecture, we can ask things like how do we define archetypes for the cloud or how do improve product line engineering for common systems and application types? In our case, we're using the language to help rationalize our portfolio of assets in our patterns & practices product line.
Why the Map There's an explosion of concepts in the architecture space. While working on the Application Architecture 2.0 Guide, we needed a simple, but effective bird's-eye view of the space. By framing and naming the space, we created a shared vocabulary, helped avoid information overload, and made it easier to find, organize, and share principles, patterns, and practices with customers, field, and product teams. It's good for the ecosystem.
Usage Scenarios Here's some usage scenarios:
Key Concepts Here's some key concepts behind the map and language:
The Map The key components of the language include: