Informal decision-making considered harmful

Hamid159267 189 views 42 slides Aug 08, 2024
Slide 1
Slide 1 of 42
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42

About This Presentation

Tribal Knowledge or Informal Decision-Making has decreased the quality of building solutions in Software Engineering.
During this talk, I've shared my experience with this problem and have tried to provide a solution.


Slide Content

Informal decision-making
is *considered harmful!


* https://en.wikipedia.org/wiki/Considered_harmful
by Hamid Davoodi

Imagine a very likely scenario
●Moved to a new team in your current company
●Working on a new project in the same team
●You are asked to cover someone for a while
●Work with some other team to fix an issue
●Moving to a new company
●Went to coma and woke up 6 month later

To not reinvent the wheel

We ask questions!

You’d have many questions!
●Why gRPC over web?
●Why NodeJS over Java?
●Why Scala over Java?
●Why DC over Cloud?
●Why Cloud over DC?
●Why NoSQL over ACID?



●Why RabbitMQ and not Kafka?
●Why a new API?
●Why CDN over API?
●Why RMQ has only one instance?
●Why this particular database?
●Why PostgreSQL over Redis?

But any answers?
➔I don’t know, Ask Jim, he probably knows why
➔Alex did that, he left the company
➔I have no idea! You tell me
➔That was a mistake because …
➔It’s probably because of …
➔EMs decided that and I don’t know/remember why.

What was the objective?
●What the problem was?
●What about alternative solutions?
●What was risk mitigation strategy?
●Did it achieve the end goal?
●Was it worth it?
We don’t know :(

Why?
●Bus Factor
●Personal Bias
●No preserved history
●No measurement
●Hype Driven Development
●Informal Conversations
It’s “forgotten” history

All we know is that
A Solution
to
A Problem
It was a
Design
Decision
=

What’s to blame?!
Informal Decision-Making
aka
Tribal Knowledge

Tribal Knowledge
Or informal knowledge refers to the unwritten, unspoken, and often
implicit understanding, skills, and practices that exist within a group or
organization.

https://en.wikipedia.org/wiki/Tribal_knowledge
https://devblogs.microsoft.com/premier-developer/tribal-knowledge-the-anti-devops-culture/

Why is Tribal Knowledge a thing?
It’s Faster
in the short term!
Delegating to a few
It’s easier
Agile?!

Why is Tribal Knowledge a thing?
It’s faster in the short term!

However, It leads to longer-term issues in
code quality,
team alignment,
and system maintainability.

Tribal Knowledge’s risks:
●Lack of transparency:
Decisions may be made without all stakeholders being aware or having input.
●Inconsistency:
Without a formal process, similar issues might be handled differently each time.
●Limited perspective:
Quick, informal decisions often don't benefit from diverse viewpoints or expertise.
●Poor documentation:
The reasoning behind decisions may not be recorded, leading to confusion later.
●Miscommunication:
Important details or considerations can be easily overlooked or misunderstood.

Tribal Knowledge’s risks:

●Difficulty in scaling:
As teams grow, informal processes become less effective and more prone to errors.
●Reduced accountability:
It's harder to track who made what decision and why.
●Increased technical debt:
Hasty, undocumented decisions can lead to suboptimal solutions that cause problems later.
●Missed opportunities for improvement:
Without a formal review process, chances to refine ideas are often lost.
●Risk of bias:
Informal processes may favor the loudest voices or highest-ranking team members, rather
than the best ideas.

Solution?
●Preserve History
●Spread Awareness
●Gather Feedback
●Reach Consensus

https://peps.python.org/pep-0020/ = Explicit is better than implicit
Design Decisions

Back to basics
Solution(s)
to
Problem(s)
On the way of
An Objective

A
Design
Decision
=

What’s a problem?

Any obstacles
preventing us from reaching
an objective.

What’s a solution?
Any
tools/strategies/implementations
that help us to
overcome a problem
in the context of reaching an objective.

What’s an objective?
A specific and
measurable goal
to achieve within a defined
timeframe.

Let’s propose
a document structure for
Design Decisions.

To document a Design Decision:
●Context:
Define what’s the current state and
the objective to reach

To document a Design Decision:
●Problems:
Find all obstacles on our way to
reach the objective

To document a Design Decision:
●Solution proposal:
The least riskiest solution for the
most obstacles

To document a Design Decision:
●Alternatives:
List all the other feasible solutions

To document a Design Decision:
●Risks and mitigations:
List mitigations on risks of the
chosen solution(s)

To document a Design Decision:
●Cost factors:
Define Timeline, Estimations,
Budget

To document a Design Decision:
●Success metrics:
Evaluate how to conclude

Structured Design Decision
●Context: Define what’s the current state and an objective to reach
●Problems: Find all obstacles on our way to reach the goal
●Solution proposal:
Choose the least riskiest solution for the most obstacles by comparison
●Alternatives: List all the possible solutions
●Risks and mitigations: List mitigations on risks of the chosen solution(s)
●Cost factors: Define Timeline, Estimations, Budget
●Success metrics: Evaluate how to conclude

Request For Comments (RFC)
A formal document proposing a new feature, process, or
major change in any topic or scope, intended to gather
feedback and reach consensus before implementation.


https://en.wikipedia.org/wiki/Request_for_Comments

RFC structure
●Context
●Problems
●Proposal
●Alternatives
●Risks and mitigations
●Timeline, Estimations, Cost
●Success metrics


Don’t forget to:
1.Share it
2.Ask for feedbacks
3.Reach consensus
4.Publish it

RFC Process

An interesting tool for RFCs:
Architectural Design Records
adr.github.io

Another process!? You anti-agile monster!
Let’s go through agile principles:
●Individuals and interactions OVER processes and tools
●Working software OVER comprehensive documentation
●Customer collaboration OVER contract negotiation
●Responding to change OVER following a plan

Isn’t this against Agile?! Nope.
RFCs can align with agile principles by:
●Promoting transparency and collaboration
●Encouraging early feedback on significant changes
●Providing a mechanism for continuous improvement

To maintain agility, RFC process should be:

●Lightweight and flexible
●Used selectively for significant decisions
●Time-boxed to prevent analysis paralysis
●Focused on outcomes rather than extensive
documentation

Don’t we already have this?!
●New feature? Yes, Jira + Github
●Processes? No.
●Architectural
Decisions? No!

Why RFCs?
●Clarifies what the objective, explicitly, is
●Refine what the problems are
●Test and confirm your idea
●Eradicates jumping to conclusions
●No Tribal Knowledge
●Easier to ask for a change
●Synchronization with other teams

Right?!
RFC > Meeting

Please tell me
Based on
which RFC
did you make a
Design Decision?
Objective?
Problem?
Success
Metrics?
Solution?

We can do it, too.
Link

Thanks
Questions?


References
https://blog.pragmaticengineer.com/scaling-engineering-teams-via-writing-things-down-rfcs/
https://www.industrialempathy.com/posts/design-docs-at-google/
https://blog.pragmaticengineer.com/rfcs-and-design-docs/

What do YOU think?
Now what?