I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I
I took the one less traveled by,
And that has made all the difference.
In “The Road Not Taken,” poet Robert Frost describes an interesting scenario. Frost’s poem paints a beautiful picture of someone who stood before “two roads diverged in a yellow wood,” and who felt “sorry I could not travel both.” And, as the closing stanza above tells us, they eventually “took the one less traveled by, And that has made all the difference.” We’re not told what that difference was, and if the traveler chose the “right” or “wrong” path. We only know that the decision was important enough that they see themselves still telling this story “ages and ages” into the future.
This is one of my favorite poems, for many reasons, and I recently came to realize how similar it is to the types of decisions we make every day in the software industry. We, as software testers, developers, architects, and UX designers, regularly find ourselves at metaphoric forks in the road, wandering through colorful aging woods of internal and external hierarchies, and, like the traveler in Frost’s poem, we have important decisions to make. Will we be drawn to the familiarity and presumed comfort of the paths that were chosen by the most before us? Or will we venture down the other? The one that looks like it has, perhaps, never, been chosen, and therefore has a far less predictable endpoint?
Many organizations feel forced to take, and then re-take, the popular, proven, recognizable paths that they, and the companies they’re competing with or aspire to be have taken so many times before. This obligation is often due to the sink or swim nature of our industry and that we can find ourselves constantly teetering between feast-or-famine. “The way we’ve always done it” comes with a natural boost of greater predictability, something every organization is looking for these days, and which individual contributors are often rewarded handsomely for providing.
And, thus, the “happy path” was born.
“A happy path? Sign me up!” you might say to yourself, and, at first glance, why wouldn’t you? Imagine yourself standing before two roads. One of them is well lit, maybe you’ve even taken it before. You know how long it will take to reach the end, maybe you can even see the end from where you’re standing, and you’re completely confident in what will be waiting for you when you get there. Let’s pretend there’s even a cute sign at the trailhead telling you that this is the happy path. The other road…is different in every conceivable way. It’s overgrown, poorly lit, and you can’t see anything past a sharp turn only a few steps in, leaving you with little confidence how long it will take you to walk it, if anyone has ever walked it before you, and if they, or you, will even reach the end.
It’s only natural that more people would choose the sign-described happy path in the scenario above, and in the real world of the software industry, as well. We can’t just go wandering off down shadowy paths in the woods with no estimated time we’ll return. After all, we have places to be and deadlines to make. We owe people things, like new features, bug reports, KPIs, and slide decks.
There’s just one problem. There is no happy path. Not in the woods, and not in your apps. It’s all in your head.
In The Matrix, Keanu Reeves’ character, Neo, is perplexed when a young child sitting across from him is able to bend a metal spoon in his hand using only his mind. As Neo tries his hardest to bend the spoon in his hand, using only his mind, the child tells him:
“Do not try to bend the spoon — that’s impossible. Instead, only try to realize the truth: there is no spoon.”
This line was pretty deep stuff back in 1999. We all sat there, like Neo, pretty confused, and asking ourselves, “How is there not a spoon? It’s…right there in his hand.” The same can be said for your application. You certainly can design, build, and test a path that takes the user where you want them to end up, and you should! But there’s a very important reason that shouldn’t be your sole focus. There is no sole focus of your users. There is no single path that all users will take or will even want to take. No matter how clearly marked you try to make your path, you cannot guarantee they’ll see it. No matter how efficiently one path takes your users from Point A to Point B, you cannot guarantee your users will prefer it. And no matter how much effort you put into hiding the presence or potential appeal of other paths, you cannot prevent your users from finding something attractive about them, especially those who are looking for a completely different outcome (maybe even something nefarious) than the one you’re hoping they achieve or are able to provide.
It’s only once Neo accepts that there is no singular spoon in his hand—perhaps even that the concept of “a spoon that will only ever be used by its creators for its originally intended purposes is also a myth”—that he observes the object, and his reflection inside it, in an entirely different light.
Visibility ≠ Predictability
The trusty iceberg image above has made its way into roughly 9 million software industry slide decks and blogs over the years. In this story, the small percentage of ice above water represents a (not the) happy path of our application. It’s the part of our app that we’re most familiar with, most easily measured, what was thoroughly tested, and will almost certainly be the most trodden upon. The rest…not so much. It’s dark, it’s surrounded by freezing water, it’s much harder to access or traverse, and it’s far less likely to ever be seen, or measured, or tested. But, wait. Is it possible that those descriptions are simply your opinions, and not those of your users? You might find what lies below the surface “dark,” “freezing,” and “difficult to access,” but do they? And are we talking about the users you have today or your potential future users?
Unfortunately, using the famous image above as a metaphor for comparing software applications to icebergs is pretty disingenuous. Are we gifted this much visibility into our applications on Day One? Never. A much more accurate representation of what we know about our applications, and how we think about users are interacting with them is below.
When compared to the previous image, how much of this iceberg is visible? Much less, right? What a shame! But, how much of this iceberg is observable? Just as much as what’s shown in the last image. For the dose of “frigid waters reality,” how many software organizations ignore observability, and focus only on what’s more easily visible, and what they believe is more easily visible or sensibly desirable by their users? I believe it’s far too many.
You can see why visibility is so appealing. It’s inherently predictable, and it requires such little effort. It’s like the aforementioned fabled happy path. “I can see this happening, right now. It’s happening over and over, and therefore, I can predict, to a fairly certain degree, what will happen next.” But observability never goes away. It’s always right there, too. It requires much more effort, but it results in greater visibility, and then, you guessed it, predictability, the thing we know the rest of the business is looking for.
- We have users/seals!
- We designed this iceberg to facilitate and encourage the lounging that we know seals like to do, and they look pretty content. Go us!
- One appears to be either having a drink of water or they might be about to leave. We should keep our eye on that one to see if/when they return, how long it takes them to return, and if others behave similarly.
- We can see some smaller chunks of ice floating around ours, and they look a little small. I don’t think we have to worry about our uses/seals abandoning our app/iceberg for those others.
Far-too-early-prediction: Because we built an iceberg for seals to enjoy, and they’re currently enjoying it, we predict that seals will continue to enjoy our iceberg.
Based on this small amount of visibility, can we actually predict the above with any real confidence at all? We can’t, because we haven’t observed nearly enough. What isn’t currently visible, doesn’t mean it isn’t observable.
What is observable, and would lend to much greater predictability?
- Are there other icebergs with far more seals lounging on them? Why is that? What features do they have?
- Are seals easily accessing our iceberg from where we assumed they would, or are they experiencing any difficulties doing so?
- What percentage of our iceberg lies below the surface of the water? Enough to keep our seals trusting that the portion they lay on will remain stable and intact?
- What impact are the air and water temperature playing on the state of our iceberg?
- Are fish, crustaceans, and other seal prey available in the waters surrounding our iceberg?
- Are pollutants or seal predators in the area?
- Should we be looking at icebergs for walruses? Penguins? Eco-tours? Research labs?
And, perhaps most importantly:
How often are we observing and measuring these things, and how quickly can we design, build, test, and deploy changes when warranted?
Happiness is Subjective…and in a constant state of flux
When we think about the definition of words, and why we have them, the actual definition of the word “definition” sums it up pretty nicely:
“the act of defining, or of making something definite, distinct, or clear”
Which is why I find the outcome of reading Wikipedia’s definition of “happy path testing” so humorous:
“Happy path testing is a well-defined test case using known input, which executes without exception and produces an expected output.”
Our users’ input is never always “known.”
There is no permanent state of executions “without exception.”
“Expected outputs” fail to be actual outputs all the time.
And any test cases written, requirements gathered, and UX feedback collected were all conducted at a single point in time—time that changes just as frequently as those test cases, requirements, feedback, and outcomes. And, what I, personally, find most “definite, distinct, or clear,” is that the mythical happy path, no matter how well-marked or defined it may be, will always offer less visibility than the entire woods that surround it.
In closing, the greatest level of predictability can be found not in what is immediately obvious, but by allowing yourself, and encouraging others, to explore an entire world of opportunities and potential dangers outside of what may be clearly visible today.
As the boy says to Neo once he begins to accept that perhaps there is no spoon:
“Then you’ll see that it is not the spoon that bends, it is only yourself.”
And that will make all the difference for you, traveler.