Выбор стратегии жизненного цикла программного обеспечения при наличии нескольких зависимых фронтэндов

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Жизненный цикл программного обеспечения известен большинству современных программистов.

Даже школьник, написав свою первую программу

<?php 
echo "Hello, Хабр! На пхп"
?>

или

fprintf( 'Привет Хабр на Матлабе!\n');

понимает технологический процесс.

  1. Думает над задачей — этап появления идеи
  2. Думает над задачей и каким способом её нужно реализовать — Анализ и проработка требований,
    построение программной модели и плана на реализацию. Короче, архитектурный этап.
  3. Программирование.
  4. Тестирование. «А что там получилось»
  5. Эксплуатация.

Между 1-5 этапами нитиобразно мы имеем непрерывно взаимодействующие процессы.

Для этого существуют всякие Водопады, Скрамы итд.

Так вот дело в том, что когда у вас проект раздувается до нескольких типов фронтэнда,
как требует современный IT мир заказчику хочется максимально покруть аудиторию для максимизации собственной прибыли.

И по этой причине мы все наблюдаем обилие проектов, в которых одновременно существуют несколько типов фронэндов, взаимодействующих по API с централизованным бэкэндом.

Вообще говоря, «стандартный сильный проект» обладает тремя типами фронтов:

  1. Сайт
  2. Мобильное приложение на Андроиде
  3. Мобильное приложение на iOS

При едином разработанном API для обмена данными через REST.

Хорошим примером, на который я буду опираться являются социальные медиа (см. мою предыдущую статью про собственный плеер на основе видосов из YouTube)

У большого проекта есть три варианта получения прибыли или любого критерия, которые
условно Веб, яблоко и андроид.

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

И вот здесь появляется изюминка статьи.

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

Поэтому, в нашем случае, как правило, над каждым фронтом тоже появляются свои «низкоуровневые» начальники по иерархическим, или формальным признакам. Что-то
типа тимлидов для простоты.

И задача разработки большого проекта в виде некоего «жизненного цикла» разработки
и эксплуатации ПО делится на свои жизненные циклы.

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

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

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

Здесь я озвучу тезисы:

  1. При реализации некоторой фичи в одном из фронтов нам необходимо учитывать циклы других фронтов, либо программировать стандартные заглушки, чтобы потом «догнать» по фичам другие фронты и выровняться.
  2. Можно построить схему цикла разработки ПО в целом так, что все будут условно успевать, тогда фича будет внедрена вовремя, но, как минимум, теряется независимость фронтэндных команд между собой — тогда скарм и аджайл для всей системы теряют свою актуальность, либо увеличивают время итерации на разработку. Короче будет происходить больше болтовни и код пишется медленнее.
  3. Изолированные фронты в принципе работают быстрее, но тогда нужно более человекозатратное интеграционное тестирование.
  4. Реализуемые сейчас схемы — каждый фронт разрабатывается отдельно и независимо друг от друга с минимумом взаимодействий, но тут теряется некоторые основы IT — мы так или иначе поолучаем ненулевую группу пользователей, которая будет иногда видеть баги.

Тут философия вопроса такова, что пользователям не нравятся баги по определению. А заказчик гонется за максимизацией прибыли, поэтому большое усложнение системы так или иначе будет приводить к торможению той самой максимизаии, потому что это конечный процесс-жизненный цикл ПО.

В более маленьких проектах этот процесс происходит еще хуже — многие заказчики отдают на удаленку мобильную разработку, хотя бэк и веб ведется своими силами, и регулярно получают равномерное торможение по внедрению фич.

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

Моей идеей является такая мысль — при сохранении основного типа жизненного цикла и имея подтипы в данном случае независимых фронтов нужно иметь ввиду один приоритетный
тип фронта (по баблу, историческим причинам или иное), но они должны быть на условную единицу ниже более высокоуровнего типа цикла.

Т.е если приоритетный веб-фронт работает по недельному скраму, то внутренний скрам на мобильном фронте должен иметь при себе двойной первый скрам, двухнедельный, иначе
начнется путаница. Но выкатывание общей большой версии фронтов необходимо делать одновременно, иначе у вас появится автор статьи, который это пишет. Давайте подумаем…
Источник: https://habr.com/ru/post/448008/


Интересные статьи

Интересные статьи

С увеличением количества обслуживаемых продуктов наша дизайн-система начала разваливаться. Вырос порог входа для дизайнеров и работать с ней стало труднее. В статье расск...
Есть несколько вещей, которыми можно заниматься вечно: смотреть на огонь, фиксить баги в легаси-коде и, конечно, говорить о DI — и всё равно нет-нет, да и будешь сталкиваться со странными...
Приветствую вас, хабровчане! После трудовых будней и перед выходными, предлагаю вам развлекательный, но в то же время лайфхаковский, материал. Речь пойдёт про выбор и покупку техн...
Как-то у нас исторически сложилось, что Менеджеры сидят в Битрикс КП, а Разработчики в Jira. Менеджеры привыкли ставить и решать задачи через КП, Разработчики — через Джиру.
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.