Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documentation day and guide #19

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ Guidelines, recommendations, linting, formating and IDE configs provided and use
- [Code Review Rules](general/Code-review-rules.md)
- [Front-end Security Guidelines](general/front-end-security-guidelines.md)
- [Coding Tools Configurations](general/coding-tools-configs.md)
- [Documentation Day](general/documentation-day.md)
- [Documentation Guidelines](general/documentation-guide.md)
29 changes: 29 additions & 0 deletions general/documentation-day.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Documentation Day
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds like a whole day of reading documentation 😛 What about Documentation Review?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation Review sounds pretty good. Then we should think about to rename the Readme Day as well ;)

On the other hand "Documentation Day" and "Readme Day" sounds more like an "institution" than a (regular) task. The name should reflect the idea of the concept than what should be done.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, maybe I was biased in terms of selling this xD


## Goals of the Documentation Day

The general idea is that every project has a regular day when the documentation is checked. The goal is to have **well maintained documentations with all necessary and up-to-date information**.

The main goal of the Documentation Day is to **establish and maintain confidence in the documentation**.

## Where to Start

Assigning all involved developers to execute a Documentation Day, one after another, is a good idea. Introducing new developers by having them execute the Documentation Day will provide great insight and valuable feedback, as well as asking developers who are not involved in the project.

The following steps are one possible way for the Documentation Day:

tbd

If possible, fix all identified problems directly and update the documentation regardingly. Otherwise try to schedule the issues to have them fixed at least until the next Documentation Day.
tilmanjusten marked this conversation as resolved.
Show resolved Hide resolved

## Necessity, Frequency and Duration

The lifespan of a project, the frequency of code contributions as well as the number of contributors are factors for the necessity and frequency of a Documentation Day. If the development from start to finish is about 3 weeks or code contributions are not regular enough, a Documentation Day is not necessary. In this case the documentation should be checked as part of the QA phase.

If the number of developers contributing code

* **is 2** a Documentation Day should be planed every **4 weeks**,
* **is up to 6** a Documentation Day should be planed every **3 weeks** and
* **is larger than 6** a Documentation Day should be planed **within the sprint cycle**.

When doing documentation days do them time boxed. One hour is a good starting point. Within this period do whatever you can do. You don’t have to create or change the whole documentation at once. Eat slowly, bite after bite.
84 changes: 84 additions & 0 deletions general/documentation-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Documentation Guide

This is a brief guide on how to document different types of information within software projects. Every project has different key aspect. So build your own toolbox out of it. This guide covers general technical and non technical documentation. It does not deal with documentation in code.

First of all writing documentation is more kind of a mindset than everything else. It is about you and your work and less how your (team’s) workflows are or which tools you use. Starting a documentation is the easy part. The hard part comes with maintenance. No doubt you get the easy part on yourself. This guide takes you on the journey to get the hard part easy too.

## Where to put the documentation

Ask yourself who should read the documentation. For technical people the readme is the perfect entry point. Which can be expanded to a simple file system based structure of markdown files.
For non technical people confluence (or project wiki) should fit your needs. Keep in mind that you can start where you are. If there is a Readme.md take it. You can move the contents later within a documentation (or readme) day.

Feel free to use our [readme template as a starter.](../doc-templates/README.md)

## How to maintain a documentation

To keep your documentation right, make it part of your personal and your team's development process and mindset. Create rules that fit your and your team’s needs: No feature merge without documentation, organize documentation days, etc.
Adapt your team's workflows and take information that still exists when starting the documentation. User stories and tickets are a good starting point. You just have to move them to your documentation place and give them a review when development has finished.
Everyone who is developing software does some kind of technical concept. Write it down and give it a review when development has finished.

Keep in mind that your documentation does not have to be perfect. Your documentation has to be good or at least okay. It should be good to read. It may be fun to read. It never has to be wrong over a period of time.

**Focus on the content. _Always_.**
Copy link

@rbannat rbannat Jul 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation often tends to be either not enough or too lengthy to read. This is a good resource to get some advice on writing concise and useful documentation. I like the comparison with writing code: Keep it simple. Don't repeat yourself. Refactor ... https://developers.google.com/tech-writing

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So you suggest to add the link to the tech writing lessons from google, right? I think these will be a pretty good resource for extending the knowledge of technical writing.

We should keep in mind that the documentation guidelines, the one we discuss right now, have the purpose to make starting documentation easy as hell. First of all by keeping the Hemmschwelle as low as possible. I'm not sure if that is accomplished by telling the people: "Hey, documentation is easy and awesome! Start documenting where you are right now. By the way, here's a link how googlers do it. It's less than a day to complete. No pressure!"

I think you get the idea ;) Maybe that's a matter of wording:

Suggested change
**Focus on the content. _Always_.**
**Focus on the content. _Always_.**
If you prefer to extend your knowledge in technical writing feel free to visit [the courses about technical writing provided by google.](https://developers.google.com/tech-writing)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I totally agree to making it easy. By pointing to this resource I didn't mean to suggest learning all things tech writing related, but rather providing some hints on how to write. I think often this is the main hurdle. Also, it gives some advice on what to look out for during the review. Maybe adding some examples of good and bad documentation is also a good idea, to make the topic more approachable.


## Who and How

Everyone who's involved in project development should participate. As a rule of thumb every code change should be accompanied by a documentation change.

## When

The most important rule is to document regularly. Every project has many suitable possibilities when documentation can happen. Or at least when to check if a documentation is needed.

- Code changes
- Sprint reviews
- Start of feature development
- End of feature development

The best choice you can make is to take what you already have. As mentioned in section [How to maintain a documentation](#how-to-maintain-a-documentation), documenting is more a task of collecting existing information as producing content from scratch. Use what you have: User stories, task descriptions, estimations.

When you start documenting, we recommend that you nominate a responsible person.

## What to document

### Project setup

The goal is to get every new developer to run the project setup on its own. We highly recommend documenting the project setup within the Readme file of your project and [applying the Readme Day](https://github.com/avenga/coding-guidelines/blob/master/general/readme-day.md).

### System and Software Architecture

The documentation of the software and system architecture describes the big picture of an application. You don’t need to go too much into detail. The goal is to give the viewer an idea of which systems are involved. The system architecture could be a good starting point to dive deeper.

> **Tip:** Use flow charts to visualize the system architecture.

- Containers & Volumes
- Environments
- Deployment pipeline
- Services
- 3rd party dependencies

### APIs

We highly recommend describing your APIs with an OpenAPI (former Swagger) specification. The specification acts as a single source of truth for your system APIs and technical dependencies outside of the project too.

### Features Over Time

Feature documentation should reflect the current state of requirements from a technical perspective. And how these requirements are fullfilled. You should extend the topics by actual examples and exceptions. Especially when no unit tests exists.

The feature documentation acts as single source of truth.

### Contributing

Tell the people how to contribute to the project. The contribution documentation usually consists of several topics. Best place to store the contribution documentation is the `CONTRIBUTING.md.`

- [git branch model and workflow](./avenga-git-guidelines.md)
)
- [merge request/code review rules](./Code-review-rules.md)
- definition of done
- the ticket workflow
- [coding tools config](./coding-tools-configs.md)
- handover rules to other project participants like QA oder UI/UX
- etc.

### Project Sheet

Use the [project sheet template](../doc-templates/PROJECT_SHEET.md) as a starting point. Where participants get the big picture of your project.