Данная статья — вторая из серии «Карьера в IT», в каждом выпуске которой мы рассматриваем одну из должностей в сфере разработки ПО. Первый материал серии был посвящен позиции Team Lead, роль которого заключается в совмещении управленческих и технических обязанностей. В этой части мы обсудим высшую ступеньку непосредственно программистской карьеры в IT — Software Architect.
Software Architect — это IT-специалист, принимающий решения относительно внутреннего устройства и внешних интерфейсов программного комплекса с учётом проектных требований и имеющихся ресурсов.
По статистике ДОУ, среднему украинскому архитектору 30 лет, он имеет
Задачи и обязанности
Главная задача архитектора — поиск оптимальных (простых, удобных, дешевых) решений, которые будут максимально соответствовать потребностям заказчика и возможностям команды. На основании бизнес-требований этот специалист создает функциональную и техническую спецификацию системы, планирует и проектирует способы технической реализации, выбирает технологии.
Архитектор обязан иметь целостное видение всей системы и грамотно определять, как система будет разбита на модули, и как эти модули будут взаимодействовать между собой, — только после принятия этих решений команда разработчиков сможет приступить к работе над отдельными модулями.
В обязанностиархитектора входит:
— Проектирование системы на основе требований заказчика;
— Определение архитектуры приложения или ее эволюции;
— Выбор технологии для каждого звена системы;
— Выбор способов взаимодействия между компонентами системы;
— Создание рабочего прототипа;
— Дизайн интерфейсов и компонентов приложения;
— Подбор или проектирование фреймворков;
— Анализ и исправление проблем производительности;
— Архитектурное ревью бизнес-требований;
— Ревью кода и дизайна при больших изменениях;
— Рефакторинг кода;
— Написание и поддержка стандартов кодирования, каталогов проектных паттернов и антипаттернов;
— Документирование всех архитектурных решений, постоянное обновление документации;
— Риск-менеджмент;
— Координирование архитектуры на протяжении последующего жизненного цикла ПО;
— Обучение и консультирование программистов.
«Архитектор ПО ничем не отличаются от других Архитекторов, которые строят мосты или дома. Приложение — это тоже строение: ему нужен правильный фундамент и сильные решения. Стоя под мостом во время проверки нагрузкой, нужно быть уверенным, что он не рухнет».
Необходимо стратегическое видение: проектные решения архитектора должны обеспечивать возможность корректных изменений или улучшений системы, ее дальнейшего расширения, создания следующих версий, а также возможность повторного использования кода в других проектах.
«В отличие от проектного менеджера, который фокусируется на вопросе, как успешно довести проект до конца в рамках текущих бюджетов и ресурсов, архитектор отвечает за то, как технически правильно довести проект до конца в рамках текущих ресурсов и не застрелиться при разработке последующих версий».
Кроме этого, от архитектора ожидается глубокое понимание предметной области бизнеса, знание основных стандартов и трендов, связанных с разрабатываемым продуктом. Или, если от противного, — незнание специалистом каких-либо бизнес-деталей, необходимых для проектирования, не может служить оправданием неспособности архитектора выполнить свою работу.
«Без знания предметной области ты остаешься на уровне сеньора. Чем больше ты понимаешь язык бизнеса, тем ты ценнее».
Еще одна особенность должности архитектора связана с необходимостью искать компромиссы. В каждом проекте фигурирует большое количество заинтересованных лиц (стейкхолдеров):
— Заказчик — заинтересован в решении проблемы, в минимизации стоимости решения, в однообразии всех технических решений, простоте их использования и поддержания;
— Топ-менеджмент — в максимизации прибыли;
— Менеджмент проекта — в своевременном и качественном выполнении проекта;
— Члены проектной команды всех ролей и специальностей — в интересной, комфортной работе, отсутствии давления, использовании удобных и современных инструментов и технологий.
У каждого из них есть свои интересы в данном проекте, и каждый предоставляет свои требования, пожелания, ограничения. Кроме этого, каждый разговаривает на своем языке (техническом или языке бизнеса), каждый понимает и воспринимает аргументы из своей области и не понимает чужих. Архитектору необходимо собирать общую картину требований и органичений всех стейкхолдеров, соединять их знания и интересы, обеспечивать эффективную коммуникацию между ними, вырабатывать решения, позволяющие оптимальным образом удовлетворить максимальное количество требований каждого.
«Умение выбрать оптимальное решение вместо лучшего — вот основная задача архитектора».
Таким образом, архитектор — это специалист, который хорошо знает возможности различных технологий. Его главные обязанности: устанавливать требования как к системе в целом, так и к каждому ее отдельному компоненту, определять дизайн решения и способы достижения цели. Он должен уметь оценить риски, связанные с выбранными технологиями, и подготовить альтернативны.
«Я занимаюсь не столько реализацией конкретных фич игры, сколько придумыванием того, как они должны быть реализованы вообще и каким будет их взаимодействие друг с другом. Например, при разработке игры от меня требуется выбрать технологии реализации клиента и сервера, выбрать способ коммуникации между ними, определиться, какие операции следует реализовать на клиенте, а какие — на сервере, и как все это будет храниться в базе. В мои обязанности входит работа над движком игры — как реализовать это всё, чтобы оно было легко переносимо и работало как можно быстрее. Допустим, наша новая игра дает всего лишь
Типичный рабочий деньархитетора предпологает:
— участие в групповом планировании, митингах, совещаниях с заказчиком;
— консультирование команды по текущим вопросам;
— проектирование и написание технической документации;
— изучение новых технологий;
— работа с кодом проекта, прототипирование, оптимизация, рефакторинг.
«Всегда нужно быть готовым к переключению между задачами — это норма для архитектора».
Достоинства и недостатки
Должность архитектора привлекает разработчиков открытыми возможностями знакомиться с новыми технологиями и идеями, влиять на процесс разработки и судьбу проекта, а также решать глобальные задачи, оставаясь при этом программистом.
«Работая архитектором, я занимаюсь тем, что люблю — решаю сложные инженерные задачи, которые делают мир технологий лучше».
«Давно занимаюсь проблемой создания искусственного интеллекта, и моя работа помогает мне на нужном уровне абстракции понять предметные области, в которых ведет деятельность человек — как они функционируют и как их можно реализовать единообразно программным способом».
Недостатки: большая ответственность, необходимость тщательно взвешивать каждое принятое решение. Цена ошибки архитектора выше, чем цена ошибки другого технического специалиста на проекте.
Также архитекторы относят к недостаткам возрастание управленческой нагрузки, частые совещания и митинги, необходимость работать преимущественно с чужим кодом, а не с собственным.
«Иногда хочется просто программировать, а не решать вопросы вселенского масштаба о взаимодействии и принимать решения по снижению зависимости между частями каких-то систем. Например, написать код, реализовать какой-то алгоритм и отладить его. Скажу по секрету, иногда удается отбить у разработчиков интересную задачу!».
«Труд архитектора иногда менее заметен пользователями и менеджерами, чем труд разработчика. Последний добавил кнопку — пользователь рад, так как давно ее ждал. Архитектор сделал рефакторинг — программисты сказали „ОК“. Меньше откликов от конечных пользователей».
Как стать архитектором и куда идти дальше?
Должность архитектора является следующим этапом развития Senior/Lead-инженера, который не хочет уходить в менеджмент и отдаляться от технических задач.
Основные навыки и качества, которыми должен обладать специалист, желающий стать архитектором, — это системное мышление, склонность к анализу, большой опыт, коммуникативные способности. Важно умение доводить работу до конца, а также высокая скорость самостоятельного обучения и мотивация к получению новых знаний. Кроме этого, архитектор должен уметь подать и продать свое видение проекта в техническом плане.
«Быть очень сильным, умным специалистом, идти в ногу с развитием технологий, предугадывать их ход и быть всегда на шаг впереди, постоянно стремиться к оттачиванию своих умений, обладать хорошим абстрактным мышлением, вмещая сложные системы и процессы у себя в голове, и уметь четко и правильно аргументировать свои решения».
Из технических знаний: необходимо разбираться в алгоритмах и их сложностях, быть в курсе доступных платформ и технологий и знать их достоинства и недостатки.
Разработчик, решивший стать архитектором, должен быть готов к смене профессии и изучению ее основ, к выполнению новых активностей, к смещению фокуса с технических аспектов на другие. Помимо опыта программирования, огромным плюсом для будущего архитектора будет опыт работы в других сферах разработки ПО, таких как тестирование, менеджмент, разработка дизайна и юзабилити, бизнес анализ.
Согласно данным IASA, результаты опроса, в ходе которого архитекторов со всего мира просили оценить важность того или иного качества/умения в успешной работе, выглядят следующим образом:
Самые важные качества/навыки по категориям (по убыванию):
Human Dynamics:
— Collaboration and Negotiation
— Presentation Skill
— Leadership and Management
IT Environment:
— Platforms and Frameworks
— Application Development
— General IT Skills
Business Technology Strategy:
— Technology Strategy Development
— Requirements Discovery and Constraints Analysis
— Business Fundamentals
Design Skills:
— Architectural Description
— Design Analysis and Testing
— Decomposition and Reuse
— Design Methodologies and Processes
Quality Attributes:
— Reliability, Availability, Scalability
— Extensibility and Flexibility
— Security
«Быть архитектором — это работать, а не просто отрабатывать получаемую зп».
«Программист становится программистом не тогда, когда начинает писать работающий код, а когда начинает думать как программист. Это просто склад ума и характера — либо ты мыслишь как архитектор (или программист), либо нет».
Практические советы:
«Нужно побольше работать над своими проектами в свободное время. Единственный способ стать архитектором — начать создавать архитектуры. Со временем начнет получаться. Еще через время начнет получаться хорошо. Когда у тебя уже готово 90% проекта, а ты внезапно осознаешь, что реализация оставшихся десяти займет больше времени и породит кучу костылей, и это проще переписать заново, чем закончить, то в будущем будешь уже продумывать все наперед. Правда тут тоже стоит меру знать. Желая сделать все идеально, можно и вовсе ни одного проекта не доделать».
«Я рекомендую при использовании какого-либо программного продукта стараться понять, как он устроен, и придумывать, как бы вы реализовывали ту или иную его функцию. Вот, предположим, есть в игре кнопка, при нажатии на которую, усиливаются щиты корабля. И я, играя в эту игру, стараюсь понять, как она отрисовывается на экране и как она сигналит о своем нажатии основному коду, как выполняется проверка на наличие доступной энергии и на отсутствие повреждений у системы щитов, как рассчитывается мощность щитов в зависимости от накачанной в них энергии и т. п. Разумеется, я не могу узнать, как оно там устроено на самом деле, но я могу прикинуть, как бы я это делал и что бы при этом использовал».
«Есть два вида разработчиков: те, кто делает поезда, и те, кто строит для них вагоны. Прежде чем сделать первый стоящий проект в качестве архитектора, я 6 с половиной лет клепал разного качества тележки. Понимание того, что ты можешь планировать и создавать архитектуру проекта, приходит вместе систематизацией большого количества знаний из разных областей программирования».
Перспективыкарьерного развития архитектора имеют 2 ракурса: либо углубление в техническую часть и развитие «от маленьких систем к enterprise и управлению космическими кораблями в масштабах вселенной», либо переход в менеджмент на позицию СТО или VP of Engineering. Фактически архитектор — это финальный этап технического карьерного роста.
«Прелесть данной позиции именно в том, что в ней можно расти бесконечно — появляются новые технологии, проблемы, продукты».
С точки зрения профессионального ростаможно выделить следующие направления:
— Рост в размере и сложности решаемых проблем;
— Развитие в «ширину» — изучение большего количества технологий, процессов и методологий, инструментов, архитектурных подходов;
— Развитие знаний в предметной области — «Людей, которые могут кодить в мире технологических компаний — пруд пруди, и их не ценят. А те, кто может кодить в биологии, медицине, политике, социологии, физике, истории, математике — уважаемые люди, способные делать удивительные вещи для развития своих дисциплин». (Zed. A. Shaw)
«О перспективах этой профессии на рынке Украины могу сказать, что для Software Architect все только начинается. Судя по опыту предыдущих годов, еще 5 лет назад никто даже не догадывался, что такая профессия есть. Но еще 7 лет назад никто в Украине не понимал, зачем нужно платить за интернет ресурсы и их разработку — как можно заплатить за то, что нельзя пощупать? Точно так же и с архитекторами».
P.S. Отдельное спасибо за помощь в написание статьи Максиму Ковтуну и 18 другим украинским архитекторам, которые поделились с DOU таинствами своей профессии. Приведенные в статье цитаты взяты из их рассказов.