emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. – Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
3.47K subscribers
119 photos
15 videos
22 files
1.14K links
Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, Extreme Programming, SDLC, Agile, etc.

Chat: https://news.1rj.ru/str/emacsway_chat

Persistence: https://dckms.github.io/system-architecture/
Download Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В продолжение темы. Говорят, что ум человека видно по его вопросам, а не по его ответам. В команде моего текущего проекта есть программист, не сильно опытный, но я его ценю потому, что он прямой и открытый, не стесняется задавать неудобных вопросов, которые…
Коллеги, спасибо за столь интересное обсуждение. Особенность этого обсуждения уникальна в том, что попытки опровергнуть правильность моих выводов автоматически доказывали бы на практике их правильность, потому что основная моя мысль заключалась в том, что открытость и откровенность в изложении собеседниками своей принципиальной позиции обеспечивает развитие коллектива и служит общим интересам дела.

Именно об этом гласит один из 12 принципов Agile-manifesto:
💬 The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

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

Основных участников обсуждения я знаю уже более 4 лет, и они существенно повлияли на становление меня как специалиста.

Отдельно хочу выделить Дениса Бескова - человека с уникальной грамотностью. Его проницательность всегда заставляет меня задуматься (иногда не сразу). А ведь было бы так удобно и комфортно считать себя "самым-самым" и избавиться от всех раздражителей своей зоны комфорта, заклеймив их. Это путь деградации. И именно об этом был мой пост.

Путь развития требует определенных морально-психологических и волевых качеств. Если бы это было не так, то сегодня профессоров было бы больше, чем грузчиков.
👍10👎3🔥3
Насколько я вижу, пока на рынке, в бизнесе и обществе не устоялась какая-то однозначная онтология-классификация soft skills. Но эту работу по развитию нашего понимания состава skills важно и нужно вести. Поэтому тут будет очередной список (зато короткий! :)

Я условно разделяю soft skills на:
а) коммуникационные способности-умения-компетенции и на
б) когнитивные-индивидуальные — часть про работу человека с самим собой и окружением, исключая людей.

Начну с 1-й категории, как более очевидной.

Какие коммуникационные компетенции важны для современного ИТ-специалиста, в частности аналитика и проектировщика:

1. видеть и отстаивать свои профессиональные границы (прежде всего время, место, но также важны и задачи)

2. обнаруживать и информировать коллег о рисках

3. проводить интервью с заинтересованными лицами

4. организовывать групповую работу на рабочих сессиях

5. презентовать и защищать проектные решения

1-й пункт это прям боль, как мне напомнила недавняя сессия по обсуждению проектирования на waw — когда вместо обсуждения проектирования пришлось полчаса обсуждать, как формируются границы ролей в организации-проекте

Если по темам 2-5 можно найти достаточно большое количество литературы, статей и обучения, то 1-я тема пока очень плохо проступает из общей психологической литературы. Хорошие менеджеры всегда этим озабочены и стараются организовать для своих людей, но это прежде всего компетенция самого специалиста, а не только свойство среды. Даже ребёнок, когда приходит в детский сад, уже выстраивает какие-то свои границы с группой, но многие годы это происходит неосознанно и с ущербом для себя.

Т.е. умение отстаивать свои профессиональные границы видимо опирается на умение отстаивать свои личные границы прежде всего.
👍8🔥2
Искренне поздравляю @vladik_kh !!! 🎉🍾
https://learning.oreilly.com/library/view/balancing-coupling-in/9780137353514/

Монументальный, титанический труд, который под силу только Настоящему Титану! Дейкстра современности!

Книга уже признана такими авторитетами, как Gregor Hohpe, который в восторге от неё!

Это даже не луч света в темном царстве спагетти-кода. Это настоящий прожектор путеводного маяка в океане архитектуры!
🍾42👍15🔥61👏1😱1
Forwarded from Vlad
Это не самая удачная запись. Здесь лучше:

https://youtu.be/6indW7BSGZI?si=EZvt-9PjkaQjsWzg

Запись расширенной версии доклада есть с ddd europe 2023
🔥4👍1
На сайте EventStoreDB нашел транскрипт легендарного выступления Грега Янга, случившегося 10 лет назад. В виде текста оно воспринимается немного иначе. Чем-то похоже на известный 50-страничный CQRS Documents

