Ian Jones Logo


Kent Becks Reversibility Ruby Conf talk

reversibility as applied to team projects

Relationality vs Rationality

The power of the system is you get more than the sum of the parts but you dont have control of all the parts


Extreme Programming

from an economists perspective it makes sense

Prof. Zaninotto of University of Trento, Italy

Large complicated systems have states

No clear relation between inputs and outputs

too many states to say "the system is in this state"


Problems in a system are not leaves in a tree

they are all interconnected

solving one problem could cause more problems somewhere else


external or internal world will change

We can account for all this variation


once you make a decision, you cant unmake it

getting rid of all of his books, he made a reversible decision by scanning the books into good reads

he cant reverse getting rid of his handwritten journal

Prof. Zaninotto thinks Extreme Programming is a solution to these factors in a System

"There aren't irreversible decisions of a certain type with Xprogramming"

"That ship has sailed"

Henry Ford choose to reduce the states in his system.

Software Design

Basic loop in software development


Change behavior of the system

was that a good idea?

These changes rely on the underlying system

tidy the structure of the application then changing the behavior may be easier (tidy before)

change the behavior then change the structure (this is tidy after)

sometimes the structure with suggest ideas

the strong divide between product and engineers is sub optimal

engineers know what is cheap

if you are working in large blocks of time, you are working in irreversible decisions

behavior changes to the system are irreversible

treat them very careful with these

Decisions about the structure of the system are easily reversible

larger scales make this harder

"dont get me started on microservices" lol

each pull request has only behavior changes or only structure changes and never both.

pay attention to what types of reviews each has

structure changes can be fast tracked if they pass the test

How can you apply your review process differently?


Make the change easy then make the change

What can I invest in the structure to make this change easier?

This assumes that making changes is easy

Getting less feedback faster is better than more feedback a while from now

Alternative to TDD

Run tests, if they pass then commit

by symmetry, revert when the tests fail

TCR - Test, Commit, Revert

Kent Beck TCR blog post