Wednesday, April 11, 2007

The Agile Zealot's Handbook

Simon Baker from Agile in Action has updated his Zealot's Handbook. Here's what it says:

VALUE
IF you don't repeatedly release software
into a production environment
at least once every month
that realizes business value
for a real customer...

QUALITY
IF you're not paying constant attention to technical excellence
with simple, effective, incremental design
driven by continuous, repeatable automated testing
with at least 95% coverage...

LEARNING
IF you're not learning
by inspecting and reflecting every iteration
and you're not re-planning, adapting and improving
all of the time based on what you've learned...

TEAM
IF your team is not empowered to self-organize and be creative,
does not sit together and engage in face-to-face communication,
does not include your customer
and all the necessary skills to make its own decisions and take immediate action...

THEN YOU HAVE COMPROMISED YOUR AGILITY


Very nice! Short and sweet and incorporates all part of Agile. Thanks for the update Simon!

Monday, April 9, 2007

Deming Revisited

Note: This post originally appeared in my other blog, Random Thoughts from a CTO in February 2006. I have updated it based on what I have learned and tied it more directly to Lean development.


You can't talk about management without eventually bringing up W. Edwards Deming. Deming is a fascinating individual and his ideas have challenged the future of management. One of his contributions is fourteen key principles of management for transforming business effectiveness. As I have been learning more about Lean, I am finding that there is significant overlap between Lean principles and these by Deming. This is no coincidence, as Deming learned a lot from Japanese companies include Toyota. Here are each of the 14, with my comments following each one:

1. Create constancy of purpose for the improvement of product and service, with the aim to become competitive, stay in business, and provide jobs.

Skip: Too many times in software development, we fall victim to the "kitchen-sink mentality". The focus is on what the technology can do more than what is important for business. We lose track that we need to get something out the door that allows us to stay competitive and in business. Competition has shown us that things can get done more quickly. Customers expectations are higher than ever in wanting quick responsiveness. You must figure out what you absolutely have to produce and then get it out as quickly as possible without compromising quality. Is your company aligned around your particular products or do they have various project teams that can players every few months? Is it easy or difficult to understand why products are going because initiatives don't align well with the progression of each product?

2. Adopt a new philosophy of cooperation (win-win) in which everybody wins and put it into practice by teaching it to employees, customers and suppliers.

Skip: Partnerships, this is what we are talking about. Let's work on the solution together. Let's get rid of our own political agendas and figure out what we can make together. We need each other, so let's recognize that. We are moving more towards this model but it is slow going. There are still customers, employees and suppliers who just don't "get it" and are only looking out for number 1. I wish those people could realize how much easier life would be if you think of these relationships as cooperative instead of "give-and-take".

3. Cease dependence on mass inspection to achieve quality. Instead, improve the process and build quality into the product in the first place.

Skip: Years ago, if you did think about quality you usually had a testing group that would manually review the product before it went out the door. Then, if you took it a step further, you would have customers "test" your product in an "alpha" or "beta" release. However, organizations are finding out that it is best to be proactive instead of reactive when it comes to quality. Automate testing, create tests before design or implementation, make people think about the quality of the solution as requirements are being gathered. Those organizations that build quality in by checking early and often are going to be more successful in the long-term. Why? Because while the competitors are having to go back and fix past mistakes that could have been caught, you are able to focus on better meeting the customers' needs right now!

4. End the practice of awarding business on the basis of price tag alone. Instead, minimize total cost in the long run. Move toward a single supplier for any one item, based on a long-term relationship of loyalty and trust.

Skip: I have learned a long time ago when it comes to looking at financials and success in any business, you have to focus on the long-term results and impact of your short-term decisions. You may think your short-term decisions have merit, but if you choose to ignore (or understand) the long term negative effects you could get yourself in trouble. On the other hand, if you are focused on long-term partnerships that work for all of those concerned, you will be better off.

