Two-way doors decisions

Dawid Laszuk published on
2 min, 389 words

Working for a tech behemoth corp is significantly different than what I expected joining. There is plenty of corpo bullshit, "vapor-ware" and ass-lickers that simply want to game out the system to climb the ladder. But, obviously, that's not all it has. Can't tell how is everywhere, but where I am, I must admit that I'm surrounded mainly by competent people and well-matured ideas.

One of the ideas/approaches that we're trying to strive to is two-way door decision. It's a literal analogy to the two-way door which in contrast to one-way door allow going through, and if you don't like what you see, go back.

It's obvious, isn't it? When was the last time you saw one-way doors? Those things typically don't make much sense so you don't see them around. Why would you want to go somewhere you don't know much about and not be able to get back? The concept with doors and action on them --- go, check, return --- is easy to understand but it can be extended to any activity.

We should strive to make such circumstances where we can make a decision and if we don't like the outcome we should be able to come back. In down to earth example, this is often what retailers allow us to do; we can buy things and if we don't like it we can return them. Examples in the software development include using feature flags to allow quickly turn off new futures when they don't do well or make a rollback mechanism for quickly reverting broken builds to the previous state.

Often "backup plan" comes as a similar concept. To me, the backup is more like a pair of one-way doors. Once you go through the doors it will allow you to run away from that place but where you go don't have to be exactly the same place from where you came. This is not "worse" but it's a different concept and in some situations will be better. Maybe consider situations where you know, where you are is a bad situation and you simply want to run away from it.

Shortly:

One-way doors: A -> B Two-way doors: A -> B ( -> A) Backup plan: A -> B ( -> C)