Software Engineering, Project Management, and Effectiveness
We released our final release of the patterns & practices Application Architecture Guide 2.0 on Codeplex. It's the "Microsoft playbook for application architecture." This is our guide to help solution architects and developers make the most of the Microsoft platform. It's a distillation of many lessons learned. It’s principle-based and pattern-oriented to provide a durable, evolvable backdrop for application architecture. It's a collaborative effort among product team members, field, industry experts, MVPs, and customers.
Key Changes Since Beta 2
Architecture Meta Frame (AMF) The Architecture Meta Frame integrates context, application types, architecture styles, and an architecture frame to help map out the application architecture space.
The Architecture Meta Frame serves as a durable, evolvable backdrop for the guidance in the patterns & practices Application Architecture Guide 2.0.
Key Scenarios for the Guide
Key Features of the Guide
Team Here's the team that brought you this guide:
Contributors / Reviewers One of our themes throughout the guide was "Stand on the shoulders of giants." We leveraged a lot of experts inside and outside of Microsoft:
Personal productivity is one of my passions. As one of my little experiments while I'm out of the office, I put together The Zen of Results E-Book. I turned a slide deck into a PDF to see if it makes it easier to share. It's brief (17 pages) and quick to flip through. More importantly though, it captures the heart of how you can improve your productivity, in a principle and pattern based way. It's a lightweight approach and it's easy to tailor for your situation.
The Approach in a Nutshell Here's the keys to the approach:
Thoughts on Productivity I'm not a fan of productivity for productivity's sake. Instead, I care that I'm working on the right things, I care that the time I spend working, is as efficient and effective as possible. I also care that I can carve out time in a way to achieve work/life balance. I care more about outcomes than activities and I work backwards from the end in mind. To put it another way, I put more emphasis on learning, improving, and enjoying, than simply going through the motions or putting in my time. I'll also add -- I like my downtime and my free time ;)
What The Zen of Results is Based On I'd like to say it's based on Getting Things Done, but somehow we just never crossed-paths. Instead, it's born from a combination of the school of hard knocks, masters at Microsoft, software development practices, and my mentoring experience. when I first joined Microsoft, I was overwhelmed. I was on a sink or swim team with lots of trials by fire. I wanted to swim. Long story short, I learned from anyone and everyone around me. In fact, I started seeking out people in the company and comparing email practices, storing information, and how to become more effective. I learned a lot.
Software Engineering Meets Project Management Meets Productivity When I joined patterns & practices some years ago, a few things happened. I had to figure out project management in the context of a competitive environment where the ultimate judge is results. Not just the results of what you produce, but how you produce results. How many dead bodies and what sort of wake do you leave behind?
Meanwhile, Agile was becoming increasingly pervasive and I had the benefit of working with folks like Ward Cunningham and Peter Provost. They taught me lot about the principles and concepts behind Agile. Somewhere along the way, I had figured out how to catalog, manage, and prioritize an endless stream of potential activity from various sources: my teams, my manager, my inbox, my head.
I learned that improving an hour, improved a day, improved a week, improved a month. I learned the value of sharing lessons learned. I learned the value of biting off what you could chew. I learned that it's better to finish what's on your plate and go up for seconds versus overflow your plate up front. I weaved in my timeboxing lessons from performance and my compartmentalizing lessons from security.
I used my lessons from my manager to focus on strengths over weaknesses to keep a high level of energy. Bottom line, the sum is more than the parts, but it's an integration of software development, project management and personal productivity with an emphasis on meaningful work for a meaningful life ... by design (that's my inner engineer talking).
Just a quick note -- I'm out of the office through December. Here's what I'm up to:
Meanwhile, back at the ranch, you can follow along the Application Architecture Guide 2.0 project at the following sites:
I tested Evernote with my time management system, The Zen of Results. Evernote is like ITunes for knowledge. Check out how easily The Zen of Results fit with Evernote:
It took me under 5 minutes from start to finish. It was intuitive and friction free. One of the keys to effective time management techniques is getting rid of friction, otherwise it's death by a 1000 paper cuts in the long run. I expected some learning curve or some issues, so I was pleasantly surprised. Maybe I'll be unpleasantly surprised later, but so far so good.
Results The quick test was a success:
Notebook Summary Here's a summary of the notebooks I created in Evernote for The Zen of Results:
Checklists / Scripts
Improvement / Results
My Related Posts
Grady Booch blogged about our patterns & practices Application Architecture Guide 2.0, which is our Microsoft playbook for the application platform. It's a thoughtful post and he obviously took the time to figure out the structure of the guide. The guide is probably particularly relevant for him since he's working on his Handbook of Software Architecture.
Booch on the Application Architecture Guide 2.0 Here's what Booch has to say:
"I find this work to be very interesting (and useful). Architecture is all about making significant design decisions, and this guide focuses on a number of such decision points, including caching, communication, concurrency and transactions, configuration management, coupling and cohesion, data access, exception management, layering, logging and instrumentation, state management, structure, validation, and workflow (collectively, Microsoft calls these "architectural frames"). Full of best practices and patterns, I particularly liked the enumeration of architectural styles the authors have collected: client-server, component-based, layered, message-bus, model-view-controller, n-tier, object-oriented, and service-oriented. Congruent with these styles is their concept of application archetypes, which include mobile, rich client, rich internet, services, and web. Combine the these styles and archetypes, and you have an interesting language for describing a large class of applications. While I don't necessarily agree that these styles and archetypes are orthogonal (nor are the lists complete) for the general domain of software architecture, for Microsoft's purposes, these styles offer an excellent operating model into which one can apply their patterns and practices."
For whatever reason, I can't figure out how to link to the individual post, so I'm linking to the page that includes Grady's post on the Microsoft Application Architecture Guide.
My Take I agree with Grady that the list of application archetypes and arch styles is not complete (at least the versions that we've shared online). We only shared a subset. We do have some pretty rich Mind Maps that are more exhaustive, but they're somewhat unwieldy. It's a trade-off.
We basically forked the app types. The app types that we shared are optimized around technical types that customers quickly identify with. We also have a set of business types, but the problem is these are more long-tail and there was less agreement on naming. Worse, customers couldn't quickly identify with them. There was a slight learning curve. I think we can potentially tune them and share them downstream, more as a visual catalog.
On the arch styles, they're not necessarily orthogonal, but we found it helpful to first identify the overall app type (web, RIA, ... etc.) and then shape the app with the arch styles. For precision, I think of the architecture styles as sets of principles that shape an important dimension of the application (such as deployment, structure, domain, communication ... etc.) It's like a bunch of martial arts systems for different styles of fighting. They have their pros and cons, but you can only evaluate them in context and measure effectiveness.
Key Take Aways Here's my key take aways:
Someday, I'd like to synch with Grady and show him all the stuff we haven't exposed at this time, including our technical capability maps, pattern capability maps, application patterns, quality attribute maps, ... etc. While a lot of it is half-baked, we have some good foundations for elaboration. Unfortunately, there's only so much we could share in a six month project where the dominant focus is writing a book.
This is for all you life-long learners out there. If you know your learning styles, you can improve your results. You can also improve your interaction with others. This is something that shows up everyday, but you might not be aware of it. I posted an article on the key learning styles and how you can use them on Sources of Insight.
Here's a summary of the key styles
As with any lens, we're all a mix of styles and it's a continuum so the key is to know your preferences and the preferences of others.
If you've ever seen an architect and developer locked in a debate, you might just be experiencing a conflict between abstract and concrete. If you've ever had a hard time making your point, maybe you were hopping around randomly when you needed to be sequential. If you've ever bored the wits out of somebody, maybe you just needed to hop around to the good stuff instead of making them follow your path over the river and through the woods, just to get to Grandma's house.
One of the simplest ways to improve your effectiveness is to know the pecking order of persuasion. I wrote a post on Sources of Insight about how character trumps emotion trumps logic. This is a pretty important piece of information, considering it impacts how well you influence your peers, your kids, your manager, your stakeholders or anyone, really.
To bottom line it, if your arguments based on data aren't working, consider that if you win the heart, the mind follows, and that who you have on board can make all the difference in your success. Change your approach and you'll be surprised by the results. One simple thing you can do is use more metaphors to make your points. Visual words stick more and they help bring some emotion to the table. Choose carefully, of course.
I posed my Lessons Learned from Jack Canfield on Sources of Insight. Jack presented to Microsoft earlier in October. He's the author of many successful books including Chicken Soup for the Soul and The Success Principles. He holds the Guinness Book World Record for having seven books simultaneously on the New York Times Bestseller List. Impressive!
I ended up taking a lot of notes, way more than I expected. He had a good way of boiling down some key insights. I liked the fact that I didn't have any expectations going in, since I didn't actually realize who he was at first. This meant that I was purely judging the session by results and with an open mind.
We shook hands and spoke briefly. I'm glad I got to meet him. The more I research his work, the more I'm impressed. He's obviously dedicated a lot of his life to studying and sharing success, and he's a top success coach and presenter.
I have a guest post at Shaping Software by Rick Samona on Lessons Learned in Product Management. Rick's actually one of the most effective Microsoft product managers I know. I had the pleasure of working with Rick on several security projects, including our .NET Framework Security Guidance Project, patterns & practices Security Engineering Explained, and patterns & practices Threat Modeling Web Applications.
I created a list of my favorite personal development books on Sources of Insight. I'm a fan of continuous learning with an emphasis on personal excellence. This includes working on interpersonal skills, leadership skills, thinking skills ... etc. Basically, I'm on a quest for the best principles, patterns, and practices for effectiveness and books end up being one of my primary sources. To find the best books, I ask the smartest people I know what their favorite book is that had an impact on their life. It leads me to some interesting discoveries and down some fun paths.
What's your favorite book that changed your life?
I shared a set of personal productivity quotes on Sources of Insight. There's some classics from Bruce Lee, Lao Tzu, Peter Drucker, Tony Robbins, and more. I framed the quotes for quick browsing. There's buckets for action, focus, time management and more. Enjoy!
One of the keys to making impact is knowing "why" you do what you do? Chasing the "what" can be a red herring. It's living your"why" and "how" that helps you be your best and it's where your inner strength comes from. Most importantly, it's where you give your best where you have your best to give. One of the tools for figuring out why you do what you do is the Golden Circle. You can watch this video interview with Simon Sinek on the Golden Circle for an overview. I also shared my Golden Circle results in my post, Why Do You Do What You Do? on Sources of Insight as both a reminder and inspiration. Enjoy!
Jason shares how he implements the Zen of Results workflow as well as a dialogue around some sticking points with his team. Jason's one of the most effective people I know and his insights are always crisp and actionable.
Here's my key take aways:
Are you the best at what you do? Could you be the best at something else? How do you know when to hold'em? How do you know when to fold'em?
The Gambler teaches us:
"You got to know when to hold 'em, know when to fold 'em. Know when to walk away, and know when to run."
... But where's the prescriptive guidance? Luckily, there's Seth Godin and The Dip. In the book, the Dip, Seth teaches us:
"Winners quit fast, quit often, and quit without guilt -- until they commit to beating the right Dip for the right reasons. In fact, winners seek out the Dip. They realize that the bigger the barrier, the bigger the reward for getting past it. If you can become number one in your niche, you'll get more than your fair share of profits, glory, and long-term security. Losers, on the other hand, fall into two basic traps. Either they fail to stick out the Dip - they get to the moment of truth and then give up - or they never even find the right Dip to conquer."
I wrote up my Lessons Learned from the Dip on Sources of Insight.