5. Improve constantly, and forever, the system of production, service, planning, of any activity. This will improve quality and productivity and thus constantly decrease costs.

Skip: For many organizations, this is a challenge. Why? Because they like to move on. Fix something, it works, leave it only since it works (the ol' adage, "If it's not broke, don't fix it"). So, even if it does seem to work,it may not be the most efficient or it may tend to have problems as time going on and the world changes around it. The best organizations are those that recognize that change is always happening and can adapt to those changes quickly. When they realize that there are always improvements, and the company rewards those who make improvements to improve quality or productivity or reduce costs, then you will have an efficient organization. Now, I encourage others to have the attitude of "Is there a better way?"

6. Institute training for skills.

Skip: Does your organization have formal training? Is it for new people only? Or does your organization expect the skills to be developed before they are hired? Or does your organization "train by fire". Organizations need to evaluate their training programs and look for consistency. In other words, are people being consistent in their performance based on their knowledge? Are they getting the same training? If they need refresher courses, is that available? If everyone isn't "sharpening their blades" on a regular basis you can quickly find that you aren't able to adapt to changing conditions or have as much flexibility in responding to change as you used to. The world is changing around us, don't you think each of us needs to change and improve as well? How can you do that without some time around training?

7. Adopt and institute leadership for the management of people, recognizing their different abilities, capabilities, and aspiration. The aim of leadership should be to help people, machines, and gadgets do a better job. Leadership of management is in need of overhaul, as well as leadership of production workers.

Skip: I am a firm believer that leadership isn't something you are born with, isn't part of your DNA, isn't part of a job title, and that each person is capable of becoming a leader. Some will take on more responsibilities than others, but each person need to become an expert of their own domain. You can't be an expert in my opinion if you aren't leading others with your expertise. Organizations promote people every day into management roles that they are prepared for. We should constantly encourage the building of leaders within the organization. I have told many people that one of my primary job duties is to create leaders for the organization. It is my legacy. I truly believe that!

8. Drive out fear and build trust so that everyone can work more effectively.

Skip: Mutual trust and respect are the heart and soul of a team's productivity. If you don't have one or both towards a teammate, you will find extra work is produced to work around this. Extra work means less productivity...period. Also, you also need to be able to take risks and make decisions that could have a negative impact. Of course, you should do your homework if the risk occurs. On the other hand, you can't be scared of making decisions by always going the safe route.

9. Break down barriers between departments. Abolish competition and build a win-win system of cooperation within the organization. People in research, design, sales, and production must work as a team to foresee problems of production and use that might be encountered with the product or service.

Skip: I have seen this happen in both large companies I have worked for as well as smaller ones. Why does this happen? Easy....departments have different goals that are in conflict with each other. Processes or work doesn't seem to flow well between departments, or work seems to contradict each other. This causes much frustration and the feeling of "us" vs. "them". I have even seen organizations with there are contests between different development groups to see who is better. While this may sound like healthy competition, it often creates "classes" of groups within the organization that is anything but healthy. The entire organization should look at the processes across the organization and determine if everyone is working towards customer needs in the most efficient way possible. We can't forget that the "us" is the entire organization and the "them" is our customers, vendors and even competitors. We can't forget to serve customers, support vendors and go after the external competitors for market share.

10. Eliminate slogans, exhortations, and targets asking for zero defects or new levels of productivity. Such exhortations only create adversarial relationships, as the bulk of the causes of low quality and low productivity belong to the system and thus lie beyond the power of the work force.

Skip: This is SO true. The cost of trying to support zero defects goes up exponentially as you get closer to zero. There are always acceptable defects that can wait on being fixed. The opposite is also true, in that there are defects that could cause data corruption that are not acceptable. You need to decide what is and is not acceptable and make sure that employees, customers and vendors are on the same page. If customers expect zero defects, and internally you know that is impossible, you will only have frustration on both sides.

11. Eliminate numerical goals, numerical quotas and management by objectives. Substitute leadership.

Skip: I hear from people that you "can't manage what you can't measure". However, I really haven't had any particular metrics for many years....yet, I know that I have been successful with the groups that I have managed. Whenever I have tried to implement metrics...it seems the focus has been more on keeping up with the metrics than focusing on the work itself. Isn't it the work that should be more important? In the end, I'll pick a good leader that motivates people to perform over a manager that is making sure his people are conforming to the metrics any time! I'm not saying metrics are bad but that they need to measure true value and support the right goals and behaviors of the organization.

12. Remove barriers that rob people of joy in their work. This will mean abolishing the annual rating or merit system that ranks people and creates competition and conflict.

Skip: Dilbert and The Office typically portray the workplace as a terrible place to be. Though it's done in a humorous fashion, it's still a testament to how people view most organizations. Managers from all levels should pay attention to this one, as they create programs, policies, procedures, etc that seem like good ideas but cause more conflict than they resolve. Are these things going towards improving morale and productivity or against it?

13. Institute a vigorous program of education and self-improvement.

Skip: Education and self-improvement seem to take a second seat to getting the work done. They are either used as recruiting perks, or rewards for hard work. I haven't been with an organization that puts a high enough value on these activities. Most people don't realize that if the company invests in people this way, and encourages self-improvement....that will lead to organizational improvement with better skills, higher knowledge and overall desire to learn.

14. Put everybody in the company to work to accomplish the transformation. The transformation is everybody's job.

Skip: Imagine a company where everybody has a particular role, everybody knew what was most important or not, everybody worked towards the same goals. I haven't seen it yet, but would love to be part of an organization like that! This is the ultimate goal of a Lean and Agile organization.

Friday, April 6, 2007

A good resource on code reviews

Code reviews are an essential part of ensuring that quality is properly built-in to the product development. However, for many it's been difficult to figure out how to make them effective without weighing down the team with more meetings, process and time it takes to prepare and conduct reviews. Especially, in a Lean and Agile product development environment.

Brad Appleton from his ACME blog has a good post today of a resource with lots of good information on this topic. Plus, if you act now you will get a book sent to you entirely free (shipping/handling included)!

Thursday, April 5, 2007

Can you really plan for the long-term future?

I attended a "planning conference" last night as part of my involvement in Cub Scouts with my son. The purpose of this meeting according to the leader was to "knock out the schedule" through summer of 2008 and we had the next 4 hours to do so. Initially, as we focused on the next few months things went pretty well. However, things begin to break down quickly the further out we went. One of the primary reasons is that the next scouting year would begin in the Fall of 2007 and that will cause some changes with kids, parents and leaders in that process. Therefore, it was difficult to firm up dates because the people involved by that time will be different. Yet, we were told by the leader to just give it our best shot and go on. The other reason that became frustrating is that the leader wanted particular dates and times that we would have different events. It was easy for the group to determine particular months, but much harder to nail down days and almost impossible to determine times. Why? Because who knows their own schedules a year from now (much less the next month). In the end, we created our "project plan" of activities but it left everybody a little frustrated, very tired, and most everybody skeptical that the plan would reflect reality a year from now.

I don't place blame on the leader of this because she was doing what had been done before. It was my first time, and knowing the problems I have had in the past with long term software project planning I was perhaps a little more sensitive. But, I had to ask myself, was it really worth spending hours on something that was probably only good for a few months of accuracy? Sure, there are probably some events we need to reserve well in advance because others are asking for it. However, we really didn't know if we would do these events until we get closer. There were just too many unknowns in the equation and things that could happen between now and summer of 2008. Despite our best planning, we can't really predict what will happen to the day and time. Plus, we already know that the people will change and they may want to do some things differently later on.

That's the beauty with Agile. It puts a shorter "time box" on everything. Let's focus on the next few months with a greater precision in the short term, and intentionally leave the future as fuzzy as possible. When we absolutely have to make decisions, let's make them at the last responsible moment. All the time changing the plan to better reflect the current state of things. Then, when people change (or change their minds), you can change the plan with it. I don't know what I will be doing at 10 am on June 1st of 2008 but I can give you a better idea of what I will be doing in the next six weeks.

Wednesday, April 4, 2007

YAGNI is very lean

In Extreme Programming (XP), there is an accepted principle with the acronym of YAGNI. What is it? Here's a good summary from Wikipedia:

The YAGNI principle of software development says that when there's a good chance that "you ain't gonna need it", it's better to postpone adding a program feature.

Even when it turns out that the functionality really is needed, the habit of writing code that is not necessary at the moment has some overlooked disadvantages:
* The time spent is taken from necessary functionality.
* The new features must be debugged, documented, and supported.
* Any new feature imposes constraints on what can be done in the future, so an unnecessary feature now may prevent implementing a necessary feature later.
* Until the feature is actually needed it is not possible to define what it should do, or to test it. This often results in such features not working right even if they eventually are needed.
* It leads to code bloat; the software becomes larger and more complicated while providing no more functionality.
* Unless there are specifications and some kind of revision control, the feature will never be known to programmers who could make use of it.
* Adding the new feature will inevitably suggest other new features. The result is a snowball effect which can consume unlimited time and resources for no benefit.


This principle very much supports both the concepts of Eliminating Waste and Defer Commitment. If you are not sure that code or functionality is really needed, you need to do some more homework. This homework could be additional research, talking with customers, or just waiting until you deliver higher priority functionality to the customer and really see if they need something else. In Lean, if there isn't direct Customer Value it is considered Waste. That is a bad thing. As mentioned above, it also leads to more complexity which can impact the long-term maintainability and quality of your code. Therefore, why not keep things as simple as possible until you absolutely need to put more into it?

I have seen in many design sessions where things get into a frenzy because the developers have figured out something cool with the technology they are using and are very eager to implement their ideas. This is fine, as long as the technology and their ideas translate into something the customer really wants or needs. Too many times, customers are usually forced into having something new that the development team thought they needed only to find they hardly use it. What happens next? Well, usually both the customer and the development team live with this unused, most likely complicated functionality forever. In the end, nobody is really happy about it.

However, when you find yourself in such a meeting (and you will at some point), remind the team about YAGNI. This will be a good reminder to them about the important of value and to wait until it is the right time to implement such functionality.

Tuesday, April 3, 2007

Go to the Source

In Lean, a key practice is one called "Go to the Gemba". Here's a brief description according to Wikipedia:

Gemba is a Japanese term meaning "the place where the truth can be found." Others may call it "the value proposition."

A Gemba visit is often simply called a customer visit. The hallmarks that make it uniquely useful are:
1) The purpose is firstly to observe, occasionally to question, rarely to guide or direct.
2) The visit occurs in the context where the product or service is used, which allows direct observation of problems that arise, workarounds that are applied, and capabilities or services that are never used.
3) Sometimes the customer (or client or user) is asked to describe what he is doing while he is doing it; this provides insight into the thought processes, which often reveal differences between the customer's mental model and the model of the developers or providers of the product or service.
4) The customer will often express wishes or needs while working in context that would be forgotten or suppressed in a different context such as a structured interview or sales meeting.

