Нарезка стека разработки - по диагонали?

11

У нас начинается новый проект, и на данный момент разработчики разделены на две команды: команду A и команду B. Этот проект состоит из двух частей, которые требуют разработки на протяжении всего стека разработки. Очень упрощенный образец нашего стека показан ниже:

введите описание изображения здесь

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

введите описание изображения здесь

Однако недавно я узнал, что команда A хочет отвечать за определенные части стека, и они предлагают разделение между двумя командами, где уровень абстракции данных (и размещение контента в слое данных) обрабатывается сами по себе без развития от команды B. Разделение будет выглядеть примерно так:

введите описание изображения здесь

Для меня это кажется очень неестественным. Каждая группа имеет свои различные цели и сроки для их достижения, но команда B будет зависеть от команды A для реализации функций. Предлагаемое решение заключается в том, что общие интерфейсы определены заранее (для проекта, вероятно, предусмотрено 2 года, поэтому их может быть много). Затем команда A разработает необходимые биты для этих интерфейсов на ранних этапах, несмотря на то, что у них будет свой собственный набор целей, а команда B отложит все вызовы на ближайшую краткосрочную перспективу, чтобы они могли прогрессировать.

У меня есть опасения по поводу этого подхода в отношении:

  • Интерфейсы могут измениться, и команда А может не иметь пропускной способности или времени для удовлетворения меняющихся требований.
  • Ошибки в коде команды A могут помешать прогрессу команды B, и, опять же, они не могут быть приоритетными для их исправления из-за другой очереди приоритетов команды A.
  • Нехватка знаний распространилась по командам - ​​команда B может не полностью понимать, что происходит под капотом, и может из-за этого принимать неправильные проектные решения

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

введите описание изображения здесь

Поэтому мне интересно знать, что делает остальная часть промышленности. Большинство расщеплений вертикальные / горизонтальные? Имеет ли смысл диагональное разделение? Если произойдет раскол по диагонали, кажутся ли мои опасения обоснованными, и есть ли что-то еще, о чем должна беспокоиться команда B? Отметим, что я, вероятно, буду нести ответственность за успех или неудачу команды B.

Ян
источник
10
«Остальная часть индустрии», вероятно, делает каждую комбинацию расколов, о которой вы только можете подумать. Но, честно говоря, вы не сказали нам, почему команда А хочет быть ответственной. И это имеет значение, насколько велики ваши команды и имеют ли они одинаковую квалификацию.
Док Браун
На третьем рисунке разделена ли работа команды A и команды B с помощью отдельного API? Есть ли четкая логическая граница, наложенная этой разделительной линией? Разделение труда не совсем новая вещь; Например, у Stack Exchange есть свой дизайнер.
Роберт Харви
@DocBrown Я верю, что команда A хочет быть ответственной, потому что они чувствуют, что «слишком много поваров портят бульон» после неудачного проекта с более крупной командой - но я точно не знаю наверняка. Команды около 5 разработчиков каждая, и достаточно одинаково опытные.
Ян
1
Если вам не удастся убедить их в вертикальном разделении, возможно, вы захотите, чтобы команда A приняла на себя обязательство обрабатывать запросы команды B с более высоким приоритетом, чем их собственные запросы. Это может предотвратить блокировку и плохую кровь, и кажется справедливой ценой, чтобы заплатить.
Ганс-Петер Стёрр
1
@hstoerr: Интересно, что это именно то, что предлагает альянс Scrum. Команда потребителя компонентов (команда компонентов, которая использует или «потребляет» результаты других групп компонентов) действует как владелец продукта команды производителей. взяты из scrumalliance.org/community/articles/2012/september/...
Ian

Ответы:

12

Ваши опасения чрезвычайно важны. Особенно первые два замечания о том, что у команды А нет времени на добавление функций или исправление ошибок, влияющих на команду Б. Я видел, что такое случалось на моей собственной работе довольно много раз.

Это может быть хорошей идеей, если:

  • Известно, что команда A будет работать над проектами, которым требуются новые функции в базе данных, в то время как цель команды B по сути состоит в том, чтобы выполнять функции «только внешнего интерфейса». Например, если команда B пишет новое приложение iPhone для вашей компании, вполне вероятно, что они не будут добавлять новые поля базы данных какое-то время, поскольку им нужно перенести / переопределить все функции версии для ПК.

  • «Полный стек» стал достаточно сложным, так что ни один разработчик (или команда разработчиков) не может эффективно «владеть» всем этим. Под «своим» я подразумеваю не просто добавлять функции и исправлять ошибки, но понимать и заботиться обо всей системе до такой степени, что они могут избежать увеличения технической задолженности со временем. В этом случае «диагональное» разделение является разумным шагом, если команда A владеет интерфейсом UI / Web API, который либо чрезвычайно прост, либо неизбежно тесно связан с реализацией DAL / базы данных (возможно, с некоторыми внутренними инструментами диагностики?), А команда B делает все сложные пользовательские интерфейсы.

  • Менеджмент понимает риск того, что команда А станет узким местом, и был бы готов де-диагонализировать вещи, если или когда этот риск превращается в реальную проблему.

Я не могу говорить о том, что более или менее распространено в отрасли, но, по крайней мере, там, где я работаю, всем разработчикам приложений необходимо быть «полным стеком». У нас есть «инфраструктурные» команды, которые разрабатывают / поддерживают нашу внутреннюю базу данных, нашу инфраструктуру веб-сервисов и нашу структуру пользовательского интерфейса (я уже говорил, что моя компания огромна?), Так что все наши сотни приложений могут иметь полный стек Разработчики, в то время как компания в целом может обеспечить стабильную производительность и интерфейс для всех наших услуг.

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

Ixrec
источник
2
С вашей второй точки зрения это кажется верным для любого бизнес-приложения разумного размера. Библиотеки с четко определенными API-интерфейсами кажутся логическими границами, если они не слишком велики.
Роберт Харви