identifying invariance across time makes it so that if we can get from a to b, and we know we can get from b to c, then we know that we can get from a to c. but sometimes things come up on our way from a to b. that’s fine, but that lies outside of the boundary we draw of what we are going to consider. when we draw a boundary, we decide what compositions we care about, and what invariances we will trust.

this “invariance” is a lot like reducing side effects in functional programming