There’s a brilliant piece by Chelsea Troy explaining why even very experienced programmers can have gaps in their knowledge about topics other programmers deem super basic. Let’s go back to our cheese slicer: if you’d never seen one, you’d use a knife to cut your cheese. Which of these conversations leaves the knife-wielder feeling like they picked a good company to start a new job at?
Old hand, a jerk: “That cheese you sliced is super fucking lumpy, what’s wrong with you? Why didn’t you use a goddamned cheese slicer? A fucking five year old knows how to use a cheese slicer!”
New coworker, panicking: “I dunno I thought we might not need a cheese slicer for something this simple, uhhhh, it would bring overhead. I think cheese slicers are overrated and REAL programmers use knives.”
Old hand, a non-jerk: “I see here your cheese slices are uneven. Is there a reason you didn’t use a cheese slicer?”
New coworker, in an environment where they don’t feel safe admitting their lack of knowledge: “Not really, but I can go back and do that now.” frantic web search
Old hand, a non-jerk: “I see here your cheese slices are uneven. Is there a reason you didn’t use a cheese slicer?”
New coworker, in an environment where they DO feel safe: “Never heard of that! Do you have some links about that, or can you take a few minutes and brief me on the basics?”
So how do we change to a safe and welcoming environment?
Going from the first to the second is easier: condescension and arrogance should not have a place in your culture, and if you are a manager tolerating that sort of behavior, don’t.
It’s harder to make the jump to a culture where people feel safe admitting their mistakes or lack of knowledge. The tone and culture of a company comes primarily from above. If all programmers are calm, nice people but their manager is an asshole, a safe environment is impossible. A manager can shield their department, to some extent, from assholeyness occurring further above, but that manager is likely to be unhappy and stressed, which a team feels no matter how much a manager tries to hide it.
Aside: Not a word. Should be. But how to spell it? Assholeyness? Assholiness? Assholishness?
Everyone in the chain of command should be modeling the behavior you want to see. “I don’t know, but let’s find out together,” is the attitude I want to convey to my team when something comes up that nobody knows; “I don’t know, but I’m excited for you to share your knowledge with me / the team” when it’s something another person is an expert in. When someone makes a mistake, I want to handle it with a calm and friendly demeanor.
Right away: “That sucks, what do we need to do right now to fix it? Can I support you?”
Afterwards: “All right, we fixed it for now. Do you understand what went wrong? What do we need to do to prevent this happening again?”
Even if the person screwed up in a major way, this is a good approach. Yes, they need to be aware of what the effects of their mistake were, so don’t sugar-coat it, but what does yelling or guilt-tripping accomplish here? It makes it more likely that the next mistake someone makes will be covered up however they possibly can.
Aside: They're not operating in a void. If it's possible for someone to easily crash your system in an unrecoverable manner, then you have already done something fundamentally wrong.
We also have to let go of the desire to know everything. It’s not realistic. Do I sometimes feel stupid that I don’t, for example, have hands-on experience with unit tests in a work environment? Yes. But there are reasons I don’t, I bring plenty of other valuable experience to the table, and I have enough theoretical experience to work on a higher level, i.e., agree that it is smart to use unit tests as part of our daily work and develop a strategy to do so. And as soon as I need to write unit tests myself, I will get up to speed on them with the help of experts on my team.
When you create a culture where people feel comfortable asking for help, not only is everyone happier, more and better work gets done.