У нас начинается новый проект, и на данный момент разработчики разделены на две команды: команду A и команду B. Этот проект состоит из двух частей, которые требуют разработки на протяжении всего стека разработки. Очень упрощенный образец нашего стека показан ниже:
Каждая часть проекта требует разработки по всему стеку, поэтому я, как правило, ожидаю подхода разработчика полного стека, который заключается в том, как мы ломали нашу работу в команде B, разрабатывая и отрабатывая взаимодействия между различными частями.
Однако недавно я узнал, что команда A хочет отвечать за определенные части стека, и они предлагают разделение между двумя командами, где уровень абстракции данных (и размещение контента в слое данных) обрабатывается сами по себе без развития от команды B. Разделение будет выглядеть примерно так:
Для меня это кажется очень неестественным. Каждая группа имеет свои различные цели и сроки для их достижения, но команда B будет зависеть от команды A для реализации функций. Предлагаемое решение заключается в том, что общие интерфейсы определены заранее (для проекта, вероятно, предусмотрено 2 года, поэтому их может быть много). Затем команда A разработает необходимые биты для этих интерфейсов на ранних этапах, несмотря на то, что у них будет свой собственный набор целей, а команда B отложит все вызовы на ближайшую краткосрочную перспективу, чтобы они могли прогрессировать.
У меня есть опасения по поводу этого подхода в отношении:
- Интерфейсы могут измениться, и команда А может не иметь пропускной способности или времени для удовлетворения меняющихся требований.
- Ошибки в коде команды A могут помешать прогрессу команды B, и, опять же, они не могут быть приоритетными для их исправления из-за другой очереди приоритетов команды A.
- Нехватка знаний распространилась по командам - команда B может не полностью понимать, что происходит под капотом, и может из-за этого принимать неправильные проектные решения
Было высказано предположение, что многие компании в отрасли имеют подгруппы и должны быть в состоянии справиться с этим. Насколько я понимаю, команды обычно либо делятся так, как я изначально ожидал (полный стек), либо разбивают технологический стек, как показано ниже:
Поэтому мне интересно знать, что делает остальная часть промышленности. Большинство расщеплений вертикальные / горизонтальные? Имеет ли смысл диагональное разделение? Если произойдет раскол по диагонали, кажутся ли мои опасения обоснованными, и есть ли что-то еще, о чем должна беспокоиться команда B? Отметим, что я, вероятно, буду нести ответственность за успех или неудачу команды B.
Ответы:
Ваши опасения чрезвычайно важны. Особенно первые два замечания о том, что у команды А нет времени на добавление функций или исправление ошибок, влияющих на команду Б. Я видел, что такое случалось на моей собственной работе довольно много раз.
Это может быть хорошей идеей, если:
Известно, что команда A будет работать над проектами, которым требуются новые функции в базе данных, в то время как цель команды B по сути состоит в том, чтобы выполнять функции «только внешнего интерфейса». Например, если команда B пишет новое приложение iPhone для вашей компании, вполне вероятно, что они не будут добавлять новые поля базы данных какое-то время, поскольку им нужно перенести / переопределить все функции версии для ПК.
«Полный стек» стал достаточно сложным, так что ни один разработчик (или команда разработчиков) не может эффективно «владеть» всем этим. Под «своим» я подразумеваю не просто добавлять функции и исправлять ошибки, но понимать и заботиться обо всей системе до такой степени, что они могут избежать увеличения технической задолженности со временем. В этом случае «диагональное» разделение является разумным шагом, если команда A владеет интерфейсом UI / Web API, который либо чрезвычайно прост, либо неизбежно тесно связан с реализацией DAL / базы данных (возможно, с некоторыми внутренними инструментами диагностики?), А команда B делает все сложные пользовательские интерфейсы.
Менеджмент понимает риск того, что команда А станет узким местом, и был бы готов де-диагонализировать вещи, если или когда этот риск превращается в реальную проблему.
Я не могу говорить о том, что более или менее распространено в отрасли, но, по крайней мере, там, где я работаю, всем разработчикам приложений необходимо быть «полным стеком». У нас есть «инфраструктурные» команды, которые разрабатывают / поддерживают нашу внутреннюю базу данных, нашу инфраструктуру веб-сервисов и нашу структуру пользовательского интерфейса (я уже говорил, что моя компания огромна?), Так что все наши сотни приложений могут иметь полный стек Разработчики, в то время как компания в целом может обеспечить стабильную производительность и интерфейс для всех наших услуг.
Недавно наша компания создала совершенно новую структуру пользовательского интерфейса, поэтому был период, когда некоторые из наших новых приложений были довольно сильно заблокированы из-за ошибок и отсутствующих функций в новой среде. Это уже не так, в основном потому, что некоторым из нас было дано разрешение отправлять запросы на извлечение команде, которая владеет фреймворком (не совсем «недиагонализация», но вы поняли идею).
источник