emacsway-log: Technical Leadership, Management, Software Architecture, DDD, Microservices, Distributed Systems, XP, Agile, etc.


Kanal geosi va tili: Rossiya, Ruscha


Technical Leadership, Management, Software Architecture, DDD, Microservices, Distributed Systems, Extreme Programming, SDLC, Agile, etc.
Chat: https://t.me/emacsway_chat
Persistence: https://dckms.github.io/system-architecture/

Bog‘liq kanallar  |  O‘xshash kanallar

Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri


Ведута_Н_И_Экономическая_кибернетика_1971_1.pdf
7.9Mb
Хочу поделиться книгой, которая хорошо систематизирует скелет знаний:
Ведута Н.И. "Экономическая кибернетика" 1971.

Там и планирование (включая PERT), и системное мышление, и системная инженерия, и диалектика, и экономика, и информатика, и менеджмент. Сегодня такое уже не пишут.

В мою библиотеку она попала от архитектора, который имеет колоссальный опыт в финтехе, включая ЦБР.


"Психология конструкторского труда формирует у человека очень важное качество: обязательно найти положительное решение. Вот потому-то хороший конструктор, как правило, и хороший организатор производства, хороший испытатель. Способность брать на себя ответственность и добиваться положительного решения проблемы, конечно, присуща не только конструктору, но воспитывает ее в человеке, по-моему, прежде всего — конструкторский труд."
-- Сергей Викторович Михеев, генеральный конструктор ОАО «Камов»


Настоящий титан. Не какой-то там "эффективный менеджер", утешающий себя тем, что где разработка, а где менеджмент.


В последнеё время в пабликах стала актуальной темой о том, как обрести уверенность в условиях регулярных новостей о массовых сокращениях из-за экспансии LLM. Какие именно soft-skills могут дать это чувство?

У серфенгистов есть такой термин "поймать волну". Они понимают, что не могут остановить уходящую волну. Поэтому готовятся поймать следующую. Самая главная истина заключается в том, следующая волна неизбежна. Им нужно просто синхронизировать свои действия с ней. А чтобы это успешно сделать, надвигающуюся волну нужно уметь разглядеть, чтоб не упустить её и не оказаться в числе догоняющих.

Тот, кто умеет это сделать, становится успешным реформатором. Тот, кто предпочитает самоутешение и склонен к отрицанию - реакционером. Когда количественные изменения уже набрали критическую массу, реакционеры воспринимаются как помеха для управления. Когда изменения ещё не набрали массы, реформаторы воспринимаются как помеха для стабильности системы. Всё решает момент своевременности.

Основатель Alibaba Jack Ma лично преподаёт курсы по Тай-Чи. Это древняя китайская философия диалектического характера, которая и является своего рода наукой об изменениях. В Китае она берёт своё начало с древней книги, которая так и называется: "Книга Перемен" (которая, вместе с Дао Дэ Цзин, не даёт покоя современным физикам-ядерщикам по квантовой механике, потому что в ней каким-то образом оказались изложены современные открытия квантовой физики).

В Huawei есть официальная "Философия лидеров" (Grey Leadership at Huawei), так же основанная на философии диалектического характера, под влиянием работ Дэн Сяопина (реформатор, создавший современную экономическую модель Китая, которого основатель Huawei Ren Zhengfei неоднократно называл величайшим реформатором в истории Китая) и древнекитайской Дао Дэ Цзин.

Павел Дуров открыто упоминает о том, что интересуется диалектической философией (даосизмом).

В США современная интерпретация Дао Дэ Цзин в виде брошюры Джона Хейдера "Дао Лидера" активно применяется для подготовки госслужащих, дипломатов и офицеров.

Это диалектическая философия о том, как изменяется мир. Кстати, конфликтология, как вы знаете, вышла из диалектики.

В ИТ-архитектуре на диалектике основана Теория решения изобретательских задач (ТРИЗ).

В менеджменте работы Gerald M. Weinberg тоже построены на диалектике (он даже цитирует Лао Цзы в своих книгах).

Kent Beck говорил, что всё меняется, кроме самого Закона Изменений.

