Agile Modeling Home Page

Where Do I Start?

Scott W. Ambler Home Page
Agile Modeling The first thing to do is read An Introduction to Agile Modeling to gain an understanding of the basic concepts. Regardless of your role, you should actively strive to keep your approach to modeling as collaborative and simple as possible.  Recognize that you only need to create models which are just good enough for your task at hand -- models don't need to be perfect (they never are) nor do they need to be complete, they just need to fulfill the needs of their audience right now.  Model with others whenever possible, in particular the audience for your model, to ensure that you understand their needs.  Of course, you should read and try to adopt as many of the principles and practices of AM as you can and should try to ease into AM gradually.  

 

My specific advice for the major roles on software development projects follows: 

 

I'm an Architect...

To understand how architecture changes within an agile environment:

  1. High-level, initial architecture envisioning should be done at the beginning of a project.  The goal is to identify a potential architectural solution, not to document the details, typically using simple techniques such as free-form diagrams on plain-old whiteboards (POWs).  This effort typically takes several hours or days.
  2. All architectures work on POWs, therefore you need to prove it with code.
  3. The details are modeled on a just-in-time basis in model storming sessions, and then coded immediately afterwards.
  4. Your architecture will evolve over time as you learn more about what your stakeholders need built.
  5. Because systems are complex, effective architects understand how to apply a wide range of modeling techniques.
  6. Architects should be active participants on the project team, and ideally should also code.
  7. Read Agile Architecture Modeling for more details.
  8. The best architects are generalizing specialists who have one or more specialties (e.g. architecture), a broad understanding of IT, and a good understanding of the domain which they work in.

 

I'm a Data Professional...

The Agile Data site focuses on exactly this topic.

 

I'm a Designer...

To understand how design changes within an agile environment:

  1. Over the first couple of days a high-level, initial architecture model is created using simple techniques such as free-form diagrams on plain-old whiteboards (POWs).
  2. Recognize that the concept of a "design phase" has been abandoned for the concept that you need to model throughout a project.  Instead, your design emerges over time to reflect the fact that requirements change over time.
  3. Because systems are complex, effective designers understand how to apply a wide range of modeling techniques.
  4. The details are modeled on a just-in-time basis in model storming sessions, and then coded immediately afterwards.
  5. The quality of your application design is kept high via refactoring, a programming technique.
  6. The quality of your database design is kept high via database refactoring.
  7. The best designers are generalizing specialists who have one or more specialties (e.g. design), a broad understanding of IT, and a good understanding of the domain which they work in.

 

I'm an Enterprise Architect...

To understand how enterprise architecture changes within an agile environment:

  1. Your goal should be to promote consistent, proven architectural practices and strategies amongst development teams.
  2. Start by developing a vision, then get involved with development teams and work with them as part of the team to help them work to that vision.  Over time you'll develop architectural documentation, but don't invest much time at first because the teams need vision and help from you, not mounds of documentation.
  3. The most important thing your enterprise architecture group can provide to teams is actual help to follow the enterprise vision.  The next most important things are working examples (reference architectures) and practical guidance (standards and guidelines) for building systems.
  4. Your enterprise architecture will evolve over time as you work with the project teams, because you'll learn what works in practice and what the developers actually need.
  5. The best enterprise architects are generalizing specialists who have one or more specialties, a broad understanding of IT, and a good understanding of the domain in which they work.

 

I'm a Programmer...

To understand the relationship between AM and programming:

  1. The primary advantage of modeling is that it provides one way for you to think before you build something. You can draw a sketch on a whiteboard or in a modeling tool to think something through and the once you have a viable strategy then you can prove your model with code.
  2. Whenever you run into a requirement you don't understand, perhaps you have a new user story to implement or the requirement simply isn't clear, then you can model storm with your stakeholder(s) on a just-in-time (JIT) manner to get the details that you need.
  3. Whenever you run into a technical issue, perhaps you're not sure which strategy to implement something is best suited for your current architecture, or perhaps you simply need to think through the high-level design before you get into coding, then you should model storm with a co-worker(s) (often your pair if you're pair programming) to think it through first.
  4. You don't need a big design document written up before you write your code, and you don't even need a lot of details, you just need to create models which are just barely good enough for your situation.
  5. I highly suggest that you take a test-driven development (TDD) approach, as I indicate in the AMDD article, and pair program whenever possible.

 

