Modeling

The act of creating or evolving a model, which is an abstract representation of physical reality.


Modeling is perhaps the most difficult but productive step in a typical software project. Before modeling comes the analysis. Afterwards comes implementation. Modeling translates the verbage of analysis into the intentions of behavior. If this is done well the entire project is far more likely to be succesful. Implementation will be easier, quality will be higher, reuse will be higher, extendibility will be higher, and the project will be more predictable. This sort of thing doesn't happen at the code level, it happens in modeling.

The problem is modeling is an art. It doesn't come intutively, especially if you have a procedural background or don't handle concepts well in a visual form. Modeling requires much creativity, concentration, discipline, experience and a deep storehouse of related knowledge. Some feel it requires a certain innate ability to manipulate visual abstractions. Others feel it requires exposure to certain things in childhood. All this implies only a small percentage of engineers can become good modelers.

Procedure

My opinion is modeling is just another skill that can be acquired through study and practice. Modeling is really a problem solving technique focusing on correct abstract representation of the problem or solution. At the highest level of abstraction, modeling follows these steps:

  1. Define what you are representing in general, such as "The persistence system."
  2. Identify the key ways that system will interface with other systems.
  3. Identify the main areas of system behavior, aka responsibilities.
  4. Congeal these into the main elements.
  5. Determine the relationships between elements. You now have the core of the model.
  6. Gradually add more detail until the representation is sufficiently complete.

In a large system elements should be organized into a hierarchy of partitions, with leaf elements in the bottom partitions. Partitions have relationships and within each partition the elements have relatinoships. The topmost set of partitions is your architecture.

Modeling is to software as speech is to civilization.