Common cases for a customer visit include:
1) Enhancing the features or usability of products (especially software) or devices (especially ones aimed at very broad or very niche consumers).
2) Improving processes or tools.


I think this describes the primary use of this practice, but I can see other uses as well. Here are some other sources that should be considered as a manager:

Individual Worker - Look at each person. Do they have a significant role? Do they understand their role? Have they developed the right skills for the role? As a manager, it is your job to ensure that each person understands their purpose in the organization. It is also your job to encourage that person to continually improve how they do their work as well as increase their value to the organization. Management should make sure that the culture is such that each individual once they understand their role, have autonomy to improve it as they see fit.

Development Team - How is the team functioning? Are the processes and tools supporting the team or getting in the way? Are they communicating well? Working well together? It is crucial that the team are working in a way that work flows smoothly, there is little or no waste and everything the team does goes towards providing value to the customer.

Management - Does your management style support Lean? Do you understand what Lean is all about? Are you establishing a culture that compliments Lean? Are you a champion of Lean? Are you helping others understand it? As a manager, you need to be the experts of Lean and do all you can to understand what it takes for an organization to become Lean. If things are falling apart because people don't understand what they are doing or have gone back to their old ways, it is up to managers to educate and instill the self-discipline each person needs to have to make it successful.

This is an area that we are still struggling with but realize that it is critical to our success moving towards a Lean organization. We must "Go to the Gemba" and find the problems (and solutions) where the root source is to properly address. Otherwise, we are making a lot of assumptions that may not prove accurate. As the old saying goes, "When you assume, you make an ass out of you and me." It's important to base decisions on real facts than assumptions. Going to the source will get you to the right place to identify the facts. It's then up to you to figure our fact from fiction.