I'm a Project Manager...

To understand the relationship between AM and project management:

  1. You will likely need to schedule initial envisioning sessions at the beginning of the project.
  2. Organize your project into short iterations.  The functionality that you implement in each iteration should be the highest priority functionality, as defined by your stakeholders, at the time.  The requirements stack changes throughout the project, so don't invest much time planning ahead because you'll only need to do a lot of updating.
  3. The best people to estimate something are the people building it, and they might need to do a little bit of modeling to understand the feature that they're estimating. 
  4. Modeling isn't a task that you schedule, it's an activity that people do on a just-in-time (JIT) basis throughout the project.
  5. You'll discover that model reviews (requirement, architecture, ...) really don't provide a lot of value on agile projects, so expect to discover that you don't need them after awhile (if at all).

 

I'm a QA/Test Professional...

To understand the relationship between AM and validation activities:

  1. Agile models evolve over time and they are just good enough for the task at hand.  The implication is that it's unlikely that you'll have a "complete" model to review, except at the end of the project.
  2. Because Agile Modelers work incrementally and prove it with code whenever they can you'll have working software to validate very quickly, so reviewing models really does become busy work.  Everything works on a whiteboard, or in a CASE tool, but not always in code.  Focus on the code.

 

I'm a Requirements Analyst...

 To understand how requirements analysis changes within an agile environment:

  1. High-level, initial requirements envisioning should be done at the beginning of a project.  This effort takes days, not weeks or months.  Your goal is to understand the scope, not to get the details.
  2. Ideally the details are modeled, analyzed if you will, on a just-in-time basis in model storming sessions.
  3. Recognize that the concept of a "requirements phase" has been abandoned for the concept that you need to do requirements analysis throughout the project.
  4. Requirements will change over time, and that's perfectly ok.  Manage them as a prioritized, evolving stack.
  5. Stakeholders actively participate in the modeling effort, so adopt inclusive modeling techniques which enable them to do so.
  6. Because systems are complex, effective requirements analysts understand how to apply a wide range of modeling techniques.
  7. The goal is to understand the requirements, not to write requirements documentation. If you do write documentation, keep it concise and useful for your audience and strive to single source information as much as possible.
  8. Recognize that you have a wide range of models at your disposal.
  9. Model with developers so that they understand what the requirements are and you understand what they're trying to build.\
  10. The best requirements analysts are generalizing specialists who have one or more specialties (e.g. requirements elicitation), a broad understanding of IT, and a good understanding of the domain which they work in.

 

I'm a Senior Manager...

