Initial commit with some problems worth solving

This commit is contained in:
R Tyler Croy 2019-02-10 16:09:45 -08:00
commit f1e354c936
No known key found for this signature in database
GPG Key ID: E5C92681BEF6CEA2
1 changed files with 60 additions and 0 deletions

60
README.adoc Normal file
View File

@ -0,0 +1,60 @@
= Otto
Meet Otto, your friendly continuous delivery companion. Otto does not aim to be
the center of the entire continuous delivery process, but rather seeks to
interoperate seamlessly with all the various components which make CD work for
you.
== Problems to Solve
Below is an incomplete listing of the problems Otto aims to solve for:
* **Existing tools to not model the entire continuous delivery process.** Using
an external tool such as Puppet, or relying on an external provider such as
AWS ECS, there can be a "black hole" in the deployment. A point where control
is delegated to an external system, and the orchestration tool (Otto), loses
sight of what is happening.
* **Expecting "one single instance" to be the hub is unrealistic.** Many
deployment processes have "development" operated components, and "ops"
operated components, with little to no automated hand-off of control between
the two.
* **Mixing of management and execution contexts causes a myriad of issues.**
Many tools allow the management/orchestrator process to run user-defined
workloads. This allows breaches of isolation between user-defined workloads
and administrator configuration and data.
* **Non-deterministic runtime behavior adds instability.** Without being able to
"explain" a set of operations which should occur before runtime, it is
impossible to determine whether or not a given delivery pipeline is correctly
constructed.
* **Blending runtime data and logic with process definition confuses users.** Related to the
problem above, Providing runtime data about the process in a manner which is
only accessible in the delivery process itself, overly complicates the parsing
and execution of a defined continuous delivery process.
* **Modeling of the delivery process is blurred with build tooling.** Without a
clear separation of concerns between the responsibility of build tools like
GNU/Make, Maven, Gradle, etc and the continuous delivery process definition,
logic invariably bleeds between the two.
* **Opinionated platform requirements prevent easy usage across different
environments.** Forcing a reliance on containers, or a runtime like the Java
Virtual Machine results in burdensome system configuration before starting to
do the real work of defining a continuous delivery process. Without gracefully
degrading in functionality depending on the system requirements which are
present, users are forced to hack around the platform requirements, or spent
significant worrying about and maintaining pre-requisites.
* **Nany tools are difficult to configure by default.** For most application
stacks, there are common conventions which can be easily prescriped for the
80% use-case. Ruby on Rails applications will almost all look identical, and
should require zero additional configuration.
* **Secrets and credentials can be inadvertently leaked.** Many tools provide
some ability to configure secrets for the continuous delivery process, but
expose them to the process itself in insecure ways, which allow for leakage.
* **Extensibility must not come at the expense of system integrity.** Systems
which allow for administrator, or user-injected code at runtime cannot avoid
system reliability and security problems. Extensibility is an important
characteristic to support, but secondary to system integrity.
* **Usage cannot grow across an organization without user-defined extension**.
The operators of the system will not be able to provide for every eventual
requirement from users. Some mechanism for extending or consolidating aspects
of a continuous delivery process must exist.