Monday, April 2, 2007

Certification and Agile: Are We There Yet?

I've always been a little skeptical around certifications. Why? Because I am not sure that the certification process is focused on what counts (experience) but what is easily obtainable (knowledge). Seems I'm not alone in that feeling. The Agile Alliance came out with their own viewpoint last week. Here's what they said:

Now that Agile software development is becoming a mainstream practice, more and more employers need to staff teams that will perform it well. How can they know if a particular person will be an asset? One way might be to favor employees who are vouched for by some certification body. It is the position of the board of the Agile Alliance that employers should have confidence only in certifications that are skill-based and difficult to achieve. We also believe that employers should not require certification of employees.

Certifications in our industry usually tell you that a person has been exposed to particular knowledge. Some certifications additionally tell you that she has passed a test on that knowledge. Knowledge is a wonderful thing, but businesses pay for performance. Performance requires skill. A skill is not as simple to acquire as knowledge: the learner has to perform the skill badly, recover from mistakes, do it a bit better, and keep repeating the whole process. Especially for the interrelated and interpersonal skills required of Agile software development, much of the learning has to take place on real projects. It is that learning that a certification should vouch for. Vouching for someone else’s skill requires close observation or questioning by someone already possessing it. For anything other than uninterestingly simple skills, that’s a lot of work–which means it’s expensive. Therefore, the only skills worth formally vouching for are those that require substantial effort to learn.

