diff --git a/README.md b/README.md index d1285b3..80950db 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # overview +This is about our software architecture. + + Architecture is the art of decrease software developers freedom without increasing their suffering. + +You may find other definitions here: +* https://martinfowler.com/architecture/ diff --git a/adr-c4k/project-section.md b/adr-c4k/project-section.md index 1b667e6..04c40ea 100644 --- a/adr-c4k/project-section.md +++ b/adr-c4k/project-section.md @@ -6,8 +6,6 @@ You can use [adr-tools](https://github.com/npryce/adr-tools) for managing the AD In each ADR file, write these sections: -# Title - ## Status What is the status, such as proposed, accepted, rejected, deprecated, superseded, etc.? diff --git a/principles/ConfigAsData.md b/principles/ConfigAsData.md new file mode 100644 index 0000000..479a0ab --- /dev/null +++ b/principles/ConfigAsData.md @@ -0,0 +1,38 @@ +https://github.com/juxt/aero + +### Explicit and intentional + +Configuration should be explicit, intentful, obvious, but not clever. It +should be easy to understand what the config is, and where it is +declared. + +Determining config in stressful situations, for example, while +diagnosing the cause of a production issue, should not be a +[wild goose chase](http://en.wiktionary.org/wiki/wild-goose_chase). + +### Avoid duplication ... + +Config files are often duplicated on a per-environment basis, attracting +all the problems associated with duplication. + +### ... but allow for difference + +When looking at a config file, a reader will usually ask: "Does the value differ from the default, and if so how?". It's clearly better to answer that question in-place. + +### Allow config to be stored in the source code repository ... + +When config is left out of source code control it festers and diverges from the code base. Better to keep a single config file in source code control. + +### ... while hiding passwords + +While it is good to keep config in source code control, it is important to ensure passwords and other sensitive information remain hidden. + +### Config should be data + +While it can be very flexible to have 'clever' configuration 'programs', it can be [unsafe](http://www.learningclojure.com/2013/02/clojures-reader-is-unsafe.html), lead to exploits and compromise security. Configuration is a key input to a program. Always use data for configuration and [avoid turing-complete](http://langsec.org/occupy) languages! + +### Use environment variables sparingly + +We suggest using environment variables judiciously and sparingly, the way Unix intends, and not [go mad](http://12factor.net/config). After all, we want to keep configuration explicit and intentional. + +Also, see these arguments [against](https://gist.github.com/telent/9742059). \ No newline at end of file diff --git a/principles/README.md b/principles/README.md index 82fe393..e1f628f 100644 --- a/principles/README.md +++ b/principles/README.md @@ -3,18 +3,10 @@ 1. Jedes Element nur einmal testen 2. möglichst billig testen 3. YAGNI / KISS - -#Postel's Law: - -be conservative in what you do, be liberal in what you accept from others. - -https://martinfowler.com/bliki/TolerantReader.html - 5. DDD Aufteilung nutzen 1. Domain isoliert - isoliert testbar 2. Inputs / Outputs validieren 3. Aggregate bilden -6. Configuration ist dumm 7. Wir programmieren in Programmiersprachen und nicht in XML / Template / yaml ... 8. Gute Programmiersprachen erfinden ist schwierig, drum lassen wir das 9. Microkernel diff --git a/principles/TolerantReader.md b/principles/TolerantReader.md new file mode 100644 index 0000000..7ae1d41 --- /dev/null +++ b/principles/TolerantReader.md @@ -0,0 +1,5 @@ +#Postel's Law: + +be conservative in what you do, be liberal in what you accept from others. + +https://martinfowler.com/bliki/TolerantReader.html \ No newline at end of file