If you have been reading this book from the beginning, you should still see one mystery at this point. Every person is different, every project is different, and each project differs internally across subject areas, subsystems, subteams, and time. Each situation calls for a different methodology (set of group conventions). The mystery is how to construct a different methodology for each situation, without spending so much time designing the methodology that the team doesn't deliver software. You also don't want everyone on your project to have to become a methodology expert. I hope you can guess what's coming. Bother to ReflectThe trick to fitting your conventions to your ever-changing needs is to do two things, individually and as a team:
If you do these two things, you can make your methodology effective, agile, and tailored to your situation. If you can't do that, well . . . you will stay where you are. Although the magical ingredient is remarkably simple, it is quite difficult to pull off, given people's funky nature. People usually resist having the meeting. In some organizations, the distrust level is so high that people will not speak at such a get-together. In this case, there is only one thing to do: Do it once, post the results, and then see if you can do it again. You may need to find someone within your organization who has the personal skills to make the meeting work. You may need to go outside your organization for the first few times, to get someone with the right personal skills and whom everyone in the room can accept. A Methodology-Growing TechniqueHere is a technique for on-the-fly methodology construction and tuning. I present it as what to do at five different times:
After that, I describe a sample one-hour reflection workshop. Right NowDiscover the strengths and weaknesses of your organization through short project interviews. You can do this at the start of the project, but you can also do this right away, regardless of where you are in any project. The information will do you good in all cases, and you can start to build your own project interview collection. Ideally, have several people interview several other people each, and start your collection with six to ten interview reports. It is useful but not critical to interview more than one person on one project. For example, you might talk to any two of the following: the project manager, the team lead, a user interface designer, and a programmer. Their different perspectives on the same project will prove informative. Even more informative, however, will be the common responses across multiple projects. The important thing to keep in mind is that whatever the interviewee says is relevant. During an interview, I don't give my own opinions about any matter but use my judgement to select a next question to ask. I suggest that you structure your interviews in this sequence as well:
Step 1. Ask to see one sample of each work product producedLooking at these, you can detect how much bureaucracy was likely to be on the project and see what questions you should ask about the work products. Look for duplicated work, places where the work products might have been difficult to keep up to date. Ask whether iterative development was in use, and if so, how the documents were updated in following iterations. Look, in particular, for ways in which informal communication was used to patch over inconsistencies in the paperwork.
After looking at the work samples, Step 2. Ask for a short history of the projectRecord the date started, staff changes (growing and shrinking), team structure, the emotionally high and low points of the project life. Do this to calibrate the size and type of the project and to detect where there may be other interesting questions to ask.
The value of this interview lay not in our discussing deliverables but in my hearing their phenomenal determination to succeed and their willingness to changeevery four monthswhatever was necessary to get the success they wanted. After hearing the history of the project and listening for interesting threads of inquiry to pursue, Step 3. Ask what should be changed next timeAsk, "What were the key things you did wrong that you wouldn't want to repeat on your next project?" Write down whatever they say, and fish around for related issues to investigate. After hearing the things not to repeat, Step 4. Ask what should be repeated the next timeAsk, "What were the key things you did right that you would certainly like to preserve in your next project?" Write down whatever they say. If the person says, "Well, the Thursday afternoon volleyball games were really good," write that down.
In response to this question, people have named everything from where they sit, to having food in the refrigerator, to social activities, communication channels, software tools, software architecture, and domain modeling. Whatever you hear, write it down. Step 5. Identify prioritiesAsk, "What are your priorities with respect to the things you liked on the project? What is most critical to keep, and what is most negotiable?" Write those down. It is useful to ask at this point, "Was there anything that surprised you about the project?" Step 6. Find any holesFinally, ask whether there is anything else you should hear about, and see where that goes. At one company, we constructed a two-page interview template on which to write the results, so we could exchange them easily. That template contained the following sections:
Do this exercise, collect the filled-in templates, and look them over. Depending on your situation, you might have each interviewer talk about the interview, or you may just all read the notes. Look for common themes across the projects.
Although that may seem trivially true, it seldom gets written down and attended to. In fact, within a year of that result, the following story occurred at that company:
The theme was different in another company. Here is what one interviewee told me:
This company will need extra mechanisms to increase contact between those two groups of people and extra reviews of their work. The point of these stories is to highlight that what you learn in the interviews is likely to be relevant on your next project. Pay attention to the warnings that come up in the project interviews. At the Start of the ProjectExpect to do some tailoring to the corporate methodology standard. This will be needed whether the base methodology is ISO9001, XP, RUP, Crystal, or a local brew. Stage 1: Base methodology to be tunedIf possible, have two people work together on creating the base methodology proposal for the project. It will go faster, they will spot each other's errors, and they will help each other come up with ideas. They have four steps to go through:
If the increment length is longer than four months, they will have to find some way to create a tested, running version of the system every four months or less, to simulate having real increments.
Recall that it is easier to modify an existing methodology than to invent one from scratch. They may choose to start from the corporate standard, the published Unified Process, XP, Crystal Clear, Crystal Orange, or the last project's methodology.
These steps could take between a day and a few days to complete for a small- or medium-sized project. If it looks like they will spend more than a week on it, then get one or two more people from the project team involved and drive it to completion in just two more days. Stage 2: The starter methodologyHold a team meeting to discuss the base methodology's work flow and conventions, and adjust it to become the starter methodology. For larger projects, where it is impractical to gather the whole team, gather the key representatives of each job role. The purpose of the meeting is to
Consider these questions in that meeting:
An important agenda item for the meeting is selecting a way for the team to detect morale and communication problems. The meeting results will include:
This is your starter methodology. The meeting could take half a day but should not exceed one day. In the Middle of the First IncrementWhether your increment length is two weeks or three months, run a small interview with the team members, individually or in a group meeting, at approximately the mid-point of the increment. Allow one to three hours. The single question for resolution is,
In the first increment, you can't afford to change your group's whole way of working unless it is catastrophically broken. What you are looking for is to get safely to your first delivery. If the starter methodology will hold up that long, you will have more time, more insight, and a better moment to adjust it, after you have successfully made your first delivery. Therefore, the purpose of this interview or meeting is to detect whether something is critically wrong and whether the first delivery will fail. If you discover that the team's way of working isn't working, first consider reducing the scope of the first delivery. Most teams overstate how much they can deliver in the first increment. This is simply normal and not a fault of the methodology. It is a result of overambitious management driving the schedule unrealistically and overly optimistic developers who overlook the learning to be done, the meetings to be held, and the normal bugs they put into the code. It comes from underestimating the learning curve of new technology and new teammates. Overstating how much can be delivered in the first increment is really quite normal. Therefore, your first approach is to reduce scope. You may, however, discover that reducing scope will not be sufficient. You may discover that the requirements are incomprehensible to the programmers or that the architects won't get their architecture specification finished in time. If this is the case, then you need to react quickly and find a new way of working. This, combined with a drastically reduced functional scope, will allow you to meet that first delivery deadline. You may introduce overlapped development or put people physically closer together, cut down the ambition level for the initial architecture or make greater use of informal communication channels. You may have to make emergency staff changes or introduce emergency training, consulting, or experienced contractors. Your goal is to deliver something: some small, running, tested code in the first increment. This is a critical success factor on a project (Cockburn 1998). After you deliver this first release, you will have time to pause and consider what is happening. After Each IncrementHold a team reflection workshop after each increment. Bothering to reflect is a critical success factor in evolving a successful methodology, just as incremental development is a critical success factor in delivering software. The length of this reflection workshop may vary from company to company or country to country. Americans like to be always busy, short of money, and on the run. I see Americans allocating only two to four hours for this workshop. In other parts of the world, the workshop may be given more time. I once participated in a two-day offsite version that combined reflection, team building, and planning for the next increment. It took place in Europe, not surprisingly. The dominant reason for delaying this workshop until after the first increment is that you can only properly evaluate the effects of each element in your methodology after you have delivered running, tested software to a user. Only then can you see what was overdone and what was underdone. There is a second reason for holding the workshop at the end of the increment: People are quite often exhausted after getting the software out the door. This meeting provides a chance to breathe and reflect. Done regularly, it becomes part of the project rhythm. After each increment, the team members benefit from a short shifting of mental and social gears. Whether you take two hours or two days, the two questions you want to address are:
The responses may cross every boundary of the project, from management intervention to timecards, group communication, seating, project reviews, standards, and team composition. Very often, teams tighten standards after the first increment, get more training, streamline the work flow, increase testing, and reorganize the teaming structures. The changes will be much smaller after the second and subsequent increments, because by then the team will have already delivered several times. In the Middle of the Subsequent IncrementsAfter the first increment, the team has established one (barely) successful way of working. This is a methodology design to fall back on, if needed. Having that as a fallback plan, you can be much more adventuresome in suggesting changes in the mid-increment meetings you hold in the second and later increments. In those mid-increment meetings, and particularly after the second successful delivery, look to invent new and better ways of delivering. See if you can do any of the following:
You might use interviews or a reflection workshop for these mid-increment adjustments. By this time, your team will have had quite a bit of practice with these meetings and will have an idea of how to behave. You can omit the mid-increment workshops if the project is using increments of three weeks or less. Why bother with mid-increment reviews, when the project is already delivering and you already have post-increment reviews in place? In the middle of the development cycle, those things that are not working properly are right in people's faces. The details of the problems will not be as clear four or six weeks later, at the post-increment meeting. Therefore, you can pick up more details in the middle of the increment, get feedback immediately about the idea, and try out a new idea the same day instead of waiting several weeks or months. What if a new idea doesn't work out? Sometimes the team tries a new idea on the second or third increment and finds that the idea simply does not work well.
In inventing new ways of working in these later increments, you create the opportunity to significantly improve your methodology. This is an opportunity not to be missed. The Post-Project ReviewGiven the mid- and post-increment reflection workshops, I place less emphasis on having post-project reviews. I feel that the time to reflect is during the project, when the reflection and discussion will do the project some good. After the project, it is too late. Usually, I find that teams that run post-project reviews did not bother to reflect during the project and suddenly want to know how to do better for the next project. If you find yourself in such a meeting, put forward the suggestion that next time you want to use incremental development and hold post-increment reviews instead. Nonetheless, it may be that the post-project review is the only time you get to make statements regarding the staffing and project management used. If this is the case, I suggest getting and using the book Project Retrospectives (Kerth 2001), which describes how to run a two-day post-project review. If you hold a post-project review, think about who is going to make use of the information and what they can really use as they run their next project. You might draft a short (two-page) set of notes for the next project team to read, outlining the lessons learned from this project. Of course, you might write yourself a one-page "lessons learned" reminder after each of your own increments, as a normal outcome of your reflection workshop. A Reflection Workshop TechniqueThe tangible output of a mid- or post-increment reflection workshop is a flip-chart that is then posted on the wall in some prominently visible place and seen by the project participants as they go about their business. I like to write directly on the flipchart that will be posted. It is the one that contains the group memories. Other people like to copy the list from the scratched- and scribbled-on flipchart to a fresh sheet for posting. The people who created the one shown in Figure 3-10 decided to use sticky notes instead of writing on the flipchart. A Sample Reflection Workshop TechniqueThere are several different formats for running the workshop and for sharing the results (of course). I tend to run the simplest version I can think of. It goes approximately like this (see Cockburn 2005 and Tabaka 2006 for more detailed versions):
At this point some discussion ensues. It is possible that someone starts naming problem areas, instead of strong areas. If the problems are significant, write them down under the Problems section. Allow some time for people to reflect and discuss. Figure 5.1. Sample poster from reflection workshop.
Eventually, move the discussion along:
Write as little as possible in the Problems section: Write as few words as possible, and merge problems together if possible. The point of this poster is to post suggestions for improvement, not to focus on problems. Collect the suggestions. If the list gets very long, question how many new practices or habits the group really wants to take on during this next period. It is sometimes depressing to see an enormous list of reminders. It is more effective to have a shorter list of things to focus on. Writing on a single flipchart with a fat flipchart pen is a nice, self-limiting way of handling this. Periodically, see if someone has thought of more things the team is doing right that should be kept. Toward the end of the workshop, review the list. See if people really agree with the new ideas or if they were just being quiet. After the workshop, post the list where everyone can see it. At the start of the next workshop, you might bring in the poster from the previous workshop and start by asking whether this way of writing and posting the workshop outcome was effective, or what else you might try. Holding this meeting every two to six weeks will allow your team to track its local and evolving culture, to create its own, agile methodology. The Value of ReflectionThe article on Shu-Ha-Ri excerpted in the Introduction continues with the following very relevant discussion of reflection:
I couldn't say it better. |