f1[article Soft Documentationf1[article Soft Documentation
n2    [id softdoc_overload]n2    [id softdoc_communicator]
3    [authors [Guest, Thomas]]3    [authors [Guest, Thomas]]
4    [copyright 2006 Thomas Guest]4    [copyright 2006 Thomas Guest]
5]5]
66
7[def Hibernate [@http://www.hibernate.org Hibernate]]7[def Hibernate [@http://www.hibernate.org Hibernate]]
8[def DocBook [@http://docbook.org DocBook]]8[def DocBook [@http://docbook.org DocBook]]
9[def __boost__ [@http://boost.org/ Boost]]9[def __boost__ [@http://boost.org/ Boost]]
10[def BoostBook [@http://boost.org/tools/boostbook BoostBook]]10[def BoostBook [@http://boost.org/tools/boostbook BoostBook]]
11[def QuickBook [@http://boost.org/tools/quickbook QuickBook]]11[def QuickBook [@http://boost.org/tools/quickbook QuickBook]]
12[def --- '''—''']12[def --- '''—''']
1313
14[section Writing a User Manual]14[section Writing a User Manual]
1515
16[section Introduction]16[section Introduction]
1717
nn18I am a member of a small team of software developers working on a
19novel software product (I'll call it "the Product" from now
18Recently I spent some time working on a user manual.20on). Recently I spent some time working on the user manual for this
21Product.
1922
n20The existing version of this manual was based on a Microsoft Wordn23The existing version of the manual was based on a Microsoft Word
21master document. From this master the various required output formats24master document. From this master the various required output formats
22were generated in a semi-automated fashion.25were generated in a semi-automated fashion.
2326
n24I'm guessing anyone who's used a computer will have come acrossn27Microsoft Word is a popular and powerful tool. It does have its
25Microsoft Word: it's a popular tool which is easy to get started with28drawbacks though, especially for technical documentation, and these
26and which, by virtue of its WYSIWYG interface, allows even a novice to29drawbacks were only amplified by the other tools involved in producing
27produce stylish output. It does have its drawbacks though, especially30the final deliverables. We'll look more closely at these drawbacks
28for technical documentation, and these drawbacks were only amplified31later. I summarise them here by saying the proprietrary tools and file
29by the other tools involved in producing the final deliverables.32formats led to a loss of control.
3033
n31We'll look more closely at these drawbacks later. I summarise themn34Setting up tools to produce technical documentation in multiple
32here by saying the proprietrary tools and file formats led to a loss35formats is a difficult problem, but it's also a problem which has been
33of control. The final outputs were not so much WYSIWYG as36solved many times over. Plenty of open source projects provide model
34WYGIWYG---What You Get is What You're Given.37solutions. My increasing frustration with the Microsoft Word based
35 38documentation toolchain led me to explore one of these alternatives.
36Producing high quality technical documentation is a difficult problem
37but it's also a problem which has been solved many times over. Plenty
38of open source projects provide model solutions. My increasing
39frustration with the Microsoft Word based documentation toolchain led
40me to explore one of these alternatives.
4139
42This article records the outcome of my exploration. It tells how, in40This article records the outcome of my exploration. It tells how, in
43the end, we did regain control over the manual, but at a price.41the end, we did regain control over the manual, but at a price.
4442
45[endsect]43[endsect]
4644
47[section Requirements]45[section Requirements]
4846
n49The requirements for the manual were clear enough. It had to lookn47The requirements for the manual were clear enough. It had to fit the
50good. It had to fit the corporate style---dictating, in this case,48corporate style---dictating, in this case, font families, colour
51font families, colour schemes, logos and various other presentational49schemes and various other presentational aspects. There would be
52aspects. There would be pictures. There would be screen shots. There50pictures. There would be screen shots. There would be cross
53would be cross references.  Naturally, the contents should provide51references.  Naturally, the contents should provide clear and complete
54clear and complete details on how to use the Product.52details on how to use the Product.
5553
56We needed just two output formats:54We needed just two output formats:
5755
58* hard copy, printed and bound56* hard copy, printed and bound
59* linked online web pages.57* linked online web pages.
6058
61Of course, these two versions of the document would have to agree with59Of course, these two versions of the document would have to agree with
62each other. And the Product itself, a server-based piece of software60each other. And the Product itself, a server-based piece of software
63with a web browser interface, should integrate with the online61with a web browser interface, should integrate with the online
64documentation in a context-sensitive manner: clicking the Help icon62documentation in a context-sensitive manner: clicking the Help icon
65next to an item in the UI should pop up the manual opened at the63next to an item in the UI should pop up the manual opened at the
66correct location.64correct location.
6765
68Finally, there was the slightly strange requirement that the66Finally, there was the slightly strange requirement that the
69documentation should be substantial [footnote This, to me, is a67documentation should be substantial [footnote This, to me, is a
70suspect requirement, or at least one we should keep in check,68suspect requirement, or at least one we should keep in check,
71otherwise we run the risk of producing documentation whose sections69otherwise we run the risk of producing documentation whose sections
72are cut-and-paste adaptations of similar sections.]. Somehow, it70are cut-and-paste adaptations of similar sections.]. Somehow, it
73seemed unreasonable to ask customers to hand over lots of money for71seemed unreasonable to ask customers to hand over lots of money for
74nothing more than CD's worth of software; bundling in a weighty manual72nothing more than CD's worth of software; bundling in a weighty manual
75made the final deliverables more tangible.73made the final deliverables more tangible.
7674
7775
78[endsect]76[endsect]
7977
80[endsect]78[endsect]
8179
82[section Problems with the Existing Documentation Tools] 80[section Problems with the Existing Documentation Tools] 
8381
84[section The Existing Toolchain]82[section The Existing Toolchain]
8583
n86 n
87The existing toolchain was, as already mentioned, based on a Microsoft84The existing toolchain was, as already mentioned, based on a Microsoft
88Word master document. Producing hard copy was as simple as CTRL+P,85Word master document. Producing hard copy was as simple as CTRL+P,
89followed by a dialog about printer settings and some manual labour86followed by a dialog about printer settings and some manual labour
90involving a ring binder. It's fair to say that the printed output87involving a ring binder. It's fair to say that the printed output
91looked pretty much exactly as previewed: the author had good control88looked pretty much exactly as previewed: the author had good control
92over pagination, positioning of images, fonts, colours and so on.89over pagination, positioning of images, fonts, colours and so on.
9390
94The linked online pages took more effort. We'd got a license for a91The linked online pages took more effort. We'd got a license for a
95tool which I'll call Word Doctor (not its real name---I'm using an92tool which I'll call Word Doctor (not its real name---I'm using an
96alias because I'm going to moan about it). Generating the linked web93alias because I'm going to moan about it). Generating the linked web
97pages using Word Doctor involved the following steps:94pages using Word Doctor involved the following steps:
9895
99# Create a new Project.96# Create a new Project.
10097
101# Point it at the Microsoft Word Master.98# Point it at the Microsoft Word Master.
10299
103# Select some project options from the Word Doctor GUI.100# Select some project options from the Word Doctor GUI.
104101
n105# Click the build button (experts, hit /F5/).n102# Click the build button.
106103
107# Make a cup of tea while the pages generate.104# Make a cup of tea while the pages generate.
108105
109All fairly easy---in theory. In practice, there were some other steps106All fairly easy---in theory. In practice, there were some other steps
110which the Word Doctor user manual neglected to mention:107which the Word Doctor user manual neglected to mention:
111108
112# Exit Microsoft Word. Word Doctor has trouble accessing the109# Exit Microsoft Word. Word Doctor has trouble accessing the
113  document otherwise.110  document otherwise.
114111
115# Restart your PC. For some reason a resource got terminally locked up.112# Restart your PC. For some reason a resource got terminally locked up.
116113
117# Rewrite the Microsoft Word master using the Word Doctor document114# Rewrite the Microsoft Word master using the Word Doctor document
118  template.115  template.
119116
120# Don't forget to exit Microsoft Word!117# Don't forget to exit Microsoft Word!
121118
122# Create a new project etc.119# Create a new project etc.
123120
124# Click the build button.121# Click the build button.
125 122 
126# Click away a few warnings about saving TEMPLATE.DOT and OLE123# Click away a few warnings about saving TEMPLATE.DOT and OLE
127  something or other.124  something or other.
128125
129# Read the Word Doctor workarounds Wiki page on the intranet.126# Read the Word Doctor workarounds Wiki page on the intranet.
130127
131# Click the build button again.128# Click the build button again.
132129
133# Go for lunch. Documentation builds took around half an hour.130# Go for lunch. Documentation builds took around half an hour.
134131
135I am not exaggerating. The engineering manager admitted that he132I am not exaggerating. The engineering manager admitted that he
136estimated it took at least two days of struggling to convert a133estimated it took at least two days of struggling to convert a
137Microsoft Word master into the online form. And nor do I blame Word134Microsoft Word master into the online form. And nor do I blame Word
n138Doctor. I don't think Microsoft Word comes with a decent developern135Doctor. I don't think Microsoft Word is designed to interoperate with
139API. Instead, it tries to do everything itself: from revision control,136other thirdparty tools. Instead, it tries to do everything itself:
140through styling, to HTML output. It uses an opaque binary file format137from revision control, through styling, to HTML output. It uses an
141to deter anyone from trying to develop tools to work with it.138opaque binary file format to deter anyone from trying to develop tools
139to work with it.
142140
n143The final irritation was with the Word Doctor output---if you ever gotn141The final irritation was with the Word Doctor output. The HTML was
144any. The HTML was packed with Internet Explorer specific Javascript,142packed with Internet Explorer specific Javascript, and looked poor in
145and looked poor in any other browser.143any other browser.
146144
147[endsect]145[endsect]
148146
149[section Connecting up to Word Doctor Output]147[section Connecting up to Word Doctor Output]
150148
151The real downside of Word Doctor was when it came to trying to connect149The real downside of Word Doctor was when it came to trying to connect
152the Product to the Word Doctor web pages. This job fell to me. It was150the Product to the Word Doctor web pages. This job fell to me. It was
153a multi-layered integration task:151a multi-layered integration task:
154152
155* on a team level I would work with the technical author to ensure the153* on a team level I would work with the technical author to ensure the
n156  documentation content was correct, and contained the required Helpn154  documentation content was accurate and complete.
157  topics.
158155
159* on the Product side, the web-based user interface would call for156* on the Product side, the web-based user interface would call for
160  help using a text identifier. The Help subsystem would use the157  help using a text identifier. The Help subsystem would use the
n161  identifier to look up an HTML location---a page and an anchor within n158  identifier to look up an HTML location---a page and an anchor within
162  that page---and it could then pop up a new window viewing this 159  that page---and it could then pop up a new window viewing this
163  location.160  location.
164161
165* on the documentation side, I would have to configure Word Doctor to162* on the documentation side, I would have to configure Word Doctor to
166  ensure its HTML output included the right locations.163  ensure its HTML output included the right locations.
167164
168Unfortunately, there were problems with each of these layers.165Unfortunately, there were problems with each of these layers.
169166
170Personally, I got on well with the technical author, but the167Personally, I got on well with the technical author, but the
171documentation tools made it extremely hard for us to work on the same168documentation tools made it extremely hard for us to work on the same
172file. We had to take it in turns or work with copies. I couldn't even169file. We had to take it in turns or work with copies. I couldn't even
173fix a typo directly.170fix a typo directly.
174171
175The Word Doctor output was a frame-based collection of static HTML172The Word Doctor output was a frame-based collection of static HTML
176pages. Now, externally referencing a particular location in such a set173pages. Now, externally referencing a particular location in such a set
177of pages is tricky---due to the limitations of frames---so the174of pages is tricky---due to the limitations of frames---so the
178Product's help sub-system had to dynamically generate a framed front175Product's help sub-system had to dynamically generate a framed front
179page displaying the appropriate left and right pane each time it was176page displaying the appropriate left and right pane each time it was
180called. Not too difficult, but more complex than strictly necessary.177called. Not too difficult, but more complex than strictly necessary.
181178
182Both pages and anchors were a moving target in the Word Doctor179Both pages and anchors were a moving target in the Word Doctor
n183output. Every time you added a new section to the document you broken180output. Every time you added a new section to the document you risked
184most of the help references. Thus we found ourselves in a situation181breaking the help references. Thus we found ourselves in a situation
185where the technical author wanted the Product to stabilise in order to182where the technical author wanted the Product to stabilise in order to
n186document it and I needed the documentation to stabilise in order ton183document it and I needed the documentation to stabilise so that the
187link to it.184Product could link to it.
188185
189[endsect]186[endsect]
190187
191[section Other Problems]188[section Other Problems]
192189
193Microsoft Word uses a proprietary binary format. This ties you into190Microsoft Word uses a proprietary binary format. This ties you into
194their product to a degree---effectively, you're relying on Microsoft191their product to a degree---effectively, you're relying on Microsoft
195to look after your data because you simply cannot work with this data192to look after your data because you simply cannot work with this data
196without their tool. Of course, the risk of Microsoft collapsing during193without their tool. Of course, the risk of Microsoft collapsing during
197the lifetime of your document may be one you can live with, but you194the lifetime of your document may be one you can live with, but you
198are also vulnerable to them ceasing to support the version of Word you195are also vulnerable to them ceasing to support the version of Word you
199prefer, or charging an unreasonable amoount for an upgrade. It also196prefer, or charging an unreasonable amoount for an upgrade. It also
200means:197means:
201198
202* it's extremely hard for more than one person to work on a document199* it's extremely hard for more than one person to work on a document
203  at a time since changes to binary files cannot be merged together200  at a time since changes to binary files cannot be merged together
204  easily.201  easily.
205202
206* revision control becomes more expensive and less useful (how do you203* revision control becomes more expensive and less useful (how do you
207  view the differences between two versions of the manual?)204  view the differences between two versions of the manual?)
208205
209* it is very difficult to automate anything. As a trivial example,206* it is very difficult to automate anything. As a trivial example,
210  Word Doctor had no batch interface---it required human input at207  Word Doctor had no batch interface---it required human input at
211  every stage. Now consider trying to rebadge the manual, perhaps for208  every stage. Now consider trying to rebadge the manual, perhaps for
212  redistribution of the Product by some partner company. With a decent209  redistribution of the Product by some partner company. With a decent
213  documentation toolchain this should be as simple as the build 210  documentation toolchain this should be as simple as the build 
214  `prepare` target copying the correct logo graphic into place and211  `prepare` target copying the correct logo graphic into place and
215  applying a simple transformation to some text strings.212  applying a simple transformation to some text strings.
216213
217[endsect]214[endsect]
218215
219[section Resistance to Change]216[section Resistance to Change]
220217
221Despite all of these limitations and irritations it was hard to convince218Despite all of these limitations and irritations it was hard to convince
222anyone a change was necessary or even desirable. The reasons were as muc219anyone a change was necessary or even desirable. The reasons were as muc
>h>h
223organisational as technical.220organisational as technical.
224221
225* The existing tools had been used to produce acceptable end user222* The existing tools had been used to produce acceptable end user
226  documentation in the past for other products shipped by the company.223  documentation in the past for other products shipped by the company.
227224
228* Already, considerable effort had been put into the Word master for225* Already, considerable effort had been put into the Word master for
229  the new Product (even if much of it would have to be scrapped due to226  the new Product (even if much of it would have to be scrapped due to
230  the inevitable changes as the Product developed).227  the inevitable changes as the Product developed).
231228
n232* The engineering team had more work than it could cope withn
233  already. At least the user documentation could be outsourced to a
234  contract technical author.
235 
236* Setting up a smarter toolchain would need engineering input, and,229* Setting up a smarter toolchain would need engineering input, and,
237  once the tools were in place, would the technical author be able to230  once the tools were in place, would the technical author be able to
238  use them productively?231  use them productively?
239232
n240* The sales team saw the documentation task as non-urgent for much then
241  same reason that they saw user input validation as a nice-to-have
242  rather than a priority. After all, they'd run some promising beta
243  trials at customer sites using a poorly documented and
244  inputs-unchecked version of the Product. They were happy to continue
245  to provide support and tuition as required, either on site, by phone
246  or by email.
247 
248I could (and did) argue against all of these points:233I could (and did) argue against all of these points:
249234
250* Existing documentation was stand-alone: it did not have to integrate235* Existing documentation was stand-alone: it did not have to integrate
251  with what it documented. 236  with what it documented. 
252237
n253* Using the existing tools to connect the new Product withn238* Using the existing tools to connect the Product with
254  its documentation looked like being a continual sink of effort.239  its documentation looked like being a continual sink of effort.
255240
n256* The engineering team probably spent as long telling the technicaln241* I had every confidence that the technical author could quickly
257  author what to write as they might have spent writing it themselves. 242  master a new documentation tool, and that such a tool would save us
243  all time even in the short term.
258244
n259* Surely the technical author would quickly master a new documentationn245As I saw it, we risked treating documentation as an add-on---a
260  tool?246nice-to-have---rather than as an integral part of the Product, and I
261 247believe this is wrong. Decent documentation is one of the first things
262* In fact it was more often the engineers than the sales team who provid248I look for when I evaluate a piece of software. Quite simply, I didn't
>ed 
263  support, and frequently for problems which could have been avoided wit249want to deliver a Product with poor documentation.
>h 
264  better input checking and more solid documentation.
265 
266As software engineers we need to concentrate on the software. That
267means listening to the sales team; but when it comes to software
268quality, we know best. I believe the only shortcut is to prune back
269the feature list and, increasingly, I regard it as wrong to view
270software documentation as an add-on. Decent documentation is one of
271the first things I look for when I evaluate a piece of software: the
272website, the user interface, the README, the FAQ list, and of course
273the source code itself (if available). Quite simply, I didn't want to
274deliver a Product with poor documentation. I didn't think it would
275save us time in the short or long term.
276250
277[endsect]251[endsect]
278252
279[endsect]253[endsect]
280254
281[section Regaining Control]255[section Regaining Control]
282256
283My frustration with the existing documentation tools set me thinking257My frustration with the existing documentation tools set me thinking
284about alternatives. I looked first to the open source world, where258about alternatives. I looked first to the open source world, where
285there's no shortage of excellent documentation and where the authors259there's no shortage of excellent documentation and where the authors
286are happy to show how they generated it.260are happy to show how they generated it.
287261
288I experimented by downloading and attempting to build some open source262I experimented by downloading and attempting to build some open source
n289documentation. This was a part time activity, squeezed into momentsn263documentation. Once I had this basic step working, I continued to
290when I was waiting for builds to complete or files to check out. If264experiment. Could I change fonts, include images, replicate the house
291the documentation didn't build or required lots of configuration to265style? How easy were the tools to use with our own content?
292get it to build, I moved on.  I was looking for something as simple
293as:
294 
295[pre
296   > cd docs ; make 
297]
298 
299To my surprise and disappointment it took several attempts to find
300something which worked out of the box. Perhaps I was unlucky. No doubt
301in many cases it was user error on my part and no doubt I could have
302sought advice from email lists; nonetheless, I kept moving on until I
303found something which worked first time (my thanks to the Hibernate
304documentation team). Then I continued to experiment: could I change
305fonts, include images, replicate the house style? How easy were the
306tools to use with our own content?
307266
308After a Friday afternoon's experimentation I had something worth267After a Friday afternoon's experimentation I had something worth
309showing to the engineering manager: an end-to-end solution which, from268showing to the engineering manager: an end-to-end solution which, from
310a DocBook XML master, generated a skeleton PDF and HTML user manual in269a DocBook XML master, generated a skeleton PDF and HTML user manual in
311something approaching the house style.270something approaching the house style.
312271
313I suggested to the engineering manager that we should switch the272I suggested to the engineering manager that we should switch the
n314usermanual to use the tools I had just demonstrated. I said I'd ben273usermanual to be based on the tools I had just demonstrated. I said
315happy to do the work. He agreed with me that technically, this seemed274I'd be happy set up the toolchain. He agreed with me that technically,
316the way forwards. However, it wasn't easy for him to give me the go275this seemed the way forwards. However, it wasn't easy for him to give
317ahead for the reasons already discussed.  Also, it was a hard sell for276me the go ahead for the reasons already discussed.
318him to make to the rest of the company: on the one hand, writing end
319user documentation simply wasn't what the engineers were supposed to
320be doing; and on the other, it was hard enough persuading the
321technical author to use the revision control system, let alone edit
322raw XML.
323277
324I confess I had my own doubts too. All I knew at this stage was that278I confess I had my own doubts too. All I knew at this stage was that
325DocBook could do the job and that I would happily tinker with it to279DocBook could do the job and that I would happily tinker with it to
n326get it working. I didn't know if I could be productive using it. In280get it working for us. I didn't know if we could be productive using
327don't relish editing XML either.281it. At least we understood the limitations of the current tools.
328282
329We both recognised that the single most important thing was283We both recognised that the single most important thing was
330content. Full and accurate documentation supplied as a plain README284content. Full and accurate documentation supplied as a plain README
331would be of more practical use to our customers than something285would be of more practical use to our customers than something
332beautifully formatted and structured but misleadingly inaccurate.286beautifully formatted and structured but misleadingly inaccurate.
333287
334In the end we deferred making a final decision on what to do with the288In the end we deferred making a final decision on what to do with the
335manual.  The results of my experiment did seem worth recording, so I289manual.  The results of my experiment did seem worth recording, so I
336spent a day or so tidying up and checking in the code so we could290spent a day or so tidying up and checking in the code so we could
337return to it, if required.291return to it, if required.
338292
339[endsect]293[endsect]
340294
341[section A DocBook Toolchain]295[section A DocBook Toolchain]
342296
343I should outline here the basics of the toolchain I had evaluated. It297I should outline here the basics of the toolchain I had evaluated. It
344was based on DocBook. A two sentence introduction to DocBook can be298was based on DocBook. A two sentence introduction to DocBook can be
345found on the front page of the [@http://docbook.sourceforge.net/299found on the front page of the [@http://docbook.sourceforge.net/
346SourceForge DocBook Project].  I reproduce it here in full:300SourceForge DocBook Project].  I reproduce it here in full:
347301
348[:DocBook is an XML vocabulary that lets you create documents in a302[:DocBook is an XML vocabulary that lets you create documents in a
349presentation-neutral form that captures the logical structure of your303presentation-neutral form that captures the logical structure of your
350content. Using free tools along with the DocBook XSL stylesheets, you304content. Using free tools along with the DocBook XSL stylesheets, you
351can publish your content as HTML pages and PDF files, and in many305can publish your content as HTML pages and PDF files, and in many
352other formats.]306other formats.]
353307
354I would also like to highlight a couple of points from the preface to308I would also like to highlight a couple of points from the preface to
355Bob Stayton's [@http://www.sagehill.net/docbookxsl/index.html309Bob Stayton's [@http://www.sagehill.net/docbookxsl/index.html
356['DocBook XSL: The Complete Guide]]---a reference which anyone310['DocBook XSL: The Complete Guide]]---a reference which anyone
357actually using DocBook is sure to have bookmarked:311actually using DocBook is sure to have bookmarked:
358312
359[:A major advantage of DocBook is the availability of DocBook tools313[:A major advantage of DocBook is the availability of DocBook tools
360from many sources, not just from a single vendor of a proprietary file314from many sources, not just from a single vendor of a proprietary file
361format.  You can mix and match components for editing, typesetting,315format.  You can mix and match components for editing, typesetting,
362version control, and HTML conversion.\n ...  \nThe other major316version control, and HTML conversion.\n ...  \nThe other major
363advantage of DocBook is the set of free stylesheets that are available317advantage of DocBook is the set of free stylesheets that are available
364for it... These stylesheets enable anyone to publish their DocBook318for it... These stylesheets enable anyone to publish their DocBook
365content in print and HTML. An active community of users and319content in print and HTML. An active community of users and
366contributors keeps up the development of the stylesheets and answers320contributors keeps up the development of the stylesheets and answers
367questions.]321questions.]
368322
369So, the master document is written in XML conforming to the DocBook323So, the master document is written in XML conforming to the DocBook
370DTD. This master provides the structure and content of our324DTD. This master provides the structure and content of our
371document. Transforming the master into different output formats starts325document. Transforming the master into different output formats starts
372with the DocBook XSL stylesheets.  Various aspects of the326with the DocBook XSL stylesheets.  Various aspects of the
373transformation can be controlled by setting parameters to be applied327transformation can be controlled by setting parameters to be applied
374during this transformation (do we want a datestamp to appear in the328during this transformation (do we want a datestamp to appear in the
375page footer?, should a list of Figures be included in the contents?),329page footer?, should a list of Figures be included in the contents?),
376or even by writing custom XSL templates (for the front page, perhaps).330or even by writing custom XSL templates (for the front page, perhaps).
377331
378Depending on the exact output format there may still be work for us to332Depending on the exact output format there may still be work for us to
379do.  For HTML pages, the XSL transformation produces nicely structured333do.  For HTML pages, the XSL transformation produces nicely structured
380HTML, but we probably want to adjust the CSS style sheet and perhaps334HTML, but we probably want to adjust the CSS style sheet and perhaps
381provide our own admonition and navigation graphics. For Windows HTML335provide our own admonition and navigation graphics. For Windows HTML
382Help, the DocBook XSL stylesheets again produce a special form of HTML336Help, the DocBook XSL stylesheets again produce a special form of HTML
383which we must then run through an HTML Help compiler.337which we must then run through an HTML Help compiler.
384338
385PDF output is rather more fiddly: The DocBook XSL stylesheets yield339PDF output is rather more fiddly: The DocBook XSL stylesheets yield
386XSL formatting objects (FO) from the DocBook XML master. A further340XSL formatting objects (FO) from the DocBook XML master. A further
387stage of processing is then required to convert these formatting341stage of processing is then required to convert these formatting
388objects into PDF. I used the [@http://xmlgraphics.apache.org/fop/342objects into PDF. I used the [@http://xmlgraphics.apache.org/fop/
389Apache Formatting Objects Processor (FOP)], which in turn depends on343Apache Formatting Objects Processor (FOP)], which in turn depends on
390other third-party libraries for image processing and so on.344other third-party libraries for image processing and so on.
391345
392As we can see, there are choices to be made at all stages: which XSL346As we can see, there are choices to be made at all stages: which XSL
393transform software do we use, which imaging libraries; do we go for a347transform software do we use, which imaging libraries; do we go for a
394stable release of Apache FOP or the development rewrite? Do we spend348stable release of Apache FOP or the development rewrite? Do we spend
395money on a DocBook XML editor? Since we have full source access for349money on a DocBook XML editor? Since we have full source access for
396everything in the chain we might also choose to customise the tools if350everything in the chain we might also choose to customise the tools if
397they aren't working for us.351they aren't working for us.
398352
n399These choices were, to start with, a distraction. I was happy to gon353These choices were, to start with, a distraction.  I wanted the most
400with the selection made by the Hibernate team unless there was a good354direct route to generating decent documentation. I kept reminding
401reason not to. I wanted the most direct route to generating decent355myself that content was more important than style (even though the
402documentation. I kept reminding myself that content was more important
403than style (even though the styling tools were more fun to play with).356styling tools were more fun to play with).
404357
405[endsect]358[endsect]
406359
n407[section Sidebar: Presentation and Structure]n360[section Sidebar: Version Control]
408     
409A key point to realise when writing technical documentation is the
410distinction between structure and presentation. Suppose, for example,
411our document includes source code snippets and we want these snippets
412to be preformatted in a monospaced font with keywords emphasized using
413a bold font style. Here, we have two structural elements (source code,
414keywords) and two presentational elements (monospaced font, bold
415style).
416     
417Structure and presentation are separate concerns and our documentation
418chain should enable and maintain this distinction. This means that our
419master document structure will need to identify source code as "source
420code"---and not simply as preformatted text---and any keywords within
421it as "keywords"; and the styling associated with the presentation of
422this document will make the required mapping from "source code" to
423"monospace, preformatted" and from "keyword" to "bold".
424     
425We can see this separation in well-written HTML where the familiar
426element tags (HEAD, BODY, H1, H2, P etc) describe basic document
427structure, and CLASS attributes make finer structural
428distinctions. The actual presentation of this structured content is
429controlled by logically (and usually physically) separate Cascading
430Style Sheets (CSS).
431361
n432With a WYSIWYG documentation tool presentation and structure---byn362Software must adapt to survive. Features are added, bugs squashed;
433definition---operate in tandem, making it all too easy to use a363maybe the UI gets a makeover, maybe configuration files are replaced
434structural hack to fix a presentational issue (for example,364by a database. Customers do not usually get exposed to this state of
435introducing a hard page break to improve printed layout, or scaling a365flux. Typically, they are shipped stable and tested versions of a
436font down a point size to make a table look pretty).366Product---though they may also expect to receive patches against these
437  367versions, fixing critical bugs for example.
438DocBook enforces the separation between structure and presentation368 
439strictly. This doesn't mean that we can't use a Graphical Editor to369Software developers depend on their version control system to manage
440work with DocBook documents---indeed, a web search suggests several370both the formal, released versions, the patches, and the ongoing
441such editors exist. I chose to work with the raw DocBook format,371development version, and to maintain the connections between these
442however, partly because I could continue to use my 372versions. Computers are good at isolating the differences between
443[@http://www.gnu.org/software/emacs/emacs.html preferred editor]373versions of a source file and at copying these differences between the
444and partly because I wanted to get a better374different branches of a code-base. Thus, a programmer can (for
445understanding of DocBook. The enforced separation can sometimes be375example) fix a bug once, and the version control system can then be
446frustrating, however.  It took me about an hour to figure out how to376used to safely apply the fix wherever it's needed.
447disable hyphenation of the book's subtitle on my custom frontpage!377 
378In a large code base, the version control system can be configured to
379allow a team of programmers to work on the same set of files---and
380even on the same file.  The version control system can make sense of
381concurrent modifications, and merge them accurately; and in the rare
382situations it can't, it fails safely.
383 
384These considerations apply equally to the user manual, whose
385versions must map to versions of the software. By choosing suitable
386documentation formats and adopting version control, authors can
387realise the same benefits.
388 
389In fact, the leading open source version control system, Subversion
390[Reference: Subversion], explains the concept of branching a project
391using the particular example of a document -- a handbook, in this
392case. See:
393http://svnbook.red-bean.com/en/1.1/ch04.html#svn-ch-4-sect-1 for
394more information.  Note also that the Subversion documentation is
395written in DocBook.
448396
449[endsect]397[endsect]
450398
451[section The Technical Author Departs]399[section The Technical Author Departs]
452400
453We continued on, then, deferring work on the documentation until at401We continued on, then, deferring work on the documentation until at
n454least we had frozen the user interface, still pinning our hopes onn402least we had frozen the user interface. Then the technical author
455Word Doctor. Then the technical author left. She'd landed a full-time403left. She'd landed a full-time editing position on a magazine.
456editing position on a magazine.
457404
458Again, I volunteered to work on the documentation. By now the405Again, I volunteered to work on the documentation. By now the
459engineering manager had succeeded in selling the idea of switching406engineering manager had succeeded in selling the idea of switching
n460documentation tools to higher management. It was still hard for him ton407documentation tools to higher management.
461authorise me to actually write the documentation, though, since we had
462just recruited a new technical support engineer, based in North
463America. This engineer had nothing particular lined up for the next
464couple of weeks. What better way for him to learn about the Product
465than to write the user manual?
466408
n467As it turned out it various delayed hardware deliveries meant it tookn
468him a couple of weeks to set up a server capable of actually running
469the Product---and then he was booked up on site visits. He didn't get
470to spend any time on documentation.
471 
472Version 1.0 was due to be released in a week's time. We had four chices:409Version 1.0 was due to be released in two weeks. We had four choices:
473410
474# Ship with the existing documentation---which was dangerously out of411# Ship with the existing documentation---which was dangerously out of
475  date.412  date.
476413
477# Stub out the documentation entirely, so at least users wouldn't be414# Stub out the documentation entirely, so at least users wouldn't be
478  misled by it.415  misled by it.
479416
480# Revise the Microsoft Word document, use Word Doctor to generate HTML,417# Revise the Microsoft Word document, use Word Doctor to generate HTML,
481  reconnect the HTML to the Product.418  reconnect the HTML to the Product.
482419
483# Rewrite the manual using DocBook.420# Rewrite the manual using DocBook.
484421
485We ruled out the first choice even though it required the least422We ruled out the first choice even though it required the least
486effort. The second seemed like an admission of defeat---could we423effort. The second seemed like an admission of defeat---could we
487seriously consider releasing a formal version of the Product without424seriously consider releasing a formal version of the Product without
488documentation? Noone present had any enthusiasm for the third choice.425documentation? Noone present had any enthusiasm for the third choice.
489426
n490So, finally, with less than a week until code freeze, I got assignedn427So, finally, with less than a fortnight until code-freeze, I got
491the task of finishing the documentation using the tools of my428assigned the task of finishing the documentation using the tools of my
492choosing.429choosing.
nn430 
493431
494[endsect]432[endsect]
495433
496[section Problems with DocBook]434[section Problems with DocBook]
497435
498Most things went rather suprisingly well, but I did encounter a small436Most things went rather suprisingly well, but I did encounter a small
499number of hitches.437number of hitches.
500438
501[section Portability] 439[section Portability] 
502440
503My first unpleasant surprise with the DocBook toolchain came when I441My first unpleasant surprise with the DocBook toolchain came when I
504tried to generate the printable PDF output on a Windows XP442tried to generate the printable PDF output on a Windows XP
505machine. Rather naively, perhaps, I'd assumed that since all the443machine. Rather naively, perhaps, I'd assumed that since all the
506tools were Java based I'd be able to run them on any platform with a444tools were Java based I'd be able to run them on any platform with a
507JVM. Not so.445JVM. Not so.
508446
n509The first time I tried a Windows build, I got a two page traceback whichn447The first time I tried a Windows build, I got a two page traceback
510sliced through methods in [^javax.media.jai], [^org.apache.fop.pdf],448triggered by an exception raised in one of the graphics processing
511[^org.apache.xerces.parsers], arriving finally at the cause:449libraries. Fortunately, I was able to work around the problem by
512 450swapping the graphics library for an alternative version, apparently
513[pre451with no adverse effects.
514    Caused by: java.lang.IllegalArgumentException: Invalid ICC Profile D
>ata 
515       at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:873)
516       at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:841)
517       at java.awt.color.ICC_Profile.getDeferredInstance(ICC_Profile.jav
>a:929) 
518       at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:759)
519       at java.awt.color.ColorSpace.getInstance(ColorSpace.java:278)
520       at java.awt.image.ColorModel.<init>(ColorModel.java:151)
521       at java.awt.image.ComponentColorModel.<init>(ComponentColorModel.
>java:256) 
522       at com.sun.media.jai.codec.ImageCodec.<clinit>(ImageCodec.java:56
>1) 
523       ... 34 more
524]
525 
526I had several options here: web search for a solution, raise a query
527on an email list, swap out the defective component in the toolchain,
528roll up my sleeves and debug the problem, or restrict the
529documentation build to Linux only.
530 
531I discovered this problem quite early on, before the technical author
532left---otherwise the Linux-only build restriction might have been an
533acceptable compromise; several other Product components were by now
534tied to Linux. (Bear in mind that the documentation build /outputs/
535were entirely portable, it was only the build itself which didn't work
536on all platforms). My actual solution was, though, another compromise:
537I swapped the [@http://java.sun.com/products/java-media/jai/ JAI]
538libraries for the more primitive [http://java.sun.com/products/jimi/
539JIMI] ones, apparently with no adverse effects.
540452
541The incident did shake my confidence, though. It may well be true that453The incident did shake my confidence, though. It may well be true that
n542open source tools allow you the ultimate level of control, but youn454open source tools give you the ultimate level of control, but you
543don't usually want to exercise it! At this stage I had only tried455don't usually want to exercise it! At this stage I had only tried
544building small documents with a few images. I remained fearful that456building small documents with a few images. I remained fearful that
545similar problems might recur when the manual grew larger and more457similar problems might recur when the manual grew larger and more
546laden with screenshots.458laden with screenshots.
547459
548[endsect]460[endsect]
549461
550[section Volatility]462[section Volatility]
551463
552We all know that healthy software tools are in active development, but464We all know that healthy software tools are in active development, but
553this does have a downside. Some problems actually arose from the465this does have a downside. Some problems actually arose from the
554progression of the tools I was using. For example, I started out with466progression of the tools I was using. For example, I started out with
n555the version of the DocBook XSL stylesheets I found in the Hibernaten467the version of the DocBook XSL stylesheets I scavenged from my
556distribution (version 1.65.1). 468reference open source documentation build (version 1.65.1). 
557469
558These were more than good enough for my needs, but much of the DocBook470These were more than good enough for my needs, but much of the DocBook
559documentation I was using referred to more recent distributions. In471documentation I was using referred to more recent distributions. In
560this case, switching to the most recent stable distribution of the XSL472this case, switching to the most recent stable distribution of the XSL
561stylesheets resulted in improvements all round. Apache FOP is less473stylesheets resulted in improvements all round. Apache FOP is less
562mature though: the last stable version (as of December 2005) is474mature though: the last stable version (as of December 2005) is
5630.20.5---hardly a version number to inspire confidence---and the4750.20.5---hardly a version number to inspire confidence---and the
564latest release, 0.90 alpha 1, represents a break from the past. I476latest release, 0.90 alpha 1, represents a break from the past. I
565anticipate problems if and when I migrate to a modern version of FOP,477anticipate problems if and when I migrate to a modern version of FOP,
566though again, I also hope for improvements.478though again, I also hope for improvements.
567479
568[endsect]480[endsect]
569481
570[section Verbosity]482[section Verbosity]
571483
572XML is verbose and DocBook XML is no exception. As an illustration, here484XML is verbose and DocBook XML is no exception. As an illustration, here
573is a section of a DocBook document:485is a section of a DocBook document:
574486
575[pre487[pre
n576<section id="hello_world">n
577    <title>Hello World</title>
578    <para>488 <para>
579    Here is the canonical C++ example program.489 We needed just two output formats:
580    </para>490 </para>
581    <programlisting>491 <itemizedlist>
582    <!\[CDATA\[492 <listitem>
583    #include <iostream>493 hard copy, printed and bound
584 494 </listitem>
585    int main() {495 <listitem>
586       std::cout << "Hello world!" << std::endl;496 linked online web pages.
587       return 0;497 </listitem>
588    }498 </itemizedlist>
589    \]\]>
590    </programlisting>
591</section>
592]499]
593500
594XML claims to be human readable, and on one level, it is. On another501XML claims to be human readable, and on one level, it is. On another
595level, though, the clunky angle brackets and obtrusive tags make the502level, though, the clunky angle brackets and obtrusive tags make the
596actual text content in the master document hard to read: the syntax503actual text content in the master document hard to read: the syntax
597obscures the semantics.504obscures the semantics.
nn505 
598506
599[endsect]507[endsect]
600508
601[section Control]509[section Control]
602510
603The DocBook toolchain gave us superb control over some aspects of the511The DocBook toolchain gave us superb control over some aspects of the
604documentation task. In other areas the controls existed but were512documentation task. In other areas the controls existed but were
605tricky to locate and operate.513tricky to locate and operate.
606514
607For example, controlling the chunking of the HTML output was515For example, controlling the chunking of the HTML output was
608straightforward and could all be done using build time516straightforward and could all be done using build time
609parameters---with no modifications needed to the document517parameters---with no modifications needed to the document
610source. Similarly, controlling file and anchor names in the generated518source. Similarly, controlling file and anchor names in the generated
611HTML was easy, which meant the integration between the Product and the519HTML was easy, which meant the integration between the Product and the
612online version of the manual was both stable and clean.520online version of the manual was both stable and clean.
613521
614Some of the printed output options don't seem so simple, especially522Some of the printed output options don't seem so simple, especially
615for someone without a background in printing. In particular, I still523for someone without a background in printing. In particular, I still
616haven't got to grips with fine control of page-breaking logic, and524haven't got to grips with fine control of page-breaking logic, and
617have to hope noone minds too much about tables which split awkwardly525have to hope noone minds too much about tables which split awkwardly
618over pages.526over pages.
619527
620[endsect]528[endsect]
621529
622[endsect]530[endsect]
623531
624[section DocBook in Action]532[section DocBook in Action]
625533
626[section The Rush to Completion]534[section The Rush to Completion]
627535
628In the end, though, all went better than we could have hoped.536In the end, though, all went better than we could have hoped.
629537
630I soon had the documentation build integrated with the Product538I soon had the documentation build integrated with the Product
631build. Now the distributable ISO CD image had the right version of the539build. Now the distributable ISO CD image had the right version of the
632User Manual automatically included.540User Manual automatically included.
633541
n634I wrote a script to check the integration between the Product and then542I wrote a simple program to check the integration between the Product
635User Manual. This script double-checked that the various page/anchor543and the User Manual. This program checked that the various page/anchor
636targets which the Product used to launch the pop up Help window were544targets which the Product used to launch the pop up Help window were
637valid. This script too became part of the build. It provided a545valid. This script too became part of the build. It provided a
638rudimentary safety net as I rolled in more and more content.546rudimentary safety net as I rolled in more and more content.
639547
640Next, I cannibalised the good bits of the existing manual. We knew548Next, I cannibalised the good bits of the existing manual. We knew
641what problems we had seen in the field: some could be fixed using549what problems we had seen in the field: some could be fixed using
642better examples in the Help text; I fixed these next.550better examples in the Help text; I fixed these next.
643551
644Within a couple of days the new manual had all the good content from552Within a couple of days the new manual had all the good content from
645the old manual and none of the misleading or inaccurate content; it553the old manual and none of the misleading or inaccurate content; it
646included some new sections and was fully linked to the Product. It554included some new sections and was fully linked to the Product. It
647was, though, very light on screen shots.555was, though, very light on screen shots.
648556
649[endsect]557[endsect]
650558
651[section Screen Captures]559[section Screen Captures]
652560
653In an ideal world we could programatically:561In an ideal world we could programatically:
654562
655* launch the Product;563* launch the Product;
656* load some data; 564* load some data; 
657* pose the user interface for a number of screen shots;565* pose the user interface for a number of screen shots;
658* capture these screen shots for inclusion in the documentation.566* capture these screen shots for inclusion in the documentation.
659567
660Then this program too could become part of the build and, in theory,568Then this program too could become part of the build and, in theory,
661the screen shots would never fall out of step with the Product.569the screen shots would never fall out of step with the Product.
662570
663Already we had some tools in place to automate data loading and to571Already we had some tools in place to automate data loading and to
664exercise the user interface. We still have no solution for572exercise the user interface. We still have no solution for
665automatically capturing and cropping the images, so we rely on573automatically capturing and cropping the images, so we rely on
666human intervention. So far, this hasn't been a huge issue.574human intervention. So far, this hasn't been a huge issue.
667575
668[endsect]576[endsect]
669577
670[section QuickBook]578[section QuickBook]
671579
672I had a workaround for the verbosity issue. I used QuickBook, one of580I had a workaround for the verbosity issue. I used QuickBook, one of
673the __boost__ tools. QuickBook is a lightweight C++ program which581the __boost__ tools. QuickBook is a lightweight C++ program which
n674generates DocBook (BoostBook, strictly speaking) XML from a WikiWikin582generates DocBook XML from a WikiWiki style source document.
675style source document.
676583
677Using QuickBook, we can write our previous example as:584Using QuickBook, we can write our previous example as:
678585
n679[pre n586[pre
680    \[section Hello World\]587 We needed just two output formats:
681588
n682    Here is the canonical C++ example program.n589 * hard copy, printed and bound
683 590 * linked online web pages.
684      #include <iostream>
685 
686      int main() {
687         std::cout << "Hello world!" << std::endl;
688         return 0;
689      }
690      
691\[endsect\]
692]591]
693592
694QuickBook documents are easy to read and easy to write. QuickBook does593QuickBook documents are easy to read and easy to write. QuickBook does
695fall a long way short of the full expressive richness of DocBook but594fall a long way short of the full expressive richness of DocBook but
696if all you need are sections, cross-references, tables, lists,595if all you need are sections, cross-references, tables, lists,
n697embedded images and so on, then it's ideal. n596embedded images and so on, then it's ideal.
698This [@softdoc.qbk master version] of this article is itself written
699in QuickBook.
700 
701You can even escape back to DocBook from QuickBook. So if you decide
702your manual needs, for example, a
703[@http://docbook.org/tdg/en/html/colophon-x.html colophon], you can do
704it!
705597
706[endsect]598[endsect]
707599
708[section Build Times]600[section Build Times]
709601
710It wasn't going to be hard to beat Word Doctor on build602It wasn't going to be hard to beat Word Doctor on build
711times. Currently, it takes about a minute to generate the full user603times. Currently, it takes about a minute to generate the full user
n712manual, in PDF and HTML format, from source. A simple dependency checkn604manual, in both PDF and HTML formats, from source. A simple dependency
713means this build is only triggered when required. The real gain here605check means this build is only triggered when required. The real gain
714is not so much that the build is quick, but that it is automatic: not606here is not so much that the build is quick, but that it is automatic:
715a single button needs clicking.607not a single button needs clicking.
716608
717[endsect]609[endsect]
718610
719[endsect]611[endsect]
720612
721[section Soft Documentation]613[section Soft Documentation]
722614
723As a software user I expect software to just work---especially615As a software user I expect software to just work---especially
724software with a GUI. It should be obvious what to do without needing616software with a GUI. It should be obvious what to do without needing
725to read the manual; and preferably without even waiting for tooltips617to read the manual; and preferably without even waiting for tooltips
726to float into view. By designing a GUI which operates within a web618to float into view. By designing a GUI which operates within a web
727browser we already have a headstart here: the user interface is driven619browser we already have a headstart here: the user interface is driven
728like any other web interface---there's no need to document how620like any other web interface---there's no need to document how
729hyperlinks work or what the browser's address bar does.621hyperlinks work or what the browser's address bar does.
730622
731What's more, the [@http://agilemanifesto.org/623What's more, the [@http://agilemanifesto.org/
732Manifesto for Agile Software Development] explicitly624Manifesto for Agile Software Development] explicitly
733prefers: "Working software over comprehensive documentation".625prefers: "Working software over comprehensive documentation".
734626
735These considerations don't mean that the manual is redundant or627These considerations don't mean that the manual is redundant or
736unwanted, though. There are times when we don't want to clutter the628unwanted, though. There are times when we don't want to clutter the
737core user interface with reference details. There remain occasions629core user interface with reference details. There remain occasions
738when hardcopy is invaluable.630when hardcopy is invaluable.
739631
740What's more, when you try and design an intuitive user interface, you632What's more, when you try and design an intuitive user interface, you
741realise that the distinction between software and documentation is633realise that the distinction between software and documentation is
742somewhat artificial: it's not so much that the boundaries blur as634somewhat artificial: it's not so much that the boundaries blur as
743that, from a user's point of view, they aren't really there. Suppose,635that, from a user's point of view, they aren't really there. Suppose,
744for example, that a form requires an email address to be entered. If636for example, that a form requires an email address to be entered. If
745the user enters an invalid address the form is redrawn with the637the user enters an invalid address the form is redrawn with the
746erroneous input highlighted and a terse message displayed: ['Please638erroneous input highlighted and a terse message displayed: ['Please
747enter a valid email address]; there will also be a clickable Help icon639enter a valid email address]; there will also be a clickable Help icon
748directing confused users to the right page of the user manual. Which640directing confused users to the right page of the user manual. Which
749of these elements of the user interface are software and which are641of these elements of the user interface are software and which are
750documentation?642documentation?
751643
752Now suppose we are delivering a library designed to be linked into a644Now suppose we are delivering a library designed to be linked into a
753larger program. The documentation is primarily the header files which645larger program. The documentation is primarily the header files which
754define the interface to this library. We must invest considerable646define the interface to this library. We must invest considerable
755effort making sure these header files define a coherent and647effort making sure these header files define a coherent and
756comprehensible interface: maybe we deliver the library with some648comprehensible interface: maybe we deliver the library with some
757example client code and makefiles; maybe we provide a test harness;649example client code and makefiles; maybe we provide a test harness;
758maybe we generate hyperlinked documentation directly from the source650maybe we generate hyperlinked documentation directly from the source
759files; and maybe we supply the library implementation as source651files; and maybe we supply the library implementation as source
760code. Now which is software and which is documentation?652code. Now which is software and which is documentation?
761653
762When we write software, we remember 654When we write software, we remember 
763[link refs.abelson_and_sussman Abelson and Sussman's] advice:655[link refs.abelson_and_sussman Abelson and Sussman's] advice:
764656
765[:Programs should be written for people to read, and only incidentally657[:Programs should be written for people to read, and only incidentally
766for machines to execute.]658for machines to execute.]
767     659     
768In other words, software is documentation. Software should also be660In other words, software is documentation. Software should also be
769soft---soft enough to adapt to changing requirements. We must be sure661soft---soft enough to adapt to changing requirements. We must be sure
770to keep our documentation soft too.662to keep our documentation soft too.
771663
772[endsect]664[endsect]
773665
nn666 
774[section Conclusions]667[section Conclusions]
775668
n776The real benefits of the new documentation toolchain are becoming moren669The real benefits of the new documentation toolchain are becoming more a
 >nd
777and more apparent.670more apparent.
778671
779As a simple example, a single text file defines the Product's four672As a simple example, a single text file defines the Product's four
780part version number. The build system processes this file to make sure673part version number. The build system processes this file to make sure
781the correct version number appears where it's needed: in the user674the correct version number appears where it's needed: in the user
782interface, in the CD install script---and, of course, in the675interface, in the CD install script---and, of course, in the
783documentation.676documentation.
784677
785Another example. If we get a support call which we think could have678Another example. If we get a support call which we think could have
786been avoided had the documentation been better, then we fix the679been avoided had the documentation been better, then we fix the
n787documentation directly. Anyone with access to the revision controln680documentation directly. Anyone with access to the version control
788system and a text editor can make the fix. The full printed and online681system and a text editor can make the fix. The full printed and online
789documentation will be regenerated when they next do a build, and will682documentation will be regenerated when they next do a build, and will
790automatically be included in the next release.683automatically be included in the next release.
791684
792And a final example. The Product I work on checks file-based digital685And a final example. The Product I work on checks file-based digital
793video: it can spot unpleasant compression artifacts, unwanted black686video: it can spot unpleasant compression artifacts, unwanted black
794frames, audio glitches and so on. The range and depth of these checks687frames, audio glitches and so on. The range and depth of these checks
795is perhaps the area which changes most frequently: when we add support688is perhaps the area which changes most frequently: when we add support
n796for a new video codec or container file format, for example. Then689for a new video standard, for example. The architecture we have in
797architecture we have in place means that these low level enhancements690place means that these low level enhancements disrupt the higher
798disrupt the higher levels of the software only minimally: in fact, the691levels of the software only minimally: in fact, the user interface for
799user interface for this part of the Product is dynamically generated692this part of the Product is dynamically generated from a formal
800from a formal description of the supported checks. Adding a check at693description of which checks are supported. Adding a check at this
801this level is a simple matter of extending this formal description. We694level is a simple matter of extending this formal description. We also
802also need to document the check: perhaps a reference to the codec695need to document the check: perhaps a reference to the video standard
803specification and a precise definition of the metrics used. With an696and a precise definition of the metrics used. With an intelligent
804intelligent documentation toolchain the documentation can live697documentation toolchain the documentation can live alongside the
805alongside the formal description and build time checks confirm the698formal description and build time checks confirm the help text links
806help text links up properly.699up properly.
807700
808From an engineering point of view, documentation is properly701From an engineering point of view, documentation is properly
809integrated into the Product. I finish with another quotation from702integrated into the Product. I finish with another quotation from
810[@http://www.sagehill.net/docbookxsl/index.html Stayton]:703[@http://www.sagehill.net/docbookxsl/index.html Stayton]:
811704
812[:Setting up a DocBook system will take some time and effort. But the705[:Setting up a DocBook system will take some time and effort. But the
n813payoff will be an efficient, flexible, and inexpensive publishingn706payoff will be an efficient, flexible, and inexpensive publishing system
814system that can grow with your needs.]707that can grow with your needs.]
815708
816[endsect]709[endsect]
817710
818[section:refs References]711[section:refs References]
819712
820[h3 Abelson and Sussman]713[h3 Abelson and Sussman]
821714
822['Structure and Interpretation of Computer Progams],715['Structure and Interpretation of Computer Progams],
823Harold Abelson, Gerald Jay Sussman with Julie Sussman,716Harold Abelson, Gerald Jay Sussman with Julie Sussman,
824MIT Press, 1984; ISBN 0-262-01077-1717MIT Press, 1984; ISBN 0-262-01077-1
825718
826[h3 Apache FOP]719[h3 Apache FOP]
827720
828[@http://xmlgraphics.apache.org/fop/]721[@http://xmlgraphics.apache.org/fop/]
829722
830[h3 Agile Manifesto]723[h3 Agile Manifesto]
831724
832Manifesto for Agile Software Development\n725Manifesto for Agile Software Development\n
833[@http://agilemanifesto.org/]726[@http://agilemanifesto.org/]
834727
835[h3 Boost]728[h3 Boost]
836729
837[@http://www.boost.org/]730[@http://www.boost.org/]
838731
839[h3 BoostBook]732[h3 BoostBook]
840733
841[@http://www.boost.org/tools/boostbook/]734[@http://www.boost.org/tools/boostbook/]
842735
843[h3 Boost QuickBook]736[h3 Boost QuickBook]
844737
845[@http://www.boost.org/tools/quickbook/]738[@http://www.boost.org/tools/quickbook/]
846739
847[h3 DocBook]740[h3 DocBook]
848741
849[@http://docbook.org]742[@http://docbook.org]
850743
n851[h3 Hibernate]n
852 
853[@http://www.hibernate.org/]
854 
855[h3 Microsoft Word]744[h3 Microsoft Word]
856745
857[@http://office.microsoft.com/]746[@http://office.microsoft.com/]
858747
859[h3 Stayton]748[h3 Stayton]
860749
861['DocBook XSL: The Complete Guide],750['DocBook XSL: The Complete Guide],
862[@http://www.sagehill.net/docbookxsl/index.html]751[@http://www.sagehill.net/docbookxsl/index.html]
863752
864[h3 The DocBook Project]753[h3 The DocBook Project]
865754
866[@http://docbook.sourceforge.net/]755[@http://docbook.sourceforge.net/]
867756
868[endsect]757[endsect]
869758
870[section Credits]759[section Credits]
871760
n872My thanks to Alan Griffiths, Phil Bass and Alison Peck for their helpn761My thanks to the editorial teams at both Overload and Communicator
873with this article.762for their help with this article.
874763
875[endsect]764[endsect]
876765
n877[section Colophon]n
878766
n879[@softdoc_overload.qbk The master version of this article] was writtenn
880in QuickBook format using emacs. This online edition has been created
881using the QuickBook, BoostBook, DocBook and xsltproc tools.
882767
t883[endsect]t
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op