Одна вещь, которую вы узнаете из работы в компании B2C, заключается в следующем: приоритеты вашей команды изменятся, чтобы компания максимизировала ценность для клиента, что, в свою очередь, максимизирует ценность для компании 💰.

Нас, инженеров-программистов, нанимают не для того, чтобы мы сидели и писали строки кода (по крайней мере, я надеюсь), которые отправлялись в корзину s3. Нас наняли для создания продукта, который будет потребляться ✨.

Продукт, который мы в конечном итоге создаем, зависит от нескольких факторов. Некоторые из этих факторов не контролируются командой, но все же могут повлиять на дорожную карту команды. Несколько примеров:

  • 🤑 Стратегическое партнерство
  • 👩‍⚖️ Юридические сроки
  • 📣 Отзывы клиентов
  • 📈 Оптимизация воронки
  • 📉 Оптимизация затрат
  • 🎛 Интеграция с другими потоками/командами

Чтобы быть полностью справедливым, в любой момент времени компания может ставить одну из этих вещей выше других в зависимости от контекста. Это, в свою очередь, изменит отставание команды и приоритеты 🎯.

Не паникуйте 🥵

Изменение приоритетов — нормальное явление, которое может произойти в любой компании, и это нормально. Постоянной смены направлений и приоритетов следует избегать. Если вы постоянно меняете то, что важно, команда начнет терять доверие к вашему определению важности или высокого приоритета.

Несколько предложений от коллеги-инженера 👨‍💻

Не создавайте абстракции, идите декларативно 🖼

Если приоритеты и проекты меняются очень быстро, становится сложно создавать хорошие структуры данных и абстракции, соответствующие модели. То, что охватывает «все сценарии» сегодня, может уже не быть таким завтра.

Если бы мне пришлось выбирать между этими двумя реализациями в среде, где спецификации продукта нестабильны, я бы выбрал вариант 1. Он более подробный, он дублирует код, занимает больше места, но Мне не нужно поддерживать метод, который должен охватывать «все возможные способы оплаты» (те, которые у нас есть, и те, которые у нас будут). Если приходит спецификация, в которой говорится, что мы должны отслеживать с PayPal иначе, чем с кредитной картой, изменение тривиально.

Ченг Лу отлично рассказал о стоимости абстракции на React-Europe 2016.

Инвестируйте в рефакторинг того, что стабильно 🐴

Если мы применим ко всему подход, упомянутый в предыдущем пункте, вскоре у нас будет очень «дублированная» кодовая база. Меняющаяся среда не влияет на все части кодовой базы одинаково.

То, что мы некоторое время назад считали «обходным решением», вполне может оказаться нашим новым «способом ведения дел». Когда это происходит, стоит подумать о рефакторинге и удалении некоторых дубликатов и несоответствий.

Отметьте свою разработку 🚩

Флаги функций позволяют командам изменять поведение своих продуктов без изменения кода. Это означает, что просто изменив конфигурацию (значения флагов функций/переключателей функций), наш код ведет себя по-другому.

Это полезно в основном для двух вещей:

  1. Это позволяет снизить риск выпуска новых функций. Если новые функции можно просто отключить, риск снижается во время выпуска. Это также позволяет вам выпустить продукт до запуска продукта (вы можете выпустить 1 неделю до запуска и просто включить его, когда придет время).
  2. Это позволяет вам объединять несовместимый код с основной веткой. Например, что-то может сломаться при переходе с версии 1 на версию 2 ваших конечных точек API. Если ваши изменения просто заменят вызовы v1 на v2, потребуется полный возврат/откат, если что-то пойдет не так во время выпуска. С флагом функции ваш код работает как с v1, так и с v2.

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

Сосредоточьтесь на стабилизации и автоматизации вашего рабочего процесса 🤖

Если определения вашего продукта меняются, вы все равно можете сосредоточиться на всем остальном. Довольны ли вы своими тестами? Вы тратите время на выполнение ручных задач? Является ли ваш конвейер выпуска стабильным?

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

Не торопитесь с фичами, имейте четкий план 🏃‍♀️

Спешка только усугубит ситуацию.