Sunday, May 09, 2021

The Mortifying Ordeal of Soloing All Day

I read The Mortifying Ordeal of Pairing All Day by Nat Bennett, and.... well first of all it is a good read and worth trying to take in. Perhaps the best way to respond with such a heartfelt and personal story is with my own story. Maybe some day I'll find another way to tell it, but it rang surprisingly true to just take that article and instead lightly edit it to be about my own struggles with soloing (including in many companies where pairing had once been a norm but then fell away for various reasons). The result takes a few liberties here and there but is on the whole autobiographical.

The Mortifying Ordeal of Soloing All Day

I had to confront a lot of my fears about myself, sometimes every day. I had to learn to show someone else all the things I didn’t know, my limitations as a human and a software engineer.

From 2014 to 2020 I was part of an experiment: I soloed all day, most days, for years. Hundreds of other engineers joined me in this experiment. I was working as a software engineer for some of Tech's most exciting startups, and everyone soloed, often for eight hours a day.

This was one of the best things I’ve ever done for myself, socially and emotionally, and it produced some great software. It also burned me out. Not “I don’t want to think about work” burnout. Probably not even “I don’t want to work ever again” burnout. Whether "burnout" is even the exact best word is unclear, but it is close enough to describe a situation where I was often worrying about work (not sleeping well for example).

I spent much of 2020 in discussions with management about how I was doing which led to leaving my job in May 2021 with no plan much more concrete than "give myself and the world a few months to breathe". I'm still recovering to the point of being able to set goals for a job search (or other plan for the future).

I also believe that the expectation that everyone solo, all the time, led to technical and product failures at multiple companies.

There’s a response I often get at this point, especially from people who were managers in the organization at the time:

“But Jim, teams weren’t expected to solo all the time. You might have been assigned tasks, but you were given leeway to accomplish those how you wanted, and management didn’t require people to solo all the time. If a team wanted to solo less, they could.”

This is true. Engineers and teams had a lot more freedom than they realized they had. I spent a lot of my time there helping people realize that. I would often spend one or two days a week pairing for at least part of the day.

And yet.

Engineers had individual laptops and sometimes set up them according to individual preferences.

We were Tech Company Engineers, and one of the things that made us Tech Company Engineers was that we soloed.

One of the great and terrible things about Tech, is that it operationalizes peer pressure. It harnesses drives that humans have, drives for identity and belonging, in the service of producing software. These forces were only tenuously under management control.

So I soloed all day, most days, for about five years. This had a lot of upsides, far more than I can list here. Soloing really develops being able to plan out and execute a task, giving yourself time to think through a problem, understanding the technologies you are using, and developing proficiency which might not happen if you are leaning on your pair (sometimes more than you realize). The impact of soloing, especially soloing that much, goes much deeper than its impact on the code, on the particular work the team delivers that week.

(Here would go an anecdote about how people who solo have self confidence and mastery.... sorry I'm not thinking of an immediate analogue to the Overcooked example in the original article).

We take the time to understand a problem so we can make informed decisions.

This is the real power of soloing, intense soloing. Understanding what you’re doing, and adjusting it based on further research or the results of experiments, becomes automatic. For someone who thrived on pairing and loved it when there was a strong team spirit, this was an almost psychedelic experience. I transcended the limitations of the people I was working with and discovered that I was able to accomplish things.

I remember once, looking over a large office filled with people working at workstations, and thinking, “This is the most talented collection of people I have ever seen in one space.” I understand why engineers so fiercely defend their right to hack.

But: cognitive impairment.

Months where I struggled to meet my own basic needs.

Soloing requires putting up a facade of self-sufficiency, to management and the rest of the organization, for hours at a time. Being able to manage oneself, both physically and mentally. I had to manage my space, my decisions, my thought processes, and often my feelings on my own.

This never stopped being draining. Even with an easy team, where I had clear goals and could accomplish things without effort, soloing well requires staying engaged with my environment, with what I'm supposed to be doing. No retreating into sensory experiences, no checking my phone, no wandering off or getting distracted. Maintaining that level of focus for hours at at time was thrilling, but it also required a serious exercise of will.

There were some teams where it required more than will. I had to fight to stay engaged. I had to develop skills. There were people with whom I disagreed, but with whom I struggled to resolve those agreements. There were people who didn’t put nearly as much thought into my experience as I was putting into theirs. There were people who expected me to “just make it work”, despite an ill-defined and not-yet implemented interface that I was expected to use. There were people who just made me anxious or uncomfortable.

I had to confront a lot of my fears about myself. I had to learn to show someone else what I could and could not do, my limitations as a human and a software engineer.

Over time, over years, soloing wore me down. Took a little bit more each day than I could recover. Until my life was working, and recovering from work, and then working some more.

And then the pandemic happened. Overnight, suddenly, I was performing this daily act of will without the support of the office, without going out to lunch at my favorite restaurant, without anyone to talk to except in scheduled meetings, while the world burned down around me.

I crumpled. I stopped being able to solo. Stopped being able to have a conversation.

This wasn’t everyone’s experience with soloing. In a two-by-two grid where one axis is “sensitive to the demands of soloing” and the other is “time committed to soloing” I’m hugging the upper left hand corner. My experience was extreme.

And yet.

Tech companies, I’m told, have reputations as “burnout factories.” Many people left my companies, at least a few of them to escape from the demands of daily soloing. People who love soloing, who see the benefit of it, but who despite all those benefits are tired.

There are people who can solo indefinitely, for years. Who don’t experience the most demanding version of it often. Whose recovery capacity comfortably outpaces the demand. A lot of those people, at most tech companies, end up in management roles, in leadership roles, and then they miss coding. Many places I've worked have had a leadership staff that, even when they believed me when about how demanding soloing was for me, couldn’t really see it themselves. Some of them even tried to find ways to enable me to solo less, but I'm not sure they understood all the forces which were making it hard to do anything but solo.

We’ve all heard the bad reasons not to solo. "You are just cowboy coding." "You can't think about anyone other than yourself and your pet project." "You don't care about doing things well."

I’ve dismissed people making those arguments as fundamentally dogmatic, unwilling to do the hard work of real software development.

Now, though, I hear those objections, and I hear fear. A fear that I share. A fear of exposing my vulnerability, my ignorance, my soft parts, and a fear of the cost of that exposure, of the cost to my mind and my body of subjecting myself to that exposure, day after day, in exchange for a paycheck.

Underneath the urge to dismiss those concerns, I hear another fear. A fear that soloing is too hard, that people wouldn’t choose to do it if they weren’t corralled into it by individual goals and hiring and promotion processes which emphasize "yes, but what did you do personally?". That a “soloing culture” is such a delicate wisp of a thing that if you allowed engineers to solve problems together, they would abandon soloing immediately.

What did we miss out on, by failing to make more space for people not to solo? By treating this soloing culture as something so fragile, and so precious?

No comments: