Friday, March 9, 2018

The Impossible Every Day

This is a slightly-edited re-presentation of a thread in Twitter. 

As twitter is ephemeral, and blogs are longer-lasting (and easy to point to in the future), I have copied it here and fixed a couple of typos that twitter wouldn't let me correct.



Once upon a time, people argued that TDD is impossible. You can't write a test first, obviously, because you can't test something that doesn't exist. It's obviously ludicrous.
But you change how you think about "a test" and it works just fine.

Likewise, two people working at one machine? Ludicrous! That's twice the cost! Except that when you realize that programming is more about thinking than typing it makes easy sense. It works just fine.

And mobbing! Why, how stupid must that be!!!! Having five or six people work on one task is horribly wasteful... until you learn that it gets work done quickly by putting the right number of brains and set of skills on the task. It works fine.

And evolutionary design! What kind of an idiot would think you should write code before you have a complete and detailed system design?! Except that you design in refactoring, which is a new way of thinking about design and it works just fine.

Self-organizing? How ludicrous! To think that coders, UX, testing, BAs, ops and other functions can choose their own work and coworkers task by task? Chaos! Except that people do it, and it works just fine.

LEAN STARTUP!? What madness is that? Building features and products and then switching customers and products -- not even knowing what you're building and who for? Except that you change how you think about "customers" and it works just fine and produces some successes (even $M).

NOT WRITING COMPREHENSIVE COMMENTS IN YOUR CODE? NOT FOLLOWING SINGLE-ENTRY, SINGLE-EXIT? Not wise. Except that it works just fine if you change how you write your code.

Running interpreted languages in production!? That will NEVER perform AT ALL!!! In VIRTUAL MACHINES!? That's moronic. Except that it works extremely well. It happens every day. It's fine.
Releasing monthly? No? WEEKLY? No way! No? DAILY!? That's going to be nothing but disaster. Except that orgs release hundreds of times per day, and if you change how you build and deliver, it works just fine.

Working without PROJECTS? That's surely mad. Except that product orgs do this all the time, no projects, no funding-by-project, no staffing-by-project; surely there will be no accountability!? Except it works just fine all over the world.

Letting customers see work that hasn't been finished and released yet?! Surely this is suicide! They'll be disappointed and angry, and will not work with us! Except that this kind of feedback loop is commonplace now, and it works just fine.

Working without BRANCHES? All the people mixing their code together all the time? It just makes sense that this will be a mess! Things will be constantly broken! Nobody will ever be able to release.  Except that people (in surprising numbers) are doing Trunk-Based Development and guess what? It works just fine. You have to change your thinking and process a bit, but it's okay.

Working without estimating all the work in advance and making promises and plans and budgets based on the estimates? Impossible! Except that people think differently about budgets and estimates and plans, and it seems to work just fine.

Nearly everything that vintage 1985 otter would have thought madness, foolishness, and impossibility has become not only possible but commonplace.

When people work together, nothing is beyond them.

You have to ask, what impossible thing is going to be done next?

I think we have to check our incredulity at the door.

As we used to think, none of this could have happened. We change how we think, and new vistas open up.

Who knows what is next?