[TransWarp] Documentation Plans for PEAK

Phillip J. Eby pje at telecommunity.com
Thu Dec 12 08:26:45 EST 2002

After talking with Ty and Mark over the last few days, I'm revising our 
documentation plans for PEAK, because the current plan isn't working out 
very well.  Although many people have commented favorably on what I've done 
so far, it isn't progressing as quickly or smoothly as I would like, *and* 
I'm pretty sure it's not about the right things.

It's become clear that we need more kinds of documentation as well as more 
of it.  So the new strategy is going to be to create both a "Developer's 
Guide" and a "Tutorial", in addition to the "Reference".  The Tutorial will 
be re-done as the development of a useful application over time, adding 
more and more sophisticated features as it goes.  The "Reference" will be 
generated from docstrings, as it is now.

Finally, the "Developer's Guide" will be a collection of illustrations and 
commentary on the major use cases for each package, along with much of the 
kind of material that is now in the early tutorial draft.  But the 
organization will be different, downplaying sequential presentation in 
favor of compact, separately usable (and writable!) components.

Ty and I have pretty much agreed that although we want a tutorial document 
in the long run, the audience both here and at our workplace would be 
better served in the short run by documentation with less depth, but 
covering a lot more breadth.  And, by choosing an organization that's 
modular, we'll make it easier for more people to contribute to the 
documentation, and it should be easier to write, too.

At present, I'm thinking we'll organize this by adding files like 
DESIGN_GOALS.txt GUIDE.txt, EXTENDING.txt, and suchlike to each 
package.  This will allow the existing HappyDoc extraction process to 
create HTML versions of the structured text, and incorporate it as part of 
the API reference.

I'd also like, however, to add some use case-driven documentation.  For 
example, a "How to configure caching for Data Managers", or "Implementing 
Cross-Database References and Proxies".  Right now, there isn't any 
convenient way to generate such documentation, so it may just have to be a 
set of text files in a "GUIDE" subdirectory of each package, or something 
of that sort.

Whatever we do initially will probably change a bit as we get it settled 
in.  I'd like to establish templates for each of the various kinds of 
documentation, but until we've written some, we won't know what the 
templates should look like.  So that'll be an iterative process.

Anyway, this is just an update so you guys won't be wondering how many 
years it'll be before the tutorial gets to a chapter with stuff you care 
about.  :)  Sometime soon, I'll be updating the master to-do list to better 
reflect our documentation goals for the 0.5 release, which will be to have 
"requirements and design" briefs for each of the binding, config, naming, 
model, and storage packages, that show enough of an idea of what the 
package is/is for that a motivated person could dig into the API docs and 
accomplish something.

The tutorial will remain essentially as it is for the time being.  But as 
soon as the information currently in the tutorial has been assimilated into 
Developer Guide segments, I'll take down the PDF version to avoid confusion 
as to what documentation is most up-to-date or is going to be updated in 

We're also looking at candidates for a sample application to develop with 
PEAK, that isn't related to our proprietary work and can therefore be 
distributed.  We want something simple, because we can't afford to spend a 
lot of time designing it.  I'm also worried that anything we do that's 
complex enough to be useful, is going to have a lot of Zope 3 overhead 
components to explain, if it's web based, or a lot of GUI components to 
explain if we do a desktop app.

It may be that the best thing would be to show how to put a PEAK object 
layer onto an existing application.  For example, to take some existing 
database-backed web application, and then create a tool to import and 
export from XMI files to allow "hot sync" from offline work with that 
tool.  I don't know.  Maybe we need lots of smaller examples, like a Python 
documentation tool that generates the developer's guide from use case 
files, using the naming system interfaces to traverse the input and create 
the output.

So...  as always, your comments, questions, and feedback are 
welcome.  Also, if you have an app you were going to develop with PEAK 
anyway, I'd be more than happy to give you a little extra help with it if 
we can then turn it into an example application.

Per Roche and Ulrich's previous comments about docs and sample apps, 
though, I realize I've got to get a lot more information out there about 
certain parts of the existing code base before anybody can really write a 
good sample app...  which means I need to start writing developer guide 
articles.  :)

So my immediate documentation deliverables for the next week or two are 
probably going to be the updated TODO, coupled with a use case 
listing/outline for the overall developer's guide.  I may also do some of 
the overview docs for the peak.model package, as I'm about to do some 
refactoring there, mostly to bring it into some degree of alignment with 
the OMG MOF metamodel, but also to make it easier to extend for various 
purposes that I'd like to use it for in PEAK (like creating URL syntax 
specifications from a metamodel).

But I digress, and I've got a lot of things to do before I get to the 
office this morning.  Hope this is a useful updated for everybody, and I'll 
probably post various items for comment as things go forward.

More information about the PEAK mailing list