Best Practices
Evolutionary Delivery
Evolutionary Delivery embodies the iterative approach to development. Rather than design
and build the entire product up front, one starts with a simple set of features and evolves these
features over a set of cycles or iterations.
Designing for Change
Design for Change is a fundamental part of Object-Oriented
programming, including the practices of Refactoring and using
automated Unit Tests defined in Extreme Programming (XP).
Design for change is an essential part of evolutionary delivery and
iterative development, which are all the core of modern
development approaches, such as Scrum, XP, and the RUP.
Miniature Milestones
Miniature Milestones is a fine-grained approach to project tracking.
The Scrum practice of prioritizing tasks in the product and sprint backlogs
and tracking daily progress is a good example of this practice.
User-Oriented Development
Focusing on the user and the user's interaction with the software insures that the
code that ends up getting developed has a specific value, even the stuff that's deep in the
invisible guts of the system. This focus on user needs keeps development teams from straying into
development for its own sake. When done properly, it makes the system requirements concrete and
practical instead of abstract and vague.
Requirements Scrubbing
Requirements scrubbing is a technique whereby the requirements are examined carefully to remove
that which is un-necessary or too complex. Paring down requirements to their essentials reduces
project risk: One ends up with a working system in a short amount of time. Once such a system is in
place, it is much easier to enhance it with additional features and enhanced functionality.
Timebox development
Timebox development is the practice of developing to a specific schedule. Again, the goal
is to ensure that something that works is produced. Even if features must be removed or simplified,
the basic goal will still be achieved. In Scrum, this practice is embodied in the Sprint Goal,
whereby it is ok to simplify the requirements, or even remove entire tasks as long as the
vision for that sprint is achieved.
Goal Setting
This best practice is aimed to improve motivation and to make the priorities
in a project clear. Each goal has to be well defined so that one can determine
with a high degree of clarity whether or not the goal has been achieved.
Signing up
Developers sign for the tasks they are willing to work on. This practice
establishes a sense of ownership and resposibility. Signing Up is part
of the Scrum methodology.
User Interface Prototyping
The advantage of prototyping is that it clarifies the
functionality of the system, thereby pinpointing areas of risk
in the architecture, before a great deal of code has been written.
User Interface Prototyping can be done in a couple of ways: Throw-away
Prototyping means that the prototype will be used just as a way of
clarifying the requirements and workflows, and eventually discarded. Evolutionary Prototyping
means that the prototype will evolve into the final
product. There is a sharp distinction between Throw-away Prototyping
and Evolutionary Prototyping, and the decision to use one or the other
should be made early. The biggest mistake one often sees is a Throw-away
Prototype that looks so good on the surface that an attempt is made to shoe-horn it
into a product. The reason that a throw-away prototype takes so little time to develop is that no t
hought is given to issues of design and architecture; therefore using it as a basis for a production
system invites serious problems.
Top 10 Risks List
It is a good idea to maintain a list of the top 10 risks to the project, in order to make
sure they are addressed. This is an important part of the RUP methodology.