Статья направлена на диалог о необходимости архитектора в команде. Она будет интересна тем, кто задумывается о пути своего развития, когда “все дороги уже исхожены”. Когда имеющийся богатый опыт делает твою работу “неэффективной” с точки зрения коллег. Когда тебя уже почти ничего не удивляет и каждый следующий проект это дежа вю. Ты выгораешь.
Кто такой архитектор?
Погуглить на эту тему может каждый самостоятельно. Я постараюсь не быть кэпом и отражу сущность архитектора под необычным углом. Лично мне нравится шуточное определение этой роли:
Архитектор — человек, который способен любому разработчику в команде аргументированно доказать, что его мнение ничего не стоит.
или:
Архитектор — человек, который лучше других знает когда нужно уходить из проекта.
Хотя оба определения шуточные, но они демонстрируют пару ключевых способностей этой роли:
- Широкий кругозор с одновременно глубоким погружением в детали;
- Способность комплексно видеть причинно-следственные связи и возможные результаты развития событий.
За этими пунктами стоит большой опыт. Можно ли обойтись без десятка(ков) лет в профессии, чтобы стать архитектором? Можно. Так же, как стать сеньором С++ через пару месяцев. Все зависит от человека, его способностей и самокритичности.
Если вы сами создавали хотя бы одну программку, вы уже архитектор. Архитектор-джун. Смешно звучит. Хотя….
Если мы возьмем команду примерно равных по опыту разработчиков, кто из них станет архитектором? Тут обычно два сценария:
- каждый сам себе архитектор;
- архитектор тот, кто может внятно доносить свои мысли и преимущества своих решений.
Возможно покажется странным, но первый сценарий более жизнеспособный. Дело в том, что имея конфликт интересов или профессиональный конфликт в команде, можно получить повышение качества продукта. Конечно, жертвуя временем.
А вот второй сценарий может привести к тому, что более талантливый специалист будет попросту задавлен харизмой и софт-скилами самовыдвиженца. И продукт проиграет, получив самоуверенную персону, не терпящую альтернативного мнения.
Поэтому, к важным качествам архитектора относится и:
- Высокий эмоциональный интеллект.
Архитектор должен уметь использовать интеллектуальный ресурс команды, прислушиваться к мнению, настаивать там где нужно, брать на себя ответственность, быть наставником, учиться (много и постоянно), находить компромиссы и уметь заразить команду идеей.
Что должен делать архитектор?
Из стереотипных представлений об архитекторе известно, что он должен рисовать всякие схемы во всяких там нотациях. Бизнес-процессы, требования к системам и т.п. штуки, которые мешают творить разработчикам.
Но это лишь артефакты деятельности. В ходе создания этих артефактов происходит магия, которая и отличает архитектора от плохого художника.
На самом деле, ключевой функцией роли является архитектурный охват. Т.е. осознание того как система функционирует. И совсем не обязательно все должно быть документально выражено. Примером может стать проект, на котором задействован всего один разработчик. Он вполне успешно способен создать основу системы в голове и тут же выразить ее в коде.
Если же в проекте участвует много людей с разными профессиональными векторами, то простое удержание в голове уже недостаточно. Архитектор, это роль, которая должна позволить всем четко понимать конечный технический портрет системы. И для этого требуется наглядное изложение того, что уложено в его голове. Вот тут на помощь приходят кружочки и квадратики.
Часто архитекторы загоняются по нотациям. В целом, это хорошо. Т.к. есть стандартизация представления архитектуры. Но далеко не всегда конечный потребитель архитектуры умеет читать такие нотации. При высоком уровне развития процессов в компании это оправдано. Всех приучаем к стандарту и вперед. Но в стартапах, где нужно оперативно запустить разработку в компании разношерстных высококвалифицированных сеньоров (которые сами все знают), нотации обычно не заходят. Приходится быть ближе к людям. И рисовать понятно. А не умно.
Тем более это станет проблемой, когда нужно будет получить от кого-то из команды его представление о верном архитектурном решении. Человек или не сможет вам его описать или закомплексует. И это фейл архитектора — неспособность использовать интеллектуальный ресурс команды.
Если показалось, что я выше ёрничал, написав в скобках о сеньорах, что они все сами знают, то это не так. Они действительно все сами знают. Часто это люди, разделяющие роль архитектора и разработчика. Но зачастую, у них есть проф-деформация — они тоталитарно проводят свое мнение о необходимом решении. Это связано с тем, что в команде они были (есть) самыми сильными разработчиками. И вынуждены брать на себя ответственность.
Архитектор обязан выстроить с командой доверительные отношения. Я пишу доверительные, а не дружеские или просто хорошие. В понятие доверия я включаю возможные профессиональные конфликты. Но при этом, каждая сторона понимает, что этот конфликт не личный. Каждая из сторон хочет лучшего проекту. И даже если ты уступишь в споре, это не проигрыш, а выраженное доверие использовать решение оппонента.
Архитектор обязан делиться своим опытом и уметь “переваривать” чужой. В команде всегда найдется кто-то с интересным опытом. К сожалению, обычно, этот опыт имеет узкий угол обзора его предпосылок. При выборе стека разработчик может сказать:
- А давайте все сделаем на React! Мы так делали и у нас все получилось!
Сомневаться в этом нет причин. Но это не повод делать также. У проекта на котором он работал есть свои исторические корни и проблемы. Весьма вероятно, что React имеет минусы, о которых разработчик или умалчивает, или не знает.
Умалчивать разработчик может ненамеренно. Возможно он исключительно React использовал до этого. Ему не с чем сравнивать. Случается и обратное. Например, на рынке разработчик React выше оплачивается. На прошлом месте он завидовал коллегам пишущим на React. Но шанса изменить стек не было. Т.е. разработчик имеет исключительно шкурный интерес.
Архитектор обязан рассмотреть предлагаемый опыт. При рассмотрении он должен учесть все детали. Составить свое мнение и аргументированно донести его.
Например, в вопросе выбора элементов стека хорошо зарекомендовал себя документ “Выбор ключевого решения”. В нем, в водной части, описываются требования, ограничения и специальные условия. Затем под эти рамки подбираются и сравниваются решения. В заключении делается мотивированный вывод. Последней фазой является утверждение документа командой.
Это необходимая бюрократия. Подобный выбор будет влиять на успех проекта, если не все время его существования, то длительный промежуток времени. Команда должна быть уверена, что выбор был сделан взвешенно и разделять его.
И конечно, архитектор обязан создавать системы с бизнесом, для бизнеса и ради бизнеса.
Чего не должен делать архитектор?
Самое главное, что не должен делать архитектор — допускать демократию.
Т.е. количественный метод принятия решений. Где любой в равной степени может воздействовать на выбор.
Любое решение должно иметь основания. В какой-то степени, можно допустить случай, когда имеется пара решений с идентичными свойствами и остается только ткнуть пальцем не глядя… но из моего личного опыта этого можно избежать дообследованием.
Случается, что при защите выбранного решения архитектор может столкнуться с тем, что оно не утверждается. По какой-то причине аргументы, определяющие выбор, воспринимаются недостаточными. Это не повод отступать. Требуется дополнить матрицу сравнения неохваченными свойствами. Учесть критику. И идти на второй заход. Третий. В любом случае, документ должен отражать причины выбора. Только так проект гарантирован от флэшбэков и запоздалых разборок. Никакой демократии.
Второе по важности — недопустимо дистанцироваться от бизнеса и разработчиков. Иногда, так хочется пожить в своем идеальном мирке, где все понятно и логично. Но, жизнь сурова. Бизнес стремится развиваться. Нужно уметь слушать идеи бизнеса и понимать вектор их развития. Закладывать в архитектуру концепции, которые позволят решать задачи, еще несформулированные бизнесом.
Держи друга близко, врага еще ближе, а с разработчиком нужно быть одним целым.
Какую бы классную архитектуру не наваял архитектор, если разработчик не видит в ней ценности, он ее похоронит.
Требуется осознавать, что разработчик не смотрит на систему как архитектор. Он фильтрует информацию, стараясь оставить только то, что ему необходимо в его непосредственной деятельности. Не потому, что он злобная сволочь. Просто у него голова забита иной очень важной информацией, помогающей выполнять ему его работу.
Важно уважать это и доносить ровно ту часть информации, в которой он испытывает потребность. Лучший способ — доносить информацию так, чтобы у разработчика возникла та же идея, которую заложил архитектор. В этом случае успех гарантирован.
Архитектор не должен манипулировать бизнесом. Таланты архитектора могут сыграть злую шутку с ним самим и проектом в целом. Он намеренно или ненамеренно может стать частью системы принятия решений бизнесом.
Опасно, когда бизнес начинает ориентироваться на мнение архитектора в несвойственных ему областях. Риск и асистемность в молодом бизнесе необходимое зло. Юные менеджеры-стартаперы, поддавшиеся на манящие песни архитектора о том, что все должно быть системно, могут с удивлением обнаружить, что затраты на операционку (поддержание системы) превосходят бизнес-профиты.
Где искать архитектора?
У нас в компании встал вопрос поиска архитектора на проект. Как водится нужно описать вакансию. Требования относительно очевидны:
- Широкий, актуальный и релевантный опыт в ИТ;
- Лидерские качества;
- Развитые софтскилы.
Предлагаю эксперимент — закройте рукой слово “архитектор”. Какая роль рисуется под этими скилами? Скорее ИТ-директор или CTO. И это вполне справедливо. Более того, вероятна ситуация, когда от архитектора требуются гораздо более развитые скилы из этого перечня. А разница заключается в обязанностях.
Для архитектора:
- Создавать и развивать архитектуру систем;
- Участвовать в разработке процессов компании;
- Наставничество;
- Разработка стандартов.
- ...
Для директора:
- Работа с подрядчиками;
- Управление бюджетом;
- Управление и развитие команды;
- Обеспечение непрерывности процессов;
- ...
Что мы видим? Очевидно, что архитектор и руководитель расходятся в цели существования.
Типичный юный ИТшник видит перед собой карьеру: джун->мидл->сеньор->тимлид->CTO. Но где-то на третьей ступени он начинает понимать, что, что-то идет не так. И уже на последнем — теряет самореализацию в разработке. Он перегружен административкой. Забыл когда в последний раз код писал.
Я видел много примеров, когда люди, добившись шаблонного карьерного успеха, тухли. Многие, теряя то, что им так нравилось, заводят свои pet-проекты. И пытаются там самореализоваться.
Путь архитектора это иной, весьма интересный путь. Я бы сказал, это правильный путь ИТшника. Не менеджера, а именно ИТшника. Который хочет иметь все более серьезные профессиональные вызовы. Он имеет возможность самореализации каждый день на всем карьерном пути.
Так где искать архитекторов? Мне кажется: среди счастливых профессионалов или внутри несчастных менеджеров.
Вместо заключения
Предлагаю пообщаться на тему необходимости архитектора в команде. Как вы себе представляете его роль? Сталкивались ли вы с его необходимостью? Возможно напротив, он вам мешал? Видите ли вы себя архитектором в перспективе? Хотели бы вы поменять путь менеджера на путь архитектора? Сделало бы вас это счастливее?
BugM
Вы забыли самое главное.
Архитектор должен писать код. Например, половину времени.
Писал код год назад не работает. Смотреть на код только через код ревью тоже не работает.
Иначе он быстро станет типичным менеджером, который в технические внутренности проекта даже не лезет. И все технические решения как обычно будут принимать лиды и сеньеры.
rpiontik Автор
Согласен с Вами полностью. В обязательное требование я не включил это осмысленно. Иногда на это действительно нет времени из-за пула задач. Но отсутствие практики отрывает архитектора от реальности.
Я бы сказал, что он должен это делать как процесс поддержания навыков. Самостоятельно.
BugM
Самостоятельно писать продашен реди код в свободное время? На постоянной основе? У вас странные вкусы.
А когда отдыхать? Семья, хобби. Работая в свободное время можно быстро устать и уйти назад в разрабы. Денег не сильно меньше, а на твое свободное время никто не претендует.
Никто не говорит что обязательно каждый день по 4 часа. 2-3 дня в неделю, неделю через неделю, месяц через месяц если совсем никак.
Время выделяется руководством. Это обязательная часть работы. Чтобы чуство реальности не терять.
rpiontik Автор
Продакшен реди код это сильно круто. У архитектора должен оставаться конфликт интересов с этим самым кодом. Я предполагаю участие архитектора в ключевых основах системы. Например базовые классы проекта или его структура. А развитие уже идет разработчиками.
В наших проектах для этого выделена область «core». В нее доступ имеет core-team. В том числе и архитектор через нее «видит» проект. Бизнес-логика же реализуется путем наследования от классов core.
Документация по API также развивается архитектором. Описанный контракт уже реализуется разработчиком.
BugM
Так в доведении до прода весь сок.
Чтобы понять как все это ложится и переписывается при пятом изменении желаний менеджеров.
Как все это мониторится, отлаживается, саппортится.
Насколько часто происходят вообще неведомые вещи.
Насколько приятно писать, отлаживать и катать готовый код.
Если не доводить свой код до прода, то это все остается где-то сбоку и как бы не важно. Более-менее прилично сделать можно на любой основе. Вопрос только в количестве страданий в процессе.
Выглядит очень странно. В проекте есть код который нельзя менять, но который надо использовать.
Первое что я сделаю когда он не совпадет с реальностью это напишу свой рядом. Хорошо напишу, код ревью всякие он пройдет без проблем.
А такие несопадения будут примерно раз месяц. Менеджеры такие затейники, такие фичи хотят. Понятно что после такого я вероятно пойду на мороз, но это лучше чем страдать и делать костыли или заниматься бюрократией на пустом месте.
В век микросервисов АПИ это примерно все.
Публичное АПИ? Конечно, все только спасибо скажут. С ним море проблем и согласований всегда.
А вот апи между парой соседних микросервисов, которое еще и меняется в процессе разработки раз 5 фиксировать это такое себе. Поправить по паре строк и там и там, убедиться что никто больше не задет и всем станет лучше. Часто ведь бывает.
У вас там точно нет рядом второго «теневого» апи? Которое разработчики сделали чтобы работало, а не чтобы правильно было?
rpiontik Автор
Коротко я ответить я тут не смогу. Нужно развернуто. Уже завтра отпишусь. Мы много обсуждали те вопросы, которые Вы подняли.
rpiontik Автор
Разработка это процесс. Ведь даже при наличии архитектуры ты не просто кодишь? Ты продумываешь алгоритм, реализацию этой архитектуры. Одну и ту же архитектуру можно реализовать несколькими способами. И от мастерства разработчика это зависит напрямую.
Архитектор хоть и обязан иметь широкий кругозор, но глубина его познаний в частных вещах может страдать по сравнению с сеньором по направлению.
Помимо этого, разработчик функционирует в окружении с которым постоянно взаимодействует. Это и лид, и тестировщики, и постановщики и т.д. Все это направлено на получение качественного кода.
Если архитектор должен писать прод реди код, то он обязан следовать установленным стандартам. Очевидно, что он превращается в разработчика. И выполнять свою функцию далее не может.
Но, архитектор не должен отрываться от реальности. Он обязан понимать как реализуется его задумка в системе. А в лучшем случае — контролировать этот процесс. Для этого создается процесс его участия.
Например, выделяется область core, в ней создаются базовые классы, хелперы, интерфейсы. Конечно, создается это не в одно лицо архитектором. А в тандеме с core-team, куда входят ведущие разработчики.
Далее, т.к. ведущие разработчики погружены в архитектуру, они сами приняли участие в ее реализации, экспертиза органично «разливается» на остальную команду.
Я не говорил, что нельзя. Я написал, что менять его может core-team. Это не какие-то люди в закрытом помещении на 45 этаже. Это твои коллеги за соседнем столом. И если тебе в голову пришло что-то поменять, и ты видишь, что это область core, то ты должен обратиться к ним — core-team.
Возможно ты удумал велосипед. В этом случае они помогут тебе его избежать. Вероятно, что тебе нужен новый функционал, но не хватает экспертизы или у тебя вообще «лапки». Тогда core-team поставит задачу в свой пул.
Но чаще всего, если это действительно нужно, делается все тот же классический pull-request, о принимает его core-team.
Таким образом, это административное выделение критического сегмента кода. Испортить систему вне core затруднительно. И именно эта точка контролируется архитектором.
Тут мы уже говорим о бардаке. Архитектура или есть или ее нет. Возможно, что архитектора не хватает на все. Хотя в этом случае нужно больше архитекторов. Но допустим. Это не повод отступать от принципов. Архитеткор разрабатывает стандарты и внедряет в процессы. И теперь любой API перед его реализацией как и код проходит процесс ревью.
Он может контролировать этот процесс через pull-requests. Всегда найти документацию на контракты. Всегда построить интеграционные связи. Без этого никуда.
Есть. Но это также узаконено. Есть область проттипирования и оперативного принятия решений. В прототипирование входят эксперименты не включенные в архитектуру. Да, это риск. Но риск этот управляемый.
Реальная проблема начинается тогда, когда разработчики не видят ценности в архитектуре. Именно тогда все разваливается на ходу. Когда ценность ясна, сам разработчик стремится контролировать свой сегмент, чтобы не превращать в бардак.
Надеюсь, смог ответить на все вопросы.
BugM
Вот вы создали область участия. Она не идет в прод. Точнее идет, но руками обычных разрабов. Те кто ее делал понятия не имеют насколько это удобно.
Они также понятия не имеют насколько больно выполнять их же правила разработки. Для решения надо просто писать код в продакшен. Eat your own dog food.
Надо поменять вот тут кусочек. Вместо типичного: ПР и на ревью устроена бюрократия.
Разработчики они часто нелюдимые и не хотят ни к кому подходить. А вы заставляете. Мне бы было просто неудобно третий раз идти и говорить что вот тут плохо. Надо переписать. Люди имеют привычку забывать, откладывать, делать потом. То есть то что мне нужно еще неизвестно когда прорастет в мастер.
Все таки стоит сделать рядом свое. Так даже быстрее будет. И всем хорошо сделаю. Надо поменять? Меняйте смело!
Вы слишком не доверяете свои разработчикам. Архитектура и ревью архитектуры это хорошо и правильно. Допустим на задачи от пары месяцев работы. А вот спускаться на уровень "этот код тебя нельзя трогать, его можно трогать только специальным людям" не стоит. Обязательное код ревью на этот код от сеньеров покрывает все задачи невнесения говнокода в общие места. И не вынуждает никого ни о чем просить или ждать.
rpiontik Автор
Те, кто ее делал, не только понимают, но и непосредственно участвовали в принятии такого решения. Потому, что были причины так действовать.
Ключевая причина — противодействие хаусу. Т.е. когда любой в команде, вдруг, считает что нужно половину кода переписать. Потому, что он не хочет у кого-то что-то узнать. И думает, что легче все самому наваять.
А это приводит к дублированию кода. К лапше. Вечному рефакторингу и растущему техническому долгу. Этими процессами нужно управлять.
Мы доверяем своим разработчикам настолько, что в любой момент времени, любой разработчик может встать и сказать:
Это приведет к совершенно конкретным активностям.
Но… если разработчик просто считает, что архитектура такая себе, при этом не может ни обосновать своего мнения, ни предложить иных вариантов решения, то активность сведется к тому, что запрос будет отклонен с формулировкой — необоснованно.
Подчеркиваю, процессы должны служить делу. Если процессы мешают делу, их нужно корректировать. Но они должны быть ясны всем. И разумная бюрократия тут необходима.
BugM
Вы сами сказали что они не пишут код в прод. Окуда им знать?
Причины могут быть любые сделать что угодно. С какой-то стороны это будет хорошо и удобно. Но опять таки вероятно что мнение разработчика пишушего в прод будет другим. И не очень лестным.
Будем реалистами. Кому это надо? Прыгать на людей которых поставили выше тебя? Да еще и доказывать что они не правы? Ну его. Больно надо. Я тут код пишу, а не политикой занимаюсь.
Костылим или акккуратно пишем сбоку. Отдаем на ревью такому же разрабу и никто ничего не узнает. Тикеты закрыты, фича выкачена. Что там в глубинах абстракций никто не полезет копаться. А полезет так ничего не скажет из-за тех же соображений. Фича сделана, код в проде, предположим что код нормальный. Чего прикапываться?
Вы мои слова ровненько подверждаете.
Писать код неудобно и неприятно? Отклонено.
Ваш велосипед заменяем вот на эту типовую библиотечку с нормальной лицензией? Отклонено.
Приходится городить бойлерплейт когда его можно избежать? Отклонено.
Можно просто сдедать в разы проще? Отклонено.
Стиль кода устарел лет на 10? Отклонено.
Все. Доводов нет.
rpiontik Автор
Разговор заходит в тупик.
Кто они? Где сказал?
Архитектор не находится выше разработчика. Он — партнер.
Тем, кто болеет за результат.
Это выбор каждого.
Получим на ревью отлуп. И разъяснения почему это плохо. Потому, что ревью проводит не тот кому я захочу отдать, а тот кто облечен ролью ревьювера.
Для этого есть процесс качества. Возникший инцидент приведет к разработчику. Если еще на тестировании не будет выявлен.
Где?
Вы точно внимательно мой пост читали?
Создается впечатление, что вы упорно транслируете свою модель поведения в роли архитектора. Оно так не работает. Мне казалось, что в статье я достаточно четко выразил мысль о формировании доверия между разработчиком и архитектором.
Более того, Вы как-то странно представляете разработчика флегматичным лентяем да еще и глупым до мозга костей. Простите, я таких не видел. Все с кем мне доводилось общаться разумные люди воспринимающие аргументы. Умеющие выражать свое мнение также аргументированно.
И тот факт, что лично Вы в это не верите не меняет ситуации.
BugM
Talk is cheap. Show me the code
Eat your own dog food
Вы нарушаете основополагающие принципы.
Вы сами сказали. Человек пишуший код и делающий архитектуру с ревью этой архитектуры другими такими людьми обычно называется сеньером. Если хотите назвать его архитектором ваш право.
Вы же говорите о людях не пишуших код. Я специально это сразу уточнил.
Партнер это тот кто вместе со мной хотфиксит релиз.
Тот чей код я ревьюю, а он мой ревьюит.
Тот, кто вместе со мной ночью откатывает внезапно упавший прод.
Тот с кем мы гадаем о причинах неведомой фигни по графикам. И потом переделываем эти графики, потому что они ничего не показывали на самом деле. Объяснять почему нужны не те, а вот эти графики? Увольте. Я даже простыми словами не расскажу что на них. Для менеджеров есть простые графики, которые им понятны. Вот на них пусть и смотрят.
В конце концов тот кто просто пишет код. Пилит фичи, рефакторит, сажает баги и фиксит их, знает о всех типовых проблемах и костылях.
У вас еще и ревью не все подряд проводят? Новичков и джунов исключаем по понятным причинам. А остальных то за что? Им же этот код поддерживать, дописывать и дежурить с ним. Им и оценивать насколько он хорош.
Нет. Я просто видел во что быстро превращаются люди не пишушие продакшен код, но пытающиеся указывать как это надо делать.
И видел типовые варианты обхода таких людей.
Допустим у вас люди увольняться не хотят, и они честно хотят чтобы было сделано нормально. Вариантов как запилить что-нибудь в обход формальных процедур море. Даже при десятке разработчиков в проекте никто ничего не отследит. Слишком много всего разом идет.
Я даже хитрые варианты с «развернуть микросервис вот на этой виртуалочке с именем dragons-lives-here и дергать его через воон тот балансер в конфиг которого годами никто не лазил туда можно любой роутинг запихать» не предлагал. Только самые очевидные.
Обычно вообще хватает простого невыполнения того о чем они говорят. Киваешь головой, соглашаешься и делаешь как хочешь. Они все равно не полезут код смотреть. Не их дело руки марать и читать тысячи строк кода новой фичи. А ведь в этих тысячах строк еще разобраться надо. Этот навык тоже быстро утрачивается. А дедлайн вон он. В прод надо. Срочно.
А потом: Это же уже продакшен код. Работает. Проблем не вызывает. Вот если соберемся рефакторить или переписывать из-за изменений задачи тогда и разбираться будем что там.
Я видел подобное и представляю как это работает. На самом деле достаточно разок послушать на совещании технические высказывания и предложения любого с любой должностью кто не писал хотя бы года 2. Это просто люди из другого мира.
Они могут быть отличными техническими менеджерами, знать много баззвордов. Причем на самом деле знать, а не на вики о них читать. Могут уметь договариваться с бизнесом о желаниях разработчиков, могут наоборот договариваться с разработчиками о желаниях бизнеса. Но им нельзя лезть в то как именно будет писаться код. Это дело разработчиков, в конце концов за это разрабочикам большие деньги платят.
chapuza
Абсолютно.
Мы пошли по немного иному пути: у нас несколько очень сильных разработчиков, и они все выступают в роли архитектора на разных участках. Часто слышен клич: «ребята, застрял, нужна свежая идея» — внутри «команды» архитекторов.
Основная проблема с архитекторами, которые не пишут код — они не в состоянии оценить соотношение «качество архитектуры» / «качество + скорость имплементации». Некоторые вещи имеет смысл упростить архитектурно, ради изящества реализации. Некоторые — наоборот, усложнить, ради завтрашнего дня, — но не до состояния «реализовывать три года с группой синьеров».
rpiontik Автор
Ну т.е. архитекторы есть. Сколько их это вопрос частный.
Мне кажется, это совершенно бытовой кейс. Более того, я не вижу необходимости выделить тут диалог архитектора с архитектором. Застрять это нормально. И совершенно логично обсудить со всеми, кто может в этом деле помочь.
Это какие-то крайне высокоуровневые архитекторы, которые проектируют экосистемы на уровне бизнес-функций. Архитектор проектирующий систему не может не участвовать в разработке кода. Элементарно, разрабатывая архитектуру БД он должен понимать как туда класть данные и как достать. Как сделать это быстро. И быть способным ответить на вопрос — какого хрена ты придумал?
То же касается любого сегмента проектирования.
А вот это как раз дает богатый опыт. Этот шаткий баланс между «а забьем на это пака» и «не, давайте в ни как в прошлый раз» очень ценен. И, к сожалению, молодые ребята, какие бы они умные не были не имеют его.
maxim_ge
Не получается ли, что такой архитектор будет сильно ограничен в выборе компонентов?
Kafka/NATS/RabbitMQ/ZeroMQ… и это только очереди, с БД все еще более пестро. Разнообразные реализации edge router, ingress, serviсe mesh, logging, monitoring… Со всем не наработаешься.
Предыдущий опыт разработки, согласн, должен быть.
rpiontik Автор
У архитектора, для начала, должно быть понимание, что все существующие решения делались для какой-то благой цели умными людьми.
Когда он начинает проектирование, он исходит конечно из своего опыта и знаний. Но выбирает решение наиболее релевантное задаче. Те же очереди, классическая задача выбора решения. Их не так уж и много. Зарекомендовавших себя. Проведение глубокого сравнительного анализа дает представление об области применения. Каждый продукт стремится в своей миссии указать свои сильные стороны.
Чуть сложнее дело со слабыми сторонами. Тут нужно уже ресерчить по практикам.
В ходе этого мероприятия, у архитектора складывается вполне ясное представление о продуктах. Да, оно не обличено опытом. Но далее идет прототипирование. В нем принимают участие специалисты различных направлений от аналитиков до девопсов. И формируется заключение.
В период прототипирования происходит погружение в технологию. Вооруженный опытом, архитектор достаточно быстро способен ее принять в себя и стать наставником.
Только после прототипирования идет внедрение. Т.е. с уже сформированным багажом знаний и опыта.
Ну и когда у тебя несколько успешных проектов за спиной, почти все технологии известны. Редко встретишь настолько уникальные проекты, где нужны уникальные решения. А за новинками следишь.
Для примера, в своем опыте, мне встречались такие решения как Cache Intersystems, IBM Websphere, Apache Synapse и т.п. Эти продукты завозились для решения конкретных бизнес-потребностей. Хотя эти же потребности можно было решить и более известными решениями. Но эффективность этих продуктов, на тот момент времени, оказывалась выше.
Lofer
Логично. Архитектура по сути решение набора проблем наиболее оптимальным способом с точки зрения ресурсов (денег, времени, исполнителей и т.д). Чем больше ресурсов (деньги время исполнители и т.д.) использовано в минимальном объеме (меньше денег + меньше времени + и т.д.) — тем архитектура удачнее\выгоднее.
maxim_ge
Я пару лет назад довольно много времени потратил этот выбор. В написании кода я не участвовал, потому что еще не было кода, а «архитектуру» нужно было уже создавать.
С другой стороны, понятие «участие в разработке кода» можно трактовать достаточно широко, так что я могу сказать, что сейчас я «принимаю участие в разработке, в том смысле, что кое-где прорабатываю архитектуру более детально и смотрю, что получается в итоге. Ну и всякие benchmark гоняю иногда. Но вот так, чтобы я писал существенную по объему часть кода — этого нет.
andreyverbin
Со всем не надо работать, надо знать что внутри, то есть алгоритмы и структуры данных. Не те, что на первом курсе, а штуки вроде MVCC, из которого вытекает vacuum, из которого вытекают интересные следствия для репликации, write amplification и т.д. Увидели MVCC и сразу знаем, что ещё идёт в комплекте, без необходимости тратить годы на освоение нюансов каждого продукта.