Natan Asrat
Linkedin: https://www.linkedin.com/in/natan-asrat
Online view: Notes from UML Distilled (Martin Fowler)
Last updated: Wednesday, September 10, 2025
Introduction
UML should be a lightning rod for our creativity as well as a laser for precisely specifying system blueprints so that third parties can bid and build those systems.
The three modes in which people use the UML:
- sketch (most common), blueprint, and programming language.
- Forward engineering draws a UML diagram before you write code, while reverse engineering builds a UML diagram from existing code in order to help understand it.
- Sketching in software is about selectivity:
- Forward sketching: Rough out key code/design issues to share ideas before coding. Short sessions guide hours or days of work.
- Reverse sketching: Use sketches to explain system parts, showing only the relevant classes or components.
- UML as blueprint is about completeness:
- Forward engineering: Designers create detailed models with all decisions laid out, so programmers just implement. Often done by senior developers.
- Reverse engineering: Blueprints document code in detail (paper or graphical), making every class easier to understand.
UML defines notation (graphical syntax) and a meta-model (formal definition of concepts).
UML Diagrams:
- Structure Diagrams:
- Class Diagram: Class, features, and relationships - UML 1
- Component Diagram: Structure and connections of components - UML 1
- Deployment Diagram: Deployment of artifacts to nodes - UML 1
- Composite Structure Diagram: Runtime decomposition of a class - UML 2
- Package Diagram: Compile-time hierarchic structure - UML 1 unofficial
- Object Diagram: Example configurations of instances - UML 1 unofficial
- Behavior Diagrams:
- Activity Diagram: Procedural and parallel behavior - UML 1
- Use Case Diagram: How users interact with a system - UML 1
- State Machine Diagram: How events change an object over its life - UML 1
- Interaction Diagrams
- Sequence Diagram: Interaction between objects; emphasis on sequence - UML 1
- Communication Diagram: Interaction between objects; emphasis on links - UML 1
- Interaction Overview Diagram: Mix of sequence and activity diagram - UML 2
- Timing Diagram: Interaction between objects; emphasis on timing - UML 2
Development Process
The UML can be used with any process.
The waterfall style breaks down a project based on activity. To build software, you have to do certain activities: requirements analysis, design, coding, and testing. Our 1-year project might thus have a 2-month analysis phase, followed by a 4-month design phase, followed by a 3-month coding phase, followed by a 3-month testing phase.
The iterative style breaks down a project by subsets of functionality. You might take a year and break it into 3-month iterations. In the first iteration, you'd take a quarter of the requirements and do the complete software life cycle for that quarter: analysis, design, code, and test. At the end of the first iteration, you'd have a system that does a quarter of the needed functionality. Then you'd do a second iteration so that at the end of 6 months, you'd have a system that does half the functionality.