Engineering Code
December 5, 2021 ยท View on GitHub
Engineers make complex systems simple
- Reduce complexity
- Becareful about increasing/introducing complexity
Identify the funnel
Identify each step in the funnel
Within each step, identify the inputs, processes, and outputs
See if the process can be broken down
See if the process can be done in parallel
Build tools to measure the funnel
If you can't measure it. You can't improve it.
Build it into a chart.
See Pipelines
Funnel Data Structure
Table
| Source | Destination | Time |
|---|---|---|
| 1 | 2 | 2015-11-05 12:33:41 |
| 1a | 2 | |
| 1b | 2 | |
| 2 | 3 | |
| 2 | 4 |
Having such a table means you can generate a graph.
Search online: Representing a graph in a database
Steps can change, moved, and removed
Steps can be parallized
Tests, Monitoring, Alerts
Build these in.
Make it easy to do so.
Reduce Technical Debt
Cons of Technical Debt
- Slows you down
- Slows down the team
- Harder to clean up the longer it exists
- Frustrating
- Burns out people
Introduced as:
- Complexities
- Inconsistencies
- Non standardization
- Gotchas
- Surprises
- Patches
- Death by a thousand commits
- Poor foresight
- Poor encapsulation
The road to hell is paved with good intentions
Maintaining/Managing States is a PITA
Maintaining/managing states is a PITA. When there are more states to maintain, it increases the complexity of the project.
What slows down momentum
- Processes
- We should engineer the processes out. Automate them. That is what engineering does best.
- Communication Overhead
- We should engineer reducing communication overhead.
- Non Reproducible Steps
- We should engineer reproducible steps.
- Synchronous Knowledge Sharing
- We should engineer asynchronous knowledge sharing.