Software Engineering, Project Management, and Effectiveness
Any activity can be turned into a game, if it meets the right criteria. Wise words from Dan Cook:
“If an activity can be learned…
If the player’s performance can be measured…
If the player can be rewarded or punished in a timely fashion…
Then any activity that meets these criteria can be turned into a game.”
Gamification is hot. I called it out in my Trends for 2013 roundup. When all things are equal, fun is a differentiating factor.
Microsoft Secret Stuff
The Gamification of Education
“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.
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
Contents at a Glance
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.
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
All-in-One Code Framework
LINQ to DataSet
LINQ to Entities
LINQ to Objects
LINQ to SQL
WCF Data Services
My Related Posts
How can you keep your brown from throwing out a perfectly good behavior? Positive feedback. David Rock and Jeffrey Schwartz write about how positive feedback can preserve important synapses, in their article, "The Neuroscience of Leadership", in "strategy+business" magazine.
Positive Feedback for Preserving a SynapseRock and Schwartz write:
"In a world with so many distractions, and with new mental maps potentially being created every second in the brain, one of the biggest challenges is being able to focus enough attention on any one idea. Leaders can make a big difference by gently reminding others about their useful insights, and thus eliciting attention that otherwise would not be paid. Behaviorists may recognize this type of reminder as "positive feedback," or a deliberate effort to reinforce behavior that already works, which, when conducted skillfully, is one aspect of behaviorism that has beneficial congnitive effect. In a brain that is constantly pruning connections while making new ones, positive feedback may play a key functional role as "a signal to do more of something." As neuroscientist Thomas B. Czerner notes, "The encouraging sounds of 'yes, good, that's it' help to mark a synapse for preservation rather than pruning."
Key Take AwaysI think this is similar to "you get what you measure", but in this case, you get more of what you reward.
I’ve shared a Scrum Flow at a Glance before, but it was not visual.
I think it’s helpful to know how to whiteboard a simple view of an approach so that everybody can quickly get on the same page.
Here is a simple visual of Scrum:
There are a lot of interesting tools and concepts in scrum. The definitive guide on the roles, events, artifacts, and rules is The Scrum Guide, by Jeff Sutherland and Ken Schwaber.
I like to think of Scrum as an effective Agile project management framework for shipping incremental value. It works by splitting big teams into smaller teams, big work into smaller work, and big time blocks into smaller time blocks.
I try to keep whiteboard visuals pretty simple so that they are easy to do on the fly, and so they are easy to modify or adjust as appropriate.
I find the visual above is pretty helpful for getting people on the same page pretty fast, to the point where they can go deeper and ask more detailed questions about Scrum, now that they have the map in mind.
Agile vs. Waterfall
Agile Life-Cycle Frame
Don’t Push Agile, Pull It
Scrum Flow at a Glance
The Art of the Agile Retrospective
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.
One of the most common questions I get with Getting Results the Agile Way is, “What tools do I use to implement it?”
The answer is, it depends on how "lightweight" or "heavy" I need to be for a given scenario. The thing to keep in mind is that the system is stretch to fit because it's based on a simple set of principles, patterns, and practices. See Values, Principles, and Practices of Getting Results the Agile Way.
That said, I have a few key scenarios:
The Just Me Scenario In the "Just Me" scenario, I don't use any tools. I just take "mental notes." I use The Rule of Three to identify three outcomes for the day. I simply ask the question, "What are the three most important results for today?" Because it's three things, it's easy to remember, and it helps me stay on track. Because it's results or outcomes, not activities, I don't get lost in the minutia.
The Pen and Paper Scenario In the Pen and Paper scenario, I carry a little yellow sticky pad. I like yellow stickies because they are portable and help me free up my mind by writing things down. The act of writing it down, also forces me to get a bit more clarity. As a practice, I either write the three results I want for the day on the first note, or I write one outcome per note. The main reason I write one result per sticky note is so that I can either jot supporting notes, such as tasks, or so I can throw it away when I've achieve that particular result. It's a simple way to game my day and build a sense of progress.
I do find that writing things down, even as a simple reference, helps me stay on track way more than just having it in my head.
The Evernote Scenario The Evernote scenario is my high-end scenario. This is for when I'm dealing with multiple projects, leading teams, etc. It's still incredibly light-weight, but it helps me stay on top of my game, while juggling many things. It also helps me quickly see when I have too much open work, or when I'm splitting my time and energy across too many things. It also helps me see patterns by flipping back through my daily outcomes, weekly outcomes, etc.
It's hard to believe, but already I've been using Evernote with Getting Results the Agile Way for years. I just checked the dates of my daily outcomes, and I had switched to Evernote back in 2009. Time sure flies. It really does.
Anyway, I put together a simple step-by-step How To to walk you through setting up Getting Results the Agile Way in Evernote. Here it is:
OneNote If you’re a OneNote user, and you want to see how to use Getting Results the Agile Way with OneNote, check out Anu’s post on using Getting Results the Agile Way with OneNote.
Cloud security has been a hot topic with the introduction of the Microsoft offering of the Windows Azure platform. One of the quickest ways to get your head around security is to cut to the chase and look at the threats, attacks, vulnerabilities and countermeasures. This post is a look at threats and countermeasures from a technical perspective.
The thing to keep in mind with security is that it’s a matter of people, process, and technology. However, focusing on a specific slice, in this case the technical slice, can help you get results. The thing to keep in mind about security from a technical side is that you also need to think holistically in terms of the application, network, and host, as well as how you plug it into your product or development life cycle. For information on plugging it into your life cycle, see the Security Development Lifecycle.
While many of the same security issues that apply to running applications on-premise also apply to the cloud, the context of running in the cloud does change some key things. For example, it might mean taking a deeper look at claims for identity management and access control. It might mean rethinking how you think about your storage. It can mean thinking more about how you access and manage virtualized computing resources. It can mean thinking about how you make calls to services or how you protect calls to your own services.
Here is a fast path through looking at security threats, attacks, vulnerabilities, and countermeasures for the cloud …
Overview It is important to think like an attacker when designing and implementing an application. Putting yourself in the attacker’s mindset will make you more effective at designing mitigations for vulnerabilities and coding defensively. Below is the cloud security frame. We use the cloud security frame to present threats, attacks, vulnerabilities and countermeasures to make them more actionable and meaningful.
You can also use the cloud security frame to effectively organize principles, practices, patterns, and anti-patterns in a more useful way.
Threats, Attacks, Vulnerabilities, and Countermeasures These terms are defined as follows:
Cloud Security Frame The following key security concepts provide a frame for thinking about security when designing applications to run on the cloud, such as Windows Azure. Understanding these concepts helps you put key security considerations such as authentication, authorization, auditing, confidentiality, integrity, and availability into action.
Threats and Attacks
SDL Considerations For more information on preferred encryption algorithms and key lengths, see the Security Development Lifecycle at http://www.microsoft.com/security/sdl/ .
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:
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.
If you're building Web services or if you're implementing SOA on the Microsoft platform , then you're probably either working with or exploring WCF (Windows Communication Foundation.) When we started our patterns & practices WCF Security Guidance project, one of the first things I did was compile a list of WCF security resources for our team. This helped us quickly ramp up and as well as see gaps. One thing that surprised me is how much is available in the product documentation, if you know where to look. Here's a preliminary look at our WCF Security resources index which we'll include in our WCF Security Guide:
Documentation (MSDN Product Documentation)
Threats and Countermeasures
patterns & practices
Product Support Services (PSS)
MSDN Support WebCasts
Agile Results is the name of the system I talk about in Getting Results the Agile Way. It’s a simple time management system for meaningful results. The focus is on meaningful results, not doing more things. There are three keys to the Agile Results system:
The Rule of 3 The Rule of 3 helps you avoid getting overwhelmed. It’s also a guideline that helps you prioritize and scope. Rather than bite off more than you can chew, you bite off three meaningful things. You can use The Rule of 3 at different levels by picking three wins for the day, three wins for the week, three wins for the month, and three wins for the year. This helps you see the forest for the trees since your three wins for the year are at a higher level than your three wins for the month, and your three wins for the week are at a higher level than your three wins for the day. You can easily zoom in and out to help balance your perspective on what’s important, for the short term and the longer term.
Monday Vision, Daily Wins, Friday Reflection Monday Vision, Daily Wins, Friday Reflection is a weekly results pattern. This is a simple “time-based” pattern. Each week is a fresh start. On Mondays, you think about three wins you would like for the week. Each day you identify three wins you would like for the day. On Fridays, you reflect on lessons learned; you ask yourself, “What three things are going well, and what three things need improvement?” This weekly results pattern helps you build momentum.
Hot Spots Hot Spots are a way to heat map your life. They help you map out your results by identifying “what’s hot?.” Hot Spots become both your levers and your lens to help you identify and focus on what’s important in your life. They can represent areas of pain or opportunity. You can use Hot Spots as your main dashboard. You can organize your Hot Spots by work, personal, and the “big picture” of your life. At a glance, you should be able to quickly see the balls you are juggling and what’s on your plate. To find your Hot Spots, simply make a list of the key things that need your time and energy. Then for each of these key things, create—a simple list, a “tickler list” that answers the question, “What do you want to accomplish?” Once you know the wins you want to achieve in your Hot Spots, you have the ultimate map for your meaningful results.
You can use Agile Results for work or home or anywhere you need to improve your results in life. Agile Results is compatible with, and can enhance the results of, any productivity system or time management you already use. That’s because the foundation of the Agile Results platform is a core set of principles, patterns, and practices for getting results.
The simplest way to get started with Agile Results is to read Getting Started with Agile Results, and take the 30 Day Boot Camp for Getting Results.
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.
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.
If you’re afraid to look at your To-Do list, it’s not working. Your To-Do list should inspire you.
One of the things that happens a lot with To-Do lists is they can get overwhelming. It’s easy to pile on more things. Eventually, you’re afraid to even look at your To-Do list. What once started out as a great list of things to make happen, has now became a laundry list of things that hurts more than it helps.
Worse, it’s easy to spawn a lot of lists that are full of once great intentions, so the problem spreads.
There are multiple ways to hack the problem down to size, but here are the three I use the most:
Here is a simple visual that shows adding Three Wins to the top of your To-Do list:
Identify the 3 most important results you want to accomplish today and bubble them to the top of your To Do list. Prioritize your day against those 3 results you want to achieve, whether it’s incoming requests or you’re making your way through your backlog of things to do on your To-Do list.
You can use this approach to chop any To-Do list down to size and make it more consumable.
This tip on building better To-Do lists is from the book, Getting Results the Agile Way: A Personal Results System for Work and Life (Amazon).
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.
What is a PM (Program Manager)? While the Program Manager role seems unique to Microsoft, in general, when you map it to other companies, it’s a product manager, or a project manager, or a combination of the two. At Microsoft, there are various flavors of PMs (“design” PM, “project” PM, “process” PM, etc.) and the PM discipline can be very different in different groups. I’ve also seen the PM title used as a general job title, in the absence of something more specific.
At Microsoft it’s a role that means many things to many people. In general though, when you meet a PM at Microsoft, you expect somebody who has vision, can drive a project to completion, can manage scope and resources, coordinate work across a team, bridge the customer, the business, and the technology, act as a customer champ, and influence without authority. From a metaphor standpoint, they are often the hub to the spokes, they drive ideas to done, they take the ball and run with it, or find out who should run with the ball. Some PMs are better at thought leadership, some are better at people leadership, and the best are great at both.
Here is a roundup of some of my favorite points that elaborate, clarify, and distill what a PM is, what a PM does, and how to be one.
Attributes and Qualities of a PM Here is a list of key attributes from Steven Sinofsky’s post -- PM at Microsoft:
Here is an example of PM qualities from Sean Lyndersay’s post -- Exchange team defines a Program Manager:
Microsoft Careers site on Program Manager Here is a description of a Program Manager from the Microsoft Careers site: “As a Program Manager, you’ll drive the technical vision, design, and implementation of next-generation software solutions. You’ll transform the product vision into elegant designs that will ultimately turn into products used by Microsoft customers. Managing feature sets throughout the product lifecycle, you’ll have the chance to see your design through to completion. You’ll also work directly with other key team members including Software Development Engineers and Software Development Engineers in Test. Program Managers are advocates for end-users, so your passion for anticipating customer needs and creating outside-the-box solutions for them will really help you shine in this role. As a Program Manager you will have the ability to lead within a product’s life cycle using evangelism, empathy, and negotiation to define and deliver results. You will also be responsible for authoring technical specifications, including envisaged usage cases, customer scenarios, and prioritized requirements lists.”
Chris Pratley on Program Manager Here are some points on Program Management from Chris Pratley’s post -- Program Manager:
Here are the stages of your first year as a PM, according to Pratley:
Joel Spolsky on Program Manager Here are points from Joel’s post on How To Be a Program Manager:
Ray Schraff on Program Manager Here are point from the comments on Chris Pratley’s post, Program Management:
Sean Lyndersay on Program Manager
Steven Sinofsky on Program Manager Here are points from Sinfoksy’s post on PM at Microsoft:
Cloud computing is hot. As customers makes sense of what the Microsoft cloud story means to them, one of the first things they tend to do is look for case studies of the Microsoft cloud platform. They like to know what their peers, partners, and other peeps are doing.
Internally, I get to see a lot of what our customers are doing across various industries and how they are approaching the cloud behind the scenes. It’s amazing the kind of transformations that cloud computing brings to the table and makes possible. Cloud computing is truly blending and connecting business and IT (Information Technology), and it’s great to see the connection. In terms of patterns, customers are using the cloud to either reduce cost, create new business opportunities and agility, or compete in ways they haven’t been able to before. One of the most significant things cloud computing does is force people to truly understand what business they are in and what their strategy actually is.
Externally, luckily, we have a great collection of Microsoft cloud case studies available at Windows Azure Case Studies.
I find having case studies of the Microsoft cloud story makes it easy to see patterns and to get a sense of where some things are going. Here is a summary of some of the case studies available, and a few direct links to some of the studies.
Advertising Industry Examples of the Microsoft cloud case studies in advertising:
Air Transportation Services Examples of the Microsoft cloud case studies in air transportation services:
Capital Markets and Securities Industry Examples of the Microsoft cloud case studies in capital markets and securities:
Education Examples of the Microsoft cloud case studies in education:
Employment Placement Agencies Examples of the Microsoft cloud case studies in employment agencies:
Energy and Environmental Agencies Examples of the Microsoft cloud case studies in enery and environmental agencies:
Financial Services Industry Examples of the Microsoft cloud case studies in the financial services industry:
Food Service Industry Examples of the Microsoft cloud case studies in the food service industry:
Government Agencies Examples of the Microsoft cloud case studies in government agencies:
Healthcare Industry Examples of the Microsoft cloud case studies in healthcare:
High Tech and Electronics Manufacturing Examples of the Microsoft cloud case studies in high tech and electronics manufacturing:
Hosting Examples of the Microsoft cloud case studies in hosting:
Insurance Industry Examples of the Microsoft cloud case studies in the insurance industry:
IT Services Examples of the Microsoft cloud case studies in IT services:
Life Sciences Examples of the Microsoft cloud case studies in life sciences:
Manufacturing Examples of the Microsoft cloud case studies in manufacturing:
Media and Entertainment Industry Examples of the Microsoft cloud case studies in media and entertainment:
Metal Fabrication Industry Examples of the Microsoft cloud case studies in metal fabrication:
Nonprofit Organizations Examples of the Microsoft cloud case studies in non-profit organizations:
Oil and Gas Industry Examples of the Microsoft cloud case studies in oil and gas:
Professional Services Examples of the Microsoft cloud case studies in professional services:
Publishing Industry Examples of the Microsoft cloud case studies in publishing:
Retail Industry Examples of the Microsoft cloud case studies in retail:
Software Engineering Examples of the Microsoft cloud case studies in software:
Telecommunications Industry Examples of the Microsoft cloud case studies in telecommunications:
Training Industry Examples of the Microsoft cloud case studies in training:
Transportation and Logistics Industry Examples of the Microsoft cloud case studies in transportation:
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
Questions and Answers
ASP.NET Security How Tos
WCF Security How Tos
Visual Studio Team System
"To hell with circumstances; I create opportunities." – Bruce Lee
Motivation is a key to making things happen, whether you’re developing software, leading teams, or just getting yourself out of bed and on with your day.
It's hard to change the world, or even just your world for that matter, if you lack the motivation or drive. In a world where there is plenty that can bring you down, the best thing you can do is arm yourself with motivation techniques that work, and motivation theories that explain *why* they work.
Motivation Techniques You can motivate yourself with skill, as well as others, if you know the key motivation techniques. Here is my latest collection of motivation techniques and methods at a glance:
You can use the motivation techniques to motivate yourself and others.
Motivation Theories There are a lot of motivation theories that are relevant, and some have evolved over the years. Maslow’s Hierarchy of Needs is useful to know for understanding some basic drivers. It’s also useful to know David McClelland’s Theory of Needs , and that focuses on achievement, affiliation, and power as key drivers.
It’s also useful to distinguish between intrinsic and extrinsic motivation. For example, if you depend on other people to carrot or stick you, you’re driving from extrinsic motivation. If instead, you’re doing something because it makes you feel alive or unleashes your passion or simply just for a job well done, then you’re driving from intrinsic motivation, and that is a powerful place to be.
It’s also useful to know that at the end of the day, purpose is the most powerful driver, and if you can connect what you do to your purpose, then you bring out your best and you’re a powerful force to be reckoned with. Purpose, passion, and persistence change the game.
Timeline of Motivation Theories, Studies, and Models Here is a timeline of some interesting work on the study of motivation:
Motivation Quotes If you need some inspiring words of wisdom, be sure to explore my collection of motivation quotes.
As part of our patterns & practices App Arch Guide 2.0 project, we're consolidating our information on our patterns & practices Performance Engineering. Our performance engineering approach is simply a collection of performance-focused techniques that we found to be effective for meeting your performance objectives. One of the keys to the effectiveness is our performance frame. Our performance frame is a collection of "hot spots" that organize principles, patterns, and practices, as well as anti-patterns. We use the frame to perform effective performance design and code inspections. Here's a preview of our cheat sheet so far. You'll notice a lot of similarity with our patterns & practices Security Engineering. It's by design so that you can use a consistent approach for handling both security and performance.
Performance Overlay This is our patterns & practices Performance Overlay:
Key Activities in the Life Cycle This Performance Engineering approach extends these proven core activities to create performance specific activities. These include:
Performance Frames Performance Frames define a set of patterns-based categories that can organize repeatable problems and solutions. You can use these categories to divide your application architecture for further analysis and to help identify application performance issues. The categories within the frame represent the critical areas where mistakes are most often made.
Architecture and Design Issues Use the diagram below to help you think about performance-related architecture and design issues in your application.
The key areas of concern for each application tier are:
Design Process Principles Consider the following principles to enhance your design process:
Design Guidelines This table represents a set of secure design guidelines for application architects. Use this as a starting point for performance design and to improve performance design inspections.
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.
Extreme Programming (XP) is a lightweight software development methodology based on principles of simplicity, communication, feedback, and courage. I like to be able to scan methodologies to compare approaches. To do so, I create a skeleton of the activities, artifacts, principles, and practices. Here are my notes on XP:
12 Practices Here's the 12 XP practices:
For a visual of the XP practices, see a picture of the Practices and Main Cycles of XP.
5 Values (Extreme Programming Explained)
Phases The following are phases of an XP project life cycle.
For a visual overview, see Agile Modeling Throughout the XP Lifecycle.
These are the 12 Agile principles according to the Agile Manifesto:
These are the four Agile values according to the Agile Manifesto: