The Context
I'm a programmer with 15+ years of experience. As a newbie programmer, I cut my teeth on visual modelling (UML & mind mapping). While it is probably hard for junior programmers to appreciate, there was a time - before Agile this and Scrum that - when UML was just as hot a topic as those two phenomena are these days.
Within my 15+ years as a programmer, I've programmed in 5 different programming languages; I've been on 3 "hardcore" Agile teams; I've been on at least a dozen "softcore" agile (little "a") teams; I've programmed as a one-man band for mom-and-pop shops; I've programmed for huge enterprise shops; I've programmed for my own home lab hobby projects. Throughout all of the above, I've both produced and consumed a lot of UML diagrams.
I'm currently on an internationally-distributed team. I was recently assigned the task of producing visual models of the structures specified by an already-existing design; structures of one subsystem of a larger supersystem. In one of the team's daily stand-ups - 2 days before the end of the sprint - the scrum master asked me, "...when will the visual models for subsystem X be finished...?". To which, I replied, rhetorically, "...when is a visual model ever finished?"
One of the more switched-on members of the team could tell that I was starting to launch into that classical debate about the futility and wastefulness of perfecting any diagram to the umpteenth degree; since the source code, from which you're reverse engineering, is constantly changing. The other members of the team owe her a big thanks for sparing them from a two hour-long stand-up. I certainly thank her; for inspiring me to post my first-ever blog. She suggested to me, "...why don't you discuss it offline...".
The Subtext
Hopefully, it is obvious from the context what my position is on visual modelling and Agile development processes. In case it isn't obvious, I'll spell it out: I am pro visual modelling! I am pro Agile! The reason that is not an oxymoron, is this: I am a religious fanatic about neither one of them! A lot of things that I say in this post will probably seem contradictory to a lot of people if they can't grok that underlying subtext.
The Point
The point that I started making in that stand-up meeting that day, is: a visual model is finished when it communicates, sufficiently enough, whatever the modeler set out to communicate; when it communicates, simply enough, for the viewers of the model to understand it; when it communicates, comprehensively enough, for the viewers to get some practical use out of it. At the point in time I was asked that question, I was confident that - if they were for me only - or, more likely, for programmers with similar exposure to UML as me - the models I'd produced met all of the above "enough" criteria.
The Answer(s)
Now, were they finished to the point where you could generate a working application from them? No. That's a horse of a different color. And a drop date of another month. Were they finished to the point where you could publish them in a User Guide and have all the end-users make sense of them? Not yet, but give me another two weeks. Were they finished to the point where they would survive the scrutiny of a Capability Maturity Model audit and pass with flying colors? After only 2 hours of modelling? Be for real! Were they finished to the point where we can tick off the box that says, "Some Pretty Visual Models Shall Be Created"? You bet! Your contractually obligated models are all ready for you, Ma'am! Sign here, please?
The Finished Line
Of all of the many programming projects I've worked on in which UML was used, the projects that used UML most successfully (with the most agility) had one thing in common: somebody - before the modelling effort even began - established a "finished line" for the models being produced. That "finished line" criteria answered questions like, "what type of diagrams should be created (class? sequence? state?)", "what level of detail needs to be shown?", "who are the models for? for me only? for Pavel, Андрей, Konstantin and all the other offshore teammates in Ukraine who hate UML with a passion?", "are the models expected to be updated with the source code or not (both can be successful; believe it or not)"?, "for what purpose will the models be used"? Without a "finished line", guess what happens. You never finish! You run around in circles until you either get bored (been there) or die of exhaustion!
More often, though, the "finished line" has been determined by "the bottom line". How much is "The Customer" (the entity signing the checks) prepared to pay for all those pretty boxes, lines and arrows? Just be careful what you ask for though, Customer; because you might get it! Caveat Emptor!