I’m speaking at JAX.
I’m completely braindoggled from the conference prep and forgot how to write newsletters. After three or four attempts of writing about something, getting 300 words in, and hitting a wall, I’m giving up and phoning this one in. Have a brain dump.
The piece You might as well timestamp it argues that instead of storing booleans in databases, you store the timestamp of when it became true. A missing timestamp means that value is false. This is generally more useful than a boolean, because in addition to boolean behavior you also get auditing information. Here’s two ways you can think about this:
(1) is a consequence of you doing (2), and that “doing” is what I want to focus on. It is a “move” in the game of software engineering that you can make. I think of moves as a subset of all SE activities, defined by being a short activity with, if done successfully, creates predictable, bounded progress toward a goal. Here are some other moves:
data
with {version: 1, data: data}
).(That’s a pretty wide variety of things that count as moves! We can scope it down by creating hierarchical categories: “timestamp refinement”, preemptive pluralization, and preemptive versioning are all “moves on the data model”, and more narrowly “moves that enable flexibility with data format changes”.)
I think of moves as the mirror analog of patterns: patterns are nouns and moves are verbs. For every pattern, there’s a corresponding move of using that pattern.
So what does having a concept of “moves” gives us?
I’ve wanted to experiment with idea (4) for a while but never seem to find the right time.
Ultimately I think moves just fascinate me because it’s a new concept and abstraction for me to play with. Maybe there’ll be a deeper insight I have once I’m less boondoggled.