← Назад к вопросам

Что будешь делать если коллега предложит плохую идею

1.2 Junior🔥 191 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как реагировать на плохую идею от коллеги

Главный принцип

Профессионализм, уважение и конструктивность. Моя задача — помочь команде принять лучшее решение, не унижая коллегу. Я прошёл через много code reviews, и мой опыт показал, что тон гораздо важнее содержания.

Мой подход

Шаг 1: Перед тем как судить, вслушиваюсь

Коллега: "Давай хранить пароли в логах для отладки"

Моя первая реакция: "Это плохо!" ❌
Правильная реакция: Задать вопросы
// Вопросы, которые помогут мне понять намерение:
// 1. "Почему ты думаешь, это нужно?"
// 2. "Какую проблему это решает?"
// 3. "Чем это лучше текущего подхода?"

Очень часто "плохая идея" на самом деле решает реальную проблему, которую я не видел.

Шаг 2: Объясняю причины, а не просто критикую

❌ Плохо:
"Это плохая идея, так не делают"
"Это нарушает security"

✅ Хорошо:
"Понимаю, что ты хочешь логировать для отладки. Но есть проблемы:
- Пароли в plaintext в логах — security риск
- Log files могут быть украдены/скомпрометированы
- Нарушает PCI DSS compliance

Вместо этого можно:
1. Логировать хеш пароля
2. Использовать debug mode без production
3. Добавить masking для sensitive fields

Это даст тебе отладку БЕЗ рисков"

Практические сценарии из моего опыта

Сценарий 1: Предложили использовать static method для всего

// Коллега предложил:
public class UserUtil {
    public static User createUser(String name) { ... }
    public static void saveUser(User user) { ... }
    public static User getUser(Long id) { ... }
    public static void deleteUser(Long id) { ... }
}

// Мой подход (из опыта):
// 1. Слушаю его аргументы
// 2. Согласен, что static может быть удобнее на первый взгляд
// 3. Но объясняю проблемы:

"Я вижу, что хочешь избежать создания объектов класса.
Но есть пара проблем:

1. Тестируемость:
public class UserServiceTest {
    @Test
    public void testCreateUser() {
        // Как замокировать static метод? Очень сложно.
        // Придётся использовать PowerMock, что slow и fragile
    }
}

2. Dependency Injection:
Если UserUtil будет использовать DB, он не сможет
брать зависимость через конструктор.

3. Разделение ответственности:
UserService — бизнес логика
UserRepository — доступ к БД
UserController — HTTP слой

Это гораздо лучше, чем один huge static класс.

Вариант: если это просто утилиты, то
public final class UserUtils {
    private UserUtils() { }  // Нельзя инстанцировать
    public static String hashPassword(String pwd) { }
}

Но для сервисов — давай использовать объекты."

Сценарий 2: Предложили не писать тесты

Коллега: "Давай не писать тесты, экономим время"

Мой ответ:
"Понимаю, тесты замедляют разработку на начальном этапе.
Но вот что я видел в production:

1. Код без тестов → регрессии при рефакторинге
2. Боимся менять код → технический долг растёт
3. Баги находятся QA или users → дорого
4. Рефакторинг невозможен → legacy code

В долгосрочке тесты экономят время, потому что:
- Уверенность при изменениях
- Документация через примеры
- Баги ловятся рано

Кроме того, наш проект требует 90%+ coverage по SLA.

Давайте напишем хотя бы критичные тесты,
а остальное доделаем позже?"

Как я структурирую обсуждение

1. СЛУШАЮ полностью без перебиваний
   └─ "Мне понравилось, как ты подумал о..."

2. ИЩУ что-то хорошее в идее
   └─ "В твоём подходе есть смысл для X..."

3. ВЫРАЖАЮ СВОИ ОПАСЕНИЯ аккуратно
   └─ "У меня есть опасения по Y, потому что..."

4. ПРЕДЛАГАЮ АЛЬТЕРНАТИВЫ
   └─ "Давай попробуем вариант Z, который..."

5. ИЩУ КОМПРОМИСС
   └─ "Можем ли мы совместить подходы?"

Когда я "нет, не делаем это" (без вариантов)

Есть случаи, когда нужно быть решительнее:

1. Security issues

Коллега: "Давай отключим CSRF protection в dev mode"

Мой ответ: "Нет. Это привычка, которая приведёт к проблемам.
Используем proper mocking вместо отключения защиты."

2. Нарушение архитектуры, которая обговорена

// В нашей архитектуре: Domain → Application → Infrastructure
// Коллега: "Давай в Domain Layer сделаем @Transactional"

Мой ответ: "Нет. Domain должен быть независим от фреймворка.
@Transactional — это инфраструктура.
Это обсуждали в docs/architecture/01_layers.md"

3. Код, который я знаю, будет проблемой

Коллега (junior): "Давай сделаем select N+1 query для простоты?"

Мой ответ: "Не получится масштабироваться.
Я видел это три раза — каждый раз приходилось откатывать.
Давайте сделаём join с первого раза."

Когда я допускаю ошибку и коллега меня исправляет

Я могу ошибаться. Важно принимать это:

Коллега: "Стоп, я нашёл, где твой подход не работает..."

Мой ответ: "Спасибо! Ты прав, я не думал об этом.
Давай переделаем на твой вариант."

Так коллега видит:
- Я открыт к критике
- Я не защищаю свой код из гордости
- Команда важнее эго

Когда идея genuinely плохая, но нужно позволить ошибиться

Иногда коллеги учатся через ошибки.

// Коллега: "Давай заним 100 потоков для HTTP запроса"
// (На очень слабом сервере)

Мой подход:
1. Объясняю риски
2. Показываю расчёты: thread memory × 100 = OOM
3. Предлагаю альтернативу

Если он настаивает (и это не критично):
4. Позволяю попробовать в dev среде
5. Мониторим вместе
6. Когда OOM выбросится — обсуждаем
7. Коллега учится на своём опыте

Инструменты для конструктивного обсуждения

1. ADR (Architecture Decision Record)

Вместо устного спора:
- Документируем решение
- Записываем что пробовали
- Объясняем почему выбрали вариант B

Это избегает переоценки решений каждый раз

2. Proof of Concept

Если спор — давайте сделаем POC:
- Вариант A: твоя идея
- Вариант B: моя идея

Сравним на реальных данных
Побеждает вариант, который быстрее/лучше

3. Metrics

Вместо мнений — используем факты:
- Performance: latency, memory, CPU
- Quality: test coverage, bug density
- Maintainability: cyclomatic complexity, lines changed

Мой опыт

За 10+ лет я видел:

  • Junior'ы со свежими идеями выиграли спор с Senior'ами
  • Я отстаивал плохую идею из гордости
  • Я слишком быстро отрицал новые подходы
  • Лучшие решения рождались из компромисса, не из победы одной стороны

Итоговое правило

Спор о коде — не спор о тебе как личности.

Если я говорю "эта идея плохая", это не значит:

  • Ты плохой разработчик
  • Ты не можешь писать код
  • Ты не стоящий человек

Это просто значит: "Вот эта конкретная идея имеет проблемы, давайте найдём лучше."

Команда, которая может открыто обсуждать идеи без обиды — это сильная команда.

Что будешь делать если коллега предложит плохую идею | PrepBro