Было много вопросов с хорошими ответами о роли Software Architect (SA) в StackOverflow и Programmers SE . Я пытаюсь задать немного более сфокусированный вопрос, чем те. Само определение SA является широким, поэтому ради этого вопроса давайте определим SA следующим образом:
Архитектор программного обеспечения руководит общим проектом проекта, принимает участие в разработке кода, проводит анализ кода и выбирает технологии, которые будут использоваться.
Другими словами, я не говорю о управленческом отдыхе и жилете в типах SA (гребнеобразных слов). Если бы я занимал какую-либо позицию SA, я бы не хотел быть в стороне от кодирования. Я мог бы пожертвовать временем, чтобы пообщаться с клиентами, бизнес-аналитиками и т. Д., Но я все еще технически вовлечен и не просто осведомлен о том, что происходит во время встреч.
Имея в виду эти моменты, что SA должен принести на стол? Должны ли они прийти с менталитетом «изложить закон» (так сказать) и навязать использование определенных инструментов, чтобы соответствовать «их пути», т. Е. Руководящих принципов кодирования, контроля версий, шаблонов, документации UML и т. Д.? Или они должны указать начальное направление и стратегию, затем отложить назад и прыгнуть по мере необходимости, чтобы исправить направление корабля?
В зависимости от организации это может не сработать. SA, который полагается на TFS для обеспечения всего, может изо всех сил пытаться реализовать свой план у работодателя, который использует только StarTeam. Точно так же SA должен быть гибким в зависимости от стадии проекта. Если это новый проект, у них есть больше вариантов, тогда как у существующих проектов их может быть меньше.
Вот несколько историй SA, с которыми я столкнулся как способ поделиться своим опытом в надежде, что ответы на мои вопросы также могут пролить некоторый свет на эти проблемы:
Я работал с SA, который проверял код буквально на каждой строчке кода команды. SA сделает это не только для нашего проекта, но и для других проектов в организации (представьте, сколько времени на это потрачено). Сначала было полезно применять определенные стандарты, но позже это стало наносить вред. FxCop был тем, как SA будет находить проблемы. Не поймите меня неправильно, это был хороший способ научить начинающих разработчиков и заставить их задуматься о последствиях выбранного ими подхода, но для старших разработчиков это было несколько драконовским.
Один конкретный SA был против использования определенной библиотеки, утверждая, что это было медленно. Это заставило нас написать тонны кода, чтобы добиться чего-то другого, в то время как другая библиотека сэкономила бы нам много времени. Перенесемся в последний месяц проекта, и клиенты жаловались на производительность. Единственное решение состояло в том, чтобы изменить определенные функциональные возможности, чтобы использовать первоначально игнорируемый подход, несмотря на ранние предупреждения от разработчиков. К этому моменту большая часть кода была выброшена и не использовалась повторно, что приводило к сверхурочной работе и стрессу. К сожалению, оценки, использованные для проекта, были основаны на старом подходе, который мой проект запрещал использовать, поэтому он не был подходящим индикатором для оценки. Я бы услышал, как премьер-министр сказал: «Мы сделали это раньше»
SA, который будет обеспечивать использование DTO, DO, BO, уровней обслуживания и т. Д. Для всех проектов. Новым разработчикам приходилось изучать эту архитектуру и строго соблюдаемые правила использования SA. Исключения из правил использования были сделаны, когда было абсолютно трудно следовать руководящим принципам. СА был основан на их подходе. Классы для DTO и всех операций CRUD были сгенерированы с помощью CodeSmith, а схемы баз данных были еще одним подобным шариком воска. Однако, использовав эту настройку везде, SA не был открыт для новых технологий, таких как LINQ to SQL или Entity Framework.
Я не использую этот пост в качестве платформы для вентиляции. В моем опыте с историями SA, упомянутыми выше, были положительные и отрицательные стороны. Мои вопросы сводятся к:
- Что SA должен принести на стол?
- Как они могут найти баланс в принятии решений?
- Нужно ли подходить к работе SA (как определено ранее) с менталитетом, что они должны соблюдать определенные основные правила?
- Что-нибудь еще, чтобы рассмотреть?
Благодарность! Я уверен, что эти рабочие задания легко распространяются на людей, которые являются старшими разработчиками или техническими руководителями, поэтому не стесняйтесь отвечать и на этом посту.