Записки системного архитектора – Telegram
Записки системного архитектора
279 subscribers
24 photos
1 video
4 files
57 links
Мысли, идеи и события из жизни системного архитектора и его коллег
Download Telegram
Друзья!
Спасибо что читаете этот канал, и мы встречаем этот год вместе! 🎊🎉
Поздравляю всех с наступающим новым годом! 🎄🎄🎄
Пусть все неприятности останутся в уходящем 2024-ом, а новый год принесёт драйв, новые интересные вызовы и достижения!😜
🎄15❤‍🔥1🎅1
Мартин Фаулер, международный эксперт по программной инженерии, начал свою публичную просветительскую деятельность с книги Analysis Patterns 1997-го года.

При этом как ни удивительно, книга интересна и актуальна до сих пор и для разработчиков и для архитекторов и для системных аналитиков.

Можно сказать, что книга прошла почти незамеченной в широкой профессиональной среде, в частности, никогда не переводилась на русский язык.

Андрей Гордиенков решил исправить это досадное обстоятельство и подготовил собственную версию перевода.

https://habr.com/ru/articles/872598/

Вступление
1.1 Концептуальные модели
1.2 Мир шаблонов
1.3 Шаблоны в этой книге
1.4 Концептуальные модели и реинжиниринг бизнес-процессов
1.5 Шаблоны и фреймворки
1.6 Использование шаблонов

Часть 1. Аналитические шаблоны
2. Ответственность
3. Наблюдения и измерения
4. Наблюдения для корпоративных финансов
5. Обращение к объектам
6. Инвентаризация и учет
7. Использование моделей учета
8. Планирование
9. Торговля
10. Производные контракты
11. Торговые пакеты

Часть 2. Поддерживающие шаблоны
12. Слоёная архитектура для ИС
13. Фасады приложения
14. Подходы для моделирования типов
15. Шаблоны ассоциации
16. Послесловие

Часть 3. Приложения
А. Техники и обозначения
В. Таблица паттернов
C. Краткая справка по диаграммам
👍2🔥1
Стало трудно выкраивать время для постов. Хочется ведь написать хороший, содержательный, полезный пост. Берешь какой-нибудь тезис и начинаешь в фоновом режиме его обдумывать, как бы его оформить в лаконичный и понятный кусочек текста. Но почему-то даже самую простую мысль оказывается очень трудно оформить в лаконичный текст, к исходному тезису начинают прилипать многочисленные "а если", "но это не точно", "а еще бывает вот так" и т.п. И вот, простая мысль превращается в месиво, которое и думать то тяжело, не то что читать. А выделить значительный непрерывный кусок времени, чтобы причесать и оформить это в приемлемый результат не получается...

Так вот, в условиях вечной нехватки времени я решил попробовать на время отказаться от идеи писать вдумчивые посты, а зайти с другой стороны. Беру 10-15 минут, хватаю пролетающую в голове мысль и коротко выписываю все, что прямо сейчас приходит в голову.

Посмотрим что из этого выйдет, может быть даже будет интересно, особенно если вы мне поможете. Если пролетающие идеи вам интересны - накидывайте в комментариях вопросы, свои идеи, примеры, байки и т.п.
👍511🤔1
Как часто мы слышим фразы типа "так делать неправильно, а правильно вот так"? И я как-то задумался, а что такое "правильно"? помните "что такое хорошо и что такое плохо" Михалкова? Там все четко расписано - вот так делать хорошо, а так плохо. Жаль, что в мире ИТ архитектуры нет такого мануала. Тут принято говорить, что все "зависит от контекста". Но почему-то часто, когда приходишь в команду с таким контекстно-зависимым решением, то через раз слышишь, что так неправильно...

Мне видится, что правильные или неправильные решения могут быть в математике, когда есть строгие и четкие правила построения выводов и вычислений, когда любое рассуждение формализовано и воспроизводимо, т.е. можно гарантированно на тех же входных данных получить тот же результат. Наверное, в ИТ можно поступать так же, т.е. составить алгоритм принятия решений, накидать в него все возможные входные условия и формально прийти к решению. Но что-то мне подсказывает что это нереально. Во-первых, входных условий невообразимо много. И даже если вы думаете, что учли все, всегда есть еще одно. Методы принятия решения на одних и тех же входных данных тоже разные, опираются на разные принципы, зависят от состояния и стадии ЖЦ. Зависят от внешней реальности, которая вообще часто непредсказуема и носит "полувероятностный" характер.

