More software engineering leaders have poorly formed mental models for their work.
Mental models are metaphors for how something works, a simplification of the thing to make it easier to understand it. A few examples from physics would be things like:
- electricity is the flow of positive charge
- gravity is like a spring in reverse
- a black hole sucks everything in
These mental models aren't strictly accurate. So you must be careful when building upon them.
1/
I submit there are likely many major mental models that people actually useβ consciously or unconsciously for how they're doing the work:
- Academia - getting to the answer
- Artisan - making a high quality parts
- Assembly Line - making the whole sequentially
- Construction - making the whole in layers with different crews
- Restaurant - different stations to assemble something
2/
More software engineering leaders have poorly formed mental models for their work.
Mental models are metaphors for how something works, a simplification of the thing to make it easier to understand it. A few examples from physics would be things like:
- electricity is the flow of positive charge
- gravity is like a spring in reverse
- a black hole sucks everything in
These mental models aren't strictly accurate. So you must be careful when building upon them.
1/
Assumptions software engineers make about production networks that are often wrong:
- Network requests always succeed
- Networks are reliable
- Bandwidth is infinite
- Latency is zero
- The network is secure
- Topology doesn't change
- Nothing is shared
- The administrator is trustworthy
- Transport cost is zero
- The network is homogeneous
- Clocks are synchronized
These assumptions, known as the "Fallacies of Distributed Computing," lead to fragile systems that break in production.
Lies programmers believe about scaling:
- if 1 process can handle X requests, then 2 processes can handle 2x requests
- well, 2x requests with 2 processes is possible if there's more than 1 CPU core
- 2x reqs with 2 procs is possible with more than 1 CPU core and plenty of RAM
- uh...and there's plenty of disk space?
- oh, oh, right, and if there's no shared services
- something, something Kubernetes
- ...this can't be this hard
- I'll have time to figure it out later
Maslow's Hammer: If all you have is a hammer, everything looks like a nail.
In software engineering:
- If you only know SQL, every data problem looks like a database problem
- If you only know REST, every API looks like a CRUD interface
- If you only know React, every UI problem looks like a component problem
- If you only know microservices, every system looks like it needs to be distributed
The solution is expanding your toolkit and learning when different tools are appropriate.
Moved my blog from Substack to self managed:
https://robertroskam.com/blog/
I flipped the switch in the past hour or so.
I expect itβs still going to be bare bones for a bit.
Enjoy!
Aaaaand a few hours later I have 100s across the index page.
Moved my blog from Substack to self managed:
https://robertroskam.com/blog/
I flipped the switch in the past hour or so.
I expect itβs still going to be bare bones for a bit.
Enjoy!
For software engineers, how much of your week to you spend writing documentation?
Things no one will mention at your funeral:
- participated in standups
- increased to shareholder value
- got in expense report on time all the time
- had 90% code coverage on all PRs
- clocked your time on time all the time
This is not an exhaustive list by any means.
Imma having nachos