diff --git a/knowledge base/best practices.md b/knowledge base/best practices.md index 8c504f3..86188e6 100644 --- a/knowledge base/best practices.md +++ b/knowledge base/best practices.md @@ -1,6 +1,14 @@ # OAM best practices -What really worked for me: +What really worked for me. + +1. [Generic concepts](#generic-concepts) +1. [CI/CD specific](#cicd-specific) + 1. [Pipelining](#pipelining) +1. [Product engineering](#product-engineering) +1. [Sources](#sources) + +## Generic concepts - Always think critically.
If you do/think things just bEcAuSe OtHeRs SaId So, all you're doing is admitting **both** that you know no better **and** that you're not willing to consider otherwise. @@ -46,14 +54,36 @@ What really worked for me: - Be aware of [corporate bullshit][from inboxing to thought showers: how business bullshit took over]. - [Amazon's leadership principles] are double-edge swords.
Only Amazon was able to apply them as they are defined, and they still create a lot of discontent. + +## CI/CD specific + - Keep _integration_, _delivery_ and _deployment_ separated.
They are different concepts, and as such should require different tasks.
This also allows for checkpoints, and to fail fast with less to no unwanted consequence. -- All pipelines' tasks should be able to execute from one's own local machine. -- Keep pipelines' tasks as simple, consistent and reproducible as possible.
- Avoid like the plague to put programs or scripts in pipelines: they should be _glue_, not applications. -- Pipelines are meant to be used as **last mile** steps for specific goals.
- There **cannot** be a single pipeline for everything, the same way as _one-size-fits-all_ never works. + +### Pipelining + +- Differentiate what the concept of pipelines really is from the idea of pipelines in approaches like DevOps.
+ Pipelines are sequences of actions. Pipelines in DevOps and alike end up being magic tools to take actions away from people. +- Keep in mind [the automation paradox].
+ Pipelines tend to easily become complex systems just like Rube Goldberg machines. +- Keep tasks as simple, consistent and reproducible as possible.
+ Avoid like the plague to put programs or scripts in pipelines: they should be _glue_, not replace applications. +- All tasks should be able to execute from one's own local machine.
+ This allows to fail fast and avoid wasting time waiting for pipelines to run in a blackbox somewhere. +- DevOps pipelines are meant to be used as **last mile** steps for specific goals.
+ There **cannot** be a single pipeline for everything, the same way as the _one-size-fits-all_ concept never really works. + +## Product engineering + +Consider what follows for infrastructure and platform engineering as well. + +- Focus on creating things users will want to use.
+ Tools should solve issues and alleviate pain points, not create additional walls. +- Focus on small audiences first. Avoid trying appealing lots of users from the beginning.
+ If you do not have a user base, the product has no reason to exist but your will to create it. +- Consider and fix users' pain points **before** adding new features.
+ If users are not happy with your tool, they'll try moving away from it. ## Sources