2. Архитектура
Как сущ.: структура и декомпозиция всего продукта в
виде набора взаимодействующих модулей.
Как глаг.: понимание что требуется создать, принятие
инженерных решений, концепция решения, основаные
на требованиях; а так же трансляция этой концепции
команде и техническое лидерство, чтобы все участники
понимали концепцию и были способны вносить свой
вклад в успех мероприятия.
3. Что есть архитектура?
Существенные инженерные решения,
которые формируют систему, где
“существенность” определяется стоимостью
внесения изменений.
4. Пример
● Форма системы (клиент-сервер, вэб, мобильное
приложение, распределенная система и тд)
● Структура системы (компоненты, слои и тд)
● Выбор технологий
● Выбор фреймворков (каркасных решений)
● Выбор подхода и паттернов (к производительности,
масштабируемости и тд.)
5. Платформа для диалога
● Команды разработчиков (настоящих и
будущих)
● Специалистов по БД
● Безопасников
● Специалистов по развертыванию,
админов
● ...
9. Архитектурные факторы
● Понимать цели системы
● Собирать, уточнять и сопоставлять с
реальностью требования и ограничения
● Преодолевать субъективность
10. Проектирование ПО
● Прийти к пониманию, как вы собираетесь
решить задачу
● Выбор технологии реализации
● Техническая стратегия
● Владение всей картиной системы
целиком
11. Технические риски
● Обнаружение и смягчение рисков
● Взятие на себя ответственности за риски
● “Будет ли архитектура реально
работать?”
● Тестирование идей как можно раньше
12. Развитие архитектуры
● Непрерывное техническое лидерство и
владение архитектурой на протяжении
всей разработки
● “Архитектура это не эстафета.”
13. Программирование
● Практическая вовлеченность в написание
кода
● Анализ кода
● Написание фундаментальных участков
● Чувствовать себя в одной лодке с
программистами
● Постоянное самосовершествование
14. Обеспечение качества
● Выбор и внедрение в команде
стандартов, практик, принципов, методик
● Соблюдение следования выбранному
● Контроль за целостностью всего
решения, соответствия архитектуре
15. Сотрудничество
Сотрудничай или облажайся!
● Привлекай экспертов, если это
необходимо
● Советуйся с командой, собирай обратную
связь
16. Широта взгляда
● Является ли выбранная технология лучшей?
● Какие есть другие варианты как спроектировать и
построить систему?
● Есть ли соответствующее типовое архитектурное
решение (паттерн)?
● Осознаем ли мы компромиссы решения?
● Можем ли мы доказать, что предложенная
архитектура будет работать?
17. Личные качества
● Лидерство
● Понятно излагать
● Убедительность
● Уверенность
● Умение работать в
команде
● Делегирования
● Консультирование
● Наставничество
● Организация
групповой работы
● Политика
● Ответственность
● Позитивность
18. Власть и контроль
● Руководство (guidance)
● Борьба за целостность
● “Сколько контроля необходимо?”
19. Сколько контроля нужно?
Начать и обращать внимание на то, как
команда реагирует, чтобы подстроиться:
если задает много вопросов, то требуется
руководство, если начинает бороться с
вами, возможно вы перегибаете палку.
20. Elastic Leadership
1. Выживание (в хаосе): более
директивный стиль.
2. Обучение: консультирование и
наставничество
3. Самоорганизация: работа над балансом
группы.
22. Нужна ли архитектура
при гибком подходе?
XP: Collective Ownership
Самоорганизующиеся команды - это
сложнее, чем кажется.
23.
24. слишком мало
● Нет понятия о границах системы
● Нет понимания всей картины
● Невозможность донести общую концепцию
● Нет внимания нефункциональным требованиям и
ограничениям
● Нет внимания ключевым рискам
● Отсутствие целостности в подходах к решению
● Необходимость внезапно что-то менять, что могли
бы предвосхитить
● Слишком много альтернатив и вариантов выбора
25. слишком много
● нечитаемо длинные документы
● слишком детальная проработка на разных уровнях
абстракции
● сотни нечитаемых диаграм
● все решения даже по кодированию уже приняты
● “analysis paralysis” и затык с обсуждением мелочей
● наступил дедлайн, а вы все еще не приступили к
программированию
Бытовала практика, что архитекторов не допускали до кодирования, т.к. они слишком ценный ресурс - это неверная практика.
Архитектору нужно всегда “быть в форме”.
If you know how to program, it’s often tempting to make suggestions about
how developers should write the code. Be careful, because you may be wasting
your time - developers are likely to ignore your coding experience if you’re not
programming on the project. They may also think that you’re overstepping your
role and interfering in how they do their job, so give such advice sparingly.
Soft skills
• Leadership: In it’s simplest form, leadership is the ability to create a shared vision and to
then take people on a journey to satisfy the common goal.
• Communication: You can have the best ideas and vision in the world, but you’re dead in
the water if you’re unable to effectively communicate this to others. This means people
inside and outside of the software development team, using the language and level of detail
that is appropriate to the audience.
• Influencing: This is a key leadership skill and can be done a number of ways, from overt
persuasion through to Neuro-Linguistic Programming1 or Jedi mind tricks. Influencing
people can also be done through compromise and negotiation. Individuals may have their
own ideas and agendas, which you need to deal with while keeping everybody “on-side”
and motivated to get the result that you need. Good influencing requires good listening
and exploring skills too.
• Confidence: Confidence is important, underpinning effective leadership, influence and
communication. Confidence doesn’t mean arrogance though.
• Collaboration: The software architecture role shouldn’t be done in isolation, and collab-
oration (working with others) to come up with a better solution is a skill that is worth
practicing. This means listening, being open-minded and responsive to feedback.
• Coaching: Not everybody will have experience in what you’re trying to do and you’ll
need to coach people on their role, technologies, etc.
• Mentoring: Mentoring is about facilitating somebody’s learning rather than telling them
how to do something. As a leader you may be asked to mentor others on the team.
• Motivation: This is about keeping the team happy, up-beat and positive. The team also
needs to feel motivated to follow any vision that you create as a software architect. You
will face an uphill battle without the rest of the team’s buy-in.
• Facilitation: There will often be times where you need to step back and facilitate
discussions, particularly where there is conflict within the team. This requires exploration,
objectivity and helping the team come up with a solution to build consensus.
• Political: There are always politics at play in every organisation. My mantra is to steer
clear of getting involved as far as possible, but you should at least understand what’s going
on around you so that you can make more informed decisions.
• Responsibility: You can’t necessarily blame the rest of the software development team
for failure and it’s important that you have a sense of responsibility. It’s your problem if
your software architecture doesn’t satisfy the business goals, deliver the non-functional
requirements or the technical quality is poor.
• Delegation: Delegation is an important part of any leadership role and there’s a fine line
between delegating everything and doing everything yourself. You should learn to delegate
where appropriate but remember that it’s not the responsibility you’re delegating.
I’ve seen a software system with multiple object-relational mapping (ORM) frameworks in a single codebase and another where components across the stack were configured in a number of different ways, ranging from the use of XML files on disk through to tables in a database. Deployment and maintenance of both systems was challenging to say the least.