Я думаю, что в современном мире это самый важный навык - понимание того, как происходят изменения, для того, чтобы "поймать волну".

В Дао Лидера есть такие слова: "мудрый лидер делает мало, а сделано много". Она является ключевой для понимания У-вэй. Потому что такой лидер способен разглядеть момент своевременности. Своевременность определяет величину затрат. Опоздал - ниша уже занята и влезть в неё уже дорого, норма прибыли уже выровнялась. Поспешил - потратил слишком много усилий на преодоление сопротивления. Делать мало, но сделать много - это о том, как делать всё своевременно, предвидя как тенденции зарождаются.

Сейчас не вспомню кто автор этих слов, кажется, Gerald M. Weinberg: лидерство заключается в способности управлять изменениями. [да, это он]:

💬 Leaders are leaders of change – change in other people, change in working groups, and change in organizations. Above all, leaders are leaders of change in themselves. To become a leader, you have to understand how change happens; yet it's difficult to see change in yourself.
-- "Becoming a Technical Leader" by Gerald M. Weinberg

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




В последнее время часто слышу сетование на то, что LLM сделал не то и не так.

Давайте посмотрим что такое архитектурное решение на примере покупки курительной трубки. Решение должно содержать ответ на вопросы:

1. Какая модель трубки?
1.1. Форма чаши (бильярд, бренди, яйцо, яблоко, бульдог/родезиум...)
1.2. Изгиб (прямая, 1/4 бент, 1/2 бент...)
1.3. Способ осушения (естественное осушение (канадка, ловат), системная конструкция на эффекте Джоуля-Томсона, фильтр 9 мм, фильтр 6 мм, конденсатор, без осушения...)
1.4. Загубник (обычный, P-Lip...)
1.5. Материал трубки (бриар, морта, пенка, фруктовое дерево...)
1.6. Материал мундштука (эбонит, акрил...)
1.7. Финишная обработка (бласт (пескоструй), рустирование, гладкая, лаковая, восковая...)
1.8. Размеры и форма камеры.
1.9. Размеры и пропорции трубки.
1.10. Масса трубки.
1.11. Конструктивные особенности (шпигот, sitter...)
1.12. Цвет (чаши и мундштука)

2. Производитель трубки.

3. Конкретная реализация трубки:
3.1. Точность центровки дымового канала в центр дна камеры.
3.2. Соосность дымового канала мортиза и мундштука (критично для безфильтровых).
3.3. Наличие шпаклевки, питов, каверн.
3.4. Натяг цапфы мундштука.
3.4. Дефекты (сколы, царапины).

Естественно, если просто сказать LLM "предложи мне трубку", то он может выбрать какой-нибудь калабаш просто потому, что поиск этого варианта оказался наименее энергозатратным.

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

Архитектурное решение состоит из дивергентной фазы (расширение списка вариантов) и конвергентной фазы (сокращение вариантов решения до одного). Самое важное - это критерии для сокращения вариантов, т.е. наличие ясных причин, почему тот или иной вариант нам не подходит. Без критериев решение будет случайным и чаще всего продиктовано когнитивными искажениями (например, "мы всегда так делали"...). Упущенный критерий вылезет уже в процессе эксплуатации решения. Как сказал Роберт Мартин, архитектура - это о том как не надо делать.

Требования к трубке могут находиться в противоречиях (обратно коррелировать). Например, трубка бульдог бент имеет красивые геометрически правильные грани, т.е. удовлетворяет требованию эстетики. Но это достигается в ущерб требованию практичности, т.к. острые грани имеют маленький запас прочности и при малейшем усилии заминаются или скалываются. На гранях всегда возникает повышенное удельное давление (от руки или стенок футляра) и они быстро "лысеют".

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

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

Для яхты хорош легкий Lovat, который "не болтается под подбородком" и всегда в поле зрения. Конструкция естественного осушения позволяет длительное время обходиться без фильтров.

Может случиться так, что на рынке нет подходящей реализации. Например, трубка выбранной модели и производителя имеет дефекты. Такое случается даже с дорогими трубками, например, Ashton нередко ругают за центровку. И тогда нужно посмотреть, можно ли изменить баланс требований. Это Twin Peak - конструктивные ограничения изменяют требования.

