September 4, 2020


We can create two major classifications of problems we generally deal with regarding complex software systems. First are the known risks. Generally these are things where we simply can’t justify the time to fix versus the likelihood or cost of the failure. Second are the unknowable. In complex systems there are nearly infinite unknowable problems, many of them completely outside of our control. Given that we have these unknowable, large world problems looming out there, one question to ask is “how do we best prepare?”

In those moments where we’re struggling with the unknown it’s important that we aren’t also struggling with the easy, knowable things. Things that should fall into this ”known” bucket are items like:

  • Where are the documentation and diagrams for my project and are they up to date?
  • How do I find some string inside of my source?
  • Where do I find my logs and how up to the minute are they?
  • What monitoring tools are available for my application?
  • How can I most quickly try things out and revert them if they don’t work so I can try something else?
  • How do I keep track of the things I have tried?
  • What communications methods work best with my team and my stakeholders?

None of these things will solve the problem directly, but they will help solve any problem more effectively. The bonus is that all of these things are knowable ahead of time, incredibly durable, and domain agnostic. These are the meta-work that many teams ignore, but that slow your team down in the medium to long run.

It can be hard to be motivated to do these things in the moment. It’s easier to just move on to the next feature and keep cranking out more code. However, here’s the wrinkle – that only works for a short amount of time. Taking that code-forward approach will inevitably lead to a mess. That mess will make everything slower, harder, and more brittle. It leads to calls for a rewrite. When the rewrite is started guess what? We’ll be in too big of a hurry to document it well. It’s a vicious cycle and the only way out is to slow down and do the meta-work.

© Eric Biven 2020