When I left government service five years ago my colleagues were kind enough to throw me a wonderful going away party. Most of the details now seem blurry but one stands out — toward the end of the evening someone asked me a simple question, namely “if you could offer junior software developers just one piece of advice, what would it be?”.
Not having a pre-canned answer at the ready I took a moment before finally proffering a reply — “Junior devs get pissed off with clients who don’t know what they want. The sooner they figure out that helping people discover the true requirements is central to their job the happier everyone will be.” One of the most wonderful (and terrible) things about software is its malleability. Treat the first version of a spec or a piece of code as nothing more than a conversation piece and have that conversation. People don’t know what they want until they feel it or something close to it. Help them on that journey.
Since then I have had opportunity to ruminate on whether that would still be my top piece of advice. It might be but I think it has stiff competition from what are at least its cohabitants in the top three.
In leaving the public sector for the private one I began developing a much more acute sense of the value of time, both in opportunity cost and return on investment. That had me formulating another of the top three — “Your job is not to write code. It’s certainly not to write perfect code. Your job is to deliver value to your customers. Your code is just a means to that end and we capture no value from it until it is in production. Every piece of code you choose to write represents a choice not to write an infinite number of alternatives. Every day a piece of code is not in production is a day we failed to capture a return on the investment of your time. Get your code to prod.”
There is a lot tangled up with that. You need an innate sense of what actually provides value to the business. You need to be able to reason about categories of risk, both the potential impact to the business and the difficulty of fault remediation. You need a well automated DevOps pipeline that keeps the transaction cost of deployment minimal. That’s too much to ask of a junior dev but we can at least encourage them to think in those terms, to ask knowledgeable folks to fill in the parameters, and to raise problems when they seem them. We must especially encourage them to raise problems despite not having a solution because a toxic “don’t come to me with problems; come to me with solutions” culture often marginalizes and alienates all but the most senior folks.
There is a third one but I will first digress into what triggered thoughts of it and its entanglement with the others while enjoying an afternoon swim today.
On Sunday morning I had a somewhat scary paragliding flight even though it proved wholly non-eventful as far as any casual external observer could tell. At the southside of Point Of The Mountain I ran through my customary checks, reverse-inflated, made sure all my lines looked good, spun forward, checked for clean Vs on the brake lines, kited for a bit, re-checked the brake lines , then launched.
Shortly after I took off I found that the aircraft of which I was part was singing to me. SINGING damn it. That offered a heretofore unprecedented experience which proved appropriately terrifying. I glanced around to ascertain the source and to my horror discovered that a buckle on my front-mounted reserve parachute container had snagged the right-side line of the speed system. “Fuck, oh dear,” I thought, “I have had enough low-altitude asymmetric deflations for one lifetime already THANK YOU VERY MUCH”, and began to fiddle with the trapped line but struggled as it appeared to be quite snagged and under a non-trivial amount of pressure. After some amount of time spent unsuccessfully resolving the SNAFU I found a portion of my brain screaming “FLY WHAT YOU GOT” and resigned myself to completing the flight with this liability in place. I vectored myself for the shortest possible flight, put myself extra at the ready with brake on the compromised side, delayed lowering my landing gear (legs) until the last possible moment to minimize any potentially incident producing perturbations while still at altitude, and blessedly touched down without drama.
This brings me to the final piece of advice for junior (really, all) devs: “always be running two threads — the one that is actively solving the problem at hand and the one that is monitoring the progress of the former and has the privileges to interrupt it if reasonable progress is not occurring”. In engineering, Task Fixation may well kill productivity. In aviation, a far crueler master, Task Fixation may well kill you. In both we are prone to allow ego and mono-mania to cause a sustained laser focus on a specific problem (which may no longer be the highest priority) and a specific approach (which may not even be the right one). How vexing that we can’t fix this thing! What a blow to our self-image! And how much time and energy we have spent on this path! Yes, sure, maddening indeed, but don’t be a stubborn fool and ride it into the ground. Accept, pivot, and prevail.
Lastly, I find myself reflecting on something I prize in my reality — a highly connected life. For reasons not entirely clear I have tumbled down the life path of a generalist. I take joy in many things but generally lack a sustained obsession with any one thing. I am perhaps a nomad at heart, not because I wholly lose interest in things, but rather because I want to find new things that I can weave into a larger fabric where the sum offers a greater result than the individual parts alone would imply.
Paragliding represents perhaps the latest in that long tradition. Yes — it offers an intense state of Flow very reliably and upon occasion unparalleled joy. But — it also serves, because the potential consequences are so extreme, as a hyper-distilled version of the challenges I face in so many other arenas of life, spanning risk management, task prioritization, attention splitting, ambiguity navigation, procedure development, discipline sustainment, disaster preparedness, continual learning, extreme empathy, and true humility. I would do well to bring that newfound heightened awareness to every other aspect of my life.