README: Document how this tech tree works
This commit is contained in:
parent
c1936c7ed2
commit
7762dbe80f
134
README.md
134
README.md
|
@ -3,9 +3,143 @@ FAFO Technology Tree
|
||||||
This repository tracks our "technology tree" — the steps towards our
|
This repository tracks our "technology tree" — the steps towards our
|
||||||
overarching goals.
|
overarching goals.
|
||||||
|
|
||||||
|
A description of how this tech tree works can be found below. See
|
||||||
|
[Working with the Tech Tree](#working-with-the-tech-tree).
|
||||||
|
|
||||||
## Full Technology Tree
|
## Full Technology Tree
|
||||||
Below, you can see the full technology tree. The issues in this repository
|
Below, you can see the full technology tree. The issues in this repository
|
||||||
track the elements it contains. For better overview, check each issue for its
|
track the elements it contains. For better overview, check each issue for its
|
||||||
relevant subtree.
|
relevant subtree.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Working with the Tech Tree
|
||||||
|
Fundamentally, the tech tree is built from the issues in this repository and
|
||||||
|
their interdependencies. For elements to be reached, create new issues and
|
||||||
|
select one of the `Type/###` labels to declare what kind it is:
|
||||||
|
|
||||||
|
- Type/**Equipment** 🔬 — A piece of machinery that we need to acquire or get
|
||||||
|
running. Mainly things that can be bought instead of built.
|
||||||
|
|
||||||
|
- Type/**Process** ⚗️ — A process we need to achieve. This means we need to
|
||||||
|
become able to perform this process reliably.
|
||||||
|
|
||||||
|
- Type/**Development** 🔩 — A device, software, or other thing we need to develop.
|
||||||
|
This is _engineering_ work; making use of existing knowledge to build
|
||||||
|
something useful.
|
||||||
|
|
||||||
|
- Type/**Research** 🧪 — A topic that we can or must research to unlock future
|
||||||
|
capabilities. In contrast to _Development_ elements, we cannot make use of
|
||||||
|
prior art here. So less engineering and more _science_.
|
||||||
|
|
||||||
|
#### Dependencies
|
||||||
|
Once created, add dependencies between issues to model their relationships.
|
||||||
|
The CI of this repository will automatically update the tech tree accordingly.
|
||||||
|
In addition, each issue gets a partial representation of the subtree of
|
||||||
|
elements directly related to it. You can quickly see what is still missing to
|
||||||
|
achieve a particular element. And also what next steps will be unlocked once
|
||||||
|
an element has been achieved.
|
||||||
|
|
||||||
|
There are no distinct types of dependencies. This was a choice in the name of
|
||||||
|
keeping the model simple. All dependencies are hard requirements. But also
|
||||||
|
check the next section on more thoughts about this...
|
||||||
|
|
||||||
|
#### Modelling Approach
|
||||||
|
Finding the right balance between model complexity and expressiveness is
|
||||||
|
tricky. Following are some guidelines for adding elements to this tech tree.
|
||||||
|
|
||||||
|
All elements should have a few fundamental properties, to keep the model consistent:
|
||||||
|
|
||||||
|
- Elements shall have a **clear and unambiguous acceptance criterion**. If
|
||||||
|
necessary, this can be elaborated on in the issue body. "SEM Imaging" leaves
|
||||||
|
open what scale we can image reliably. It may be sensible to add multiple
|
||||||
|
elements to model progress in such a domain.
|
||||||
|
|
||||||
|
- Elements shall be **actionable**, in the sense that someone can put in effort to
|
||||||
|
achieve them. Having a good acceptance criterion does most of the heavy
|
||||||
|
lifting here.
|
||||||
|
|
||||||
|
- Elements shall be **necessary** for our bigger visions. Ultimate elements
|
||||||
|
(elements that nothing depends on) should get special consideration in this
|
||||||
|
regard. If you have visions of your own, it is of course fine to make an
|
||||||
|
ultimate element for them.
|
||||||
|
|
||||||
|
- Elements shall have a scope/granularity size that is appropriate for tracking
|
||||||
|
progress. We will need to figure this out as we go.
|
||||||
|
|
||||||
|
Generally, our tech tree is a living object. It should be updated as we figure
|
||||||
|
out more elements to be tracked and their dependencies.
|
||||||
|
|
||||||
|
One topic of particular interest are "path choices". We can either use
|
||||||
|
technology A or technology B to achieve element C:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart BT
|
||||||
|
classDef eoi fill:#fff, stroke:#000;
|
||||||
|
classDef dependant fill:#fff, stroke:#888, color:#888;
|
||||||
|
classDef dep_missing fill:#fcc, stroke:#800;
|
||||||
|
classDef dep_assigned fill:#ffa, stroke:#a50;
|
||||||
|
classDef dep_completed fill:#afa, stroke:#080;
|
||||||
|
0:::dep_missing
|
||||||
|
0["#1 | MISSING\n<i>Process</i>\n<b>Technology A</b>"]
|
||||||
|
1:::dep_completed
|
||||||
|
1["#2 | COMPLETED\n<i>Process</i>\n<b>Technology B</b>"]
|
||||||
|
2:::eoi
|
||||||
|
2["#3 | MISSING\n<i>Process</i>\n<b>Element C</b>"]
|
||||||
|
2 --> 0
|
||||||
|
2 --> 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Dependencies cannot express such choices. Instead, please follow this approach:
|
||||||
|
|
||||||
|
- Initially, all potential path choice dependencies are added. The issue body
|
||||||
|
shall document the choice options and implications.
|
||||||
|
|
||||||
|
- When we get closer to the element of interest, we make the choice of what
|
||||||
|
path to pursue. At this time, the other dependencies are dropped. The
|
||||||
|
tech-tree now only documents the path choice we have made.
|
||||||
|
|
||||||
|
Another situation we will encounter is the need to use generic equipment for
|
||||||
|
specific purposes. If the specific purpose is non-trivial, it shall be
|
||||||
|
modelled as an intermediate _Process_ element in-between:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart BT
|
||||||
|
classDef eoi fill:#fff, stroke:#000;
|
||||||
|
classDef dependant fill:#fff, stroke:#888, color:#888;
|
||||||
|
classDef dep_missing fill:#fcc, stroke:#800;
|
||||||
|
classDef dep_assigned fill:#ffa, stroke:#a50;
|
||||||
|
classDef dep_completed fill:#afa, stroke:#080;
|
||||||
|
0:::dep_missing
|
||||||
|
0["#2 | MISSING\n<i>Process</i>\n<b>Processing X using machine A</b>"]
|
||||||
|
1:::dep_completed
|
||||||
|
1["#1 | COMPLETED\n<i>Equipment</i>\n<b>Generic Machine A</b>"]
|
||||||
|
2:::eoi
|
||||||
|
2["#3 | MISSING\n<i>Process</i>\n<b>Element C</b>"]
|
||||||
|
2 --> 0
|
||||||
|
0 --> 1
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Element Status
|
||||||
|
The status of each element is determined as follows:
|
||||||
|
|
||||||
|
- **MISSING** when the element has not yet been achieved.
|
||||||
|
- **ASSIGNED** when the issue has been assigned to someone. This means we are making progress!
|
||||||
|
- **COMPLETED** when the issue gets closed. Achievement unlocked!
|
||||||
|
|
||||||
|
#### Important notes
|
||||||
|
There are a few gotchas that you should be aware of:
|
||||||
|
|
||||||
|
- The CI will not automatically update when changing dependencies,
|
||||||
|
unfortunately. You can force a trigger by editing the issue body or quickly
|
||||||
|
adding and then removing the `Stale` label.
|
||||||
|
|
||||||
|
- You cannot add dependencies on closed issues via the Forgejo interface. To
|
||||||
|
model such dependencies, temporarily reopen the dependency issue and close it
|
||||||
|
again after adding the relationship.
|
||||||
|
|
||||||
|
- Issues that should no longer be a part of the techtree should either be
|
||||||
|
deleted (looses all tracking) or they can be made inert by removing the
|
||||||
|
`Type/###` label.
|
||||||
|
|
Loading…
Reference in a new issue