Agile documentation (minimising the overhead)

This page is published under the terms of the licence summarized in the footnote.

 

Integrity or Agilitiy? You can’t maximise both. To ensure integrity you need careful change management, but that slows you down, and makes some changes infeasible. My interest is the tension or balance between integrity (requiring thorough system description and strict configuration management) and agility (requiring speed of system adaptation/evolution). It seems isolation of silos is death to integrity but essential to agility.

 

There are practical reasons why most human and computer activity systems will never be documented so completely that change management is the wholly mechanical and reliable process that naïve managers and customers might hope. How to optimize the change management effort? This paper explores the following documentation principles.

 

Divide a configuration between stewards

Minimise relationships between configurations

Balance proactive and reactive effort

Remember the operational system is paramount

Keep SPOD in mind

Raise the level of traceability

Automate documentation where possible

 

Divide a configuration between stewards

A configuration steward is the individual who looks after the integrity of a configuration. When a change request is made, impact analysis always depends at some level on the knowledge that a human being holds about the items within a configuration and their inter-dependencies.

 

Proposal: Given a configuration where H is larger than M, divide it into substructures, each maintained by one configuration steward whose role is to ‘know’ that substructure well enough to do impact analysis on it.

Minimise relationships between configurations

If a configuration steward cannot maintain their own configuration without continually corresponding with other configuration stewards, then the benefit of dividing the configuration is defeated. The trick of course is to do what software engineers are taught to do.

 

Proposal: maximise the internal cohesion of a configuration (so closely related things are looked after by the same configuration steward) and minimise the coupling between separated configurations (so configuration stewards don’t have to worry about each other).

Balance proactive and reactive effort

Strike a balance between investing in:

 

·         Proactive documentation-time effort, documenting every item and inter-item dependency in anticipation of a change request.

·         Reactive change-time effort, applying human knowledge and intelligence at change time to spot dependencies.

 

Those involved in change time effort do want enough documentation to point them in the right direction. But documentation-time effort is dull work, and the effort is unfocused, so records will be flawed, so don’t go overboard with it.

Remember the operational system is paramount

In the real world, operational systems are more important that system descriptions. Business managers and users don’t care if operational systems are out of step with higher level descriptions. But they care a great deal if the operational system stops working.

 

To business managers, change management of the operational systems (in use by many) is far more critical than change management of more abstract descriptions (used only by architects and designers).

 

The ultimate description of an operational systems is the bottom-level one, composed of statements that actors (machine or human) read in order to carry out activities in an operational system. If this description is not right, then the system will not work

 

Proposal: Documentation of higher level system descriptions after the fact - by some kind of reverse engineering - is a good thing, and sometimes the best we can hope for.

Keep SPOD in mind

The Single Point of Definition (SPOD) principle tells us to document an item or relationship once and once only. That minimises the effort to change the documentation, and minimises the risk of discrepancies in documentation.

 

Consider for example how record inter-item dependencies within a configuration?

·         In the structure of items: by grouping inter-dependent items together, perhaps under one node in a hierarchical structure.

·         In the items themselves: as attributes (foreign keys, pointers, invocation statements) that refer to related items.

·         In external traceability records: in a configuration register or traceability table aside from the place where items appear or are catalogued.

 

Some standards advise us to record each dependency in more than one of these ways

 

Consider for example a web site whose pages connected by hyperlinks. These links can be seen in the bottom level description – in the documents themselves. To aid change impact analysis, you might complete a higher level description, a table showing web page names in rows and columns, links between them in the cells.

 

Home page

Web page B

Web page C

Web page D

Home page

x

Links to

Links to

Links to

Web page B

Links to

x

 

Links to

Web page C

Links to

 

x

Links to

Web page D

Links to

 

 

x

 

The trouble is that this higher level description duplicates information in the bottom-level description (the web pages). This runs counter to the SPOD principle. Each higher level of description increases the documentation workload, and the risk that records get out of step.

 

In the world of information systems, the bottom level of description – the level at which components and processes actually work – is completed by software engineers. But this description is way too large, complex and incomprehensible for other stakeholders, for users, managers, analysts, architects etc. So lighter weight system descriptions are produced also.

 

The Zachman Framework suggests maintaining parallel descriptions at five levels of abstraction from the operational system. Has anybody maintained the five levels of abstract specification that the Zachman Framework implies? And maintained traceability records between each level and its adjacent level(s)? That would be a huge task.

 

That documentation burden may be excessive, but to specify systems, we do describe them from several viewpoints and at several levels of abstraction. Is it practical to ensure all views and levels of system descriptions are perfectly aligned? Our knowledge of how best to maintain abstract descriptions in step with implemented systems remains weak.

 

Proposal: If you have a lower level description, and you can manage items and their relationships in it, then that may be enough. Don’t maintain higher-level descriptions unless they prove helpful. Allow old ones to be archived rather than maintained.

Edit higher descriptions to reflect lower ones

