Design goals
I noticed that it might make sense to add some information about the goals I have set for myself for this project:
-
Everything-as-code
The tool should work in a continuos integration environment. The input format should be diff-able to support common git workflows with pull/merge requests.
-
Simplicity
I would like to keep things simple. Simple for me and others.
That means the input format should be simple to learn and edit manually in any editor. I also did not want invent a new DSL (domain-specific language) for that purpose. YAML (input file format) might not be the best format, but it serves as a good tradeoff for my purposes. Moreover, it can be parsed by other programs easily, too.
-
Standard conformance
I would like the program output to be very close to the GSN standard.
I don't want to redefine the semantics or add additional ones. The standard was created so that as many people as possible have some common grounds. If I added new fancy stuff, everyone might have a different interpretation of that again.
-
As few dependencies as possible
Since I understand that this tool might be used in some corporate environment where usage of free and open-source software might be limited, I try to keep the dependencies of this program as few as possible.
I used a very relaxed license and try to take care that it is compatible with those of the dependencies.
-
Full control by the user how the diagram is layed out
Creating an optimal rendering for all different use-cases is incredibly difficult. I failed in creating an algorithm that would allow for that. When trying I recognized that it is anyhow preferable to give the user full control over how the diagram should look like.