Вспоминается фраза одного из сейлов - Мы выиграем этот тендер с вероятностью 90%, но вероятность вот вот тех 10% - примерно 60%.

В общем, я к тому, что использовать слова "правильно" или "неправильно" по отношению к архитектурным решениям кажется не очень корректно, лучше использовать более конкретные эпитеты. Например использовать слова "обосновано/не обосновано", которые описывают степень обоснованности, мотивированности выбора того или иного подхода в решении. Может быть "нестандартное" решение, если оно не похоже на общепринятые подходы, "рискованное", если оно несет в себе больше рисков, чем ожидается, ну и т.п.
#мысливслух
👍2
Прямо отозвалось... Давно заметил, что что гибкие методологии сами по себе без правильно подготовленных людей не работают. Но для неподготовленных людей могут долго создавать иллюзию, что все идёт нормально.
Записки системного архитектора
Прямо отозвалось... Давно заметил, что что гибкие методологии сами по себе без правильно подготовленных людей не работают. Но для неподготовленных людей могут долго создавать иллюзию, что все идёт нормально.
Пока читал статью, #анекдот вспомнился.
Чувак выпал из окна 20-ти этажного дома. Пролетая мимо 10-го этажа думает: "пока все идет нормально...".


Захотелось перефразировать:
Менеджер начал управлять по #Agile проектом, который сдавать через 20 недель. На 10-й неделе смотрит на диаграммы в jira и думает "пока все идет нормально...".
🤣6
И еще #цитата в тему
Экзамены, сэр, – это чистейшая чепуха, от начала до конца. Если ты джентльмен, так тебя учить нечему, тебе достаточно того, что ты знаешь. А если ты не джентльмен, то знания тебе только во вред.
О.Уайльд, "Портрет Дориана Грея"

превращается в ...
#Agile методологии - это чистейшая чепуха, от начала до конца. Если ты умеешь работать и выдавать результат, так тебе и методологии не нужны, тебе достаточно того, что ты знаешь. А если ты не умеешь работать, то любые методологии тебе только во вред.
🤔4
Записки системного архитектора
И еще #цитата в тему Экзамены, сэр, – это чистейшая чепуха, от начала до конца. Если ты джентльмен, так тебя учить нечему, тебе достаточно того, что ты знаешь. А если ты не джентльмен, то знания тебе только во вред. О.Уайльд, "Портрет Дориана Грея" превращается…
Судя по реакциям, эта мысль требует пояснения.

Мой опыт показывает, что если человек (и даже команда!) хочет работать "хорошо", нацелен на результат, то он сам, как "настоящий джентльмен", ищет способы, как этого добиться - смотрит по сторонам, читает книги, что-то изучает, экспериментирует и в конце-концов как-то овладевает нужными методами. Т.е. к такому человеку (почти) не нужно приносить методологии снаружи, максимум - показать, что еще бывает "вот так". Заинтересованный и замотивированный он сам уцепится и размотает ниточку.

Если же у человека желания работать нет, то даже насильное обучение не принесет пользы, только время потратим.
#мысливслух
💯6👍2🔥1
Forwarded from I’m CTO, bitch
😭 Нихуя не просто

Ловушка индустрии №1 — думать, что должно быть просто.

«Просто используй golang»
«Просто перейди на микросервисы»
«Просто тебе нужен kubernetes»
«Просто используй фреймворк»
«Просто найми аналитика»
«Просто покрой всё тестами»
«Просто перейдите на kanban»
«Просто подключи left-pad в npm»

В it всегда пытаются срезать углы, взять что-то готовое с полной уверенностью, что оно из коробки решит все проблемы. А потом выясняется: на микросервисы нарезали плохо, инфраструктура в 2 раза дороже стала, фреймворк не решил наших проблем и добавил новых. А аналитик вообще всех в рот шатал за то, что мы тут напрограммировали.

Просто было в детском саду.
Покушал, поспал, покакал, проснулся.

