[Unified Modeling Language](https://www.omg.org/spec/UML/) (UML) is a standard for creating [[software architecture diagrams]].
UML diagrams are supported by [Lucid Chart](https://www.lucidchart.com/pages/) and [draw.io](https://app.diagrams.net/). Implementations of UML that support the [[diagrams and documentation as code]] philosophy include [[PlantUML]] and [[c4builder]].
UML is less popular than it once was. It is considered too heavy for [[Agile]] development. Teams may use UML-style diagrams in whiteboard sessions for quick design and easy communication, so familiarity with UML can help you work with your team.
UML diagrams can describe
- [[class|classes]] in [[object oriented programming|OOP]]
- [[use case|use cases]]
- others (sequence, activity and state)
For a full list of diagrams and examples, see the [UML 2.5 Diagrams Overview](https://www.uml-diagrams.org/uml-25-diagrams.html).
## history of UML
UML was developed by the "three amigos", James Rumbaugh, Ivar Jacobson, and Grady Booch in the mid-90s after they were hired by Rational. UML was born from attempts at developing an object-oriented [[visual programming language]] in the 90s (another attempt at bringing the power of coding to a non-technical audience).
The original intent was to develop a diagramming language that could stand in for a programming language, but in the end was only used to document code after it has been written. However, visual programming was not suitable to developing software at meaningful scales[^1].
> [!Tip]- Additional Resources
> - [What is UML](https://www.uml.org/what-is-uml.htm)
[^1]: [[No Silver Bullet—Essence And Accident In Software Engineering]]