Знаете что меня удивляет? Несмотря на обилие инфы вокруг этой темы, в ней, почему-то, всегда остается возможность добавить еще что-то новое. В том-же блоге Event Store ряд актуальных заметок, но и не только. В общем - залезаем все глубже в кроличью нору
🔥2
В материалах TheOpenGroup опубликованы не только файл с описанием и archimate-моделью учебного кейса ArchiSurance Case Study, но и сформированная при помощи Archi web-версия модели для этого кейса(правда немного кривая, как и сам Model Exchange File примера)

Начинать смотреть вот с этой вкладки: https://pubs.opengroup.org/architecture/case-study-models/archisurance-html/?view=id-45418

Не знаю, выложили недавно или же я раньше просто не обращал внимание, но непременно воспользуюсь в своем курсе про модели корпоративной архитектуры
🔥3👍1
про старших и ведущих

видимо последнее наиболее масштабное нормирование в этой теме в России закончилось в 1998 году с выпуском
Квалификационного справочника должностей руководителей, специалистов и других служащих

что там среди прочего написано, в пункте 7:

про старшего

Применение должностного наименования «старший» возможно при условии, если работник наряду с выполнением обязанностей, предусмотренных по занимаемой должности, осуществляет руководство подчиненными ему исполнителями.

Должность «старшего» может устанавливаться в виде исключения и при отсутствии исполнителей в непосредственном подчинении работника, если на него возлагаются функции руководства самостоятельным участком работы.

Для должностей специалистов, по которым предусматриваются квалификационные категории, должностное наименование «старший» не применяется. В этих случаях функции руководства подчиненными исполнителями возлагаются на специалиста I квалификационной категории.


т.е. старший или руководит кем-то или руководит участком работ (что бы это ни значило).

про ведущего

Должностные обязанности «ведущих» устанавливаются на основе характеристик соответствующих должностей специалистов.

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

Требования к необходимому стажу работы повышаются на 2-3 года по сравнению с предусмотренными для специалистов I квалификационной категории. Должностные обязанности, требования к знаниям и квалификации заместителей руководителей структурных подразделений определяются на основе характеристик соответствующих должностей руководителей.


т.е. ведущий — это не возможно руководитель, а совершенно точно руководитель.

видим, что никакой такой современной пурги, когда человек поработал 3 года без руководства и стал «ведущим аналитиком» без функций управления, в принципе не предполагалось. это же нам показывает лингвистический тест: «если старший — то над кем?» «если ведущий — то кого?»

также интересно отдельно взглянуть на описание Аналитика, а заодно понять что такое «1-я квалификационная категория», об этом дальше
👍6🔥2
Если почитать внимательно оригинальную статью "Pattern: Backends For Frontends" by Sam Newman, то в главе "General Perimeter Concerns" можно заметить, что он рекомендует размещать BFF после "generic perimeter concerns, such as authentication/authorisation or request logging". Т.е. после "Gateway Offloading pattern".

Проблема в том, что конструктивно "Gateway Offloading pattern" и "Gateway Routing pattern" реализуются на практике одним и тем же решением, например, KrakenD.

В свою очередь, "Gateway Routing pattern" решает проблему "the client must be updated when services are added or removed."

Vlad Khononov возлагает на api-gateway еще и функции "Anticorruption layer":
💬 "Anticorruption layers implemented using an API gateway can be consumed by multiple downstream bounded contexts." (для frontend это особенный вопрос).

Таким образом, получается, что размещение BFF за API-Gateway будет противодействовать назначению API-Gateway в устранении связанности между API микросервисов и их внешними клиентами.

Другой аргумент заключается в том, что BFF нуждается в агрегации, а не наоборот.

Ну и в таком случае он не сможет решать проблему "causing the backend to become a bottleneck in the development process."

Выгдядит так, что BFF должен располагаться, всё-таки, перед api-gateway. Какие существуют еще аргументы или контр-аргументы?
👍4💯1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Если почитать внимательно оригинальную статью "Pattern: Backends For Frontends" by Sam Newman, то в главе "General Perimeter Concerns" можно заметить, что он рекомендует размещать BFF после "generic perimeter concerns, such as authentication/authorisation…
Как мне удалось выяснить, я не первый кто об этом задумался. KrakenD потому и использует декларативное описание в формате JSON, чтобы он мог выполнять в т.ч. и функции BFF силами команды разработки клиентского приложения.