#сракигорят | Предложка
👍7😁5
А давайте поговорим про документацию. Сколько раз вы слышали, что обязательно нужно разработать полную документацию по продукту, а без этого ничего не получится? Я такое слышал очень часто. И постепенно пришел к выводу, что слова "полная документация" нужно отнести к разряду ругательных, и в приличном обществе их использовать нельзя. Почему так? Да потому что самой полной и подробной документацией по программному продукту, описывающей его функционирование во всех деталях, являются его исходные коды. Но те, кто просят "полную документацию", обычно обижаются, когда их туда посылаешь. Так что слова "полная документация" никак не могут быть отнесены к приличным выражениям...

Лично я считаю, что как архитектурное решение не может быть правильным или неправильным (зато может быть уместным или неуместным, дорогим или даже нестандартным), так и документация не может быть полной или неполной, зато может быть объемной или лаконичной, полезной или запутанной, а иногда даже и востребованной. И вместо того, что бы стремиться объемом создать иллюзию полноты, лучше стараться минимизировать объем, зато увеличивать удельную полезность документации.
#документация #мысливслух
👍6
Мне видится, что целесообразно делать документацию из двух частей - справочной, содержащей перечисление и описание каких-то элементов системы (функций, экранов, кнопок, методов API и т.п.) и сценарной , описывающей как с помощью продукта решаются пользовательские задачи. Сценарная часть пишется более-менее вручную (сейчас, наверное, можно с помощью ИИ) и ссылается на упоминаемые разделы справочной части, а справочная часть по большей части генерируется автоматически, чтобы поддерживать её согласованность с кодовой базой. Сценарные части для разных категорий пользователей могут быть разные.

Например, когда мы проектировали структуру документации для IdM решений, то выделяли документы для простых пользователей системы, где описывали как посмотреть на свои права и создать заявку на доступ, для руководителей, где описывали как посмотреть права подчиненных и провести сверку, для сотрудников ИБ, где описывали как узнать, кто имеет доступ к определенным ресурсам и т.п. А справочная часть, описывающая главный экран, мастер создания заявки и другие элементы системы, была общая.

#документация
Простой #рецепт как делать полезную документацию на основе сценариев:

1. Определиться с адресатами документации - кто, зачем и как будет её использовать. Наивно думать, что пользователям, администраторам и, скажем, продавцам программного продукта нужен один и тот же документ. Это будут разные документы и по структуре, и по содержанию. Хотя, конечно, в них могут быть общие части.

2. Для каждого адресата определить ключевые вопросы, ответы на которые он будет искать в документации. Так, пользователи обычно используют документацию, что понять как с помощью вашего продукта сделать что-то полезное. Простое перечисление функций продукта тут мало помогает. Это прекрасно, что в вашей системе есть 100500 разных функций. Как мне документ создать и распечатать?

3. Составить структуру документа на основе выявленных вопросов и постепенно наполнять документ по этой структуре. Каждый заполненный раздел увеличивает количество ответов на вопросы и тем самым увеличивает полезность документа. И не стоит даже пытаться покрыть документацией все возможные детали - это долго, сложно и невозможно поддерживать.

#документация
👍1🔥1
Записки системного архитектора
А давайте поговорим про документацию. Сколько раз вы слышали, что обязательно нужно разработать полную документацию по продукту, а без этого ничего не получится? Я такое слышал очень часто. И постепенно пришел к выводу, что слова "полная документация" нужно…
Еще несколько слов про требования к документации, в ответ на комментарий. Действительно, требования к документации не "висят в воздухе", они привязаны к контексту, к цели проекта, продукту, зависят от текущей стадии ЖЦ, объемов инвестиций/финансирования и т.п. Я хотел акцентировать внимание на том, что часто встречающееся требование "полноты" документации бессмысленно и даже вредно.

Вот к примеру, масштабная цель - выпустить на рынок B2E продукт, который будет использоваться в больших организациях и внедряться усилиями интеграторов-партнеров. Какие требования к документации предъявляются? Внедренцы хором говорят - нам нужна полная документация по возможностям продукта. Что это, блин, такое? Продавцы, вы не поверите, говорят те же самые слова. Но имеют в виду совсем другое. Правда, ни одни, ни другие не могут объяснить что именно им нужно.

