1 - Introduction
This talk is probably going to be different from most of the talks you've attended before. Before I get started I'd like to make everybody is aware that this talk is going to contain some satire. By its nature, being based on Alice in Wonderland, which is one of the great satirical works of all time, it pretty much has to. So, if you're easily offended by satirical humor, this talk might not be for you.
I'm using satire in this talk to point out a few things about current software development practices that seem like, while they may have started off from good ideas and may still contain some good ideas, but that have acquired a significant amount of momentum in some directions that might be counterproductive. At least, they seem that way to me.
In fact, having been involved with software development in one form or another for the better part of the last 30 years, and having spent most of the last 10 of those years teaching OO analysis and design, there's some stuff going on these days that seems downright strange to me. Hence the subtitle "it's not as surreal as you might think". We're going to be talking about things like "code smells" and "designs that figure themselves out from the code" a little later on, and I'd like to make sure everybody knowsI'm not making most of this stuff up. I read a posting on a newsgroup awhile ago that said "a little forethought can add a lot of work because forethought uses imaginary feedback to keep it on track". This is the first time I've ever heard someone postulate that thinking was harmful in software development.
So, Alice and I are attempting to use humor to point out what we perceive to be the risks of some of these practices, And at the same time, we're also making some serious points.
So, here goes.The presentation is in 3 parts.
In Part 1 - Alice, intrigued by the benefits of use case driven development, enters use case land and encounters the dangers of analysis paralysis.
In Part 2, seeking to avoid analysis paralysis, Alice meets some XtremelyCuriousCharacters and encounters the dangers of skipping analysis.
Finally, in Part 3 - Alice
wakes up and finds a minimal yet sufficient approach to development
that avoids analysis paralysis without skipping analysis
2 - Part 1
Use case driven development as a paradigm of software engineering was pioneered in Sweden during the late 1980s at Ericsson Corporation and was introduced to the world in Ivar Jacobson's book on Object Oriented Software Engineering around 1991. From that moment forward, nearly every development approach began to claim the attribute of being "use case driven", because the benefits of driving software designs from well-understood user requirements seemed so obvious.
As the use case buzzword spread, many variants appeared, and much debate ensued over how best to approach use case driven development. Many of those who claimed to be use case driven were not doing anything remotely similar to what Jacobson and his team had proposed (and already used in practice on an extremely large project), but instead, they just tacked use cases on to the front end of whatever they were already doing.
Still others made use cases an end goal in themselves, rather than a means towards the end goal of driving software designs from user requirements.
As a result, many so called "use case driven" approaches led projects into analysis paralysis, and to the common phenomenon of "thrashing" with use cases.
So now, let's join Alice as she enters use case land
3 - Alice Falls Asleep while reading
Alice was beginning to get
very tired while sitting in the big chair reading. The
book she was reading was good, and it certainly had an interesting premisethat intriguing notion that software designs could be driven from detailed descriptions of usage scenarios.
But the book was over 500 pages long, and didn't contain many pictures, at that.and oh, how sleepy she was getting. And before long, she nodded off.....
4 - The Promise of Use Case Driven Development
As she slept, Alice dreamed of a simple yet elegant development process where first, everyone made their best effort to make sure the requirements were complete and well-understood, then a design was constructed to meet those requirements, then the system was built, and tested against those very same, written, behavioral requirements to make sure the customers got what they wanted.
"Goodness" said Alice. A simple, straightforward, step-by-step development process that actually makes sense! I wonder why nobody thought of this before" she said.
"It's really such a clever idea!" said Alice to herself.. "It's like writing the user manual first, with a few extra details, and then designing the software to match the user's requirements", she said.
5 - An analysis model links use case text with objects
Right at the center of the use case driven development process was a clever little technique called robustness analysis that seemed to link everything else together and make the whole use case driven modeling process work. But Alice, who had been spending lots of time reading books about UML, had mysteriously never encountered this technique before.
Alice saw how software structure
and user interface design could all be linked to a simple and
clear expression of the behavioral requirements of the system.
"It all seems so intuitive and obvious" she said. "But I'm certain that I read all 32 Chapters and 482 pages of the UML User Guide, and it's never mentioned, not even in the chapter on stereotypes. Whatever could have possessed them to leave this out?" she wondered. "And how can they claim to be use case driven without it?" she asked.
6 - Simple and straightforward
"So, let's see" said Alice. "Use cases describe a dynamic view of system behavior, while classes and objects are about static structure" she said. "And this robustness diagram links the dynamic behavioral requirements directly to the software structure by forcing the analysts to reference objects by name right in the use case text. I wonder if that's what "use case driven" really means, because the software structure can be directly driven from the behavioral requirements" said the clever little Alice.
"It certainly seems to make sense to link the static and dynamic parts of the object model together much more sense than to keep the software structure isolated from the behavior descriptions", she mused, "but it doesn't seem very close to code, yet" she said, and she began to follow the path she was on deeper into use case land.
7 - <<includes>> or <<extends>>
As Alice walked down the
path, she came upon two men who kept hitting each
other over the head with sticks, arguing violently over something. Alice stopped and stared at the fat little men until they noticed her and stopped fighting. Everyone was quiet for a while. Then Alice asked, "What were you fighting about?" But Tweedledum and Tweedledee just looked at each other and grinned.
So Alice asked, politely,
"Would you kindly tell me the best way to get
from use cases to code? It's getting late, and soon everyone will want to
start coding." But Tweedledum and Tweedledee started arguing and fighting again, and soon they were going round and round about nothing at all.
One of them cried out, "The extending use case overrides sections of the extended use case, so when the extended use case changes, all of the extending use cases can inherit the changes without modification!", and the other yelled, "Extends informs the developer that the integration between use cases is one to one, but includes informs the developer that integration is one to many !"
On and on they went, jumping
and shouting and hitting each other, and
ignoring poor Alice completely. After a time, she gave up, shook her head
in puzzlement, and started down the path again to try to find out how to
get from use cases to code.
8 - We're late! We have to start coding!
Alice kept walking until suddenly a large white rabbit rushed past, stopped suddenly in front of her, turned in a circle 3 times, and shouted "We're late! We're late! We have to start coding IMMEDIATELY! The Duchess will be FURIOUS!".
"Whatever are you doing?", Alice asked. "ITERATING!" said the rabbit, and began to spin around again. "Stop!" said Alice. "Doesn't all that iterating make you dizzy?" she asked. "And can you please tell me how to get from use cases to code?"
"Use Cases?" shouted the rabbit. "There's no time for use cases, it's LATE and we have to start coding", he said, and off he rushed. "No use cases?", said Alice. "I wonder how they know what they're supposed to code, without any requirements about how the system is supposed to behave" she said.
"Curiouser and Curiouser" said Alice, and then she continued down the path.
9 - Alice wonders how to get from use cases to code...
"Oh, how I wish I could find a straightforward way to get from use cases to code", thought Alice, who didn't quite know what to make of the rabbit. "It all makes sense up through the analysis model, but it still seems quite a trick to turn behavioral requirements into software designs", she thought.
"It's all very well to identify some objects and identify some behavior, but how do you figure out which objects perform which bits of behavior?" she wondered. "Maybe the answer is waiting down the path" she said to herself, hopefully.
10 - Abstract...essential
Alice kept walking down the path and soon came upon a Cheshire Cat sitting in a tree. "Excuse me", Alice asked the Cat, "can you tell me how to get from use cases to code?". The Cat grinned, and began to repeat the words "essential, abstract, technology-free, and implementation-independent", but suddenly, as it did so, it began to fade slowly away....
11 - A little too abstract?
Alice watched the cat fading away until nothing was left but the grin, but the cat's mouth continued to repeat the words "essential, abstract, technology-free, and implementation-independent", even as it disappeared.
Alice was quite startled
by the cat's disappearance. "I've seen a cat without a grin,
but I've never seen a grin without a cat before" she said,
shaking her head slowly.. But I can't possibly see how this is
going to help me get from use cases to code. This is just so abstract
that there doesn't seem to be enough detail there to build a design
from", she said, and walked on.
12 - Teleocentricity......
Alice soon came upon an enormous caterpillar, sitting on a giant mushroom, and smoking a hookah. "Hello" said Alice to the caterpillar. "You look very wise indeed, sir, do you think you could possibly help me find out how to get from use cases to code?"
"Who are you?" asked the caterpillar, in a sleepy voice, "And why do you want to get to code?" "My name is Alice, thank you very much for asking, sir" said Alice, "and I want to get to code because if I don't, someone is likely to come along and cancel my project, and whatever will I do then, don't you see?"
"I do NOT see"
said the caterpillar. "We define an essential use case as:
a single, discrete, complete, meaningful, and well-defined task of interest to an external user in some specific role or roles in relationship to a system, comprising the user intentions and system responsibilities in the course of accomplishing that task, described in abstract, technology-free, implementation-independent terms using the language of the application domain and of external users in role" he said, and inhaled an enormous quanity of smoke from the hookah.
"We were not alone in recognizing the need for such a teleocentric ("purpose-centered") approach to use case modeling and for a move toward abstraction in use case construction" he added, after a time.
"Oh, but all these 5 syllable words do make my head spin", I wish you could put it more clearly", said Alice.
The caterpillar just sat there, smoking, and after a time, Alice began to feel quite vexed. 'Shouldn't use cases be easy to understand?' she asked the Caterpillar. 'Doesn't it make more sense to just say 'the user does this and the system does that,' instead of rambling on about 'abstract, essential, teleocentricity' and so on?', she asked. "All these buzzwords make me feel very small, indeed", she said, impatiently.
"Keep your temper"
said the Caterpillar, "You'll get used to it, in time";
and it put the hookah into it's mouth and began smoking again.
Alice waited, not sure exactly what she should do. In a minute
or two the Caterpillar took the hookah out of it's mouth and yawned
once or twice, and shook itself. Then it got down off the mushroom
and crawled away into the
grass, remarking, as it went, "taste the mushroom if you're feeling small".
13 - Are we really supposed to specify ALL this for EVERY use case?
Alice wondered whether it would be a very good idea to taste the mushroom as the caterpillar had suggested, but she was feeling quite small, and, as she thought about it, she realized that, not having eaten since breakfast, she was quite hungry indeed. "I'll just try a small taste" she said, and broke off a piece. "Not bad at all" said Alice. "In fact, it's really quite tasty".
After eating the mushroom, Alice continued down the path and soon saw a sign marked "This Way to the Template Forest". Not being sure which way to go, she walked in, and soon was surrounded by enormous signs with use case templates written on them.
Alice stretched her neck trying to see to the top, and soon she found herself 10 feet tall! She began reading one of the templates.
Use Case Name, Actors, Priority, Status, Pre-Conditions, Flow of Events, Basic Path, Alternative Paths, Post-Conditions..
"Goodness!" exclaimed Alice. "Are we really supposed to specify ALL this for EVERY use case?" she asked, and continued reading.
Included Use Cases , Extended Use Cases, "Oh NO" ,groaned Alice. "Not THOSE again!", and she kept going.
Generalized Use Cases, Activity Diagram, User Interface, Database Mapping, Scenarios, Sequence Diagrams, she continued. "I'm afraid this is worse than my Uncle's income tax forms" she said. "But I'm sure I heard him mention something about using a shorter form next year maybe there should be a short-form for use cases too".
Alice kept reading the gigantic use case template..Subordinate Use Cases, View of Participating Classes, Other Artifacts, <Anything else you might want to include. Possibly an analysis model, a design model, or test plans.>
"Well, I don't like THAT very much" said the wise little Alice. "Putting 'anything else you might want to include' into a use case template seems like a sure guarantee of never getting to code", she said.
"I wonder if this one is any better?" said Alice, looking at another template, and she began to read.CHARACTERISTIC INFORMATION, Goal in Context, Scope, Level, Success End Condition. Failed End Condition, Primary Actor Trigger, MAIN SUCCESS SCENARIO, EXTENSIONS, SUB-VARIATIONS, RELATED INFORMATION, Priority.
"Oh, dear me" said Alice. "Where will it ever end?" and she continued on.
Performance Target, Frequency, Superordinate Use Case, Subordinate Use Cases, Channel to primary actor, Secondary Actors, Channel to Secondary Actors
"Channel to secondary actors?" said Alice, startled. "I can't even think what that might mean, much less specify it for all my use cases. I guess this is what they mean by analysis paralysis. Specifying lots of useless information without ever getting to code. I'd better keep looking" she said, and down the path she went.
14 - Part 2
OK, this brings us to the end of Part 1, and I hope I was able to shed some light on why use cases became popular, on just what it means to be use case driven, and on how some of the conventional wisdom about use cases is responsible for the all-too-common phenomenon of "thrashing" with use cases that we see across industry today.
In the next section of our talk, Alice meets up with some xtremelyCuriousCharacters, who, like her, are determined to avoid falling into analysis paralysis. But Alice finds that some of their methods and philosophies, which include (and I'm NOT making this stuff up, folks), oral documentation, code smells, "The code is the design" and so on, are just a little bit extreme..so let's rejoin her now as her journey through use case land gets curiouser and curiouser.
15 - Alice gets thirsty
Alice, who had been walking for some time now, had become quite thirsty. After she walked for a time, she came upon a little clearing, where she saw a table with a little bottle on it.
Around the neck of the bottle was tied a paper label with the words DRINK ME beautifully printed on it in large letters, along with the phrase "Guaranteed to avoid analysis paralysis" which was printed in smaller letters.
"It's all very well to say DRINK ME, she thought, "and I certainly would like to avoid analysis paralysis my neck is still stiff from those giant templates" she said, but the wise little Alice was not going to just pick up a strange bottle and drink it in a hurry. "No, I'll look first," she said, and see whether it's marked 'poison' or not". However, this bottle was not marked 'poison', so Alice ventured to taste it, and finding it very nice, she soon finished it off.
16 - Alice feels faint...
Alice became very dizzy,
and started to see many swirling colors. "What a queer feeling!"
she said. "I wonder if that was such a good idea. Perhaps
I'd better sit down for awhile" she said. As she sat, she
heard someone singing a curious song, and didn't quite know what
to make of it.....
17 - Imagine....(with apologies to John Lennon)
Imagine there's no requirements.
It's easy if you try
Just a bunch of coders, reachin for the sky
Imagine all the people, coding for today
Imagine there's no schedules.
It isn't hard to do
No silly project deadlines, no one supervising you
Imagine all the people, coding hand in hand
You may say I'm an extremer
but I'm not the only one
I hope someday you'll join us and make coding lots more fun.
Imagine oral documentation.
I wonder if you can
No need for UML diagrams. Just words passed, man to man
Imagine just refactoring, playing in the sand
You may say I'm an extremer,
but I'm not the only one
I hope someday you'll join us and make coding lots more fun.
Alice got up, rubbed her eyes, and shook her head vigorously. "I do wonder what can have happened to me" she said. "I knew something interesting was sure to happen. It does any time I eat or drink something around here. But it was much pleasanter at home, really, when everything wasn't upside down all the time. Perhaps I'd better try to find my way back.
[ Note: you can find more "Songs of the Extremos" on the web at http://www.softwarereality.com/lifecycle/xp/extremers.jsp]
18 - Pair programming means never writing down requirements
Alice, still somewhat dizzy, walked unsteadily down the path until she came to a clearing, where she saw a bunch of programmers, coding in pairs, and singing softly while they worked. An atmosphere of peace and tranquility prevailed in the clearing.
Alice paused near a sign that said "The concept of schedule depends on the notion of done-ness, and since software is never done, it's all about developing at a constant velocity". Another sign nearby read: "Written requirements are for cowards -- don't be afraid of oral documentation".
"Goodness" said Alice "I never felt afraid when I was writing those requirements downI was just trying to make sure I understood what the client wanted" she said. "All these people seem so happy and sure of what they're doing, programming in pairs and all", said Alice. "But I wonder if they're not blinded by their own faith. Without requirements, how can they be sure they're building the right system?" she said. "Why, you might as well say 'I code what I want' is the same as 'They want what I code'.
And Alice, who was feeling a bit stronger by this time, continued down the path.
19 There's no TIME to write down requirements
Suddenly the white rabbit, whom Alice had encountered earlier, dashed up, and began shouting at her: "There's no TIME to write down REQUIREMENTS." said the rabbit, iterating furiously. "And what's more, users never know what they want!", he said, continuing to spin around.
"Just have them tell you a story, and CODE IT", he said. "They change their minds several times each morning anyway the only way to keep up is to refactor the code faster than they can change their mind. Why, we can go through 5 iterations in the time it takes a typical user to change his mind, you see if we cant!" he said.
"Refactoring?" asked Alice. "I think I've heard of that, somewhere", she said. "It's the latest thing" said the rabbit. "Everybody's doing it", he said. "Design's dead, you know. With enough refactoring, you don't need design. The design figures itself out from the code. Ask the Hatter" he said, and off he rushed again.
20 - You might as well say "the code is the design"....
Alice, not knowing what else to do, and feeling somewhat shaky again after hearing about designs figuring themselves out from code, decided to follow the rabbit for awhile. On they went, the rabbit pausing every few feet to iterate around in a circle a few times. Eventually the rabbit, rushing ahead at top speed, pulled far enough ahead that Alice couldn't see him anymore.
Alice kept walking, and after a time she came to a clearing where she saw the rabbit, along with a large mouse and a little man wearing a big hat, all working furiously over a table and some chairs. When Alice walked up, all the legs from the table and chairs were sitting in a big pile on the ground. Alice watched as the Hatter, the rabbit, and the dormouse each grabbed 4 legs from the pile and screwed them into a chair. The problem was, that the legs were of different lengths, and Alice watched in fascination as they each finished assembling their chair, turned it over, and sat down. The chairs often tipped over, what with the legs being of different lengths and all, and when this happened they all yelled out, in unison "FAILED THE UNIT TEST", flipped the chairs back over, and began unscrewing the legs and tossing them back onto the pile.
"What kind of game are you playing?" asked Alice. "It's not a game, we're refactoring the furniture" replied the Hatter. "Why don't you read the documentation for assembling the chairs?" asked Alice. "It's sure to specify which legs should go on which chairs" she said. "It's oral documentation", said the Hatter. "Oh" said Alice. "You mean you don't have any" she said. "No" said the Hatter. "Written documentation is for cowards" he said. "We can refactor very quickly, so we can be brave enough to let the design figure itself out" he added.
"Oh yes. The rabbit said I should ask you about that" said Alice. "How can designs figure themselves out from code?" she asked. "You poor, ignorant child" said the Hatter, in quite a condescending tone. "The code IS the design, don't you see? Perhaps you'd better let the Duchess explain it to you" he said, and resumed refactoring the chairs.
21 - Who cares for use cases?
Alice remembered some reading she had done as she continued to walk down the path. "I remember reading about refactoring, pair programming, and oral documentation on the internet" she said to herself as she walked. "What was that website again oh, yes, it was called the Wiki Web" she recalled. "I remember reading about some kind of payroll project" she said. "It was called C3 or something like that, I think.but.didn't that project get cancelled?" she said. "It seems like they did an awful lot of bragging about it, considering that it wasn't really that much of a success", she mused.
[note: don't take Alice's word for it! Read it yourself at http://c2.com/cgi/wiki?CthreeProjectTerminated ]
By this time Alice had come suddenly upon an open place with a little house in the middle of it. Alice walked timidly up to the door, and knocked, but no one answered. Alice could hear a most extraordinary noise going on within a constant howling and sneezing, and every now and then a great crash, as if a dish or kettle had been broken to pieces. "Well, there's no use in waiting out here" said Alice, and she opened the door and went in.
The door led right into a large kitchen, which was full of smoke from one end to the other: the Duchess was sitting on a three-legged stool in the middle, nursing a baby: the cook was leaning over the fire, stirring a large cauldron which seemed to be full of soup.
"There's certainly too much pepper in that soup!" Alice said to herself, as well as she could for sneezing. The Duchess looked at Alice and said: "Can you smell the code?" "Code?" said Alice, I thought it was soup". "That" said the Duchess, is a Code Smell, and our Goal Donor over there is refactoring the code so it smells better".
"What is your code supposed to do?" asked Alice. "Do you have any requirements, or use cases?" she asked. "Who cares for use cases? We don't LIKE written requirements", said the Duchess. "We keep a customer in the room with us, and make him code up acceptance tests. We call him the Goal Donor. That way, we're free to add whatever features we want without any interference from those jerks over in marketing. THEY don't know anything anyway" she sneered.
Alice remembered reading
about Goal Donors on the Wiki Web site, where there was some kind
of disagreement between them and management, who were referred
to as Gold Owners. "But, what if the Goal Donor and the Gold
Owner disagree?" Alice asked the Duchess. "The Gold
Owner might inexplicably cancel the project. And anyway, if customers
could code acceptance tests, why would they need programmers?"
she asked, quite perplexed.
22 - C3 Project Terminated
The Duchess became very angry with Alice. "How DARE you talk such nonsense!" she stormed. But Alice did not back down. She had remembered that she was carrying her new Palm Pilot, which had wireless internet access, and that she had bookmarked a page on the Wiki Website. "It's not nonsense" Alice protested. "Look at what it says, right here" she said. "On this webpage called C3ProjectTerminated. It says that the Goal Donor didn't want the same thing as the Gold Owners. That the programmers kept adding features to the code, while management wanted to turn off the mainframe computers because C3 was a Y2K replacement project. Why, that's nothing but good, old-fashioned featuritis, and quite a nasty case of it, too." she said. "What would have happened, do you think, if the mainframe payroll programs had actually broken in January 2000?" she asked.
The Duchess was livid. "You FOOL", she began, "You just don't get it, do you? How much code have YOU written recently?" she asked angrily. But the plucky little Alice still refused to back down. "Featuritis", said Alice, calmly, "is why it's important to write down requirements. So the programmers don't build lots of cool stuff that's not what the client is paying for" she said. "GET OUT!" screamed the Duchess. "You'll have to answer to the Queen!"
[note: don't take Alice's word for it! Read it yourself at http://c2.com/cgi/wiki?CthreeProjectTerminated ]
23 - OnceAndOnlyOnce?
Alice was not quite ready to leave, however, and by this time she was feeling seriously annoyed by the Duchess' beligerrent attitude. She continued scrolling down the webpage on her Palm Pilot.
"It's a pity" said Alice, "that you didn't base all of your lofty claims on a project that was actually a success", she said. "It says here that this C3 project was a Y2K replacement project started in 1996. It was terminated in Feb. 2000 when it was still only paying 1/3 of the people that it was originally intended to pay. And look what it says over herenot only will the client never try this approach again, but it even made the term object-oriented "unutterable by anyone wishing management to take them seriously". "Keep in mind" said Alice, "this Wiki Website isn't MY website, it's YOURS! This reminds me of that story about the emperor who had no clothes on", she said. "Don't you have any other large project success stories to brag about?" she asked the Duchess.
The Duchess was speechless. "Get out!" she sputtered. "The Queen will have your head." This piece of rudeness was more than Alice could bear. She turned, in great disgust, and walked off.
[note: don't take Alice's word for it! Read it yourself at http://c2.com/cgi/wiki?CthreeProjectTerminated ]
24 - Alice refuses to start coding without written requirements
Alice continued walking for a time, and was just in the midst of wondering whether she could use her Palm Pilot to get a map home from wherever this curious place she was lost in was, when two soldiers, who looked strangely like index cards, approached her. "Excuse me, Miss" said the first soldier, "but the Queen of Hearts demands to see how much code you have written".
Alice, who was still quite vexed after her unpleasant encounter with the Duchess, replied: "Please tell Her Majesty that nobody has given me any requirements yet, so I don't have any code." The two soldiers looked at each other. "No code" said the first, shaking his head. "The Queen's not going to like that". "No" said the second. "It will be a beheading for sure" he said under his breath to the first soldier, so that Alice couldn't hear him. "You'd better come with us, Miss" he said, out loud, to Alice.
Alice, who after all had nowhere else to go, followed the soldiers until they came to a big lawn, where people were playing croquet. Alice could see a castle off in the distance. There was a sound of trumpets, whereupon the two soldiers exclaimed "The Queen, The Queen" and immediately threw themselves face down on the ground.
Alice looked up, and there stood the Queen in front of her, with her arms folded, frowning like a thunderstorm. "Well?" said the Queen to Alice. "Where is it? Where's the code?" "May it please Your Majesty" said Alice, in a very humble tone, going down on one knee as she spoke, "I haven't written any code yet, because nobody has told me what the requirements are."
The Queen turned crimson with fury, and after glaring at her for a moment like a wild beast, began screaming "Off with her head! Off with ---"
"Nonsense" said Alice, very loudly and decidedly, and the Queen was silent.
The King laid his hand upon her arm, and timidly said "Consider, my dear, she is only a child!"
The Queen turned angrily away from him, and said to Alice "I demand you start coding this minute". "I won't do it!" said Alice, surprised by her own courage. "There's no accountability without written requirements, and my project will get a bad case of feature-itis. I'm NOT going to start coding without requirements."
The Queen began to shout again, but the King spoke first. "Before we can behead the child", he said to the Queen, "we'll have to have a trial. " And then in a louder voice, he proclaimed "Trial of Alice to commence immediately!". And with that, the soldiers, who had gotten up off the ground, grabbed Alice by the arms and the whole procession marched off to the courtroom.
25 - You are guilty of BDUF...
The King and Queen were seated on their thrones, with a great crowd assembled about them. Near the King was the White Rabbit, with a trumpet in one hand, and a scroll of parchment in the other. In the very middle of the court was a table, with a large dish of cookies on it: they looked so good that it made Alice quite hungry to look at them "I wish they'd get the trial done" she thought, and "and hand round the refreshments". But there seemed to be no chance of this; so she began looking at everything around her to pass away the time.
Alice had never been in a court of justice before, but she had read about them in books, and she was quite pleased to find that she knew the name of nearly everything there. "That's the judge" she said to herself, "because of his great wig." The judge, by the way, was the King; and as he wore his crown over the wig, he did not look at all comfortable, and it was certainly not becoming.
"Herald, read the accusation!" said the King.
On this, the White Rabbit blew three blasts on the trumpet, and then unrolled the parchment-scroll, and read as follows ---
"The child named Alice
we do confront
In these proceedings today
For insisting on Big Design Up Front
And not coding right away"
"Consider your verdict" the King said to the jury.
"Not yet, not yet!" the Rabbit hastily interrupted. "There's a great deal to come before that!"
"Call the first witness" said the King; and the White Rabbit blew three blasts on the trumpet, and called out "First Witness!"
Alice took the stand, nervously. "Give your evidence" said the King. "Beg pardon, Your Majesty, but I just wanted to write the requirements down before I started coding", said Alice. "Because, I think I should understand them better, you see, if I have them written down, and I can't always follow them as they're spoken.", she said.
"Requirements" said the King, "are NOT one of the four important things about software. Those are Coding, Testing, Listening, and Design. That's all there is to software. Anyone who tells you something different is selling something. Designs are only to be recorded on index cards, and these are to be immediately thrown away as they'll be obsolete when the architecture changes in the morning. "
"Let the jury consider their verdict," the King said, for about the twentieth time that day. "No, no!" said the Queen. "Sentence first verdict afterwards."
"Stuff and nonsense!" said Alice loudly. "The idea of having the sentence first!"
"Hold your tongue!"
said the Queen, turning purple. "I won't" said Alice.
"Off with her head!", shouted the Queen, at the top
of her voice.
26 - CMM's dead! Off with her head!
The crowd immediately began chanting "Enough of BDUF....CMM's Dead.....Off With Her Head .....Off With Her Head". Alice was surrounded by dozens of index-card soldiers, all beating drums.
Alice, who had heard of the Capabilities Maturity Model, but was not personally involved in any effort to reach CMM Level 5 but just wanted a simple and straightforward approach that involved a reasonable amount of forethought and provided a reasonable amount of documentation, didn't understand all the drum-beating about CMM. "What's so bad about trying to find a repeatable development process?" she wondered.
All the drum beating and
chanting scared little Alice quite badly. She was sure that she
would be executed soon, although she didn't understand why. She
covered her ears and cowered in fear.
27 - Some serious refactoring of the design....
As the pack of soldiers descended upon Alice, she gave a little scream, half of fright and half of anger, and tried to beat them off. "Who cares for you?" shouted Alice. "You're nothing but a pack of cards!"
Suddenly a big gust of wind blew up, refactoring the entire stack of cards, and the design that was scribbled upon them. Alice woke up and found herself back in the big chair in her living room. The window was open, and a strong breeze had sprung up.
"Oh, I've had such a curious dream!" she said. "I'm not sure which was worse; getting stuck in analysis paralysis, or jumping straight to code without understanding the requirements. How I do wish there was some straightforward approach that was somewhere in between." she said.
28 - Part 3
Alice picked up another book, this one much thinner than the first, that claimed to talk about use case driven object modeling, for the first book had convinced her that use cases were a good idea.
[note: see http://www.iconixsw.com/UMLbook.html ]
"Thinner books," she remarked, "are much more appealing than the big fat ones. Goodness knows I don't want to fall asleep and have another dream like that again. Who knows what I'd dream up next time, probably "just-in-time-architecture" or something." she said.
29 - Alice wakes up...
"Hmm," said Alice. "It says on the back cover that this book has Analysis Paralysis alerts to help steer clear of common modeling pitfalls, and also an extensive discussion of requirements and how to design in a traceable manner.
And look, it doesn't try to teach everything in the UML User Guide, but focuses on a minimal subset of diagrams", she said. "Look, there are only 4 different kinds of diagrams in the core subset that they use" she said. "I guess this is what they were talking about in the UML User Guide where they said you can do 80% of your modeling with 20% of the UML" said Alice. "Only this book actually tells you which 20% that is".
[note: see http://www.iconixsw.com/UMLbook.html
30 - Closing the gap between "what" and "how"
"Aha" said Alice. "It's that missing link diagram again. Now I can see how important it is. Getting from what to how seems to be one of the most difficult things to do in software development.
"That caterpillar and the cheshire cat never got past talking about what the system was supposed to do," she said, "and the rabbit, hatter, and that horrible duchess and queen couldn't think of anything except code", she said.
"Although it was pretty funny how afraid they all were of written requirements, wasn't it? I think they just didn't want anybody telling them anything, so they could build whatever they wanted. " said the wise little Alice.
31 - Static and dynamic models are linked together...
"It's really quite fascinating," said Alice, "how many things go on during preliminary design. Both the use case model and the object model get updated during robustness analysis," she said. ""The use case text is made less ambiguous and more precise, at the same time as new objects are discovered.
The static and dynamic parts of the model are linked together, and forced to be consistent with one another, and the behavior descriptions are double checked, to make sure they're correct, they're complete, and they're feasible to build.
What an incredibly useful little technique!" exclaimed Alice. "It sure beats trying to jump from requirement-level use case descriptions to design-level sequence diagrams" she added.
32 - Behavior allocation happens on sequence diagrams...
"And this looks like the big payoff" said Alice. "A straightforward process for building sequence diagrams where the first three steps can be automated in a script, and the fourth step is simply to focus in on making behavior allocation decisions. Why this takes a lot of the mystery out of object-oriented design," she said.
"There's certainly no analysis paralysis here," Alice observed. "everything starts with the use cases; there's a requirements review with the client, then the behavior descriptions get refined during preliminary design, and there's a preliminary design review, which the clients can also attend. After that comes the detailed design, and then there's a critical design review, but the clients don't go to that one, it's just an internal review by the development team. And the the quality assurance folks test what the developers built against the use case text.
So, it's 'here's what we think you want, please correct us if we're wrong', then, after those corrections, it's 'OK, we made the changes you suggested, and added a bunch more detail, please tell us if we got it right', and then, after that, it's 'we're going to go ahead and build what you told us you wanted now, then you can verify that we built what we all agreed on'. And you can do it for whatever sized iteration you choose, just for those use cases that you're planning to implement" she said. "It works for both small projects and large ones, and for large and small chunks of functionality within an iteration. There's no confusion about the requirements because everything is written down, and the design traces directly back to the behavior requirements, which can then be used to generate acceptance test plans."
"What a relief to find a simple and straightforward process that is both minimal and sufficient" said Alice. "Avoiding analysis paralysis without skipping analysis is possible after all. You can learn a lot in dreams, sometimes" she reflected thoughtfully.
"Now if only someone would build a plug-in to RUP that would let my entire project follow this process" Alice mused.
[Note: see http://www.iconixsw.com/quickstart.html ]
33 And the moral of that is..
"I quite agree with you," said the Duchess; "and the moral of that is -- 'Be what you would seem to be' -- or, if you'd like it put more simply - 'Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise.' "
"I think I should understand that better, "Alice said very politely, if I had it written down; but I ca'n't quite follow it as you say it."
"That's nothing to what I could say if I chose," the Duchess replied, in a pleased tone.
"Pray don't trouble yourself to say it any longer than that," said Alice.
For more really funny stuff - www.softwarereality.com
Return to ICONIX
Homepage - www.iconixsw.com
ICONIX Software Engineering, Inc. / 2800 28th Street, Suite 320 / Santa Monica, CA 90405 / Tel (310)458-0092 / Fax (310)396-3454 / email: firstname.lastname@example.org