Dead Comment
It starts by watching Simple Made Easy by Rich Hickey. And then making every member of your team watch it. Seriously, it is the most important talk in software engineering.
https://www.infoq.com/presentations/Simple-Made-Easy/
Exhausting patterns:
- Mutable shared state
- distributed state
- distributed, mutable, shared state ;)
- opaque state
- nebulosity, soft boundaries
- dynamicism
- deep inheritance, big objects, wide interfaces
- objects/functions which mix IO/state with complex logic
- code than needs creds/secrets/config/state/AWS just to run tests
- CI/CD deploy systems that don't actually tell you if they successfully deployed or not. I've had AWS task deploys that time out but actually worked, and ones that seemingly take, but destabilize the system.
---
Things that help me stay sane(r):
- pure functions
- declarative APIs/datatypes
- "hexagonal architecture" - stateful shell, functional core
- type systems, linting, autoformatting, autocomplete, a good IDE
- code does primarily either IO, state management, or logic, but minimal of the other ops
- push for unit tests over integration/system tests wherever possible
- dependency injection
- ability to run as much of the stack locally (in docker-compose) as possible
- infrastructure-as-code (terraform as much as possible)
- observability, telemetry, tracing, metrics, structured logs
- immutable event streams and reducers (vs mutable tables)
- make sure your team takes time periodically to refactor, design deliberately, and pay down tech debt.
E.g. what exactly does it mean to: >> Don’t use an object to handle information. That’s not what objects were meant for. We need to create generic constructs that manipulate information. You build them once and reuse them. Objects raise complexity in that area.
What kind of generic constructs?
I think a lot of people just wanted to put in their hours and get home to their families. I love pool but never played with anyone on the table one floor down because it just wasn't a make-friends environment. I think I shot the shit with someone when I got into work a handful of times in the more-than-a-year that I worked there. Huge reason I left.
This isn't even coming from a social person. I prefer WFH. I don't particularly like going out. However, if I'm gonna be forced to be around people I'd at least like it to be pleasant.