И вот, чтобы процесс создания документации был как-то связан с заявленной целью, мы вместо неприличных неявных требований, формулируем явные требования к документации. Сначала высокоуровневые, аналог НФТ.
Документация должна быть:
1. Полезна для .... — тут вставляем для кого и чего пишем документацию
2. Своевременна — первый полезный вариант должен быть не позже чем ...
3. Посильна по ресурсам — ограничения на объем и ресурсы, которые можем потратить

ну и так далее, в зависимости от заинтересованных сторон (привет системное мышление и учет интересов ролей/стейкхолдеров) учитываем разные характеристики документации, например размер(например, необходимость уместить документ на одном листочке), доступность онлайн и т.п.

А уже дальше, под каждым пунктом будут прорастать более детальные требования и ограничения - по структуре, формату и т.п.
И тут очень важна прослеживаемая трассировка Цель — характеристика — конкретное требование
Например,
Делаем продукт для B2E
документация должна быть полезна для инженеров внедрения
Нужен документ "Руководство по развертыванию и настройке"
Структура документа: .....
Доступен онлайн
Поддерживает поиск по ключевым словам


все еще #документация

P.S. А если самим требования к документации формулировать лениво - используйте ГОСТы и не жужжите :) Некоторые заказчики так и делают.
👍2
Возможно у вас возник вопрос, а с чего это вдруг человек, называющий себя архитектором, пишет про документацию, да еще и уделяет этому так много внимания?🤔

Согласен, на первый взгляд это может показаться странным. 🤷
Но все дело в том, что спустя какое-то время практики системного взгляда на окружающую действительность начинаешь видеть архитектуру во всем, что тебя окружает...
1
Ведь что такое #архитектура ПО? Это разбиение большой системы на части, как-то связанные, взаимодействующие друг с другом. Причем, у одной и то же системы одновременно может быть много различных разбиений. Вот, сходу приходят на ум:

- Модульное разбиение в терминах языка программирования - на библиотеки, компоненты, пакеты и прочие модули, каждый из которых имеет свое именование, место хранения, экспортируемые интерфейсы/методы и, возможно еще какие-то свойства - версия, статус и т.п. Это разбиение позволяет сгруппировать код по блокам, каждый из которых имеет относительно независимый жизненный цикл.

- Разбиение по репозиториям в смысле места хранения кода, управления доступом к коду.

- Разбиение по конструктивным элементам деплоя - контейнерам/сервисам, которые могут быть независимо развернуты в среде исполнения

- Разбиение по функциональным подсистемам, взаимодействующим друг с друг в рантайме. Это одно из самых сложно понимаемых разбиений, поскольку часто границы функциональных подсистем проходят поперек других, более интуитивно понятных разбиений. Для иллюстрации функционального разбиения часто в качестве примера приводят ножницы - тут есть три конструктивные части (два ручколезвия и скрепляющий их винтик), и две функциональные части - режущая и управляющая.

- Разбиение по архитектурным "слоям", когда базовые, низкоуровневые слои предоставляют функциональность для реализации слоям на более высоком уровне абстракции.

- По исполнителям - какой исполнитель или какая организация отвечает за создание и поддержку той или иной части системы.

- В конце концов, разбиение по ограниченным контекстам в соответствии с моделированием бизнес-доменов.

Этот список явно не исчерпывающий, он лишь иллюстрирует, что нет одного "канонического" способа представления архитектуры. Мы выбираем те способы разбиения, которые удобны и полезны для решаемой задачи. Иногда удобно делать так, чтобы границы разбиений совпадали, например неудобно один модуль размазывать по нескольким репозиториям, но часто границы разных разбиений проходят совершенно в разных местах...
👍51
Так вот. Подобная же чехарда с архитектурными разбиениями существует не только непосредственно с программным продуктом, но и в других связанных с ним системах и активностях.

Существует #архитектура документации, которая включает в себя и её физическую структуру с точки зрения итоговых документов, так и логическую - из каких исходных материалов и каким образом эта документация образуется. Я с большим интересом смотрел презентацию дизайн системы МТС, первый раз видел такой системный, не побоюсь этого слова, архитектурный подход к дизайну. Даже у деятельности по созданию продукта есть архитектура, которая описывает структуру и взаимоотношения между работами, практиками, которые выполняются на разных стадиях жизненного цикла программной системы. То же самое касается и требований, и даже тестов. И конечно, этот список не исчерпывающий.

