Начните делать обзоры кода или парное программирование.
Если команда не пойдет на это, попробуйте еженедельные обзоры дизайна. Каждую неделю встречаемся в течение часа и говорим о кусочке кода. Если люди кажутся защитниками, выберите старый код, к которому никто больше не привязан эмоционально, по крайней мере, в начале.
Как сказал @JesperE: сосредоточьтесь на коде, а не на кодере.
Когда вы видите что-то, что, по вашему мнению, должно быть другим, но другие не видят это по-другому, тогда начните задавать вопросы, которые приводят к недостаткам, вместо того, чтобы указывать на них. Например:
Globals : Как вы думаете, мы когда-нибудь захотим иметь более одного из них? Как вы думаете, мы хотим контролировать доступ к этому?
Изменяемое состояние : как вы думаете, мы хотим манипулировать этим из другого потока?
Я также считаю полезным сосредоточиться на своих ограничениях, которые могут помочь людям расслабиться. Например:
длинные функции : мой мозг недостаточно велик, чтобы вместить все это сразу. Как мы можем сделать маленькие кусочки, с которыми я могу справиться?
плохие имена : я легко запутываюсь при чтении открытого кода; когда имена вводят в заблуждение, для меня нет надежды.
В конечном счете, цель не в том, чтобы научить свою команду, как лучше кодировать. Это создать культуру обучения в вашей команде. Где каждый человек обращается к другим за помощью, чтобы стать лучшим программистом.