Code is imperfect. It has warts. It reflects the imperfections and limitations of its creators. Even though code is imperfect, we still use it and move forward, because that's the best we can do. No matter what we do, code will never be 'perfect', because no meaningful definition of perfection exists. Our world is a complicated place, and the demands we place on code reflect this complication.

Sometimes, we encounter code that someone else is responsible for, and is lacking in some way. We feel the need to communicate what we think is wrong with the code. This creates possible conflict.

Nobody likes to hear that their code is bad. People in the open source community are here out of passion. They love programming and want to help others. Programming deficiencies are an unfortunate part of life. We pour our souls into our work. When someone criticizes our work, they are criticizing a source of our pride.

Yet, all code is lacking. We need help from others to identify problems in our code. This has led some to adopt the mantra, "you are not your code". The basic idea is that we can criticize the work of others, and that's ok, because we are criticizing a "thing", not the authors themselves.

First, of all, I want to say "you are not your code" has some merit. It encourages us to divorce our sense of worth from our code. Indeed, our code does have problems -- all code does. If we cannot take some criticism, we can't grow as developers and humans. This is how we learn, after all, and is especially how we learn from other people. So, we need to be able to talk honestly about code.

However, "you are not your code" fails in a few ways. First, it does not acknowledge that the developers actually do care about their code. Parents are not their children, but that doesn't mean that parents are fine with people saying bad things about their kids. We care about our code. And, I think this is a feature, not a bug. I've seen code written by people who don't care about their code, and it is unpleasant.

Saying "you are not your code" puts all of the burden on the code maintainer. It encourages the problem reporter to be careless. In reality, in any social situation, everyone has responsibility. Nobody gets to be free of responsibility for being careless with their tongue.

Besides these sort of fuzzy emotional issues, "you are not your code" encourages us to communicate in a way that doesn't really work. For some trivial bug reports, such as misspellings, a straightforward discussion might solve the problem. However, most bug reports require much more interaction between the two parties. Software is really complicated. The maintainer and the reporter need to come to terms and establish a common understanding about the entire situation that caused the code problem. We can't skip this step.

So, how can we do better? Like so many social issues, the key is empathy and understanding. Put yourself in the shoes of the code maintainer. What do you think they need to know? How is it that you know it? Where does the misunderstanding come from, and how can it be rectified?

As someone who wants to report a problem, answering questions like this drastically improves the quality of communications. Bug reports are better. Discussions about architecture and philosophy are more informative. Really, this lets us compose much better communications. These well thought out communications are way less offensive and much more understandable.

Of course, this is hard. It requires brain power to put ourselves in the place of the authors. It is certainly much harder than just saying whatever you want, punctuated with "you are not your code". However, we still eventually need to come to an understanding with the other person. Regardless of how they feel about what we say, they still actually need to understand what the problem is. So, why not skip to the end, bypass the part where we make the code author feel bad, and effectively communicate what we think the author needs to know?