Push as many workloads up the stack as feasible.
What do you want to be
responsible for going forward?
When the platform does more, you
spend more time delivering code.
The further up the stack you go, the
less time you spend on plumbing.
Ultimately, you have to do what
is right for your needs.
Orchestration is fantastic if you
need to run on a speciﬁc port.
Many 3rd party apps are
delivered as Docker images.
But that doesn’t mean it is the
right spot for every workload.
— Adam Wright
The prevailing mythology is you should
"containerize" everything and give it to a
container orchestrator to run, but why?
They had one problem, "Run an app". Now
they have two, "Run a container that runs
an app" and "maintain a container".
1. One codebase in version control,
2. Explicitly define your dependencies.
3. Configuration must be separate from
4. Backing services are just attached
5. Build, release, run.
6. Stateless - share nothing.
7. Export services via port binding.
8. Scale via process.
9. Start up fast, shut down gracefully.
11.Logs as event streams.
12.Admin tasks run as one off
Fair amount of repetition in a
Spring Boot simpliﬁes 12
Factor app development.