I find that I cannot do any kind of wireframe or prototype until the client
and I have done at least a basic domain analysis.  In other words, I need to
know what the business-level "things" are that the application is intended
to deal with, and I need to know how they relate to each other.  Until this
happens, then I am likely to waste substantial time thinking that a "Master
Report" is a particular kind of beast (you know, a "report"), when it's
actually a completely different kind of animal (a work authorisation).

The domain analysis I use is essentially an entity-relationship diagram with
only a few important attributes included.  It's really just named boxes with
one-to-one, one-to-many, many-to-many connections drawn.  I think of it as a
rich kind of glossary, so that the client and I can each understand what the
other is talking about.  This is what *I* mean by "commensurability", ie,
our terms match up, and our conversations are useful rather than
frustrating.

This analysis is unlikely to take more than a couple of hours, and is
certainly not anything like a complete data design, but until I have at
least this kind of information, I don't think that I can help the client at
all, because I can't *understand* what we are doing or why - I can only make
wireframe or prototype changes at the client's request, while thinking
"okay, I don't know why the hell you'd want to have that page right there,
but you're the client, and you obviously know what you're doing."

Inevitably this domain analysis evolves as the wireframing and prototyping
proceeds, but by the time the Fusebox architecting is ready to proceed, I
have the substantial makings of the data design ready to go too.

I guess I'm an old-fashioned kind of guy...

LeeBB




-----Original Message-----
From: Hal Helms' Occasional Newsletter [mailto:[EMAIL PROTECTED]]


Conversations 
Informal talks on software development with Hal Helms and Steve Nelson
Topic: When Do You Design the Database?
Steve Nelson: Well, we're back in business.
Hal Helms: Yep. Last week, we talked about various community resources.
Steve Nelson: One guy wrote me an email saying he thought the topic was "too
controversial".
Hal Helms: Community resources controversial?
Steve Nelson: Hey, I just read the email.
Hal Helms: Wow, he should hear some of the ideas we reject!
Steve Nelson: So, what was your most controversial idea?
Hal Helms: About development?
Steve Nelson: Yeah.
Hal Helms: I suppose it would be the one where I suggested that corporate
accountants be chained to the damned cubicles they're so fond of. Not
forever, you know, but maybe for a year.
Steve Nelson: Chained there, huh?
Hal Helms: Right. I mean, since they're so productive a work environment and
all and so people friendly, let's let them stay there for a while. Their
families could come and visit them on weekends. They could try to do
intellectual work with more noise than a train station at rush hour. I think
it might be...enlightening.
Steve Nelson: And that was controversial?
Hal Helms: Well-it was among accountants.
Steve Nelson: How about other controversial ideas?
Hal Helms: Well, I have one that-when I say it-people look at me like it's
the oddest thing I've ever said.
Steve Nelson: Gee, they must not know about the accountant-cubicle idea.
Hal Helms: Right. 
Steve Nelson: So, what is it?
Hal Helms: I tell people: when you're building a new application, design the
database last. 
Steve Nelson: Well, it certainly does fly in the face of conventional
wisdom.
Hal Helms: But you do that, right?
Steve Nelson: Absolutely. Now, sometimes, I can't - the database is already
built, but when possible, I do it after all the architecture is done.
Hal Helms: Sounds controversial, all right. Why wait until the last to
design it?
Steve Nelson: What happens on a typical project? We have some requirements
documents, some graphical comps and then-bam! Start on the database!
Hal Helms: Yes, that's pretty much right.
Steve Nelson: So, you've got the coding folks waiting on the database to be
built. And then, you have to populate it with some data so your queries
work. All this time, the programmers are waiting. Lots of pressure to "get
the DB done!" And so, it does "get done", but usually, that pressure yields
a design that isn't thought through completely and so the database ends up
changing while coding is going on.
Hal Helms: The worst of all possible worlds.
Steve Nelson: Brought about by the best of motives: Let's get coding!
Hal Helms: Or, the flip side of that is that enough time is given to the
database design and then the coders start running out of time. Bad stuff.
Steve Nelson: So, what do you recommend people do?
Hal Helms: I think that until you have identified the people and things that
are going to populate the model world you're building-and that's essentially
what writing software is-creating a model world.
Steve Nelson: Right.
Hal Helms: Until you know what the inhabitants and furniture and stuff of
that model world are going to be, you're not ready for a database. Once you
have determined that-
Steve Nelson: Something that you do by architecting the application.
Hal Helms: Yes, once that's done, only then are you in a position to ask the
much more mundane question, "How shall we store all this stuff?" And that's
really all databases are there for: to store stuff.
Steve Nelson: That doesn't sound very...sophisticated: databases are there
to "store stuff".
Hal Helms: Hmm...good point. How's this? Databases are there to make objects
persistent.
Steve Nelson: Ah, much better. And it means the same thing.
Hal Helms: Seriously, though, the point is that what's important are the
things being stored and NOT the boxes we store those things in. Relational
databases sometimes obscure this point because they do require a high degree
of sophistication to properly store things.
Steve Nelson: I sometimes tell clients when they get hung up with technical
details, "Imagine that we have magical technology that lets us do whatever
we want to do, just by wishing it into being. Now, the REAL question
remains, What do we want to do?"
Hal Helms: That's really good. The problems we run into aren't usually ones
of "we know exactly what we want to do, but can't figure out how to
implement it". It's much more common that we haven't really thought through
our scale model world to make sure that everything is coherent. Or-here's a
sophisticated word-commensurable. I learned that one in philosophy class.
Steve Nelson: Nice word! It means?
Hal Helms: Just means that everything fits together and there are no logical
inconsistencies. So what we're both saying is that doing the database last
makes sense because it gives us time to discover the things that make up our
model before trying to determine how to store those things.
Steve Nelson: Yes. And if you think about it, it also helps out the project
schedule, because the database design can be done while coding is beginning.
It takes the database design off the "critical path", in project management
lingo.
Hal Helms: Ah, but what are the coders going to use to test out their pages
that require record sets returned by queries?
Steve Nelson: I think some guy wrote a custom tag to help out with that.
QuerySim.cfm, if I remember correctly.
Hal Helms: Why, that's mi-[must...control...ego]-I mean, why don't you
explain how to use that, Steve?
Steve Nelson: Why, I'd be delighted to. It works as a tag pair. The first
line indicates-well, why don't you look at this and see if it makes sense.
<cf_QuerySim>
   CoolGuys
   firstName,lastName
   Steve|Nelson
   Hal|Helms
</cf_QuerySim>
Hal Helms: So, "CoolGuys" is the name of the record set to be returned.
Steve Nelson: Yep. And the record set has two fields or columns: firstName
and lastName
Hal Helms: And then this particular QuerySim returns two rows of data.
Steve Nelson: You got it. Cool, huh?
Hal Helms: Say, Steve, you don't happen to know who-you know-WROTE that tag,
do you?
Steve Nelson: I don't remember exactly, but I do remember that Bert Dawson
took the original code-which was apparently pretty bad-and made it lots
easier to use. Can you believe it? The original author made it so you had to
use a separate .ini style file for the recordset contents! Good thing Bert
fixed that!
Hal Helms: Doh!
Steve Nelson: What's that?
Hal Helms: Oh...nothing. Well, what if you don't want any rows of data
returned?
Steve Nelson: You just omit the data lines altogether.
Hal Helms: And if you want certain fields left blank? You can't just have
pipe symbols next to each other and expect CF to know those represent empty
elements in a pipe-delimited string. I mean, it won't work.
Steve Nelson: You can just use the word "null" in there and the tag will
replace that with an empty string.
Hal Helms: Gee, that's some clever programming, wouldn't you agree, Steve?
Steve Nelson: I'm telling you-that Bert Dawson is a clever guy. Hey, what's
the matter? It sounds like you're choking or something.
Hal Helms: Oh, don't worry about ME! I'll be all right.
Steve Nelson: Oh, OK. Good.
Hal Helms: So, is that it for today? We both agree on the efficacy of doing
the database design last.
Steve Nelson: Yes, I'd tell people to whom this sounds like heresy to try it
out on a little project. I thought it was weird at first, too, but there's
nothing so convincing as success. So, yeah, I guess we're done. Good thing,
too, as we're running out of room. You have anything else?
Hal Helms: Just a little thing. A question, really, is all. In the example
record set you gave-CoolGuys-you had Steve Nelson first and THEN Hal Helms.
I know it seems silly, but that might imply to certain readers that-and
again, I know this is silly-but it might sound like you're saying that you
are cooler than I am!
Steve Nelson: No, that's not silly at all. It's absolutely true. In the
coolness scale, I'm way ahead of you, my friend. That's what we call a
"universal truth"-a little phrase I picked up in philosophy class.
Hal Helms: Well, if you're going to be like that, then I have to tell
everyone that the AUTHOR of the QuerySim tag-
Steve Nelson: Sorry, buddy, but we're out of space. Gotta run. See you all
next week. Man, you sure you're OK? You gotta do something about that
choking noise you're making...
Steve Nelson runs SecretAgents.com, a site for putting together clients and
developers. If you need consulting or help on project management, you can
reach Steve at [EMAIL PROTECTED] 

Hal Helms provides training on Fusebox and FLiP, and writes and speaks on
software development methodology and architecture. His site is
www.halhelms.com. You can reach him at [EMAIL PROTECTED] 
To unsubscribe/change profile: click here 
To subscribe: click here 


Email list management powered by http://MailerMailer.com


IMPORTANT NOTICE:
This e-mail and any attachment to it is intended only to be read or used by
the named addressee.  It is confidential and may contain legally privileged
information.  No confidentiality or privilege is waived or lost by any
mistaken transmission to you.  If you receive this e-mail in error, please
immediately delete it from your system and notify the sender.  You must not
disclose, copy or use any part of this e-mail if you are not the intended
recipient.  The RTA is not responsible for any unauthorised alterations to
this e-mail or attachment to it.  

==^================================================================
This email was sent to: [email protected]

EASY UNSUBSCRIBE click here: http://topica.com/u/?bUrFMa.bV0Kx9
Or send an email to: [EMAIL PROTECTED]

T O P I C A -- Register now to manage your mail!
http://www.topica.com/partner/tag02/register
==^================================================================

Reply via email to