While a skill-based certification can shorten the hiring or promotion process, there are many skilled practitioners who are not certified. Excluding them from consideration would be a poor business decision. Moreover, the state of the practice moves on. Skills decay when unused. The question is not whether an applicant once possessed appropriate skill; it’s whether the applicant can do what’s required today. A certificate cannot substitute for the hard work of individual evaluation.

Certifications such as Certified Scrum Master and DSDM Foundation are knowledge-based and easy to achieve. We believe the courses that lead to them are good ones. We believe people who attend them get their money’s worth. But while the certifications may be evidence of good faith, useful knowledge, and a desire to learn, they are not in themselves evidence of skill. Higher levels of certification, such as DSDM Practitioner or Certified Scrum Practitioner, require project experience, a written project synopsis, and an oral examination. They are skill-based. Other organizations like the Agile Project Leadership Network are working on skill-based certifications. We applaud their efforts. Although, the position of Agile Alliance remains firmly that employers should not require certification of employees and that skill needs to be acquired by practice on agile projects not by training alone.


I think there is a place for certification in Agile as it has worked for other technical certification processes such as PMI, Sun, Microsoft, and others. It's good to see that Agile is maturing to a point where certification is becoming important in hiring skilled people. However, it's just too easy for anybody to become a Certified Scrummaster. Just a two-day course and viola....you are certified. This does not guarantee that you are skilled in Scrum, have experience with teams, and understand Agile principles and practices. Perhaps some of the higher levels discussed above will demonstrate those skills.