Вы конечно можете не думать про архитектуру этого всего. В общем-то, можете не думать и про архитектуру самой системы. 😉 Просто про ИТ архитектуру уже много написано. И рассказано, как плохо и вредно её игнорировать. Но что-то мне подсказывает, что игнорирование архитектуры "всего остального" обладает примерно такими же последствиями. И тоже приводит к образованию Big Ball of Mud в соответствующем месте. Со всеми, как говорится, вытекающими. 💩
👍4
Труднее всего объяснять очевидные вещи.
Они же очевидные - что тут объяснять?

Когда я начинал работу в сфере информационной безопасности, мне выдали кучу документации по IBM-овским средствам "по ИБ". Я целыми днями пробивался через многочисленные White Papers, Manual и прочее унылое чтиво. Было ощущение, что там написана какая-то невнятная дичь и муть, было множество подробностей и деталей, а суть ускользала. 🤯
Я чувствовал себя, как крестьяне из анекдота:
На заре коллективизации во вновь образованный колхоз привезли трактор и механик битых пять часов объяснял крестьянам принципы его работы. Закончил, спрашивает: «Вопросы есть?» «Нет, нет, всё понятно» — загомонили крестьяне. А один мужик встаёт и говорит: «Спасибо, всё отлично объяснили, ВСЁ ПОНЯТНО!!! Одно неясно — КУДА ЛОШАДЬ ЗАПРЯГАТЬ?»


Спустя какое-то время я разобрался в этой теме, стал понимать проблематику идентификации, аутентификации и управления доступом, кому и зачем все это нужно, и почему за внедрение этих систем так много платят. И вот тогда все эти документы мне вдруг стали понятны. И я понял, что все эти инструкции и статьи писали люди, которые уже хорошо разбираются в теме. Они аккуратно и старательно выписывали свои знания. Но видимо, они уже не помнили себя в то время, когда не знали всего того, о чем пишут. У них уже нет проблем с пониманием базисных, очевидных вещей, которые, тем не менее, не очевидны людям, которые только начинают знакомство с темой. И именно вот такие базисные, очевидные вещи часто не попадают в документацию, инструкции, лекции и учебники, потому что ну о чем тут рассказывать?
👍5❤‍🔥2
Ловлю себя на мысли, что, с одной стороны, довольно часто сталкиваюсь с ситуацией, когда люди не понимают (кажущихся мне) очевидных вещей. А с другой стороны, кажется странным про это рассказывать и писать (это же очевидно!). Я, с вашего позволения, накину на вентилятор несколько тезисов, а вы скажите, это и правда так, или это мой странный опыт и деформации восприятия.

Вот к примеру. В профессиональной ИТ-среде много внимания уделяется технологиям, инструментарию. Всякие протоколы, базы данных, брокеры и прочие архитектуры. И обучение программистов, архитекторов и даже аналитиков крутится, во многом, вокруг технологий. Это все, безусловно, важно, ценно и полезно. Некорректное или неуместное применение технологий приводит к проблемам и с надежностью, и с производительностью. Иногда мы упираемся в границы возможностей технологии и нам приходиться искать альтернативные решения, в том числе и качественно новые архитектурные подходы. Но, объективно говоря, это все случается довольно редко. Технологический стек и архитектурные подходы задаются на старте проекта и потом довольно долго эксплуатируются AS IS. Какие-то значимые изменения делаются от силы раз в год. А основные проблемы и сложности, которые возникают в повседневной работе, связаны не с технологией, а с пониманием того, что и как должна делать программа, а потом с реализацией этого понимания в коде. А вот про то, как жить с этой повседневной трудностью, толком никого не учат. Потому что это повседневно, "это очевидно", и это, в конце-концов, скучно (по сравнению с тем же System Design-ом). Но влияние на эффективность работы как команд, так и создаваемых ими систем, эта повседневность оказывает чуть ли не большее, чем System Design и архитектура вместе взятые.
🔥2💯1
Очень интересное наблюдение. Факт, что продуктовая/заказная/внутренняя разработка устроены очень по разному.