LLM эти критерии прекрасно знает, но вот незадача, промпт может быть составлен таким образом, что эти нейроны просто не будут активированы. Поэтому их нужно активировать явно: выпиши в ADR draft все критерии принятия/оценки решения.

Следующий этап - составление матрицы принятия решения. Никакой критерий не плох сам по себе - он может просто соответствовать или не соответствовать цели. Что хорошо для презентабельной клубной встречи - плохо для охоты. Поэтому матрица конекстно-зависима.

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

Ну а чтобы не водить LLM за руку, можно эту функцию возложить на LLM.


Сергей Баранов: архитектура и ИТ-стратегия dan repost
Встретились арх/ит друзьями и знакомыми поговорить про ИИ, архитектуру, про будущее.

В общем, в домашних условиях за $8000 собирается рабочая конфигурация, равная GPT Luna и окупается она за 29 месяцев. Вот так.


И Джессика пишет книгу! https://technicspub.com/ontology-pipeline/




Кстати, миниредактор SKOS-тезаурусов Atramhasis обновился (https://github.com/OnroerendErfgoed/atramhasis).




На всякий случай про JSON-LD: https://w3c.github.io/json-ld-syntax/


SKOS и был придуман для (онтологически) контролируемых тезаурусов.
Сейчас он есть на базе JSON-LD, но удобнее https://gbv.github.io/jskos/


Этот вариант работает лучше:
Создай себе двух агентов (слепой решатель и дискриминатор), чтоб применить 1-й закон диалектики и The Rule of Three by Gerald M. Weinberg (The Secrets of Consulting) для поиска наилучшего решения


По поводу Agile добавлю ясности. В программой инженерии принято различать SDLC-модель, методологию (реализующую модель), framework (образующий методологию) и toolkit.

Когда говорят про церемонии, то говорят про конкретную методологию, реализующую Agile-модель. XP, FDD, Crystal Clear, методология на основе Scrum-framework и т.п.

Agile - это модель, такая же, как и каскадная, спиральная, итеративная, инкрементальная, эволюционная, V-model и гибридная. Ни одна из моделей не умерла и не умрёт, включая Agile, тем более из-за AI. При этом, видимо, появятся новые методологии или адаптируются существующие.

Превалирующая на массовом рынке SDLC-модель постоянно меняется, как маятник. Ключевое отличие в SDLC-моделях - это соотношение prediction активности к adaptation активности. Т.е. соотношение того, какая часть неопределённости требований разрешается заблаговременно, путём логического вывода, а какая часть - экспериментально, путём адаптации реализованных гипотез (принцип "не попробуешь - не узнаешь", т.н. wicked problem, символом которой стало разрушение моста Таacoma Narrows).

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

Каскадная модель подразумевает 100% prediction. Работает отлично для небольших типовых проектов, где всё ясно-понятно.

Спиральная и гибридная модель балансирует prediction и adaptation. Гибридная модель так называется потому, что она сочетает в себе практики продуктового и проектного подходов. Сегодня это самая распространённая модель в крупных продуктах (Disciplined Agile, SAFe...) А в спиральных моделях соотношение prediction/adaptation ещё и постоянно меняется на протяжении жизненного цикла.

В итеративных и Agile моделях соотношение prediction/adaptation максимально отклонено в пользу adaptation.

Почему исторический маятник всё время колеблется?

Стоимость адаптации была слишком дорогой - превалировала каскадная модель.

Появилось автоматизированное тестирование, браузер рефакторинга, высокоуровневые языки, паттерны проектирования - упала стоимость адаптации, произошел переход от каскадной модели к Agile.

Системы стали расти, появились микросервисы, обострилась проблема Брукса, выросла стоимость adaptation - произошел переход от Agile к гибридным моделям. Появление легковесных практик проектирования (Event Storming и др.), удешевляющих prediction, ещё больше закрепили гибридные модели.

Появился AI, который на порядок удешевил адаптацию, - появились SPDD, SDD. SDD - это, кстати, ни капли не про Waterfall - это чистой воды итеративная модель, почитайте мануал к OpenSpec - он весь построен вокруг инкремента итерации. Это инструмент управления изменениями, т.е. адаптацией. В результате упала численность команд разработки, маятник откатился назад в сторону итеративных моделей и Agile.

При этом нужно отличать SDLC-модель от эффекта Boiled Carrot (говоря по русски, отличать очки от эффекта "мартышка и очки").

Когда говорят, что "Agile не работает", то это означает, что это у них он не работает. Это поднимает два вопроса:
1. Соответствует ли выбранная SDLC-модель условиям проекта? Если не соответствует, то что мешает её сменить?
2. А если соответствует, то с чего они решили, что умеют "готовить морковку"?

Но в любом случае, "работает" не SDLC-модель, а конкретная её реализация (методология). SDLC-модель просто отвечает на вопрос о том, каким образом и в каком соотношении сочетать заблаговременный (prediction) и экспериментальный (adaptation) способы разрешения неопределённости.


Я думаю, что есть два критерия оценки:

1. Лингвистическая согласованность. Когда мы называем одного и того же человека "мама" и "сотрудница", очевидно, мы ожидаем от него разные функции для решения разных проблем. Здесь как раз хорошо помогает SKOS спецификация.

2. Измерение Coupling & Cohesion
http://www.sdml.cs.kent.edu/library/Allen99.pdf
Когда в модели появляются нерелевантные функции, у неё подает Cohesion.


Если говорить не про организационные мероприятия (обучение, управление процессами, топология команд), то лично мне хорошо помогает SKOS-спецификация (или OWL, но она часто избыточна и дублирует другие артефакты). Это если речь идёт о моделировании какого-то реального сектора.

SKOS я использую вместо глоссария, потому что глоссарий не умеет обрабатывать лингвистические конфликты (один и тот же оригинал в разных моделях называется по разному, например, покупатель, плательщик, получатель...) В принципе, LLM сама может создать карту моделей с помощью SKOS по лингвистическим конфликтам. И это образует крепкий каркас структуры моделей хорошо понятный LLM. Она просто не сможет прилепить в модель ничего лишнего, если не докажет, что новый термин релевантен словарю модели. Ей нужно сперва добавить в SKOS новый термин и обосновать его релевантность решаемой моделью проблеме. А если вдруг она находит как этот термин в предметной области можно назвать более точно по другому, она сразу распознает новую модель.


Если сухо и коротко, то модель - это системное отображение оригинала.

Если формально, то https://sebokwiki.org/wiki/What_is_a_Model%3F

Модель - это прежде всего заменитель чего-либо (какого-то оригинала). Сидит клерк в банке и считает на калькуляторе процентную ставку по кредиту. Это оригинал.

Мы хотим этот расчёт автоматизировать. Для этого мы изучаем как он её считает. Получается модель предметной области, или аналитическая модель. Модель в problem space. Чтоб эту модель получить, нам нужно переработать существенную сложность.

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

Понимание того, какую проблему должна решить модель, даёт нам возможность определить релевантность аспектов оригинала решаемой проблеме.

У клерка есть водительские права - для расчета процентной ставки эта информация релевантна?

Кабинет клерка на 10 этаже. Эта информация релевантна когда мы называем его пассажиром лифта (отсюда, кстати, ключевая идея DDD об использовании лингвистических конфликтов для поиска моделей) и его нужно доставить на лифте на этот этаж. Но для расчёта ставки эта информация нерелевантна.

У клерка есть ставка ЦБР, которую он использует для расчета ставки банка. А вот это уже релевантно.

Релевантность позволяет упростить модель, устраняя из неё все нерелевантные аспекты оригинала. Это называется абстракция. Модель есть упрощение, а значит, модель есть абстракция.

Предположим, нам нужно проложить маршрут, например, из Москвы в Мурманск. Смогли бы мы это сделать по точной копии Земли в масштабе 1:1? Ни один человек не обладает такими когнитивными способностями, чтоб переварить такое количество нерелевантных деталей. Абстрагируясь от них мы создаём навигационную модель, которая содержит исключительно релевантные аспекты оригинала.

Итак. Модель есть упрощенная интерпретация оригинала с целью его замены для решения некой проблемы. Три важных момента:
1. Заменить что?
2. Заменить для чего?
3. Какие аспекты оригинала заменитель должен отображать?

Решаемая моделью проблема является причиной её создания. Это то, что должна делать модель, воплощённая автоматизированной системой. "Делать" на английском - "business". Поэтому логика модели называется business-logic.

Понимая логику работы клерка, мы начинаем готовить модель решения (solution space), чтоб воплотить её системой. В DDD ключевая суть заключается в том, чтоб аналитическая модель в problem space совпадала с моделью решения в solution space. Это коротко о том, что такое DDD.

Я, конечно, упростил и пропустил ряд важных моментов, таких как дихотомия функции и конструкции (подпереть дверь можно камнем, а можно и книгой). Чем отличается модуль от компонента и почему они могут не пересекаться (пример: ножницы из трёх модулей (две половинки и гвоздик) и двух компонентов (рокоятка и режущая кромка)). Как абстрактность слов приводит к лингвистическим конфликтам и позволяет обнаружить модели.

Все проблемы начинаются с того, что специалисты теряют понимание того, какие модели есть в системе и какие проблемы они решают. Теряется понимание релевантности. Модель начинает обрастать нерелевантными аспектами. Её границы расползаются и её аспекты переплетаются с аспектами других моделей. Возникает лапша. Теряется возможность рассмотреть фрагмент сложности изолировано в момент времени. Объем одномоментно рассматриваемой существенной сложности начинает превосходить когнитивные ограничения краткосрочной памяти человека. Возникают хаотичные изменения модели потому что никто уже не понимает как она работает.


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

А поскольку существенная сложность не зависит от действий проектировщика (это то, что должна смоделировать система, т.е. она объективно существует в предметной области), то есть только один способ с ней работать - это инкрементальное рассмотрение сложности. Т.е. способность рассмотреть фрагмент сложности изолированно. Именно это в наибольшей степени влияет на расход токенов.

Достигается это качественным выделением моделей (границей которых является Bounded Context). Когда модель сфокусирована на одной решаемой проблеме, она дистиллируется от паразитной сложности. И изменения системы, касающиеся этой решаемой проблемы, становится возможным изолировать в границах самой модели (не всегда, конечно, но эти исключения становятся редкими). Отсюда и пошло правило, что единицей обязанности команды разработки является модель.

Всё дело в качестве моделей. Если модель переплетена с другими моделями как лапша, то становится невозможно рассмотреть фрагмент сложности изолировано. Попытка перейти на микросервисы в таких условиях приведёт к образованию распределённого монолита и радикально усложнит изменение системы.

С другой стороны, при качественных моделях микросервисы делают более дорогим сам процесс расползания границ моделей. Невозможность в сделать join во write (domain) model микросервиса защищает модель от расползания.

Независимо от того, как деплоятся компоненты системы, монолитно или независимо (микросервисы), всё упирается в качество моделей.


Послушал вчера этот вебинар. И даже дослушал до конца при всей моей занятости. Потому что Мария Лагоша знает толк в этой теме. Самое интересное было в конце - противодействие психологическим манипуляциям токсичных сотрудников. Выстраивание тактики диалога с глубоким теоретическим обоснованием в области коммуникативной психологии. Как я люблю. В общем, стоящая вещь.

Было бы интересно посетить их курс, стартующий завтра 19 октября, но, боюсь, что мой плотный график мне этого не позволит. Может быть в другой раз.
[UPDATE]: Запись https://t.me/sslpractice/1252


Собственно, статья о том, о чем я и говорил несколько месяцев назад:
Никакой BDUF/Waterfall не воскреснет. Не воскреснет по той же причине, по которой он исчез в конце 90-х: прототипирование в виде адаптивной итеративной разработки стало дешевле BDUF. AI ещё больше его удешевляет.

"AI makes Agile more alive"
https://www.thoughtworks.com/insights/blog/agile-engineering-practices/ai-makes-agile-more-alive

20 ta oxirgi post ko‘rsatilgan.