💬 Desktop and mobile interfaces usually compete in requirements, and the backends keep growing to fit both types of usage. Every frontend team will work in different data views to display the content, and the backend team becomes a bottleneck as it must fulfill the frontend team’s needs. In many cases, the same type of information (or view) will require different response formats and response errors for each consumer, making your backend developers spend a lot of time developing this logic. And many meetings and time making the different frontend dev teams get on the contract agreement!

# How the BFF works

KrakenD implements the BFF pattern with aggregation, allowing your frontend teams to define precisely the information you want to retrieve from the different services and how to deal with the errors.

The client receives:
- Exactly the data it needs, and no more.
- The information for a use case is taken from a single call
- Aggregated information containing all involved services
- Optionally, stub static data when there’s missing information
- Separation of concerns
- Decoupling: Do not have to worry very much about the backend changing or evolving

-- https://www.krakend.io/docs/design/backend-for-frontend/
👍1👎1🔥1
В процессе обсуждения в чате канала ко мне в библиотеку попала новая книга "Джедайские техники конструктивного общения" Александра Орлова.

Там была одна метафора, которая заставила меня задуматься:

💬 Что делает кирпичную стену прочной? Идеальная геометрия каждого кирпичика или смесь, скрепляющая их между собой? Если вы видели, как делают кирпичную кладку, то легко можете представить, как получается ровная и прочная стена, несмотря на далекую от идеала точность изготовления отдельных кирпичей.

На первый взгляд кажется, что это утверждение противоречит приводимому мною ранее утверждению о том, что "Важно не объединение людей само по себе, а те принципы, на которых оно основано." Когда возникает противоречие, то это говорит о том, что что-то упущено из зоны внимания рассмотрения. И это что-то хорошо демонстрируется этой картинкой. Насколько важна прочность этой стены, если она не в состоянии осуществлять возложенные на неё функции?
👍3🔥1💯1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В процессе обсуждения в чате канала ко мне в библиотеку попала новая книга "Джедайские техники конструктивного общения" Александра Орлова. Там была одна метафора, которая заставила меня задуматься: 💬 Что делает кирпичную стену прочной? Идеальная геометрия…
@BorisRomanov развидел то, что упустил я - важна не стена, а фундамент! Именно о фундаменте говорится здесь:

💬 "Важно не объединение людей само по себе, а те принципы, на которых оно основано."

Автором этого утверждения является Фидель Кастро. А он умел создавать высокоэффективные команды.

Когда его группа (вместе с Эрнесто Че Геварой) из 82 голодных, изнеможённых человек добралась вброд до берегов Кубы, - их поджидали 35000 вооружённых солдат, танки, 15 судов береговой охраны, 10 военных кораблей, 78 истребителей и транспортных самолётов. И они победили. Они осуществили одно из самых немыслимых изменений в истории человечества.

На собственном примере они доказали слова "Шарль де Голль":
💬 "Исторический фатализм существует для трусов. Смелость и счастливый случай не раз меняли ход событий. Этому учит нас история. Бывают моменты, когда воля нескольких человек сокрушает все препятствия и открывает новые дороги".

P.S.: Был в моей жизни момент, когда я серьезно готовился к партизанским действиям, потому что вероятность неизбежности этого была очень высокой. Именно тогда я и познакомился с опытом кубинских партизан и революционеров. Это фразу я прочёл 10 лет назад, и она навечно врезалась в мою память.
👍3🔥2😢1
Forwarded from Denis Migulin
Это точно не первая статья, искал как-то для митапа инфу.
На несколько месяцев раньше статья Phil Calçado, про его опыт в SoundCloud, где вводится сам термин BFF. По крайней мере я не нашёл более ранних упоминаний. https://philcalcado.com/2015/09/18/the_back_end_for_front_end_pattern_bff.html

