From a353c1abde7b5dca371aefe0c7e1ce6c5da1d724 Mon Sep 17 00:00:00 2001 From: Michele Cereda Date: Wed, 29 May 2024 10:11:43 +0200 Subject: [PATCH] add sources, review generic concepts and improve wording --- knowledge base/best practices.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/knowledge base/best practices.md b/knowledge base/best practices.md index 5d824e8..9cb6ddc 100644 --- a/knowledge base/best practices.md +++ b/knowledge base/best practices.md @@ -26,10 +26,16 @@ What really worked for me. implement.
Things change constantly: new technologies are given birth often, and processes improve. Also, now you know better then before. +- Focus on the real problem at hand.
+ Beware the [the XY problem]. +- Do not make things more complicated than they **need** to be. - Keep things simple (KISS approach) **with respect of your ultimate goal** and not only for the sake of simplicity.
Always going for the simple solution makes things complicated on a higher level.
Check out [KISS principle is not that simple]. +- Stop modularizing stuff just to [avoid repetitions][don't repeat yourself(dry) in software development]. +- Stop [abstracting away][we have used too many levels of abstractions and now the future looks bleak] stuff that does + not need to be (`docker-cli`/`kubectl` wrappers mapping features 1-to-1, anyone?). - Beware of complex things that _should be simple_.
E.g., google what the _[SAFe] delusion_ is. - Focus on what matters, but also set time aside to work on the rest.
@@ -37,15 +43,15 @@ What really worked for me. - Learn from your (and others') mistakes.
Check out the [5 whys] approach. - Put in place processes to avoid repeating mistakes. -- Automate when and where you can, yet mind [the automation paradox]. -- Automation does **not** necessarily involve - [abstracting away][we have used too many levels of abstractions and now the future looks bleak]. +- Automate when and where you can, yet mind [the automation paradox] and + [abstractions][we have used too many levels of abstractions and now the future looks bleak]. - Keep different parts **de**coupled where possible, the same way [_interfaces_ are used in programming][what does it mean to program to interfaces?].
This allows for quick and (as much as possible) painless switch between technologies. - The _one-size-fits-all_ approach is a big fat lie.
You'll end up with stiff, hard to change results that satisfy nobody. This proved particularly true with regards to - templates and pipelines. + templates and pipelines.
+ Stop designing systems that _should work for everybody at all times_. - Choose tools based on **how helpful** they are to achieve your goals.
Do **not** adapt your work to specific tools. - Backup your data, especially when you are about to update something.
@@ -70,7 +76,8 @@ What really worked for me. They are **not** to be taken literally.
They **need** to be adapted to the workplace, not the other way around. - [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. + They are generally good practices, but only Amazon is able to apply them as they are defined **and** they still create + a lot of discontent when used against people. - Keep Goodhart's law in mind: > When a measure becomes a target, it ceases to be a good measure. @@ -154,6 +161,8 @@ Listed in order of addition: - [Why your platform monolith is probably a bad idea] by David Leitner - [How to mind Goodhart's law and avoid unintended consequences] - [The XY problem] +- [Don't repeat yourself(DRY) in Software Development] +- [Wisdom From Linus - Prime Reacts]