It is normal to produce higher level system descriptions (say, requirements catalogues, logical data and process models) before lower level descriptions. The higher level descriptions help in analysis and design. They are milestones on the way to fully describing the items and inter-item relationships in the operational system.

 

In my experience, many higher-level systems descriptions are side-lined after they have been refined into lower level and more concrete descriptions. SPOD is one reason, but there are others.

 

·         The lower level description is such a straightforward elaboration of the higher level description, there is no value in retaining the higher level one.

·         The lower level description is such a radical transformation or elaboration of the higher level one that the relationship between them is obscure, and it is impractical to produce and maintain traceability relationships.

·         The higher level description was misguided or supplanted.

 

The trick is to maintain a higher level description that is more abstract by an order of magnitude than lower level description, but can be traced to it.

 

Proposal: edit higher-level descriptions so that they fit to abstract from lower ones. Once you have completed a lower level description, return to a higher one, simplify it, restructure it to reflect the lower one, and insert references to the lower level for detail.

Raise the level of traceability

A system description is usually divided into parallel views. The table below is intended to illustrate how a small information system might be described in three distinct views. Each view is a configuration that should be internally consistent.

Configuration

Business process models

User interface design

Database schema

Substructure

10 flowcharts

10 web pages

10 tables

Item

100 process steps

100 fields and controls

100 fields

 

In the operational system these views are tightly interrelated. The processes capture data items at the user interface and store them in database fields. In theory, we can relate the system description views in the same way. We can document which database fields appear in which web page fields – and which of those are used in which process steps. The potential number of inter-item relationships (100 * 100 * 100) is huge.

 

Where configurations are highly interdependent, change management becomes a serious obstacle to change. You could bring in a 3rd party to build and maintain traceability records.

Configuration B

Substructure B1

Substructure B2

Configuration A

Item B11

Item B12

Item B21

Item B22

Substructure A1

 

 

 

 

Item A11

Depends on

Depends on

 

Depends on

Item A12

 

Depends on

Depends on

 

Substructure A2

 

 

 

 

Item A21

 

 

 

 

Item A22

 

 

Depends on

 

 

The trouble is that a 3rd party has no ownership of and perhaps little interest in the configuration. They will make mistakes and fail to keep the traceability records up to date. The change management process will become not only immensely bureaucratic, but error prone.

 

How can the configuration stewards reduce the bureaucratic overhead of maintaining traceability records between their configurations? They can raise the level of traceability to a higher level of composition, confident that each configuration steward will be able to do impact analysis well enough in their head when a change happens.

 

You can raise the level of traceability records in a lop-sided way. For example, you can record an item in configuration A depends on the whole of configuration B. This means you won’t have to update the traceability record every time items in B are reorganised. More likely you’ll raise the level of traceability records in a balanced way by mapping between substructures rather than bottom level items.

 

Configuration substructure B1

Configuration substructure B2

Configuration substructure A1

Depends on

Depends on

Configuration substructure A2

 

Depends on

 

Of course, an implication of this approach is that the architect should group closely-related items into sub-configurations or substructures. You can refactor (reorganise) existing configurations by clustering related items into middle-level substructures that are (in the classic manner) internally cohesive but loosely-coupled one with another. This is the principal way in which we make large configurations manageable.

 

Proposal: Raise the level of traceability. If mappings between configurations too complex to make maintenance possible, then group items into substructures, so you can raise the level of traceability.

Automate documentation where possible

Enterprise Architecture is the most abstract level of system description. Software/application architects manage the configuration of fine-grained components within an application. Enterprise architects manage the applications portfolio in which the items are whole applications. In theory, there is a continuous top-to-bottom decomposition structure. In practice, the two levels of configuration are rarely if ever recorded in the same repository. The application maintenance teams regard EA as an ivory-tower activity of no relevance to them.

 

We need a way for application teams to document application structure behaviour that automatically populate the EA repository. We need to record screen flows and map user interface functions to data in a way that is independent of user interface appearance and implementation detail. The resulting models will be useful as a description of legacy system behaviour and/or target system behaviour. And in completing these models, application designers will automatically document the bottom-level functions and data types. So enterprise architects can connect to that documentation in EA level descriptions.

 

Proposal: Automate documentation. Customers and employees can maintain their own data records. Deployment of machines and applications can be automatically recorded. Automate import/export between configuration management are related tools. Reduce the labour of mapping between levels of specification by investing in automation of forward and reverse engineering between the two levels of abstraction.

 

Ref 1: Papers on Scale, Complexity and Change in the Library at http://avancier.co.uk

 

Footnote: Creative Commons Attribution-No Derivative Works Licence 2.0

Attribution: You may copy, distribute and display this copyrighted work only if you clearly credit “Avancier Limited: http://avancier.co.uk” before the start and include this footnote at the end.

No Derivative Works: You may copy, distribute, display only complete and verbatim copies of this page, not derivative works based upon it.

For more information about the licence, see  http://creativecommons.org