To be honest, you're likely hard to convince that AM is a good idea, and you're likely right to be skeptical -- just be open minded as well.  Here's a few important concepts that you need to understand:

  1. Modeling and documentation are important aspects of agile software development.  The main difference between agile and traditional approaches are that we strive to maximize stakeholder ROI and therefore we focus on remaining as lean and effective as possible.
  2. Your primary goal should be to develop working software, modeling and documentation should be secondary to that.
  3. There is no co-relation between documentation and project success, and in fact lots of arguably unnecessary documentation seems to be associated with project failure.  Ever had a well defined requirements document in place, but the developers built something else?  Or an architecture model in place, but the programmers ignored it?  What you really want to strive for is sufficient documentation that is just barely good enough for your situation.
  4. Creating a large, well-defined requirements document which is reviewed and accepted early in the project lifecycle is a very risky and ineffective way to work.  Requirements change for very good reasons, so you should adopt techniques which enable you to embrace change.  Agilists manage requirements as a prioritized stack, each iteration they pull the highest priority requirements (as defined by their stakeholders) off the top of the stack and work on them.  The end result is that stakeholders have complete control over what gets developed and how much money gets spent on it (they simply stop funding the project once they're happy with what's been produced to date).  In short, with agile you get to see regular progress in the form of working software, and you get the highest value possible for your investment.
  5. You do need some documentation, just nowhere near as much as you think, and the documentation that does get produced should be concise and contain only information that couldn't be captured effectively in the source code.  Strive to single source information.
  6. The best developers are generalizing specialists who have one or more specialties, a broad knowledge of development, and a good understanding of the domain.  Teams made up of specialists can struggle to work together effectively because they don't understand what each other is doing, and have a tendency to create lots of extra documentation because their skills are too narrow to allow them to capture information in the most appropriate manner.
  7. There's sufficient anecdotal evidence, and even research evidence, showing that agile software development is a good idea.  If you have several projects to do, and you're struggling to succeed using your existing approaches, doesn't it make sense to at least run an agile pilot project to see if agile works in your environment?

 

I'm a Stakeholder...

In AM stakeholders, and in particular their active participation as team members, are a critical factor to the success of a project.  You need to understand:

  1. The rights and responsibilities of everyone on the project.
  2. The basics of AM by reading An Introduction to Agile Modeling.
  3. How you can be an active participant in the modeling efforts through adoption of inclusive modeling techniques.
  4. Recognize that it's ok for you to change your mind, because we manage requirements as a prioritized stack.

 

 

Recommended Resources 

The Object Primer 3rd Edition: Agile Model Driven Development (AMDD) with UML 2   The Object Primer 3rd Edition: Agile Model Driven Development with UML 2 is an important reference book for agile modelers, describing how to develop 35 types of agile models including all 13 UML 2 diagrams.  Furthermore, this book describes the techniques of the Full Lifecycle Object Oriented Testing (FLOOT) methodology to give you the fundamental testing skills which you require to succeed at agile software development.  The book also shows how to move from your agile models to source code (Java examples are provided) as well as how to succeed at implementation techniques such as refactoring and test-driven development (TDD).  The Object Primer also includes a chapter overviewing the critical database development techniques (database refactoring, object/relational mapping, legacy analysis, and database access coding) from my award-winning Agile Database Techniques book.
Agile Modeling   Agile Modeling: Effective Practices for Extreme Programming and the Unified Process is the seminal book describing how agile software developers approach modeling and documentation.  It describes principles and practices which you can tailor into your existing software process, such as XP, the Rational Unified Process (RUP), or the Agile Unified Process (AUP), to streamline your modeling and documentation efforts.  Modeling and documentation are important aspects of any software project, including agile projects, and this book describes in detail how to elicit requirements, architect, and then design your system in an agile manner.
Elements of UML 2.0 Style   The Elements of UML 2.0 Style describes a collection of standards, conventions, and guidelines for creating effective UML diagrams. They are based on sound, proven software engineering principles that lead to diagrams that are easier to understand and work with.  These conventions exist as a collection of simple, concise guidelines that if applied consistently, represent an important first step in increasing your productivity as a modeler.  This book is oriented towards intermediate to advanced UML modelers, although there are numerous examples throughout the book it would not be a good way to learn the UML (instead, consider The Object Primer).  The book is a brief 188 pages long and is conveniently pocket-sized so it's easy to carry around.

 

Let Me Help

I actively work with clients around the world to improve their information technology (IT) practices as both a mentor/coach and trainer.  A full description of what I do, and how to contact me, can be found here

 


Canadian Flag

Copyright 2005-2007 Scott W. Ambler

Last updated: March 3, 2007
This site owned by
Ambysoft Inc.

Agile Data (AD)  |  Agile Unified Process (AUP)  |  Enterprise Unified Process (EUP)  |  My Writings