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
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.
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