Sometimes you want to do something easy and it does not go well.

It looked like an easy hike: An allegory

Once upon a time, I was on vacation and I wanted to hike over to these hills in the middle distance.

I wasn’t familiar with the desert landscape, but I’ve hiked in a lot of other places. This hike didn’t look that hard.

some mountains in the distance

You can see that there are some canyons that block the way, but I thought they looked small. I thought you could just go around them. I thought they had gentle slopes that wouldn’t be difficult to climb.

So I set out.

And I found out that once you were in the canyons, they became a maze that wasn’t easy to cross.

brushy valley

And I found out that the vegetation was huge and thorny.

huge cacti

And I found out that the “gentle slopes” were an ordeal with many obstacles.

steep hillside

I turned around pretty quickly because I realized I was outmatched by the landscape.

Software is full of this

I think every software developer has had this kind of experience (metaphorically speaking).

There’s somewhere you’d like to get; you can easily see the destination; it doesn’t look that far away.

And you weren’t familiar with the landscape in detail.

And you underestimated the pitfalls that were waiting for you.

And… even if you kept going, it was vastly harder than you thought, and you had to solve puzzles that didn’t seem related to the original goal. Getting untangled from cactus spines, for example. Incidental complexities, or at least seemingly incidental complexities.

One can think here of the Dunning-Kruger effect, which can always get you, even for overall pretty competent people. It’s easy to overestimate one’s capabilities.

But I prefer to think of it as being less about competence than about familiarity with an environment.

It’s just hard to estimate what’s feasible in an unfamiliar environment.

Even in a familiar environment, things that ought to be easy can just be very hard.

This gets me to the original thought that inspired this post:

It’s funny how simple, easy tasks can get blocked by other tasks that are dramatically harder.

You want to clean up some simple taxonomy of environment values, like I did the other day, but first you have to clean up a small mountain of other things you didn’t really want to touch.

There’s an art to knowing when to bother.


Posted under: programming workflow