Wednesday, July 21, 2021

rules

I was doing the laundry a while ago (I first started writing this in May of 2019), and I got to some stuff where I wasn’t sure whether it was actually dirty and needed a wash, or if I’d just tossed it on top of the pile on the way to the shower one night thinking I’d sort it later. Should I trust my past self to have made a definitive decision that everything in the pile was dirty? Or did my past self act on the belief that my future self would make informed decisions about the pile’s contents?

In thinking about this, I came to something like a general rule: Minimize the trust that you need to place in past and future versions of yourself.

That is, past-Brennen would have done best to make the decisions about whether something was dirty instead of deferring them to future-Brennen. And indeed I washed pretty much everything in the laundry pile because it’s easier to assume past-Brennen was sending a clear signal than to re-evaluate the whole pile, but I think in more serious situations it’s important to always keep in mind that past-Brennen is at least as likely to have screwed up as now-Brennen.

Ideally, you shouldn’t have to make leaps of faith about your past selves' correctness, and you should operate with an awareness that your future selves will have a lousy memory and shortages of time/energy to deal with your unfinished work. Consequently, you should label things, document interfaces, write tests for your software, put your keys and wallet in the same place every time they aren’t on your person, etc.

I have to think about that rule and its phrasing for before I add it to my overall List of Rules, but it has promise. I’ve been thinking about rules of this sort—aphorisms, rules of thumb, personal commandments, proverbs, epigrams, whatever—for a long time. Now and then some phrase or injunction-to-self will prove itself useful for a while, and the idea of a personal canon of them seems attractive.

Two that I’ve thought about lately: The Ferengi Rules of Acquisition, and my colleague Lars’s list, quoted here in full:

  1. Always copy and paste a URL.
  2. A will-do attitude trumps skills.
  3. Always ask the simple troubleshooting questions first.
  4. Externalize your memory: write things down, always carry a notebook.
  5. Measure, don't guess.
  6. Write flames, but don't send them.
  7. Always write unit tests for error handling.
  8. Aim for 100% test coverage. You'll never get there, but bugs mostly happen in the parts without tests.
  9. Don't be late in telling you're late.
  10. If you cannot automate it, make a checklist out of it.
  11. Be careful what you reward, because you will get more of it.
  12. Be careful what you measure, because you will optimize for that.
  13. Don't debate with analogies.
  14. Always indicate time zone explicitly.

Those are pretty good.

Here’s a crack at the list that’s been floating around in my head:

  • Do the dishes.
  • Only break one law at a time.
  • Ask the stupid questions early.
  • Don’t deploy on a Friday.
  • Don’t let your gas tank drop below half.
  • Remember that avoiding temptation is easier than resisting it.
  • Never mistake an aesthetic for an ethic.
  • Don’t mistake a shared experience for a shared understanding.
  • Don’t trust systems that rely on the benevolence of a few powerful actors.
  • If you figure it out: Write it down.
  • If you have to figure it out three times: Automate it.
  • “Read the manual” is good advice; “write the manual” is a moral imperative.
  • If a server is broken, first make sure that something in /var/log hasn’t filled up the disk.

It seems like there should be more of these and they should be pithier, or something.

p1k3 / 2021 / 7 / 21
tags: topics/idealogging, topics/rules