The Practices of Agile Modeling (AM) (original) (raw)

Agile Modeling (AM) defines a collection of core and supplementary practices, based on the principles of AM. Some of the practices have been adopted from extreme Programming (XP) and are well documented in Extreme Programming Explained. As with AM’s Principles, the practices are presented with a focus on modeling efforts so material adopted from XP may be presented in a different light.

The AM practices are organized into two lists, core practices that are highly recommended when taking an Agile Model Driven Development (AMDD) approach and supplementary practices that you should adopt as needed. There are also some really good ideas which you should consider adopting but which aren’t part of AMDD. There is a third list, deprecated practices which removed in the second release of the AMDD methodology in order to simplify it.

Core Practices Supplementary Practices
Active Stakeholder Participation Apply the Right Artifact(s) Collective Ownership Create Several Models in Parallel Create Simple Content Depict Models Simply Display Models Publicly Iterate to Another Artifact Model in Small Increments Model With Others Prove it With Code Single Source Information Use the Simplest Tools Apply Modeling Standards Apply Patterns Gently Discard Temporary Models Formalize Contract Models Update Only When It Hurts

Core Practices:

Supplementary Practices:

Really Good Ideas:

The following practices are complementary to AM but are not explicitly included as a part of it:

Practices Deprecated From Agile Modeling Version 1

To simplify AM, I chose to remove several practices in January of 2005. Although these are still valid ideas which are not going away, they won’t be considered “first order practices” anymore. I found over the years that as I training and mentored people in AMDD that I didn’t need to discuss them very much for people to understand the approach. The practices which I removed are:

v1 Practice Description Reason for Removal
Consider Testability When you are modeling you should be constantly asking yourself “How are we going to test this?” because if you can’t test the software that you are building you shouldn’t be building it. Modern software processes include testing and quality assurance activities throughout the entire lifecycle, and some even promote the concept of writing tests first before writing software (this is an XP practice). Although this is a great idea but when you’re taking a TDD approach, which most agilists do, along with an AMDD approach you find that this practice becomes moot.
Model To Communicate One reason to model is to communicate with people external to your team or to create a contract model. Because the customers for some models are outside your team, you may need to invest the time to make your model(s) look “pretty” by using electronic tools such as word processors, drawing packages or even sophisticated CASE tools. This is a great motivator for modeling, but not really a practice, therefore I deprecated it.
Model To Understand The most important application of modeling is to explore the problem space, to identify and analyze the requirements for the system, or to compare and contrast potential design alternatives to identify the potentially most simple solution that meets the requirements. Following this practice you often develop small, simple diagrams that focuses on one aspect of your software, such as the lifecycle of a class or the flow between screens, diagrams that you often throwaway once you are finished with them. I removed this for the same reasons that I removed modeling to communicate.
Reuse Existing Resources There is a wealth of information that agile modelers can take advantage from. For example, perhaps some analysis or design patterns are appropriate for you to apply gently to your system. Or perhaps you can take advantage of an existing enterprise requirements model, business process models, physical data models or even models of how systems are currently deployed within your user community. It’s true that these models either don’t exist or are out of date in many organizations, although you’re often likely to uncover reasonably accurate models with a bit of research. This is a great idea which all developers should practice, but it’s a general concept which goes beyond modeling and documentation.

Translations