On explainability



An important aspect of maintaining software is our ability to explain exactly how and why it solves a problem. Consider this way of introducing a developer to a new piece of software:

“When you do Y, it’s a problem how to do X.
This software attempts to help with doing X by doing Z.
This works well because Z has the following advantages: a, b and c and some disadvantages: q, r, s.
If those trade-offs are appropriate for your domain consider using this piece of software.”

I consider this a Gold Standard for introduction to the point of a library or application. It explains why it exists, what it does and when to use it.

Following such an introduction, we need to offer a deeper dive into the software with the goal of making one fully proficient in using it. I propose the following setup for documenting each project:
  1. Introduction: Gentle introduction to main concepts
  2. Getting started:
    1. Installation: setup steps to install software
    2. Testing your setup: how to test your setup works as expected
  3. User Guides: Guides for various common place uses of the library
  4. Advanced Usage: Guides and explanation for more advanced usage patterns.
  5. Cheat Sheet: Useful list of most used aspects, making it easier to find reference information.
  6. API Reference: Detailed docs of each software component
  7. Release Notes: History of releases and changes performed in each
Providing such resources is instrumental in achieving the important goal of software maintainability. It also protects developer resources from being dis-utilized for answering questions that can simply be answered by proper docs.

Popular posts from this blog

Terminology of CICD

Perils of classes and pointers

On Testing