Как не допустить, чтобы коллега вводил крайнюю сложность и абстракцию?

14

У меня очень трудное время, потому что мой коллега, кажется, показывает

  1. Преждевременные / ненужные усилия по оптимизации
  2. Преждевременная дедупликация с сомнительными абстракциями.
    Например, мы используем модифицированную архитектуру VIPER. Он представил базовый класс для компонента Router (с использованием обобщений) как часть реализации первого стека Viper, фактически не зная, что именно будет дублироваться в других маршрутизаторах. Теперь мы застряли с необходимостью предоставить тип UseCase, содержащий варианты использования, но большинство маршрутизаторов не имеют несколько вариантов использования, только один.
  3. Изобретая решения общего назначения для спекулятивных потенциальных будущих функций.
    Например, он написал менеджер для заполнения статических представлений таблицы ячеек, когда в приложении было только два экрана, подобных этому, и он не знал, что дизайн будет переходить от скучных вертикальных форм к более индивидуальным. Пользовательский интерфейс, так что менеджер бесполезен.
  4. Выбор случайной сложности

Как с этим бороться, если у него также есть языковой барьер с паршивым английским?

Эрл Грей
источник
Вы пробовали обязательные обзоры кода, чтобы дать возможность обсудить, что происходит? Пробовали ли вы с ним белую доску, чтобы придумать хорошее решение, прежде чем он садится за код?
Becuzz
1
Можете ли вы привести пример, когда могут возникнуть ситуации, подобные 2 или 3?
morbidCode
1
Я чувствую твою боль, @EarlGrey. Я, вероятно, никогда не видел случая, когда супер-общее «общее» кодирование действительно работает так, как планировалось в будущем.
Грэм
2
Я знаю людей, которые называют использование быстрой сортировки вместо пузырьковой сортировки преждевременной оптимизацией. Какой у тебя порог?
Питер Б
3
Ваш коллега, кажется, забывает / не знает о принципе ЯГНИ .
Барт ван Инген Шенау

Ответы:

14

Ваше описание звучит как кодирование, которое я сделал в 1990-х. Выступать соответствующим образом для современного мира нелегко. Я рекомендую сосредоточиться на следующих факторах:

  • Сопряжение. Два набора глаз могут помочь защитить одного человека от великой, но сложной реализации.
  • Обзор кода. Современные магазины проверяют 100% всех изменений кода несколькими людьми
  • Тестовое покрытие. Убедитесь, что есть простые тесты. Слишком сложные тесты могут отражать слишком сложный код
  • Много дискуссий о минимально жизнеспособном продукте. Разбейте функции на наименьшие возможные компоненты. Можно иметь один тикет для изменения базы данных, другой - для заполнения справочных таблиц, а третий - для обновления пользовательского интерфейса (той части, которая фактически будет видна конечным пользователям), но сначала он будет казаться нелогичным, так как сопротивление вероятно.
  • Частые дискуссии о том, как иметь меньшие билеты и изменения.
  • Голосование за всю историю всей командой, чтобы начать обсуждение сложности и подхода.
  • Образование. Убедитесь, что у вас есть Обед и обучение, учебные занятия и т. Д., Чтобы люди могли познакомиться с хорошими практиками и почему они хороши.

Исходя из всего вышесказанного, моими основными двумя точками внимания будут обзоры кода и небольшие истории.

В конце дня я думаю, что лучшее решение для изменения существующего поведения - это выделенный человек, ведущий изменения. В Agile организациях (вероятно, в большинстве своем сегодня) требуется, чтобы посвященный человек, например, scrum-master, постоянно задавал правильные вопросы и руководил подходом к разработке. В моей последней организации у нас было дюжина из них, по одному в каждой команде, чтобы помочь людям справиться с такими проблемами. Это устраняет необходимость того, чтобы один из разработчиков команды пытался убедить других в том, что «их путь верен», что часто может привести к ожесточенным обменам и плохой крови.

Майкл Даррант
источник