I'm spending a lot of time today running some *slow* build scripts and FitNesse tests, so I've got time to throw this out. In my last post I linked to an article by Robert Glass that more or less called into question the usefulness of UML.
Martin Fowler covers the issues around UML on his bliki here.
I still quite happily use UML in the UmlAsSketch mode, but not nearly as much as I did 4-5 years ago. I've always claimed that I can teach you everything you really need to know to use UML in 15 minutes (you can just park that "Aggregation vs Composition" argument right next to "Camaro vs Mustang" in the useless bin). Don't let the length of the bullets below fool you, I do think UML is useful.
Yes
- It's still the de facto industry markup for describing code
- It is useful for communicating designs
- Most software design books use UML notations to describe design concepts. Learning UML will help you get more out of the existing literature on UML.
- I like to use it as a "manipulative," a tangible artifact as a thinking aid when working through a design
- It's a useful tool in your design toolbox
No
- Not every, and maybe not even a majority, of developers find UML to be useful or understandable. I've simply worked with too many effective developers who do not use UML to consider it necessary. The effectiveness of UML as a means of communicating a design is essentially eliminated if most of the team doesn't understand UML.
- UML seems to work best for people that have a visual/kinetic learning style, and not everybody has that learning style
- There's a point of diminishing returns with creating UML diagrams upfront. Exceeding that point, and I think it comes fast, is just plain inefficient
- A fancy looking UML diagram can easily create a false sense of security about a design, leading a team to keep right on chugging down a bad path. Taking a page out of Scott Ambler's Agile Modeling book, you need to Travel Light and be prepared to challenge or chuck the existing UML diagrams at any time. I still love the old Bertrand Meyer quote - "Bubbles don't crash."
- Executable UML: Pipe dream. Maybe graphical DSL's will take off and be the bee's knees (I'm dubious on that score as well). The idea of Executable UML with reams of OCL adornment being a more efficient means of producing software makes me say - "I'm from Missouri, and you're gonna have to show me"
- UML as a design heuristic. I don't really find UML to be all that useful as a means of creating a design in the first place. I tend to scoff at things like ICONIX that are a prescriptive modeling approach to design (draw these x diagrams in this order and a workable design magically pops out the back). I'm fully prepared to believe these methods work for their originators but I'm extremely doubtful that these methods are universally applicable.
