Software Engineering, Project Management, and Effectiveness
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
"I honestly think it is better to be a failure at something you love than to be a success at something you hate." -- George Burns
I should have written this a long time ago. This can potentially be one of the most important tools you add to your mental toolbox. It's life changing.
I'm giving you a recipe for success. Along the lines of Bruce Lee, I call it, The Way of Success. I named it "The Way of Success", because it's about working backwards from the end in mind, while enjoying the journey forward. Enjoying the journey forward, doesn’t mean that it’s a bed roses, but instead it’s more fulfilling and you can have confidence in the path, as well as enjoy more ups, than downs.
What is the Way of Success What exactly is "The Way of Success"? It's a proven practice for producing outstanding results in your life. Whether you want to change your lot in life, or improve your impact at work, or grow yourself to another level, this is a timeless technique for making it happen. Life can also throw us plenty of curve balls, so this is a way to work on your swing, and knock more out of the park.
The Way of Success at a Glance Here are the key steps in the process:
I explain each step in my article, The Way of Success. Note that while I share it as steps, the process is iterative and incremental.
It’s Not Easy, It’s Effective This is not an "easy" way to success. Instead it's an effective "path" for success. Unfortunately, sacrifice is often the price of success. To make it worse, it's easy to sacrifice a lot of time and energy, only to hit a dead-end or a glass ceiling. The solution is to use models and maps from working examples to avoid the pitfalls and streamline your success. So while it’s not easy, it can be “easier.”
The Balcony View is the Key to Success There really is a pattern for success and the beauty is that anybody can use it to do anything better. You can model the success and excellence of others and apply it to your own life. And there actually are short-cuts for speeding up your success, without cutting corners. The trick is finding the critical paths that work. The real trick though is to take the balcony view and look across the patterns of success from working models. By looking across, you can find the most likely models that will work for you, and you can find the nuances and distinctions that make them work. This is the ultimate formula and recipe for success that will help you get more leverage from the time and effort that you already put in.
The next time you see somebody succeeding in amazing ways, now you know how the magic trick was done, but better yet, how you can do it too.
Call to Action Read the The Way of Success. Apply it to an important area or challenge in your life. Test your results. Share your stories and feedback with me. Share the approach with others. Share it with anybody you know that needs an advantage in life, and would want a proven practice for improving their success.
"Insanity: doing the same thing over and over again and expecting different results." -- Albert Einstein
What you don’t know can hurt you and knowing the right strategies is like knowing the playbook for getting results.
Strategies are a big picture perspective while tactics are a small picture perspective. You can think of the strategies as guiding approaches: they guide your tactics while you pursue your goals. You can use strategies to help design effective approaches and to evaluate potential practices, methods or techniques. Mix and match strategies, but keep in mind that sometimes strategies support each other, while other times they are competing. Ultimately, you must map relevant strategies to your situation. Rather than try to decide or buy into a strategy, find a way to test and judge it based on your results.
Here is a collection of 25 Key Strategies for Results from the book, Getting Results the Agile Way.
You can read an explanation for each of these strategies at 25 Key Strategies for Results.
I don’t do a lot of interviews, but I like what Carl and Richard do for the .NET developer community at large, so I agreed to shoot the breeze … Check out the .NET Rocks Interview on Getting Results the Agile Way.
Carl and Richard were curious to learn more about the system and what it’s all about. I warned them up front that it’s not about agile development, and that it’s actually a system that anybody can use to get better, faster, simpler results.
That said, if you are a developer, you can appreciate the full extent of the system and how it’s based on Evergreen principles, patterns, and practices for time management, productivity, energy management, and meaningful results. (Note – it’s the same approach I used to be on time, on budget for more than ten years, leading distributed teams around the world, so it’s industrial strengths, but I designed it to be simple enough that my Mom can use it.)
Some users of the system like to think of it as “Agile for Life” or “Scrum for Life.”
My ultimate goal was to give as many people possible, an extreme advantage in achieving results, but bringing together proven practices from positive psychology, sports psychology, project management, software development, and other disciplines into an integrated, simple system. To bottom line it, it’s a simple system for meaningful results.
It’s the playbook I wish somebody gave me when I started out in life, and I’m hoping that it saves many people a lot of painful lessons and helps them leapfrog and make the most of what they’ve got.
"Action speaks louder than words but not nearly as often." -- Mark Twain
I created a consolidated set of Action Guidelines on Getting Results.com. Taking action is one of the most important skills you can master in this lifetime. It’s the secret sauce of making things happen at work. It’s also the secret sauce of making things happen in all areas your life, whether it’s a personal project or personal development. It’s also how you go from idea to done.
If there’s one attribute that has served me well at Microsoft, it’s having a bias for action.
Smart people with great ideas and great intentions get passed by with people that take action. When you take action, you put your ideas to the test, you find what works, you scrap what doesn’t, and you carry the good forward. When you take action, you produce results. If you don’t like the results, you change the approach, and the fastest thing you can always change is you.
Action Guidelines explains each guideline, and here is the list of guidelines at a glance:
This is a simple visual of a frame we used for helping choose which projects to invest in in patterns & practices.
The main frame is “Technical Uncertainty” vs. “Market Uncertainty.” We used this frame to help balance our portfolio of projects against risk, value, and growth, against the cost.
Getting Results the Agile Way is a personal results system for making the most of what you’ve got. As the book cover says, it helps you focus and prioritize, manage time and information, and balance work and life, to achieve meaningful results. People have been using the approach for anything from shipping software to home improvement to renovating their restaurants. Leaders have been using it to improve the productivity, passion, and performance of their teams. By having people work on the right things, at the right time, the right way, with the right energy, it brings out the best in people. It’s a way to amplify impact and get exponential results.
… But what makes it real is when you hear from the people that are using the system.
Meet Jason Taylor. Jason is CTO (Chief Technology Officer) at Security Innovation, and here is his story of using Getting Results the Agile Way …
I came to Getting Results with a history of effectiveness and success. I had a solid sense of what I felt were the best ways to get things done, a set of process and principles that had worked well for me over many years. I am a process guy, a details guy and a lover of great strategy. I sweat the small stuff and I look at the big picture in order to guide myself and my organization to maximum results. Then I met JD...
I started with JD on a project to build security guidance for the ASP.NET development platform. A huge undertaking that involved discovering, consuming, and analyzing a huge amount of information from a huge amount of sources both written and verbal and then turning that into specific, contextual, prescriptive guidance for Microsoft developers. The goal was nothing less than to change the way in which web applications were written on the Microsoft platform. In order to make consumers more secure, the applications needed to be more secure. In order to make the applications more secure, developers needed to know what to do. That's where JD and team came in. What I saw in the course of this project, changed my view on how to get things done. JD accomplished the seemingly impossible. In too little time, with too little resources, with a staggering amount of chaos to deal with, JD coaxed the team into writing a masterpiece. I couldn't see how it was done, but I was curious. Luckily for me I had to opportunity to work with JD on a number of other projects over the course of several years. I learned the process as it was developed and maybe even had a chance to contribute to it a little here and there. Whether I had any impact on it or not, it had a huge impact on me. Before I explain what I learned, I want to set some context to explain how I used to get results. I was a huge believer in up-front planning. For a new project I would spend a lot of time designing and planning what needed to get done, how it would get done, when it would get done, who would do it and in what order. I was a master of this style. I could plan a complex project with a dozen team members and have an 18 month plan with all of the tasks laid out to the day and then we could execute to that plan so that 18 months from the start we had accomplished exactly what I had laid out at the start. Impressive right? Well, not really. I learned, the hard way, that I was focusing on the wrong things. I was focusing on tasks and activities. I was focusing on what got done, which I thought were the results, but I was neglecting the real results. Most importantly, I had the wrong assumptions. I assumed that a rigorous planning process could remove risk. I assumed that I knew up-front what I wanted to accomplish. I assumed that my plan was helping me when it was actually a prison.
So what did I learn from JD and how did it change how I do things? What kind of a difference did it make? Here are the key lessons I learned, my most important take-aways:
I'm sure your take-aways from Getting Results will be different from mine. We are all different, have different goals and are all in different places in regards to our abilities and motivations to be effective. There is so much in this guide, it has so much to offer, that I think anyone who reads it will get something out of it. If you are lucky, it may even change your life like it did mine.
People like to hear stories about how other people are adopting Getting Results the Agile Way. Meet Praveen Rangarajan. He’s a developer with a passion for more from life.
Praveen is not a "process" guy, but Agile Results gave him just enough structure to support his everyday things. Using Agile Results he learned to improve his results at both work and life in a more systematic way.
Here is Praveen telling his story of how he adopted Getting Results the Way …
For a majority of my life, I had never been a "Process" guy except when it came to work. I always believed order was meant for the military. I wanted to be a free bird - doing things my way at the time of my choosing.
When JD briefed me on his new book and the process he was working on, I volunteered and said I wanted to be a part of it. I am quite successful at work and wanted to improve it further. However, I wasn't too keen on adopting it for life. I thought it would restrict me a lot and clip my feathers. So, I adopted it at work and did a trial run for a month. It was much more successful than I thought. The Agile Results process has in more ways than one made me a responsible individual. The most important realizations for me at the end of it was
Starting with The Rule of Three I started by applying the Rule of 3. On the way to work, I decide on the three things I want to get done for the day. I restricted myself to one day only. I get distracted if I start thinking too far ahead. For the first week or so, I had trouble identifying the three best things for a day. I would either achieve it in the first hour of work or wouldn't be able to complete even 1 out of the 3. For example, I wanted to complete a module that would have been possible had it not been for a CR [change request] flowing in. Now, it would take me more than 2 days to finish it. My plan for the day went down the tube. Slowly, I began to realize that I had to be more granular. The granularity had to be such that it was independent enough to be completed in isolation and at the same time wasn't too small a puzzle to solve. For example, "complete and check-in functionality ABC in module XYZ". This way I'm assured of completing the three activities I want to perform. Also, I can add more if time permits.
Timeboxing to Get a Handle on Time Management The next most important pattern was the Timeboxing a week. In other words, scheduling results for a week. Its a pretty simple yet strong pattern. Again, I misunderstood its importance when I started off. I used it more like a calendar. A reminder of bucket lists of sorts. Although it helps, there is something more that this pattern offers. JD was kind enough to point it out to me. He said to think of it like a strengths and weaknesses chart. It triggered a new way of thinking in me. I was now also looking at a week gone by and identifying times of the day, or days of the week where I was strong or weak, and displayed efficiency vs. laziness. And if this behavior was repetitive, odds are you have just plotted a pattern map. Ultimately this chart helps you make better use of your "Best" time, and look to improve upon your "Idle" time. Complementing the pattern above is the Mindsets pattern. JD uses the term switching hats or changing personas. This basically allows you to maximize the returns on "Idle" time by using them effectively in other ways. For example, I would be annoyed when someone disturbed me with something really stupid when I was doing great work. I would lose 10 minutes in the conversation and another 20 cursing the moron who started it off. After using the Mindsets pattern, I now use the 20 minutes of previously wasted time to walk out of my cubicle and stretch and relax. What it has allowed me to do is to concentrate on my exercise rather than the worthless discussion. Also, both my mind and body get a mini-refreshment.
It’s How You Apply It I began to admire this [Agile Results] process because it was so flexible that I could take, leave or modify certain steps so that they fit my profile better. The goal is to understand the essence of the process and modify it to one's needs. I was pretty satisfied with the results and decided to do a trial run for life as well. A week later, the results came. It was a disaster. The worst part was when I couldn't figure out why it failed. I thought I must be doing something wrong and worked out the whole thing again. Another week went by and it was still not working. After giving it some thought and asking the right set of questions, I realized one fundamental part that I completely ignored in the application of this process to life - and that is setting minimum and maximum time to activities right from the most granular to the complete. Now, I re-did my strategy of application. In two weeks time I could see improvement. It was far from the final outcome. But bottom line, it had started to work. Now, it is unto me to make it successful. Like they say, success or failure lies in not what you have but how you apply what you have.
Changing the Game a Practice or Principle at a Time Like I had stated earlier, the process works well even if I pick 1 out 10 steps as long as I believe it is going to be my game changer. You can add/remove steps any time. At the end of the day, you want your life to be better. And only you know what's best for you. In my case, the most important game changers were:
Work Backwards from the End in Mind A very important by-product of this process is quick feedback. You get to know if you are on-track or tangential almost immediately. You can alter the course of your activities midway so long as you understand what you are doing and targeting. This is one of the very few processes that works its way backward, i.e. you look at the end and work your way back. This means you have a vision for what you want to achieve even before you start. This is a very positive way to look at things. The problem with thinking the other way is that my mind will give up very soon. It [Agile Results] is designed to choose the most optimal Traveling Salesman Problem (TSP) algorithm. And if the time to achieve is long, it will deem it unimportant and a waste of my time.
It Starts the Journey In summary, this process has not turned my life upside down in terms of effectiveness and efficiency. But it has paved a path. Adopting it has not been easy at all, at least for me. But the ROI has been well worth it so far. There's no denying that it will only improve as time goes by and I continue to keep doing things the right way. If there is one thing I have to tell others about this process, it is that do not follow it like a horse. It is a guide, a mentor. Like my mother always tells me, God will help you get you good grades in your exam only if you prepare well for it and put all your energy into it. You cannot expect him to perform miracles out of nothing. Same goes to this process as well. Put your best foot forward and the rest will follow.
My Related Posts
From the Archives Rituals for Results – The bigger your bag of tricks is for getting results, the more you can choose the right tool for the job. Otherwise, it’s a one-size fits all deal. The more tools you have in your toolbox, the more you can respond to changing environments and situations. Rituals for Results is a collection of best practices for getting results that have served me well over time. I continue to learn from anyone and everyone I can, and I share many of my best practices for productivity, time management, and getting results at Getting Results.com.
Zen of Zero Inbox - This is an oldie, but goodie if you struggle with keeping up with email. Many years ago I decided that keeping an empty inbox would serve me better than fishing through an overflowing inbox of potential action items. It was one of the best moves I made and it kept my administration down to a minimum. I deal with a lot of email with distributed teams around the world, and I did not want to spend all my time in email. This is a short presentation that shares some of the most important concepts to managing your email and keeping your inbox down to zero. (Note – I often get more than 150 emails directly to me a day, and most of them are actions, and I limit myself to ~30 minutes a day in email administration.)
From the Web Inspirational Quotes – If you haven’t seen these before, this may become your new favorite quotes collection. These are many of the best of the best gems of timeless wisdom. The gang’s all here … Buddha, Lao-Tzu, Emerson, Plato, Socrates, Aristotle, Twain, Franklin, Churchill and more. That’s a powerful bunch to have in your corner. Use their words of wisdom to lift you up and help you “stand on the shoulders of giants.”
36 Best Business Books that Influenced Microsoft Leaders - I reached out to several Microsoft leaders, past and present, and up and down the ranks. The beauty of Microsoft is the extremely high concentration of smart people and I like to leverage the collective brain. In this case, I posed a simple question to find out which business books actually made a difference: “What are the top 3 books that changed your life in terms of business effectiveness?” This list of business books reflects the answers to that question.
Getting Results the Agile Way is a personal results system for work and life. It’s about making the most of what you’ve got, and helping you get exponential results, by working on the right things, at the right time, the right way, with the right energy. Most importantly, it’s about getting meaningful results, not simply doing more things. It’s also the playbook I wish somebody gave me when I started. It would have save me a lot of time, hard lessons, and accelerated my path in a more sustainable way.
The heart of the system is three parts:
That’s the system. But the system comes to life when you hear how people use it or how it changes their life.
Meet Tim Kropp.
Tim is an Information Security Program Manager, and here is his story of using Getting Results the Agile Way …
For the past 10 years I’ve been focused on two significant methods for getting results 1) Using Project Management methods (PMBOK) and 2) Franklin Covey’s “Habits”. In May of 2010 I began to apply the Agile Results process, and put simply, it has added completeness. While both Project Management, with its strong focus on planning correctly, and 7 Habits, with its foundation in values, are both effective - using Getting Results provides a few things that I hadn’t expected. You see, for several years I’ve been a big proponent of planning correctly, analyzing prior to implementing, long periods of thinking, and then implementing. My methods were incomplete. Agile Results provided completeness, agility, and flexibility to my approach. It’s not a matter of the PMBOK, or 7 Habits systems being better, or worse. It is a matter of the approach being different. It is now part of the big three methods right, not separate? So here is what I think is my “Big 3”:
Agile Results allow you to make adjustments, immediately or over time, as you need them. It’s more than just a systematic way of doing things. JD provides insight, advice, through proven practices that he and others use. It is more than just a Project, or a Value, or a Habit. It’s a combination of them all, and they all work together synergistically. So, pick any given project or goal you might have. Just try starting with something simple from this large swath of information from JD (another thing I learned – keep it simple). Say like, the rule of 3, the reflection pattern and then after a few weeks of trying it out, look at the results. It’s amazing. I did it. And you’ll want more. I was completely overwhelmed, overworked, and behind in a huge project delivery. I needed a way to get it done, effectively. JD gave me a hint to read through “Getting Started”. Of course, the last thing you want is more workload, but I listened and tried applying it immediately. I haven’t stopped. Every day, every week, even monthly, quarterly, yearly, the rule of 3 is my foundation. And now that’s just the beginning……….imagine what’s next. -- Tim Kropp, Information Security Program Manager
From the Archives Reference Models, Reference Architectures, and Reference Implementations – A reference model is is a model of something that embodies the basic goals or ideas, and you can use it at as a reference for various purposes. It’s like having a topology map of the key concepts. A reference architecture provides a proven template solution for an architecture for a particular domain. A reference Implementation goes beyond a reference architecture and is an actual implementation. The way to distinguish between a reference architecture and reference implementation is simple: If it’s an exemplar of the architecture, it’s a reference architecture … If it’s an exemplar of the implementation, then it’s a reference implementation. Each serve different purposes, and require different levels of detail or abstraction.
40 Hour Work Week at Microsoft - One of the most important lessons at Microsoft was learning the value of a 40 hour work week. I’ve been on time, on budget for 10 years on projects ranging from grass-roots or “best efforts” to $ million+ investments. In my first few years, I was on time, on budget through heroic effort. That’s not sustainable and folks don’t want to sign up for that more than once. Luckily, I learned early on how to drive more effective results by fixing time and flexing scope, while flowing value, and optimizing team health.
From the Web Productivity Personas - Personas are a simple way to share examples of the different types of behaviors. Anybody can be a mix of some or all of the various personas. No persona is good or bad. Some are more effective than others, depending on the situation. The key is to use the personas as a lens on behavior. You can analyze yourself, other people, and common interactions. We all have the capacity for the various behaviors. The trick is to know your preferences and the preferences of others. This is a set of personas relevant to the productivity space.
Motivation - Motivation is the “Why” behind the goal. It’s your little engine that says you can, when the rest of you says you can’t. It’s also the same force that on a good day can help you move mountains. Motivation is a life-long skill that you can improve through self-awareness and proven strategies. The better you know your own drivers and levers, the more effective you’ll be at getting the results you want in your life.