I see a worrying trend developing in the software industry.
There’s an undercurrent of it in Ernie Miller’s excellent Why I Love Being a Programmer in Louisville.
It’s even stronger in DHH’s Rethinking Agile in an office-less world.
It shows up in the OS wars, editor wars, and code-formatting wars.
That trend is Selfishness.
We (myself included) seem to be in a place where we want what’s best for ourselves over any other consideration. We are no longer willing to make sacrifices for anything or anyone. We are developing an attitude that we should be able to work where we want, when we want, how we want, and on what we want.
The workplace has become more dysfunctional over time, and a lot of people have been treated very badly by their employers. Thus, the response of selfishness is somewhat natural. See David Brady’s Loyalty and Layoffs and follow-on posts for more on this.
This attitude of selfishness, even if adopted out of a sense of self-preservation, hurts us in many subtle and not-so-subtle ways. This is especially true when working in an agile team.
If I want to work where I want, then I will likely be remote from the rest of my team. There are both advantages and disadvantages to this.
If I want to work when I want, then I may be on a different schedule from my teammates and therefore unavailable to pair or otherwise directly collaborate with them.
If I want to work how I want, then the person I’m pairing with will not be familiar with my environment and vice-versa. Everyone on my team will write code differently, with different formatting and different design conventions. The resulting application will likely not look or function consistently.
If I want to work on what I want, then necessary tasks that aren’t as interesting to work on will never get done. It’s often these little things that make a difference.
I think there needs to be a balance. There are things we should be very selfish about: our values, beliefs, and priorities (a.k.a our mission in life).
There are other things that we should be more selfless about. For example, I choose to work roughly the same hours as the rest of my team so that we can pair program and collaborate more effectively. Our team long ago agreed on a standard working environment and toolset. We always revisit and tweak as necessary, but our default stance is that being able to pair with anyone on any machine is more valuable overall than each of us having our own highly-customized working environment that no one else can navigate.
I am currently a remote employee, which in some sense means that I’m choosing to be selfish about where I live. In my case, my company closed the office I was working from and I chose not to relocate for a number of reasons tied in with my values, beliefs, and priorities. They then chose to allow me to stay on as a remote employee, for which I am very grateful.
I’m not suggesting that we should turn ourselves into doormats that get walked on by everyone else. Appropriate boundaries are still important. But I think that all of our human relationships, including those at work, would be much richer if we were more willing to make sacrifices for the greater good.