Each iteration should deliver incremental
capabilities that are assessed by stakeholders. This enables you to
get feedback from stakeholders as well as on progress made so that
you can adapt your plans as required. Iterative development also
allows you to focus each iteration on addressing the key risks that
the project is currently
, allowing you to increase
Practice 1 Manage risk.
Practice 2 Execute your project in
Practice 3 Embrace and manage change.
Practice 4 Measure progress objectively.
Continuously improving quality requires more
than just testing to validate fitness for use. Rather, it involves
throughout the lifecyclehaving them build quality
into the process and the product. An iterative approach focuses on
early testing and test-and-build automation throughout the
lifecycle as a means to reduce the number of defects, provide
quality metrics early on, and allow you to plan and
adapt your product more effectively based on reality.
Practice 5 Test your own code.
Practice 6 Leverage test automation
Practice 7 Everyone owns the product.
There will always be many competing stakeholder
priorities, such as producing a solution
versus addressing all the business requirements. We need to work
closely with the stakeholders to make sure that we understand their
priorities and to prioritize the right projects and the project
requirements. We also need to strike the right balance between
leveraging existing assets and building custom software,
acknowledging that in some cases the former may require
on what requirements to address.
Practice 8Understand the domain.
Practice 9Describe requirements from the
Practice 10Prioritize requirements for
Practice 11Leverage legacy systems.
We need to enable people to work at their best.
This means that we need to equip talented people with the right
skills, break down walls that prevent a project team from
collaborating effectively, and put in place the right environments
to facilitate meaningful collaboration. As software becomes
increasingly critical to how we run our business, we also need to
make sure that we work well together across business, software, and
Practice 12Build high-performance teams.
Practice 13Organize around the architecture.
Practice 14Manage versions.
Elevate the level of
Complexity is a major enemy to project success,
and minimizing the amount of code, data structures, components,
model elements, or other constructs
produce during a project
is crucial to reducing complexity. You can achieve this goal by
reusing existing assetssuch as business models,
patterns, and servicesinstead of custom-building new ones. You can
also leverage higher-level languages, frameworks, and tools that
can generate code from higher-level models; automate unit testing;
and manage the complexity of configuration management. Another
approach to reducing complexity is to promote implicity. You can do
this by refactoring, keeping code and models clean, and
implementing key aspects of the architecture first in what we call
Practice 15Leverage patterns
Practice 16Architect with components and
Practice 17Actively promote reuse
Practice 18Model key perspectives
More process is not
you need to adapt the process to the specific needs of your
project, based on
, complexity, needs for compliance, and so
on. In addition, you need to adapt the process to different
lifecycle phases, so you may, for example, use less ceremony at the
start of a project and more ceremony toward the end. You must also
continuously improve the process, for example by assessing how well
it works at the end of each iteration.
Practice 19Rightsize your process
Practice 20Continuously reevaluate what you