Importance of Effective Documentation for successful software projects

The key software project management strategies, of which Effective Documentation is one, apply equally well to both small and large-scale projects. Of the various important aspects of successfully managing any project (and particularly a software project) the most often overlooked aspect is Documentation and this can make or break a software development effort.

Effective documentation should clearly describe everything that can be considered as an input, output or an action. This potentially includes user manuals and online help texts; network diagrams; design specifications; flowcharts; program listings (with comments); test cases and test results (see Test-Driven Development); analysis models; data models; screen layouts for end-user applications; technical drawings of components, assemblies and other hardware units — even the list of contents of a box.

It is important not to confuse “documentation” with “written reports”. Documentation should facilitate changes in requirements by providing precise information about how the system works now. Written project reports are often used to communicate with management and stakeholders, or for marketing purposes. They may list the functions of a system but they do not describe how it works.

Writing documentation can be a delicate process because most people cannot write objectively about their own products. It is best to pay independent contractors to produce written documentation that does not have any emotional attachment from having been produced by someone who has been deeply involved in the project during its development. This addresses the second issue with writing documentation: subjectivity. In other words, without an independent contractor objective information can be obscured or misrepresented if authors try to present things from their own point of view instead of the reader’s point of view — especially when trying so hard to justify why a feature was implemented in a certain way.

The first issue relates to the temptation of including too much information in documentation, which has become a problem because people can no longer maintain all the documentation available today. In particular, documenting everything about a computer system is practically impossible because products are becoming increasingly complex and require more documentation than ever before. Consequently, product developers must figure out what needs to be documented and what doesn’t — or at least deem some aspect “unimportant” from a functional perspective so that it does not have to be maintained as diligently as other parts of the product might need to be maintained. Unnecessary documentation takes effort away from maintaining other aspects of an evolving product while not necessarily being useful for anyone reading it after its initial creation. The goal should therefore be iterative documentation, which is a document or collection of documents that can be revised or updated after their initial creation. In other words, the objective should not be to create perfect documentation from the start but instead to produce extremely useful documentation in an iterative manner — and we consider this process “iterative” because it must be repeated until the final product is complete. Once a product ships there is very little chance there will ever be enough time or additional resources to reconsider what has been documented and whether it needs to change based on what has been learned throughout the development and delivery processes.

Requirements specifications should convey both what information users need to know about a system works as well as an abstracted explanation of how it will be implemented. A good design specification fully describes the “action/reaction”: if the user clicks this button then this will happen; if they enter data in that field then we will store it here and so forth — and the same applies to every possible user action with every feature included in the software product under development. The objective is therefore not only to add more detail to the requirements specification but also to provide a more verbose explanation of how it works from a functional perspective. In other words, design specifications must demonstrate how each requirement will be implemented instead of just describing at a high level what information is needed by users and what their initial experience will be.

A good user interface design includes not only what features should exist in a software product but also how those features should function — including their expected behaviour, which allows developers to demonstrate how the product will actually work once it is ready for beta testing or early access via a website download. For example, one might expect if they click on this button then that screen should appear; if they enter data in that field then we should store it here and so forth — and the same applies to every possible user action with every feature included in the software product under development. The objective is therefore not only to add more detail to the requirements specification but also to provide a more verbose explanation of how it works from a functional perspective. In other words, design specifications must demonstrate how each requirement will be implemented instead of just describing at a high level what information is needed by users and what their initial experience will be. Contact us for more info.