In the Autumn of 2000 when work first began on what was to become the Agile Modeling (AM) methodology we focused on defining a collection of values, principles, and practices for modeling and documentation on software development initiatives. The principles and practices were fairly granular, describing what you do in during the acts of modeling and documentation. Although valuable, many people found these principles and practices to be too difficult to understand, because of their granularity but also because of their vagueness. Then in 2003 the Agile Model Driven Development (AMDD) lifecycle began to coalesce to describe when modeling occurs on initiatives, such as architectural envisioning and requirements envisioning at the beginning of an initiative or model storming on a just-in-time (JIT) basis throughout the effort. This in turn revealed higher level AMDD “best practices“, overviewed in the pattern language map of Figure 1.
The core practices of AMDD are:
- Active Stakeholder Participation. Stakeholders should provide information in a timely manner, make decisions in a timely manner, and be as actively involved in the development process through the use of inclusive tools and techniques.
- Architecture Envisioning. At the beginning of an agile initiative you will need to do some initial, high-level architectural modeling to identify a viable technical strategy for your solution.
- Document Continuously. Write deliverable documentation throughout the lifecycle in parallel to the creation of the rest of the solution.
- Document Late. Write deliverable documentation as late as possible, avoiding speculative ideas that are likely to change in favor of stable information.
- Executable Specifications. Specify requirements in the form of executable “customer tests“, and your design as executable developer tests, instead of non-executable “static” documentation.
- Iteration Modeling. At the beginning of each iteration you will do a bit of modeling as part of your iteration planning activities.
- Just Barely Good Enough (JBGE) artifacts. A model or document needs to be sufficient for the situation at hand and no more.
- Look Ahead Modeling. Sometimes requirements that are nearing the top of your priority stack are fairly complex, motivating you to invest some effort to explore them before they’re popped off the top of the work item stack so as to reduce overall risk.
- Model Storming. Throughout an iteration you will model storm on a just-in-time (JIT) basis for a few minutes to explore the details behind a requirement or to think through a design issue.
- Multiple Models. Each type of model has it’s strengths and weaknesses. An effective developer will need a range of models in their intellectual tool kit enabling them to apply the right model in the most appropriate manner for the situation at hand.
- Prioritized Requirements. Agile teams implement requirements in priority order, as defined by their stakeholders, so as to provide the greatest return on investment (ROI) possible.
- Requirements Envisioning. At the beginning of an agile initiative you will need to invest some time to identify the scope of the effort and to create the initial prioritized stack of requirements.
- Single Source Information. Strive to capture information in one place and one place only.
- Test-Driven Design (TDD). Write a single test, either at the requirements or design level, and then just enough code to fulfill that test. TDD is a JIT approach to detailed requirements specification and a confirmatory approach to testing.