I don’t have the book to hand right I’m now, but I know there’s a section of Are Your Lights On that states:
The solution to your current problem is simply the cause of the next.
Or words to that effect.
And navigating from problem to problem – or, on a good day, swerving a nasty situation that could’ve manifested into a problem – is what I like to call work.
Finding the root cause of problems gets easier the more problems you deal with. You notice patterns in problems; they recall frustrations past. And you ultimately your gut knows where a problem is before the code can prove it. I think this useful cognitive datastore is what we call experience.
Once found, solving the problem isn’t always easy. But again it gets easier when you have a decent toolbelt of languages, tools, paradigms and refactoring techniques handy.
Failing that, you might be able to stick bits of existing knowledge together with a few Google searches and a spoonful of Stack Overflow copypasta.
But there will always be problems that don’t appear like old foes through the saloon doors. They’re entirely different beasts. And initially they render you helpless.
You don’t know the answer. And if even somebody gave you the tool to fix it, you wouldn’t know which end to hold.
And that collides with something else that you don’t have much experience in.
All of a sudden it just feels overwhelming.
Like really overwhelming.
And so we have to go through The Struggle.
Imposter syndrome kicks in.
You know plenty of things about software engineering, but all of sudden start to feel like you don’t really know that you know them at all.
(If the above resonates, please watch the first three minutes of this talk by the brilliant Gary Bernhardt where he talks about Donald Rumsfeld’s known knowns speech.)
And so sometimes your entire day’s work is going to look like this.
And even this has a ridiculous Disney-esque happy ending to give you an unhealthy dose of misplaced optimism. Because some days you won’t even get that satisfying green tick at the end of the day indicating the code has successfully run every step in your CI build.
Some days you just fail.
That’s cool. Because one day we didn’t even know the stuff we know now.1
And failing is the act of not succeeding in what you’re trying to achieve.
Which actually sounds pretty positive, in a strange way.
Not succeeding in what you’re trying to achieve means that
And yes, right this minute, you just really want something to fucking work.
But getting stuck is the work.
Staring out the window as you mentally execute your code is the work.
Talking to a duck is the work.
Explaining your problem to somebody else in the hope they can help is the work.
Pushing a PR that you know will fail so somebody can take a fresh look is the work.
Going for a walk to stop yourself going insane is the work.
Doing a seemingly insignificant ticket just to get your confidence back is the work.
Watching a conference talk on YouTube that might be mildly related to your problem is the work.
1 The only point of clocks and maps; the only point of looking back is to see how far we’ve come.