Branching, committing, merging, rolling back — engineers have used these primitives for decades. What do they look like when applied to product definitions?