Agile Modeling is a practice-based
methodology for effective modeling and documentation
of software-based systems. Simply
put, Agile Modeling is a collection of values, principles, and practices for
modeling software that can be applied on a software development project in an
effective and light-weight manner. Agile Modeling is a supplement to other
Agile Methodologies such as:
·
Extreme Programming
·
Select Perspective
·
SCRUM
|
||
The principles and values of Agile
Modeling practises help to mitigate the criticisms of Agile Software
Development. The principle Maximize Stakeholder Value inspires the developer to
collaborate with the customer in providing an adequate level of documentation.
The principle Model With Others
leads to a design which is the best fit for the customer's needs.
Limitations
There is significant dependence on
face-to-face communication and customer collaboration. Agile Modeling is
difficult to apply where there are large teams, team members are not
co-located, and people skills are lacking. However, Agile Modeling can be scaled
with agile architecture techniques.
Core Principles:
- Model
With A Purpose. Many developers worry about whether
their artifacts -- such as models, source code, or documents -- are
detailed enough or if they are too detailed, or similarly if they are sufficiently
accurate. What they're not doing is stepping back and asking why they're
creating the artifact in the first place and who they are creating it for.
With respect to modeling, perhaps you need to understand an aspect of your
software better, perhaps you need to communicate your approach to senior
management to justify your project, or perhaps you need to create
documentation that describes your system to the people who will be
operating and/or maintaining/evolving it over time. If you cannot identify
why and for whom you are creating a model then why are you bothering to
work on it all? Your first step is to identify a valid purpose for
creating a model and the audience for that model, then based on that
purpose and audience develop it to the point where it is both sufficiently
accurate and sufficiently detailed. Once a model has fulfilled its goals
you're finished with it for now and should move on to something else, such
as writing some code to show that the model works. This principle also
applies to a change to an existing model: if you are making a change,
perhaps applying a known pattern, then you should have a valid reason to
make that change (perhaps to support a new requirement or to refactor your
work to something cleaner). An important implication of this principle is
that you need to know your audience, even when that audience is yourself.
For example, if you are creating a model for maintenance developers, what
do they really need? Do they need a 500 page comprehensive document or
would a 10 page overview of how everything works be sufficient? Don't
know? Go talk to them and find out.
- Maximize Stakeholder ROI. Your project stakeholders are investing resources -- time,
money, facilities, and so on -- to have software developed that meets
their needs. Stakeholders deserve to invest their resources the best way
possible and not to have resources frittered away by your team.
Furthermore, they deserve to have the final say in how those resources are
invested or not invested. If it was your resources, would you want it any
other way? Note: In AM v1 this was originally called "Maximize
Stakeholder Investment". Over time we realized that this term wasn't
right because it sounded like we were saying you needed to maximize the
amount of money spent, which wasn't the message.
- Travel Light. Every artifact that you create, and then decide to keep, will
need to be maintained over time. If you decide to keep seven models, then
whenever a change occurs (a new/updated requirement, a new approach is
taken by your team, a new technology is adopted, ...) you will need to
consider the impact of that change on all seven models and then act
accordingly. If you decide to keep only three models then you clearly have
less work to perform to support the same change, making you more agile
because you are traveling lighter. Similarly, the more complex/detailed
your models are, the more likely it is that any given change will be
harder to accomplish (the individual model is "heavier" and is
therefore more of a burden to maintain). Every time you decide to keep a
model you trade-off agility for the convenience of having that information
available to your team in an abstract manner (hence potentially enhancing
communication within your team as well as with project stakeholders).
Never underestimate the seriousness of this trade-off. Someone trekking
across the desert will benefit from a map, a hat, good boots, and a
canteen of water they likely won't make it if they burden themselves with
hundreds of gallons of water, a pack full of every piece of survival gear imaginable,
and a collection of books about the desert. Similarly, a development team
that decides to develop and maintain a detailed requirements document, a
detailed collection of analysis models, a detailed collection of
architectural models, and a detailed collection of design models will
quickly discover they are spending the majority of their time updating
documents instead of writing source code.
- Multiple
Models. You potentially need to use multiple
models to develop software because each model describes a single aspect of
your software. “What models are potentially required to build modern-day
business applications?” Considering the complexity of modern day software,
you need to have a wide range of techniques in your intellectual modeling
toolkit to be effective (see Modeling Artifacts for AM for a start at a list and Agile Models Distilled for detailed descriptions). An important
point is that you don't need to develop all of these models for any given
system, but that depending on the exact nature of the software you are
developing you will require at least a subset of the models. Different
systems, different subsets. Just like every fixit job at home doesn't
require you to use every tool available to you in your toolbox, over time
the variety of jobs you perform will require you to use each tool at some
point. Just like you use some tools more than others, you will use some
types of models more than others. For more details regarding the wide
range of modeling artifacts available to you, far more than those of the
UML as I show in the essay Be Realistic About the UML.
- Rapid
Feedback. The time between an action and the
feedback on that action is critical. By working with other people on a
model, particularly when you are working with a shared modeling technology
(such as a whiteboard, CRC cards, or essential modeling materials such as
sticky notes) you are obtaining near-instant feedback on your ideas.
Working closely with your customer, to understand the requirements, to
analyze those requirements, or to develop a user interface that meets
their needs, provides opportunities for rapid feedback.
- Assume
Simplicity. As you develop you should assume
that the simplest solution is the best solution. Don't overbuild your
software, or in the case of AM don't depict additional features in your
models that you don't need today. Have the courage that you don't need to
over-model your system today, that you can model based on your existing
requirements today and refactor your system in the future when your
requirements evolve. Keep your models as simple as possible.
- Embrace Change. Requirements evolve over time. People's
understanding of the requirements change over time. Project stakeholders
can change as your project moves forward, new people are added and
existing ones can leave. Project stakeholders can change their viewpoints
as well, potentially changing the goals and success criteria for your
effort. The implication is that your project's environment changes as your
efforts progress, and that as a result your approach to development must
reflect this reality.
You need an agile approach to change management.
- Incremental
Change. An important concept to understand
with respect to modeling is that you don't need to get it right the first
time, in fact, it is very unlikely that you could do so even if you tried.
Furthermore, you do not need to capture every single detail in your
models, you just need to get it good enough at the time. Instead of
futilely trying to develop an all encompassing model at the start, you
instead can put a stake in the ground by developing a small model, or
perhaps a high-level model, and evolve it over time (or simply discard it
when you no longer need it) in an incremental manner.
- Quality Work. Nobody likes sloppy work. The people doing the work don't like
it because it's something they can't be proud of, the people coming along
later to refactor the work (for whatever reason) don't like it because
it's harder to understand and to update, and the end users won't like the
work because it's likely fragile and/or doesn't meet their expectations.
- Working
Software Is Your Primary Goal.
The goal of software development is to produce high-quality working
software that meets the needs of your project stakeholders in an effective
manner. The primary goal is not to produce extraneous documentation,
extraneous management artifacts, or even models. Any activity that does
not directly contribute to this goal should be questioned and avoided if
it cannot be justified in this light.
- Enabling The Next Effort Is Your Secondary Goal. Your project can still be considered
a failure even when your team delivers a working system to your users –
part of fulfilling the needs of your project stakeholders is to ensure
that your system robust enough so that it can be extended over time. As Alistair Cockburn likes to
say, when you are playing the software development game your secondary
goal is to setup to play the next game. Your
next effort may be the development of the next major release of your
system or it may simply be the operations and support of the current
version you are building. To
enable it you will not only want to develop quality software but also
create just enough documentation and supporting materials so that the
people playing the next game can be effective. Factors that you need to consider
include whether members of your existing team will be involved with the
next effort, the nature of the next effort itself, and the importance of
the next effort to your organization. In
short, when you are working on your system you need to keep an eye on the
future.
Supplementary Principles:
- Content Is More Important Than Representation. Any given model could have several
ways to represent it. For example, a UI specification could be created
using Post-It notes on a large sheet of paper (an essential or
low-fidelity prototype), as a sketch on paper or a whiteboard, as a
"traditional" prototype built using a prototyping tool or
programming language, or as a formal document including both a visual
representation as well as a textual description of the UI. An interesting
implication is that a model does not need to be a document. Even a complex
set of diagrams created using a CASE tool may not become part of a
document, instead they are used as inputs into other artifacts, very
likely source code, but never formalized as official documentation. The
point is that you take advantage of the benefits of modeling without
incurring the costs of creating and maintaining documentation.
- Open
And Honest Communication. People need to be free, and to
perceive that they are free, to offer suggestions. This includes ideas
pertaining to one or more models, perhaps someone has a new way to
approach a portion of the design or has a new insight regarding a
requirement; the delivery of bad news such as being behind schedule; or
simply the current status of their work. Open and honest communication
enables people to make better decisions because the quality of the
information that they are basing them on is more accurate.
For Relation with XP refer : http://agilemodeling.com/essays/agileModelingXP.htm
No comments:
Post a Comment