Purpose of this document is to act as an entry point to system design documentation and explain the relevant concepts that are needed to be able to work with the software side of the project.
Documentation is aimed to be top-down browsable, so that reader can start from the top level and familiarize him/herself with the high level concepts first. After this reader can move to more precice definitions depending on interests.
Image on the right shows concepts relevant on documentation structure. Software is divided into modules, each having a description. Each module itself might be divided into smaller modules, thus creating a module hierarchy. Example of this hierarchy in logical level is e.g. "car - engine - piston".
Each module (despite of the level in hierarchy) contains:
- One module design
- Module design explains how module is currently implemented in the code
- Zero to several module proposals
- Design of module changes with time. These changes should ideally be first described as proposals. One module might be under several design changes at the same time, thus creating several module proposals. When module proposals are implemented, their description moves (with refinements) to module design. In case old ideas are seen valuable to keep, they are moved to the archive wiki, otherwise they are just deleted
- One page listing module ideas
- While working with a module, developers often come up with ideas how design could be improved. This article is as a freeform page where these ideas can be written. Ideally these ideas should be refined as TRAC tickets at some point.
High Level Layering