А за 3 года до этого (2012) статья Netflix, где без введения термина BFF тем не менее очень подробно разбираются предпосылки к этому паттерну и немного об их реализации. Вполне возможно, что Netflix, с их ~800 типами клиентов, были действительно первыми, кто реально столкнулся с такой проблемой в масштабах.
https://netflixtechblog.com/embracing-the-differences-inside-the-netflix-api-redesign-15fd8b3dc49d
👍1🔥1
Причина, по которой Microsoft Reference Application eShopOnContainers выбрал Envoy (взамен Ocelot) в качестве api-gateway, заключается в поддержке gRPC и WebSocket:

The reference microservice application eShopOnContainers is currently using features provided by Envoy to implement the API Gateway instead of the earlier referenced Ocelot. We made this design choice because of Envoy's built-in support for the WebSocket protocol, required by the new gRPC inter-service communications implemented in eShopOnContainers.
-- https://learn.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/implement-api-gateways-with-ocelot

Как я выяснил, KrakenD поддерживает их только в Enterprise версии.

Из полностью свободных аналогов с поддержкой gRPC и WebSocket выделяются Envoy и Apisix.

Какому решению (из перечисленных или сторонних) вы отдаете предпочтение? Интересуют решения, позволяющие работать как с кубиком, так и без него.
Коллеги, если кто-то ищет проверенного высококвалифицированного специалиста по DDD, микросервисам, Clean Architecture на Golang - обращайтесь ко мне в личку, пока кандидатура не ушла. Имеет успешный практический опыт лида, программиста, архитектора и глубокую теоретическую подготовку. Его не нужно обучать и после него не нужно переделывать.

Единственное ограничение - работа из-за границы, платежи на зарубежный счет. Не налоговый резидент (но гражданин) РФ.

Не дешевый, но очень выгодный. Ручаюсь.
🔥10👍42👎1
Идет мужик по лесу, смотрит - другой мужик лес рубит топором.
- Что делаешь?
- Лес рублю.
- Бензопила же рядом лежит. Возьми её - быстрее будет.
- Я не умею ею пользоваться.
- Инструкция лежит же рядом. Возьми, прочитай.
- Мне некогда - лес рубить надо.

К чему я вспомнил этот анекдот? Состояние кода может замедлить разработку более, чем на порядок, и продолжать замедлять по экспоненте.

В процессе программирования программист вводит символы с клавиатуры не более 10% времени (зачастую - не более 1% времени). Остальное время он читает существующий код и борется со сложностью.

Плохой код пишется одним программистом, однократно, не более 10% времени. А читается он всеми программистами команды, многократно, постоянно, более 90% времени программирования. Т.е. однократно написанный одним программистом плохой код будет замедлять всю команду более 90% её времени.

Таким образом, фраза "некогда писать правильно" является самообманом. Если у команды медленный темп разработки, то он более чем на 90% времени вызван медленным чтением и затрудненным пониманием написанного ранее кода. Именно поэтому скорость разработки деградирует обычно в геометрической прогрессии.

Самообманом является и фраза "потом исправим". Как сказал Randy Shoup, если у вас нет времени сделать это правильно, то с чего вы взяли, что у вас будет время сделать это дважды? Тем более, что потом скорость разработки будет ниже, а напряжение - выше.

Количество введенных символов слабо коррелирует со скоростью разработки. Например, ребята, увлекающиеся спортивным прохождением кат по программированию, заметили, что используя TDD они пишут в разы больше объем кода, но проходят каты процентов на 10% быстрее, чем без ТДД.

Все просто - используя TDD, появляется слабосвязанный код (иначе его сложно было бы протестировать), который легче читать и понимать.

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

Я вспоминаю, когда я начал работать с литературой по Software Design, то мой код начал существенно преображаться. Мой старый код вызывал у меня стыд. Я взял паузу в программировании Open Source проектов и засел за книжки. Я понимал, что лучше "прочесть инструкцию к бензопиле", нежели продолжать "рубить топором" то, что потом все-равно переделывать.

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

Хороший код отличается простотой, и выполняет главный императив разработки - управление сложностью. Но хороший код не спасает от еще одной сложности, про которую недавно написал @BorisRomanov (начиная отсюда). На эту же тему писал Егор Толстой и даже сам E. Dijkstra:

💬 "Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better."
—Edsger W. Dijkstra, 1984 On the nature of Computing Science (EWD896)

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

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

Хотелось порассуждать дальше, но закончилось место. Ладно, потом...
👍24🔥142💯1