Jump to content

Release at Any Time: the Documentation Perspective

At Rogue Wave, the trend is towards agile development, with frequent releases of new features between major product releases. To this end, we maintain an impressive infrastructure of nightly automated testing of a large code base across a daunting number of platform, compiler, and database combinations. The system includes extensive reporting of test results against code quality baselines, regression analysis, and ongoing fixing of priority bugs. The goal is to maintain the code base at a high level of quality such that we can release at any time with confidence.

As a documentation person, the good news is that Rogue Wave has always valued documentation highly, and considers good documentation an important part of the product. The challenge is that documentation must therefore strive for the same level of consistent, release-at-any-time quality.

== Getting There with the Process Automation ==

When I realized that the documentation team either needed to match the agility and automation of the development teams or risk becoming less relevant, I could take comfort in the fact that documentation already had in place considerable process automation. For many years at Rogue Wave, a conversion architecture has supported the ability to reconvert FrameMaker source documents into the release formats easily and at any time. An added feature of this process was extensive reporting of formatting and linking problems found during the conversions.

The first step was to create infrastructure to support automated nightly conversion runs. The biggest obstacle was automating up-to-date PDF creation, the one main distribution format that was still created manually. A utility called FrameScript was the solution to that problem. With a little more creative jiggling, we reached a state where all documentation could be converted nightly, and the conversion error reporting neatly summarized on a single point of access Web page.

So far so good, but what customers expect to see is not an amorphous bundle of document files. They expect a well-formed document distribution, with convenient access points to the information. So we next devised a process for defining a manifest of everything that needed to be in a given product distribution, and a script to act on that manifest to create document distributions exactly as we expected to deliver to customers. Naturally we added some testing, too, resulting in a nightly distribution quality report.

== Document Health ==

All well and good, but all of this automation counts for very little without a commitment and a process to maintain good document quality — what we choose to call document health. Scripts are very non-judgemental, which is the inspiration for the old saying about the consequences of feeding them garbage. So while we in documentation were emulating the automated processes of our development colleagues, we were also adopting their scrum-based agile methodology. As they work on a feature, we work beside them on its documentation. Critically, we also continually monitor the reports that come out of our nightly automation, and attempt to keep the errors at or near zero. This works quite well with the incremental changes expected with an established, stable product, not quite so well with the major revisions and refactorings that are the inevitable burden with dynamically changing newer products.

Even if the picture is sometimes less than completely rosy, there is no arguing with the vision. When it is going well, this approach gloriously meets its intended goal. The document distributions that are created each night are exactly the documentation we intend to release. If the document set is reasonably stable and we are on top of the errors, we truly can on any given day publish a document distribution to release engineering and be proud to have it given to our customers.

It doesn’t get any better than that.

Del.icio.us   |   Technorati   |   Digg   |   Slashdot

One Response to “Release at Any Time: the Documentation Perspective”

  1. Santanu Ghosh Says:

    Dear Sir,
    I am trying to build my product in Solaris8 with roguewave-version4. Then follwing errors have been occurred.

    ERROR:
    ———

    “/disk5/u6build1/GhanaTel_Codeline/Source/Engine/batchprocess/batchcorecomponent
    /source/code/online_dprunmodule/datapreparation/CBaseDataPreparation.cpp”, line
    1746: Error: rwtMakeThreadFunctionM is not defined.
    “/disk5/u6build1/GhanaTel_Codeline/Source/Engine/batchprocess/batchcorecomponent
    /source/code/online_dprunmodule/datapreparation/CBaseDataPreparation.cpp”, line
    1747: Error: Unexpected type name “CBaseDataPreparation” encountered.
    “/disk5/u6build1/GhanaTel_Codeline/Source/Engine/batchprocess/batchcorecomponent
    /source/code/online_dprunmodule/datapreparation/CBaseDataPreparation.cpp”, line
    1749: Error: Badly formed expression.

    The above lines for CBaseDataPreparation.cpp are:

    Line 1746: cm_aRWThreadFunctionShutDown = rwMakeThreadFunctionM(
    Line 1747: CBaseDataPreparation, *this, void, &CBaseDataPreparation::shutdown );

Leave a Reply