My favorite quotes:
> In theory, there is no difference between theory and practice, while in practice there is.
> Part of the tidying philosophy is that it should never be a big deal. It’s never something that has to be reported, tracked, planned, and scheduled.
> “Refactoring” took fatal damage when folks started using it to refer to long pauses in feature development.
>Review latency is also an incentive. If code gets reviewed rapidly, then you’re encouraged to create more, smaller PRs. Those more-focused PRs encourage even more rapid reviews. Equally, this reinforcing loop can run backward, with slow reviews encouraging larger PRs, further slowing future reviews.
>I encourage you to experiment with not requiring reviews for tidying PRs. This reduces latency further, incentivizing even smaller tidying PRs.
> change is the dominant cost of software development and understanding code is the dominant cost of change
>Comments are a form of communication, but tidying lets you explore the limits of communicating through the other elements of programming.
>Getting to the necessary level of safety and trust to eliminate tidying reviews is the work of months. Practice. Experiment. Review errors together.
>Behavior changes tend to cluster in the code. From Pareto, 80% of the changes will occur in 20% of the files. One of the beauties of tidying first is that the tidyings cluster too. And they cluster in exactly those spots most attractive for behavior changes.
>You have at least three options, none of them attractive: Ship it as is. This is impolite to reviewers and prone to errors, but it’s quick. Untangle the tidyings and changes into separate PRs, or a sequence of PRs, or a sequence of commits in a single PR. This is more polite, but it can be a lot of work. Discard your work in progress and start over, tidying first. This is more work, but it leaves a coherent chain of commits.
>The answer, as always, is because you are not just instructing a computer, you are explaining your intentions for the computer to other people. The shortest path to instructing the computer is not an interesting end goal.
>Software creates value in two ways: What it does today. The possibility of new things we can make it do tomorrow.
>Here are some scenarios that reduce the options value embedded in your software: A key employee quits. Changes that would have taken days now take months. You distance yourself from your customers. If you get a provocative suggestion a month instead of one every day, you have fewer options. The cost of changes skyrockets. Instead of being able to exercise an option a day, you can only exercise an option a month. Fewer options, less value.
>When geeky imperatives clash with money imperatives, money wins. Eventually.
>The more I rowed with the Stream of Commerce, the faster my boat went.
>Code review processes (which I’ve promised multiple times to trash, but now is not the time) don’t distinguish between reversible and irreversible changes. We end up making the same investment with radically different payoff profiles. What a waste.
>Coupling drives the cost of software.
>the cost of software is approximately equal to the cost of changing it. Yes there is a brief period before we can be said to be “changing” it, but who cares? That period is economically insignificant.
>Coupling, like the Lego piece in the night, often isn’t obvious until you step on it.
>You can’t be your best self if you’re always rushing, if you’re always changing code that’s painful to change.
>Unlike the risk and uncertainty of features, where you can do what you think is right and folks can still be dissatisfied, you are the audience for your tidying, and you’re very likely to be satisfied.
>Tidy first? Likely yes. Just enough. You’re worth it.