Flow for Engineers
This methodology can be used as additional helper for 12-Factor app or can be used separately, as standalone practice. This methodology created by author Sys-Adm.in blog and is using in Open BLD DNS project.
Main principles:
Automation
Maximum coverage (if possible) of all aspects of using the application, examples of the main phases:
- Assembly
 - Deploy
 - Deprecation
 - Configuration
 - Backup
 - Failover
 
Thesis: Minimum human factor, automate be concise.Minimalism / Conciseness
A minimum of third-party tools, a bias towards built-in tools in the platforms used (for example: bash on Linux, powershell on Windows, etc.). Close principles - KISS, Unix-way. The fewer components in the environment (points of failure), the better.
Thesis: Make it simple, at minimum wages, but do not forget about safety.Security
Approach examples:
- Separation of powers
 - Granular Access
 - Using roles
 - Logging and notifications
 
Thesis: More rake in the way of the attacker.Notifications
Find out about the incident from a quick notification, the main principles are:
- Granular triggering
 - Fast messaging
 - Messages within the nearest reach (for example, your favorite messenger)
 
Thesis: Notify only about the important.Measurability
Sets of internal metrics on which notification triggers or logged events are based. Examples:
- Service stop
 - Port unreachable
 - Number of requests
 - CPU recycling
 
Thesis: Have a minimum set of metrics to identify a problem or event.Self-healing
Examples:
- Service stopped - attempt to restart
 - Service unavailable - attempt to reconfigure
 - DoS / DDoS - an attempt to level or self-destruct
 
Thesis: Internal monitoring (or self-diagnostics) for the purpose of self-healing or self-destruction (minimization of failover events).Flexibility
Examples of flexibility:
- Cross-platform
 - Unification
 - Binary applications (e.g. GoLang binaries)
 
Thesis: Automation, conciseness, cross-platform give flexibility.Documentations
Any kind/type of supporting documentation. Examples:
- Self-documentation (for example: scripts, api, comments in the code, names of functions or methods, etc.)
 - Readme
 - Scheme / Diagram
 - Pen on paper
 - Photo (for example, a photo of the board where the diagrams were drawn during the discussion)
 - Screenshots
 - etc