This week I started working at a new company. I'm still doing software consulting and I'm still building things for the web. But I'm most likely going to be working with a different set of tools.

For the past 4 years, I have primarily worked with Ruby on Rails and I have identified myself partly as a Ruby developer. Ruby is now going to play a much smaller role in my life. And I like it. Not because I dislike Ruby or Ruby on Rails—Rails is awesome! But because my identity is going to be tied much less to a specific programming language.

The problem with identity

When making the initial tech stack decisions, software teams tend to ask themselves what technologies are they familiar with rather than what are the best tools for solving the identified problems. This is partly caused by the fact that it's actually very hard to define the optimal development tools for a given context. Discussions about the merits of different programming languages and frameworks contain much more disagreement than agreement. In 2019, we still haven't come to a consensus on what is the best web app framework.

At RailsConf 2017, Haseeb Qureshi (Airbnb) pointed out the weirdness of this phenomenon. If you think about the world of software engineering as a system, you should actually see developer agreement (and not disagreement) on optimal technologies. This is how even the more complex systems in nature work; they tend to converge on what's optimal. You don't see multiple popular solutions for a given problem. Instead, you can easily identify one dominant approach.

The reason for this low convergence within software engineering is largely caused by high switching costs and the fact that the problem domains themselves are constantly changing. It can take months before you become effective with a new technology, and once you've become effective, there might be newer and better technologies available.

But some of the low convergence can be explained with group identity. When you associate yourself strongly for example with Rubyists or JavaScripters, you adopt certain social norms that might prevent you from exploring other practices and technologies. You are rarely truly open-minded about the other groups and their ways of doing things. Instead, you often find yourself telling stories about why your group is so great and why the other groups are inferior.

Paul Graham (venture capitalist and computer scientist) suggests that we keep our identities small. This way we can explore and discuss topics with clear mindedness. We don't feel like we, or our group, are being attacked if our identity is not tied to the subject under criticism. While there are tools that we enjoy and use on a daily basis, those tools aren't part of who we are.


I'm abandoning some of the labels I have learned to identify myself with. It's hard and it doesn't come naturally to me. But I'm positive it will make me a better software developer.