For example, the people can be sent, according to their job responsibilities, to develop skills in writing use cases, facilitating meetings, semantic modeling, programming, and the use of various tools.
People can be sent to learn standards that will be used. The organization might center a class around the subset parts of UML they expect to use or perhaps a variation for real-time systems.
Evaluating a Methodology
In light of the above, how might you evaluate a methodology?
You would first ask why the methodology exists, and then what game you are playing. Based on those you might evaluate the methodology for:
· How rapidly you can substitute or train people
· How great an effect it has on the sales process
· How much freedom it gives people (or how constraining it is)
· How fast it allows people to respond to changing situations
· How well it protects your organization from lawsuits or other damage
You have undoubtedly noticed that the principles of methodology design presented in this chapter are oriented toward designing methodologies whose priorities are being productive and responsive to change.
I leave as an exercise for another author to capture the principles for methodologies that enhance sales, substitutability, and safety from lawsuits.
And What Should I Do Tomorrow?
Start by recognizing that no single methodology definition can possibly suit all projects. Don't even think that the Rational Unified Process, Unified Process, or the Something Else methodology will fit your project out of the box. If you follow a methodology out of the box, you will have one that fits some project in the world, but probably not yours.
Practice noticing how the seven principles of methodology design relate to your project:
· Look for where your team could benefit from using warmer communications channels and where cooler ones are needed.
· Identify the bottleneck activities on your project.
· Track them as they change.
· Invent ways to utilize some other group's excess capacity to streamline the bottleneck group's work or to reduce uncertainty.
· Reduce the internal deliverables on your project:
· Arrange for higher-bandwidth communication channels between the developers and opportunities for rapid feedback, and you will find that some of the promissory notes are no longer really needed.
· Find the bottleneck activities, and see if you can trade efficiency elsewhere for increased productivity at the bottleneck station.
· Find a place where lightening the methodology would actually cause damage. Think about what might be an alternative.
· Review the list of purposes of a methodology. Evaluate the purpose of your group's methodology, and then rank its effectiveness with respect to that purpose.
· Practice naming the scope and elements of your methodology and other methodologies. Observe how much they differ due to addressing different scopes or different priorities.
· Look at the different methodologies in use on different projects, and evaluate them according to how they address their different project sizes.
· Experiment with the difference between problem size and project size.
· Can you think of a project that had more people than it needed?
· Can you think of a difficult problem that was turned into an easy problem through the application of some particular point of view?
Level 2 readers:
· Add these ideas to your bag of tricks.
· Learn where to apply, adjust, and drop them. Level 3 readers: See if you can explain these ideas to someone else.
CHAPTER 5. Agile and Self-Adapting
The pieces of the puzzle are in place. We have seen Software development as a cooperative game of invention and communication.
People as funky but good at looking around and taking initiative, communicating particularly well informally, face-to-face Methodology as the set of conventions the team adopts, with different conventions suiting different sorts of projects Light methodologies as delivering more quickly, but having to become heavier as the team size grows Projects as unique ecosystems, a project's methodology needing to fit the project ecosystem.
Everything fits together neatly, except, How light is right for any one project, and how do we do this on our project?
"Light but Sufficient" discusses how light is right for any one project, in particular, what it means to be too light. The target is to balance lightness with sufficiency.
"Agile" discusses the significance of certain project "sweet spots": colocation, proximity to users, experienced developers, and so on. Less agile mechanisms must be used as the project sits farther from those sweet spots. Virtual teams, in particular, lie far from the sweet spot, and so make agile, distributed development more difficult.
"Becoming Self-Adapting" describes a technique for evolving a light-but-sufficient, project-personal methodology quickly enough to be useful to the project. The key idea is to reflect every few weeks on what works well and what should be changed.
The theory so far seems to say that we should use a mostly oral tradition to bind the huge amount of information generated within the project.
Common sense tells us that oral tradition is insufficient. Looking for Documentation
A programmer told of his company rewriting their current core product because there is no documentation, no one left who knows how the system was built, and they are unable to make their next changes. He said he hopes there will be documentation after the project, this time. Another told of three projects, each of which will build on the previous. The three are not at the same location. He said that they can't possibly work on a strictly oral basis.
It is possible to have too little stickiness in the information at hand. It is time to revisit the Cooperative Game principle:
The primary goal is to deliver software; the secondary goal is to set up for the following game.
Reaching the primary goal is clear: if you don't deliver the software, it won't matter how nicely you have set up for the following game.
If, on the other hand, you deliver the software and do a poor job of setting set up for the following game, you jeopardize that game.
The two are competing activities. Balancing the two competing activities relies on two arts.
The first art is guessing how to allocate resources to each goal. Ideally, documentation activities are deferred as long as possible, and then made as small as possible. Excessive documentation done too early delays the delivery of the software. If, however, too little documentation is done too late, the person who knows something needed for the next project has already vanished.
The second art is guessing how much can be bound in your group's oral tradition and how much has to be committed to archival documentation. Recall that we don't care, care, past a certain point, whether the models and other documentation are complete, correctly match the "real" world (whatever that is), or are up-to-date with the current version of the code. We care whether the people receiving them find them useful for their specific needs. The correct documentation is exactly that needed for the receiver to make her next move in the game. Any effort to make the models complete, correct and current past that point is a waste of money.
Usually, the people on the successful projects I have interviewed felt that they had succeeded "despite the obviously incomplete documents and sloppy processes" (their words, not mine). Viewed in our current light, however, we can guess that they succeeded exactly because the people made good choices in stopping work on certain communications as soon as they reached sufficiency and before diminishing returns set in. They made the paperwork adequate, they didn't polish it.
Читать дальше