The Register® — Biting the hand that feeds IT

Feeds

Telltale signs your model is stuck

Analysis paralysis: part two

Magic Quadrant for Enterprise Backup/Recovery

Teams can get stuck wallowing in trivial details when modeling in UML. Sweating such details can lead to frustration and premature, and rash, decisions on using UML later in a project. But how do you know when a particular nuance is inconsequential and when it's an important item to specify?

You learn to recognize the signs of analysis paralysis - aside from the obvious one, that no progress is being made: the team is having a profound philosophical discussion around the whiteboard, and it has virtually nothing to do with the project, and virtually everything to do with splitting hairs. The line from the Gershwin classic on "tomato" versus "tom-ah-to" sums up these debates pretty well.

It's understandable that people spend ages arguing over the finer details, because most UML books describe each part of the notation with equal weight. You might see a description of dependencies between packages - not terribly important, except maybe as a high-level overview - right next to a description of relationships between classes.

One rule of thumb is: will it affect the source code that falls out of the end of the design process? If you use <<precedes>> instead of the <<invokes>> stereotype to link up your use cases, will the code - or the unit tests, or the test specs - be any different? Answer: Almost certainly not.

Similarly, modeling the dependencies between packages will have absolutely no effect whatsoever on the resultant source code. It's also debatable whether it would add any value to your documentation. However, modeling the relationships between classes definitely will affect the source code - especially if you're generating code directly from the model.

Another rule of thumb: is the distinction less about the semantics of your problem domain or design, and more about the semantics of the modeling language? If so, the distinction probably isn't an important one.

And finally: are you worrying about finer details at the wrong stage? For example, debating the multiplicity between domain objects before you've even begun to think about the design, or debating too early - when the domain model is only just emerging, all wide-eyed and blinking in its innocence, from the customer's subconscious - whether two real-world domain objects should be connected with aggregation or composition. When teams discuss this stuff too early, you end up with some deep discussions that border on philosophy and existentialism: is object A object B's keeper? If A pings out of existence, what happens to B? Is an A without its B really an A? And so on.

In the song, the tomato versus tom-ah-to impasse produces the exasperated cry of: "Let's call the whole thing off!". This is pretty much what people decide to do with UML after they have wasted time and effort getting into the not-very-important and extremely arcane aspects of modeling.

And that's a shame, because they miss out on all the useful, pragmatic aspects such as allocating behavior, eliminating ambiguity in your requirements descriptions, and identifying code "hot spots" ripe for unit and functional testing.

Analysis paralysis is an insidious beast that pounces when you have disagreements over issues that seem important and takes things off track. Keep an eye out for this creature's tell tale signs, and you'll quickly start to recognize when your project is spinning its wheels over non-issues.®

Matt Stephens has co-authored Use Case Driven Object Modeling with UML: Theory and Practice, which illustrates how to step nimbly from use cases to code while avoiding the dreaded analysis paralysis.

What you need to know about cloud backup

Latest Comments

UML doesn't bullshit - people do

Curtis - it's almost a fair point, but it's not UML per se that's BS. It's just that UML and the software modelling industry in general attract more than their fair share of bullshitters and snake oil salesmen.

If you've never seen it used well, you're naturally going to diss it.

But if you truly have any better suggestions for managing and architecting large software products, which is how I make my living, then I'm all ears. If you're selling something better I'll even make time to listen to your presentation. Can't say fairer than that.

0
0

OK Curtis, I'll bite

UML is merely a notation, using which a design may be formulated, recorded, amended and communicated. It's just as possible to produce a rambling incoherent mess using UML as it is when posting comments on here.

I agree with Evil Graham, this series of articles is thought provoking and seems to make a lot of sense - well, enough to have convinced me to buy the book anyway. ;¬)

0
0

made my day

You do an excellent job of demonstrating that UML is philosophical BS substituting for design.

0
0

More from The Register

Nuke plants to rely on PDP-11 code UNTIL 2050!
Programmers and their walking sticks converge in Canada
Bjarne Again: Hallelujah for C++
Plus: Now officially OK to admit you never used STL algorithms
Interwebs taunt Sir Jony over Apple eye candy makeover
Hey Ive, Ive... add more unicorns, willya?
SCO vs. IBM battle resumes over ownership of Unix
Zombie lawsuit back and wants to suck the brains out of Linux
Red Hat to ditch MySQL for MariaDB in RHEL 7
So long, Oracle! Don't let the door hit you on the way out
Shy? Socially inadequate? Fiddling with your phone could help
App 'tells the brutal truth' about social inadequates' chatup lines
Java EE 7 melds HTML5 with enterprise apps
New release arrives with GlassFish, NetBeans support
 breaking news
'Office Facebook' firm Tibbr wants you to PAY for mobe-meetings app
Great idea. Punters won't cough for it though
 breaking news
PM Cameron calls for modern, programmable computers! (We think)
IT education musings to G8 chiefs to mystify IT industry
Apple at WWDC: Sleek new iOS, death of the big cats, pint-sized Mac Pro
CEO Cook: 'The biggest change to iOS since the introduction of the iPhone'