# Documentation

Documentation has two audiences:

* Users, who must be able to understand the API
* Developers, who must be able to understand the implementation

## Documentation components

There is not a single way to document a project, but the following should be included in the project:

* Readme
* License info
* Generated documentation site
* Issues tracking

### Readme

The readme should give a quick introduction to the project and be included in the project root to be noticed fast.

It is not a manual by itself, but a quick-start guide. After reading it anybody should know what the project is about, who is working on it and where to start if he wants to use or modify it.

Currently the readmes are being divided into the following sections:

* Introduction
* Features
* Documentation
* Usage, including prerequisites and installation
* How to collaborate
* License

### License

The license file should use a standard license and be included in the project root to be noticed fast. This tells developers what they can do with the application.

Check a licenses guide:

* [Choose a License](https://choosealicense.com/)

Recommended licenses:

* MIT license for simple projects or examples, meant for a wide use
* Apache 2 license for more complex projects, meant for a specific range of users

### Generated documentation site

There are services for generates documentation:

* [RTD](https://readthedocs.org/)
* [GitBook](https://www.gitbook.com)

And tools for generating documentation:

* [Sphinx](http://www.sphinx-doc.org)
* [Maven site](https://maven.apache.org/plugins/maven-site-plugin/)
* [Jekyll](https://jekyllrb.com/)

More details will be given in other chapters.

### Issues Tracker

There are several services and applications for the issues tracker.

If using Github, it offers one for every repository.

Some alternatives which require a server:

* [Redmine](https://www.redmine.org/)
* [Jira](https://www.atlassian.com/software/jira)

## Diagrams

Visual diagrams are helpful for documentation. These should follow the UML specifications.

Tools for creating diagrams:

* [UMLet](http://www.umlet.com/), free and simple Eclipse-based UML editor
* [Enterprise Architect](https://github.com/bernardo-mg/development-docs/tree/607d3a34739325f64d3fc216771c0bc79458f781/general/sparxsystems.com/products/ea/README.md)

## Additional information

* [Write the Docs](http://www.writethedocs.org/guide/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bernardo.gitbook.io/development-docs/general/documentation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
