Processes That Rely On “People Doing The Right Thing” Will Fail

I know, this is belaboring the obvious, but good gods, this particular brand of obvious so, so needs to be belabored! Why? Because we, as humans, are kinda hardwired into believing that we‘re better at things than we are (and when it comes to TechBros, fuggedaboutit — they’re the worst).
 Oh we may think that we have our s**t together, but it’s an illusion — it turns out that we can focus on no more than 3 or 4 things at a time. Any more than that, and we have to start resorting to “memory tricks”, things like removing distractions, grouping items, repetition, and so forth, and even then we’re only up to 7 or 8.
Coding, for sure is a place where this applies. There is a reason why your system has easy to digest modules, each of which contains wee tiny functions/code-blocks, and all of which are assembled using bog-standard architectural patterns. It’s because, that way, you don’t need to actually keep track of every single thing that’s going on whenever you need to fix it, update it, and/or extend it. (•)
Testing, yes, that’s also why testing is so key — unit tests, system tests, property tests — testing at all levels, testing all the time. Because, otherwise, you’re going to forget that one edge case, or the upstream service is going to change in some horrific way, or whatever.
Documentation of course, is so important — documenting your code, your interfaces, your APIs, your tests — and not just the actual code, you need to be documenting why you’re doing things a certain way, because that too is a short-cut that allows you to reduce the number of things you need to keep track of.
Code Reviews too. And gitflow. And formal specifications. And strong Contracts. And proofs. And jepsen. And static analysis. And …, and …, and …
And even when you put all of the above together, it’s still not enough, because even with this, and even if you’re running PoliceStateDevelopment™, you’re still going to have problems because, as Hillel puts it “We have to use everything we have to even hope of writing correct code, because there’s only one way a program is right and infinite ways a program can be wrong, and we can’t assume that any tool we use will prevent more than a narrow slice of all those wrong ways”.
In this world, you want to rely on people doing the right thing? On all the developers having all their collective s**t together all the time? Frankly, the odds are that everything is working despite, not because of their Awesomeness.
Mind you, this doesn’t mean you are doomed. Instead of focusing on getting everything perfect, build the system so that they recover from exceptions, can auto-heal, build your processes so that they can survive Alice getting the flu, have checks and balances (yes, even in the code). In short — prioritize robustness. You won’t regret it!
(•) Unless, of course, you’re a #CowboyDeveloper, in which case everything I’m saying is clearly bulls**t, and for the weak, not you, you are STRONG…

Comments

Popular posts from this blog

Cannonball Tree!

Erlang, Binaries, and Garbage Collection (Sigh)

Visualizing Prime Numbers