When people ask me my take on model-driven approaches, I think of two ends of the spectrum — human and the machine.
Model for Humans
For humans, I find using a whiteboard (whiteboard modeling) works well — it’s universal.
Model for Machines
For machines, I find speaking closer to the code is a good thing and design is rarely a clean model.
Model to Learn
I’ve found modeling more useful when you throw it away — it’s a learning tool. Model so you get it, then go to it. I think the key is that the model is a map, not the actual territory. The usefulness of a map is actually decoupling from the complexity and creating a simpler lens.
Model to Share
I think the real value of models is when you create a way to share the problem or solution in a simplified way. This helps for sharing a vision of the end in mind, as well as getting more sustained thinking around the problem.
I’ve never experienced an effective modeling approach that turns visuals of systems into code, where the model doesn’t get in the way. At some point, the model stops being useful for humans or stops being useful to the machine. As a result, I’ve never really been a fan of model-driven approaches that are coupled to code in practice, although they’re always interesting in theory. While I’m open to the idea, I just haven’t seen it. Am I missing out?
Effective Modeling for Shaping Software
While I’m not a fan of most visual modeling tools, there’s some very real modeling approaches I find to be effective (which is more about modeling for the humans to understand what matters.)
I find that light-weight, human-oriented models are particularly effective for shaping software around quality attributes. For example:
- Performance. For performance design, I’ve found Performance Modeling to be effective.
- Security. For security design, I’ve found Threat Modeling to be effective.
- Reliability. For reliability design, I’ve found Fault-tree modeling to be effective.
You Might Also Like
Agile Architecture Method
Agile Life-Cycle Frame
Agile Performance Engineering
Agile Security Engineering
ALM Categories at a Glance
Baking Performance into the Life Cycle
Extreme Programming at a Glance
Scrum at a Glance
Software Methodologies at a Glance
Software Performance Frame
Software Performance Hot Spots
Software Performance Inspections
Waterfall to Agile
What is Agile?