Software Engineering, Project Management, and Effectiveness
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
What's the full patterns & practices catalog? I created a quick index of the patterns & practices catalog since I've needed to hunt down a few things. I figured this might be useful to share.
Today we released our patterns & practices Improving Web Service security: Scenarios and Implementation Guidance for WCF on MSDN. Using end-to-end application scenarios, this guide shows you how to design and implement authentication and authorization in WCF. You'll learn how to improve the security of your WCF services through prescriptive guidance including guidelines, a Q&A, practices at a glance, and step-by-step how to articles. The guide is the result of a collaborative effort between patterns & practices, WCF team members, and industry experts.
Key Scenarios Here's the key scenarios:
Contents at a Glance
Contributors / Reviewers
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.
Here is a map of the Information Technology Infrastructure Library (ITIL) v3. ITIL v3 is organized by ITIL stages, processes, and sub-processes. According to Wikipedia, “ITIL describes procedures, tasks and checklists that are not organization-specific, used by an organization for establishing a minimum level of competency.” You can find an explanation of the ITIL processes at the ITIL Wiki.
If you’re doing any sort of IT work, it helps to know the lay of the land. What better way to know the lay of the land of the IT landscape that to know the map of the minimum competencies that IT is supposed to perform.
Stages and Processes Here is a map of the ITIL Stages and the ITIL Processes within each.
Continual Service Improvement
Processes and Sub-Processes Here are the core ITIL v3 Stages:
Here is a map of the ITIL Processes and Sub-Processes organized by ITIL v3 stages:
Strategy Management for IT Services
Service Portfolio Management
Financial Management for IT Services
Business Relationships Management
Service Catalogue Management
Service Level Management
IT Service Continuity Management
Information Security Management
Project Management (Transition Planning and Support)
Release and Deployment Management
Service Validation and Testing
Service Asset and Configuration Management
IT Operations Control
Definition of CSI Initiatives
Monitoring of CSI Initiatives
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
While trying to create threat model template for customers, I analyzed many threat models inside and outside Microsoft. It was insightful to see the patterns of what was useful across threat models and what was noise.
A good threat model has the following components:
A good threat model serves the following purposes:
By far, the most tangible output of the threat modeling activity is a prioritized list of vulnerabilities. These are action items for your developers and input for your testers. The developer makes a call on whether and how to fix, and the tester will test the fix.
This sample Template for a Web Applications Threat Model comes very close to showing what I've empirically seen to be useful, though there's always a gap between reality and real-time.
The Microsoft Windows Azure Code Samples Collection is a roundup and map of Windows Azure code samples from various sources including the MSDN library, Code Gallery, CodePlex, and Microsoft Support.
You can add to the Windows Azure code examples collection by sharing in the comments or emailing me atFeedbackAndThoughts at live.com.
Common Categories for Windows Azure Code Samples The Windows Azure Code Samples Collection is organized using the following categories:
Windows Azure Code Samples Map
Windows Azure Training Kit
Architecture and Design
patterns & practices
Claims / Identity
Data Access and Storage
Logging and Instrumentation
All-in-One Code Framework
Service Management API
· Windows Azure Service Management CmdLets from http://code.msdn.microsoft.com/azurecmdlets
Windows Azure Storage
Windows Azure UE Team Code Samples The Windows Azure UE team now has an organized collection of code samples available at:
My Related Posts
Are you using Getting Results the Agile Way to get ahead? If you know the best ways to use your time and energy, you can get exponential results. Agile Results, the system inside of Getting Results the Agile Way, is a synthesis of proven practices for motivation, time management, and productivity.
It’s a simple system for meaningful results.
Agile Results is flexible, so you can adapt it to work for you, and you can adapt it to any situation. It’s flexible by design. Darwin taught us that nature favors the flexible, and Agile Results is all about making things happen while thriving on change. Change is a constant, so it’s a great launching pad for a time management system and personal productivity practices.
While the system itself is simple, the ideas powerful. You can use them to instantly change your approach and break through barriers or limits holding you back, or wearing you down. People that read Getting Results the Agile Way use it to get better reviews, revamp their business, do better in school, etc. To bottom line it – they use it to get better, faster, simpler results, and make the most of what they’ve got.
The beauty of the system is that you can use it to do anything better. Whether you use 30 Day Improvement Sprints, Timeboxing, The Rule of Three, or Monday Vision, Daily Outcomes, Friday Reflection, there is something for everyone to help you get ahead in our ever-changing world.
Here is my roundup of 10 big ideas from Getting Results the Agile Way:
It's easy to spend a lot of time and yet not have anything to show for it, either for yourself or others. You can change that quickly and easily simply by getting intentional about creating wins. One of the big ideas in Getting Results the Agile Way is the idea of focusing on Three Wins or outcomes each day, each week, each month, and each year, as a way to focus and prioritize your time, energy, and effort.
There's no shortage of things to do. The key is to identify your wins and go for it. You can use Three Wins to get clarity on meaningful results. Simply identify Three Wins for the day, the week, the month, and the year, that you want to focus on.
You can use Three Wins to highlight what you want to make happen in the future, and to highlight what you made happen in the past. For example, what were your three wins for last week? What were your three wins for last month? What were your three wins from yesterday?
More importantly, by carving out and identifying wins you want to achieve, you get intentional about creating compelling outcomes. When you have compelling wins that you are aiming for, they can help lift you up and “pull” you through your day because they are your personal victories.
Get a fresh start each day, each week, each month. To do this, you shift from "backlog burndown" to "value up." In other words, rather than worry about what you haven't finished, instead worry about what you want to achieve with the time and energy that you actually have.
It works by "turning the page" each day, each week, each month, each year. For example, instead of looking at today as a burden of yesterday's unfinished business, look at today as a new chance to create value. Your "To Do" lists and "unfinished business" are input, but should not be your burden.
If you take this forward-looking approach, over a backward-looking approach, you can approach each day with a beginner's mind. This Fresh Start mindset will free you up to seize new opportunities in each day, each week, each month, each year. It will also help you build momentum to make things happen.
One simple way to implement a Fresh Start is to write a new "To Do" list each day and each week that reflects the three wins you wan to achieve.
Don’t confuse activity with results. It’s easy to spend time on things, but not actually achieve anything. On the other hand, If you know what you want to accomplish, in the form of an outcome, then you can focus on that.
When you don’t know what the outcome or goal is, it’s easy to throw hours, activities, or meetings at something, and yet not actually produce any meaningful results. On the other hand, if you get clear on the outcome, you can find short-cuts.
Using outcome is a simple way to “slow down to speed up.”
Less is often more, if you know what the value is. And value is in the eye of the beholder. Enough said?
You don’t get more hours in a day. But you can change your energy. And, if you use your best energy, you can amplify your impact in powerful ways.
How do you change your energy? You can draw from your mind, body, or emotions. For example, if you connect what you do with your passion, you can find your drive from the inside out. If you link what you do to good feelings, you can create habits that your body will want to do. You can use your thoughts to change your feelings, and operate at a higher level.
Time is a great way to prioritize. For example, there is only so much you can do in a day. You can use different time horizons to plot out what you’d like to achieve within the time that you actually have.
Time is also a great foundation to build your time management upon. That’s why the backbone of Agile Results is the Monday Vision, Daily Outcomes, Friday Reflection pattern. The days of the week are durable. What you do with them is up to you. In this way, time is your foundation and platform for results.
The most important insight though, is that time changes what's important. That’s why “To Do” lists get stale, and you can quickly find yourself buried in a mound of irrelevant burden. The trick is to take a fresh look, each day, each week, each month, each year to see what matters now. You can also use this to look ahead and anticipate value. What will matter next month or next quarter or next year? You can use time to better understand value, and to help you make trade-offs among where to spend your time.
With Agile Results, you “write your story forward”, one day at a time, one moment at a time, one story at a time. You do this by choosing your wins to focus on, and by focusing on the change. The challenge is in the change, and change is where the value is. That’s also what stories are made of. Stories are about the change.
For example, you don’t just “call back a customer.” You “win a raving fan.” The one-liner story reflect a challenge, a change, and value for you and others.
You can use Agile Results to live your values and to drive from your life style. The big idea here is to connect what you do, with why you do it. When you start with your “Why”, you kindle your fire and you make things more meaningful.
Using stories to drive your day, week, month, and year, helps you connect your purpose and your passion, while flowing value along the way. In this way, not only are you the director of your life, but you are the author, writing your story forward.
In Getting Results the Agile Way, the Monday Vision, Daily Outcomes, Friday Reflection pattern is a way to structure your time management and productivity by anchoring it to the week. The days of the week won't change anytime soon, so you can use this simple pattern to structure and plan your time management and productivity. It’s also a great way to create a simple learning loop of continuous improvement.
On Mondays, identify three wins you want to achieve for the week. Each day, identify three wins you want for the day. On Fridays, identify three things going well, and three things to improve. Each week, you will carry forward the insights that help you tune and improve your results.
This weekly rhythm helps you establish a simple way to flow value. You can chunk things down into your little wins each day, and overall add up to your bigger wins for the week. This is also a simple way to create progress, while also enjoying the benefits of continuous learning. Because it's anchored to days of the week, it's also easier to remember the structure. For example, if you woke up today and it was Monday, you know to identify your three wins for the week as part of Monday Vision.
If you adopt Monday Vision, Daily Outcomes, Friday Reflection, you instantly have a way to plan your results on a daily and weekly basis.
One of the most powerful ways to unleash what you’re capable of is to use your Power Hours and Creative Hours more effectively. Throughout the week, you have periods of time where you are either more productive or more creative. You also have hours that really are your downtime. For example, for many people I know, 3:00 P.M. is time for their afternoon break, myself included. I know I wont be my most productive or my most creative so I work around that, instead of fight it.
If you pay attention during the week, you’ll start to notice that there are recurring patterns of when you are at your creative best, and when you are your most productive. The key is to identify these times and to better leverage them. For example, I use my Power Hours as my most productive times of the day. I can move mountains during these times. On the other hand, I use my Creative Hours for creative breakthroughs, to figure out what’s next, or to innovate in some way, shape or form. It’s some of my best “think time” while I play with ideas.
It takes time and experimentation to find your flow and get your groove on. Agile Results is a flexible system for meaningful results. It’s designed to be “stretch to fit” and easily tailored. Rather than a rigorous system of rules, it’s a system of principles, values, and a handful of practices. It’s also designed to be inclusive of other systems. Most importantly, it’s designed to be easily shaped based on personal preference and style. Whether you want to be a productive artist or a highly-productive achiever, or simply savor more of life and achieve work-life balance, Agile Results flexes for you and with you.
The key to any system is “just enough process” so that you can adapt it as situations and circumstances change. The other key is to be rooted in principles, so that the system overall is durable and evolvable. The principles provide the stable part, while letting you easily adapt to change.
Agile Results embraces Bruce Lee’s philosophy:
“Absorb what is useful, Discard what is not, Add what is uniquely your own.”
Agile Results is there for you. All you have to do is grab it and run with it. The book, Getting Results the Agile Way, is the best way to get started, and you can use Getting Started with Agile Results as a quick start guide.
This post is a summary of my lessons learned from leading distributed teams. I've managed distributed project teams since 2001, spanning the UK, Argentina, India, and other parts of the world. While I preferred having everybody together on site around a whiteboard to simplify and improve communication, flexibility with distributed teams gave me access to the right talent, wherever it may be.
Key Challenges These are some of the most common challenges I faced:
Distance didn’t matter as much as differences in time zones. If the time zone differences were too much, it meant a lot more information, knowledge and state had to be packaged up and handed over. However, when you leverage time zone differences, the experience can feel like you carry the baton forward, or, it’s like “The Elves and the Shoemaker,” where you make progress around the clock.
Success Patterns for Distributed Teams The following success patterns helped improve distributed team effectiveness:
No single pattern is a silver bullet. Instead, it’s the composition of these patterns and practices that help improve distributed team communication and overall effectiveness.
Tools of the Trade The following are some common tools of the trade:
What about you? … What have been your best lessons learned when it comes to distributed teamwork?
“It is not necessary to change. Survival is not mandatory.”—Edwards Deming
I gave a talk for the developer security MVPs at the Microsoft 2010 MVP Summit last week. While I focused primarily on Azure Security, I did briefly cover Agile Security Engineering. Here is the figure I used to help show how we do Agile Security Engineering in patterns & practices:
What’s important about the figure is that it shows an example of how you can overlay security-specific techniques on an existing life cycle. In this case, we simply overlay some security activities on top of an Agile software cycle.
Rather than make security a big up front design or doing it all at the end or other security approaches that don’t work, we’re baking security into the life cycle. The key here is integrating security into your iterations.
Here is a summary of the key security activities and how they play in an agile development cycle:
The sum of these activities is more than the parts and using a collection of proven, light-weight activities that you can weave into your life cycle helps you stack the deck in your favor. This is in direct contrast to relying on one big silver bullet.
Note that we originally used “reviews” which are more exploratory, but we later optimized around “inspections.” The distinction is that inspections use criteria (e.g. a 12 point inspection.) We share the criteria using security checklists for design, coding, and deployment inspections.
There are two keys to chunking up security so that you can effectively focus on it during iterations:
Stories are a great way of chunking up value. Each story represents a user performing a useful goal. As such, you can also chunk up your security work, by focusing on the security concerns of a story.
A security frame is a lens for security. It’s simply a set of categories or “hot spots” (e.g. auditing and logging, authentication, authorization, configuration management, cryptography, exception management, sensitive data, session management.) Each category is a container for principles, patterns, and anti-patterns. By grouping your security practices into these buckets, you can more effectively consolidate and leverage your security know-how during each iteration. For example, one iteration might have stories that involve authentication and authorization, while another iteration might have stories that involve input and data validation.
Together, stories and security frames help you chunk up security and bake it into the life cycle, while learning and responding along the way.
For more information on security engineering, see patterns & practices Security Engineering Explained.
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
One of the questions I get asked is how did we execute our patterns & practices Application Architecture Guide 2.0 project, on time and on budget? It was a six month project, during which we ....
2 Keys to Success We used two keys to success:
Fix Time, Flex Scope One of the most successful patterns I've used for years now is to fix time, and flex scope. The idea is to deliver incremental value and find a way to flow value along the way rather than wait for one big bang at the end. This allows you to deliver the most timely and relevant value with a healthy worklife balance. It helps reduce project risk along the way. More importantly, it helps get your stakeholders on board, by showing them results versus just trust you to the end. Scope is the best to flex because there's the least amount of precision or accuracy up front, and it enables you to respond to the market or stakeholder concerns more effectively.
Agile Guidance Engineering This is the secret sauce. I call it Agile Guidance Engineering:
In a nutshell, Agile Guidance Engineering is about building guidance using nuggets of specific types (how tos, guidelines, checklists ... etc.) and composing them into books. The books themselves are actually an information model. The information model is designed to both structure the content as well as structure the problem domain. We vet the nuggets as we go for feedback, and we prioritize, tune, and improve them along the way.
I've used Agile Guidance Engineering successfully to build the following Microsoft patterns & practices Blue Books:
My Related Posts
You too can have a zero mail inbox, if you choose to. I chose to go zero mail in my inbox when I first joined Microsoft years ago, and I'm glad I did. With a single glance, I know whether I have new mail to deal with. I never have to scroll to see what my next actions are. At a more basic level, an empty inbox feels good. I thought it was just me, but others say the same. Proven Over Time It was tough when I first joined Microsoft. My inbox drove me. Eventually, I learned how to drive my inbox. I studied the masters around me. I also studied those that failed (there's no failure, only lessons.) I refined my approach over the years. Since then, I've successfully taught my mentees and others how to spend less time on administration and more time on results. Now I'm sharing with you.
Slides Here's a short deck that steps you through and highlights the keys:
Note Normally, I work with my mentees one-on-one and tailor the approach for their particular scenario. It's a learning by doing approach. While I've blogged about clearing your inbox before, this is an experiment in how effectively I can share techniques in slides. If it works out, I'll do additional slides on focused topics. The more I can reduce friction around sharing, the more I can share. If you have tips or tricks for improving my slide sharing approach, send my way.
When I ramp new folks on the team, I find it helpful to whiteboard how I build prescriptive guidance. Here's a rough picture of the process:
Examples I've used the same process for Performance Testing Guidance, Team Development with Visual Studio Team Foundation Server, and WCF Security.
Here's a brief explanation of what happens along the way:
Design The dominant focus here is identifying candidate problems, candidate solutions, and figuring out key risks, as well as testing paths to explore. The best outcome is a set of scenarios we can execute against.
Execution The dominant focus here is product results. It's scenario-driven. Each week we pick scenarios to execute against.
Release We produce a Knowledge Base (KB) of guidance modules and a guide. The guidance modules are modular and can be reused. The guide includes chapters in addition to the guidance modules. Here's examples from our WCF Security Guide:
Agile Publishing We release our guidance modules along the way to test reactions, get feedback and reshape the approach as needed.
Stable Reference Once we've tested and vetted the guidance and have made it through a few rounds of customer feedback, we push the guidance to MSDN.
“Are you getting results? …”
Over Christmas break, I committed to finishing the writing for a book that I expect to change a lot of people's lives. It's my first non-technical book. The working title is, Getting Results the Agile Way. It's all about getting results in work and life. It's the playbook I wish somebody had given me long ago for finding work/life balance, managing time, playing to my strengths, and making the most of what I've got.
Why Getting Results The world is a tough place. Between layoffs, the economy, and simply the unknown, a lot of people are having a really tough time in their lives. There are constantly new challenges at a pace that's tough to keep up. Worse, I don't think you learn a lot of these skills in school or on the job, except through the school of hard knocks.
This is my playbook for you. For more than 10 years at Microsoft I've tested and evaluated ways to get results. I've had to find things that not only work for me, but that could work for the people I mentor inside and outside the company, as well as for large teams around the world. I'm a big believer that everybody can get great results if they have the right know-how.
What Sorts of Problems Does It Tackle The book is a system and a playbook for some of these common challenges:
It helps with a lot of things because mostly it gets you spending the right time, on the right things, with the right energy, the right way. This is the key to your best results.
My Story When I first joined Microsoft, it was sink or swim. I saw a lot of people fail. Among the chaos, I also saw many people thrive. I wanted to know their secrets. I started with people on my team, but the next thing you know I was studying success patterns around the company. If somebody was known for getting results, I hunted them down and studied their ways.
I learned so many simple things that actually worked. For example, instead of managing time, the real key is managing your energy. I'd rather have four power hours, than a week of just going through the motions. The secret of work life balance is setting up your own artificial boundaries, whether it's "dinner on the table at 5:30" or "no work on the weekends." Finding your passion can be as simple as connecting to your values. For example, I use metaphors to make my project an epic adventure and I have the team create the movie poster of what great results will look like. How's that for wanting to show up and give your best every day knowing you're working on blockbuster results?
What is Agile Results? You'll hear me talk about Agile Results quite a bit. It's the name I gave the system that serves as the foundation for the Getting Results guide. Agile is all about responding to change. It's agility in action. It's all about making progress while the world changes under your feet.
My Agile Results system borrows the best principles, patterns, and practices across a variety of disciplines from sports, positive psychology, personal productivity, Agile development, Scrum, project management, time management, leadership skills, and strengths-based development. It's more than a mash up -- I've tested and honed the system to work for individuals and teams while refining it over years of deliberate practice. To me, great results for the team, always starts with unleashing an individual’s best. Having fun is contagious and getting results spreads like a wild fire.
Agile Results in a Nutshell Here is the Agile Results system at a glance:
How to Get Started Getting started is really easy. If you write down 3 results you want for today, you're doing Agile Results. Is there more to it? … Sure, but take it at your own pace. Here’s a one-page guide for getting started with Agile Results.
How To Follow Along for the Ride You can read Getting Results for free online in HTML. I’ll continue to shape the guide over the next several weeks based on feedback. I’ll also be making March a focus on getting results so if you’ve been looking for a jumpstart for your life, this is a great month to make it happen. I’ll be sharing nuggets for getting results at my effectiveness blog, Sources of Insight.
If you're not getting the results you want in your life, you just need the skills. Use my guide to stuff your bag of tricks with some new tools that will change your game and help you unleash your best.
Do you have an effective approach for thinking about your career growth? With things like a “jobless economic recovery,” careers ending, and a “skills-for-hire” economy, it’s even more important to focus on growth while managing your career. At the end of the day, you play the most important role in your career growth – own it.
This past year reminded me of a very valuable lessons – follow the growth. This means follow your own growth and growth in the marketplace. When there’s no growth, make some.
Career Development, Professional Development, and Personal Development Steve Elston, our print and web publications manager on the patterns & practices team, shared this simple frame with our patterns & practices team for differentiating and thinking about development paths:
I think an effective way to think of this is …
“Are you the person, the professional, the manager, or the executive you want to be?”
Make Yourself Bigger In terms of personal development, I think “become a more *capable* person” is a great distinction over something like “become a better person.” Rather than question self-worth or value, you put the focus on improving your effectiveness and capabilities. It reminds me of a quote ...
“You don’t overcome challenges by making them smaller but by making yourself bigger.” -- John Maxwell
Career Growth, Professional Growth, and Personal Growth Steve shared some quick ways to think about who you can leverage for your growth and what sort of awareness you need for effective growth:
As you can see from the table, the key to career growth is awareness of the business, the key to professional growth is awareness of organizational trends, and the key to personal growth is self-awareness.
What, Who, and How
Steve also shared a sample way to think about contributing factors to overall job satisfaction.
Steve provides some cutting questions for thinking through these concerns:
Knowledge, Attitude, Skills and Habits (KASH model) Steve shared the KASH box model with our team:
The KASH box is a performance coaching tool and it’s a simple way to look at the gap between knowing and doing and the “transfer of training” problem. People know what to do, but they don’t do it, or don’t want to. A lot of people are hired for “skills” and “knowledge,” but fired for “attitude” and “habits.” In other words, it’s easy to focus on knowledge and skills but often it is people's attitudes and habits that limit them.
Interestingly, if you know what to do, but you’re not doing what you know, it’s one of the simplest and most effective ways to unleash your growth. Just start testing your results.
There’s a video on the KASH box at Kashbox Coaching.com.
Mentors are the Short-Cuts The right mentors can help you avoid the chutes and climb the ladders more effectively. John deVadoss, our patterns & practices team Product Unit Manager, shared his key tips on how to effectively leverage mentors:
This reflects a lot of my own experience. One of my most important lessons learned is that mentors really are the short-cuts. If you find somebody who’s “been there” and “done that,” it’s like having a tour guide. Their maps from experience can save you a lot of wasted time and help you avoid obstacles, as well as find shorter paths to your destinations.
A mentor can also be great for helping you find your blind spots as well as giving your more objective feedback on your attitudes and habits that might be limiting you. This means finding mentors that are committed to your success and you trust their feedback and perspective. Usually a good place to look is in your past. You can draw from people that have helped you before.
I make it a habit to use a sounding board of multiple mentors for growth in different areas. I have a few vital mentors for ongoing growth, and then I supplement with mentors for specific things I need to learn.
I also give back and I mentor others to help them optimize their growth and get results. A lot of times, life is like Chutes and Ladders. You can climb up ladders only to slide back down.
Who’s Job Do You Want? One of my mentors uses the question, “Who’s job do you want?” as a great forcing function:
The other beauty of this is it gives your managers and support network a good mental model for your career path, starting with the end in mind.
Putting It All Together Steve outlined a simple roadmap for putting it all together:
Every day, is the perfect day, to become more of the person, professional, manager or executive you want to be. Enjoy the process and remind yourself it’s the journey and the destination, and remember to periodically check that the ladder you’re climbing is up against the right wall.
The ADO.NET Code Samples Collection is a roundup and map of some of the various data access code samples from various sources including the MSDN library, Code Gallery, CodePlex, and Microsoft Support.
You can add to the code examples collection by sharing in the comments or emailing me at FeedbackAndThoughts at live.com.
Common Categories for ADO.NET Code Samples The ADO.NET Code Samples Collection is organized using the following categories:
ADO.NET Code Samples Collection
LINQ to DataSet
LINQ to Entities
LINQ to Objects
LINQ to SQL
WCF Data Services
One lesson I've learned time and again is that it's about the people. You can be on a lousy project with great people and still have a great time. The reverse is not always true. Of course, the ideal world is a great project with great people. I've been lucky enough to have enjoyed several adventures with great people while trying to change the world.
As part of mid-year review, I'm taking a stroll down memory lane. To do so, I created a snapshot of people I've worked with while writing books in patterns & practices over the years. Looking into the past always gives me insight into the future. I use it to find personal success patterns. It also helps me get a new vantage point for project analysis.
The first thing I learned by looking at the list of people I've worked with is how the right project can really grow your network. The other thing is how you can also predict a project's success largely by who's involved. The thing that really stands out for me is that the most successful projects were ones that created an intersection of the right problems, with the right people, with the right passions and strengths. That's what dream teams and compelling missions are made of. A simple test of whether you have the right team is whether you want to run towards or away from the problem.
Here's the snapshot I used for my analysis ...
Application Architecture Guide 2.0
Improving Web Services Security
Team Development with Visual Studio Team Foundation Server
Performance Testing Guidance
Improving .NET Application Performance and Scalability
Improving Web Application Security: Threats and Countermeasures
Building Secure ASP.NET Applications
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
I never imagined I would invest 10 years on the patterns & practices team at Microsoft. Life is short and I always imagined I would spend it across so many more adventures. What surprised me is how much you can grow yourself, and grow the job in the process. While I sometimes wonder about the path not taken, there’s no doubt I’ve built a deep set of capabilities, achievements, and experiences as a direct result of investing my time in patterns & practices. I’ve shared some of my best lessons learned at patterns & practices, as well as my proven practices for individual contributors.
I think my biggest take away lesson is follow your heart, follow the growth, and invest in yourself (mind, heart, body, emotions, career, financial, relationships, and fun.)
Why patterns & practices? There are lots of reasons why I chose patterns & practices. At the end of the day, it was the people, the values, and the mission.
Our Mission While we’ve had various flavors of the mission, I like to think of it as …. “Customer success on the Microsoft platform” … or … “Proven practices for the platform.” I had the toughest time explaining to my Aunt what I do, until finally I said, “I help customers put the legos together.” She then said, “ahhh, I get it.”
Goals In patterns & practices, the goals are simple:
Values In patterns & practices, we value:
Principles We use the following principles to guide our work:
Capabilities, Achievements, and Experience How do you measure the impact of the time you spend down a given career path? I’ve been looking for an effective lens, and I think it boils down to capabilities, achievements, and experience. It’s the simplest way that I can organize and reflect on where I am, based on where I’ve been. Capabilities are simply my skills. They are the things I’ve learned how to do, from soft skills to technical abilities. Achievements are my results. This includes my impact on Microsoft, the software industry, and customers. I lump my books, patents I filed, and the methodologies I’ve baked into the platform and tools here. In terms of experience, I think of the job roles and activities I’ve had along the way.
Key Themes I think I can boil my impact and results down into 3 key themes:
Years at a Glance I think browsing by years is a healthy reality check against impact over time. Looking back is the simplest way for me to respond to the question, “if I had it to do over again, what would I do differently?” Where there answer is “nothing” – those are the sweet spots. Where the answer is “everything” – those are the lessons :)
Books My books at a glance:
Pocket Guides My pocket guides at a glance:
Projects My projects at a glance:
Where do we go from here? You write your future a page at a time. If there’s one thing I’ve learned, it’s continue to reinvent yourself, reinvent your job, and make the most of what you’ve got.
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.
For this week's release in our patterns & practices WCF Security Guidance project, we released our first version of our WCF 3.5 Security Guidelines. Each guideline is a nugget of what to do, why, and how. The goal of the guideline format is to take a lot of information, compress it down, and turn insight into action.
The downside is that it's tough to create prescriptive guidelines that are generic enough to be reusable, but specific enough to be helpful. The upside is that customers find the guidelines help them cut through a lot of information and take action. We contextualize the guidelines as much as we can, but ultimately you're in the best position to do the pattern matching to find which guidelines are relevant for your scenarios, and how you need to tailor them.
Here's a snapshot of the guidelines, but you can see our security guidelines explained at our WCF Security Guidance project site.
CategoriesOur WCF Security guidelines are organized using the following buckets:
Auditing and Logging
Impersonation and Delegation
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 ;)
patterns & practices Enterprise Library 5.0 is now available on MSDN. Microsoft Enterprise Library (EntLib) is a collection of application blocks (reusable software components) designed to address common cross-cutting concerns (data access, exception handling, logging, validation, ...etc.) EntLib provides source code, test cases, and docs that you can use "as is" or extend as you see fit. The goal of EntLib is to codify Microsoft recommended and proven practices for .NET application development.
What's New in 5.0 Enterprise Library 5.0 brings the following to the table: