From: AG on
Hey all,

I am curious if someone could point me to an example "design
document." See the below quote for context:

"Create a design document to include DB, application, interfaces,
etc. with estimates."

Anyone have an example which includes DB, application, interfaces,
with estimates? I've made data-flow diagrams, data dictionaries,
flowcharts, etc before, but nothing so comprehensive. I'm a tad
confused as to where to start. I need a template.

Thanks!
From: Richard Heathfield on
AG wrote:
> Hey all,
>
> I am curious if someone could point me to an example "design
> document." See the below quote for context:
>
> "Create a design document to include DB, application, interfaces,
> etc. with estimates."
>
> Anyone have an example which includes DB, application, interfaces,
> with estimates? I've made data-flow diagrams, data dictionaries,
> flowcharts, etc before, but nothing so comprehensive. I'm a tad
> confused as to where to start. I need a template.
>
> Thanks!

Nobody seems to have taken you up on this. I think that may be because
good design documents vary too much to be tied down to a template. The
design document for a word processor will be very, very, very different
to the design document for a nuclear reactor emergency shutdown program.

But really, the clue is in the question. You have quite a lot to go on
already.

[This response is based on the view that design and construction are
different steps in the SDLC, and that the design document will be handed
to a programmer or team thereof, for the purpose of writing the program.
This is not the only SDLC model or even necessarily the best, but I am
guessing it is still the model most often taught in universities.]

Note that the purpose of a design document is to document the design.
Therefore, the first step is to design the program. Your input into this
process is the requirements specification, which is the outpouring of
your software analyst's wisdom, often (but not always) based on his or
her cosy little chats with the customer.

Once you've got a design that you reckon meets the requirements, you are
in a position to document it.

Start off by deciding which aspects of the program design you need to
document. The list you are given is really there to help you get
started: "database, application, interfaces, etc with estimates"
suggests that you are being asked to design a layered application, quite
possibly (re-)using existing project code. The killer is "etc" - what
goes in there will very much depend on your tutor's perspective, so
think back to your lectures and previous practicals - what do you think
he or she is looking for? Possibly a section on error handling and
reporting, or perhaps internationalisation, or maybe formatting options,
or screen layouts, or customised networking protocols - or indeed all of
the above.

Once you've decided which aspects of the design to document, you've got
your outline. Now you just have to fill it in.

For example, documenting your database design is easy. It's doing the
design in the first place that's hard! But to document it, all you have
to do is say what database model you're using (flat, hierarchical, RDBMS
or whatever), and then list your tables, their record structures, the
purpose of each table in general and each field in particular, and the
relationships between records. If you do that in sufficient detail for
anything much larger than "hello world", you're almost bound to get an
A, because the lecturer will find little or nothing to mark down, and
will have fallen asleep long before he gets to the end of that section
and onto the next.

Anyway, moving on: documenting the application is just a matter of
saying what the program's supposed to do and outlining a design that
will achieve that objective. Depending on the application, this is
almost a trivial step, given the database design. Fred Brooks liked to
quote a guy who once observed that a peek at the code is unenlightening
(wrt program functionality), but a peek at the tables (data) renders a
peek at the code unnecessary.

To document the interfaces, you need to know what interfaces to what. If
you're using a layered model, you probably have a business logic layer,
a presentation layer, and a database layer. Underlying all of them you
almost certainly have a library layer, where you've got a bunch of
re-usable code into which any or all of them might need to tap. An
interface is any point at which one layer needs to be in contact with
another layer (e.g. if you've got a bunch of graphics notquiteprimitives
in the library and your presentation layer needs to call them, that's an
interface right there) - but you'll probably want to keep your
description at a relatively high level at this point - it is not the
purpose of the design document to put arbitrary constraints on the
creativity and intelligence of the programmer.

As well as documenting internal interfaces, you will want to document
external interfaces - file formats, network conversation frameworks, and
user I/O (screen, keyboard, command-line options, and (for a GUI-based
program) maybe menu layout and dialog box suggestions.

If you do all of the above, diligently and thoroughly, you probably
won't need to worry about including more than, say, one layer of "etc".
Error handling is always a good one.

Punctuate with liberal amounts of figures, diagrams, and charts
(projected data storage requirements, layer diagram, data model, the
whole nine yards). Top and tail with contents, introduction, and index.
Stick your name on the top, and I think you're more or less done.

Others here will, no doubt, point out any obvious omissions in the above.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
"Usenet is a strange place" - dmr 29 July 1999
Sig line vacant - apply within