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.