#Highload Владимир Комаров из СберТех. О распределенных транзакциях. Очень хороший доклад с обзором различных механизмов распределенных баз данных и транзакций. Проблема Сбера - гигантские БД на уникальном оборудовании. Идея замены была - распределенные БД. Он изучал и был противником, потому что разработчики не разбраются с тем, что внутри БД. И в распределенной БД тоже, поэтому пойдут нежелательные эффекты, и разработчик будет винить вендора или поддержку, а не себя. А если вместо распределенной БД предложены механизмы работы на уровне приложения, то проблемные точки видны. А в докладе - результаты изучения разных БД. И они не только в докладе - Влабимир написал книгу Путеводитель по базам данных, потому что не нашел такого готового обзора. Дальше конспект, он заведомо неполный, и лучше его читать, смотря на презентацию - в ней много архитектурных схем.
Распределенные БД - 5 вариантов.
* Кластеризация монолита. Реплики, бесконечный масштаб чтения, запись - через один узел, и он - точка отказа.
* Распределенный консенсус.
* Безопасные типы данных: структуры, которые заранее рассчитаны на ассинхронные изменения в разных местах, и независимо от порядка синхронизации результат будет одинаков
* Компенсирующие механизмы: мы быстрее запишем, а потом как-нибудь согласуем. Или не согласуем.
* Распределенные транзакции. Когда несколько агентов взаимодействуют и либо подтверждают либо откатывают.
Дальше рассказ про распределенные транзакции. Самое известное - протокол двухфазной фиксации. 1986 IBM System R* - протокол уже назван хорошо известным. Проблема - отказы НЕ предусмотрены: участник может пропасть, но диск - надежен, он всегда возрождается. В 1991 XA specification - все предположения зафиксированы.
Реальные диски выходят из строя. Что с этим можно сделать?
* Разделяемые дисковые механизмы. SAP HANA, Microsoft PDW, Oracle Sharding + RAC (exadata), Teradata. SAP HANA - надо считать состояние, перейти на резервный надежнее, чем на основной.
* Отказоустойчивость всех участников. Google Spanner.
* Смириться, что можно потерять часть участников. GreenPlum. Координатор дублирован, а других узлов много, и не страшно потерять один.
* При сбое разбирать последствия остальными. Apache Ignite (координирует тот, кто начал транзакцию), Hazelcast - общение и восстановление сбойной.
А еще двухфазная транзакция - два сетевых обмена, и это - время.
Однофазная транзакция. Если мы понимаем, что завершили на ответственном участнике - то на этом и закончили.
* Oracle sharding - драйвер клиента
* GrinGain - решение координатора транзакции
* SAP HANA - координатор сообщает, к каком узлу присоединиться
* Hazelcast - клиент-приложение должен завершить и отвечает, что меняет на одном узле
CockroachDB - двухфазный вариант, но вторая фаза - асинхронная. Там, где начинаются изменения, создается объект-транзакция, клиент говорит commit - этот узел спрашивает готовность, сам записывает на диск, а остальные - записывают асинхронно.
2012. Детерминированные транзакции, Кальвин-машина. Название - в честь Кальвина, который говорил про предопределение как замысел Бога, которому следует все живаое. Роль Бога тут выполняют клиенты. система пишет журнал их действий и применяет на всех серверах, получая детерминированный результат. Транзакция - набор чтений и записей, и при чтении в журнале фиксируется версия объектов, при повторении журнала это контролируется. То есть оптимистичные блокировки. Есть секвенсер, который пишет журнал. Если кто-то не может - сообщает остальным.
Ограничения подхода:
* низкоконкурентная среда, потому как оптимистические блокировки.
* задержки, сбор транзакций в пачку 10мс
* архитектурные компромиссы и оптимизации - пекетные передачи и т.п.
YDB. добавлены компромиссы.
* Между секвенсерами и участниками - медиаторы, ограничение обменов.
* Разрешение на изменения порядка операций.
* Слепые транзакции: когда нам не важна версия на чтении, или напрямую записываем в участника
То есть много оптимизаций, которые разработчик должен применять разумно.
Распределенные БД - 5 вариантов.
* Кластеризация монолита. Реплики, бесконечный масштаб чтения, запись - через один узел, и он - точка отказа.
* Распределенный консенсус.
* Безопасные типы данных: структуры, которые заранее рассчитаны на ассинхронные изменения в разных местах, и независимо от порядка синхронизации результат будет одинаков
* Компенсирующие механизмы: мы быстрее запишем, а потом как-нибудь согласуем. Или не согласуем.
* Распределенные транзакции. Когда несколько агентов взаимодействуют и либо подтверждают либо откатывают.
Дальше рассказ про распределенные транзакции. Самое известное - протокол двухфазной фиксации. 1986 IBM System R* - протокол уже назван хорошо известным. Проблема - отказы НЕ предусмотрены: участник может пропасть, но диск - надежен, он всегда возрождается. В 1991 XA specification - все предположения зафиксированы.
Реальные диски выходят из строя. Что с этим можно сделать?
* Разделяемые дисковые механизмы. SAP HANA, Microsoft PDW, Oracle Sharding + RAC (exadata), Teradata. SAP HANA - надо считать состояние, перейти на резервный надежнее, чем на основной.
* Отказоустойчивость всех участников. Google Spanner.
* Смириться, что можно потерять часть участников. GreenPlum. Координатор дублирован, а других узлов много, и не страшно потерять один.
* При сбое разбирать последствия остальными. Apache Ignite (координирует тот, кто начал транзакцию), Hazelcast - общение и восстановление сбойной.
А еще двухфазная транзакция - два сетевых обмена, и это - время.
Однофазная транзакция. Если мы понимаем, что завершили на ответственном участнике - то на этом и закончили.
* Oracle sharding - драйвер клиента
* GrinGain - решение координатора транзакции
* SAP HANA - координатор сообщает, к каком узлу присоединиться
* Hazelcast - клиент-приложение должен завершить и отвечает, что меняет на одном узле
CockroachDB - двухфазный вариант, но вторая фаза - асинхронная. Там, где начинаются изменения, создается объект-транзакция, клиент говорит commit - этот узел спрашивает готовность, сам записывает на диск, а остальные - записывают асинхронно.
2012. Детерминированные транзакции, Кальвин-машина. Название - в честь Кальвина, который говорил про предопределение как замысел Бога, которому следует все живаое. Роль Бога тут выполняют клиенты. система пишет журнал их действий и применяет на всех серверах, получая детерминированный результат. Транзакция - набор чтений и записей, и при чтении в журнале фиксируется версия объектов, при повторении журнала это контролируется. То есть оптимистичные блокировки. Есть секвенсер, который пишет журнал. Если кто-то не может - сообщает остальным.
Ограничения подхода:
* низкоконкурентная среда, потому как оптимистические блокировки.
* задержки, сбор транзакций в пачку 10мс
* архитектурные компромиссы и оптимизации - пекетные передачи и т.п.
YDB. добавлены компромиссы.
* Между секвенсерами и участниками - медиаторы, ограничение обменов.
* Разрешение на изменения порядка операций.
* Слепые транзакции: когда нам не важна версия на чтении, или напрямую записываем в участника
То есть много оптимизаций, которые разработчик должен применять разумно.
🔥2❤1
Cassandra. Каждый узел сам себе секвенсер. pid+RTC (время)+логическое время. Есть лекция Осипова. Второй узел отвечает, если нет более ранних транзакций. Алгоритм существенно рассчитывает на синхронизацию часов в кластере и учет разбега.
FoundationDB - в нем распределенный менеджер блокировок. Клиент читает данные, выстраивается последовательность изменений и по commit - идем в прокси-сервер. Координатор выдает номер. Дальше прокси говорит "хочу менять ключ", кеш отвечает можно/нельзя. Блокировки протухают через 5 сек, снятие - не нужно.
Сага. Подход опубликован в 1987. Просто по очереди выполняем транзакции, входящие в сагу. Сага - надежна и согласована. Но атомарность - условна, а изоляции - нет, даже инициатор видит промежуточные состояния. Сага - без сбоев, фиксированные процедуры, требования идемпотентных операций и еще несколько. Hadoop - запись в файловую систему. А так - реализуешь поверх.
Их подход - сага. Platform V AppSharding. Масштабирование функциональным делением. Если много данных - шардирование. Например, для клиентов - делят, хорошего алгоритма не нашли, явно делят по спискам. Клиента маршрутизируют. L7-маршрутизатор использует межкластерный индекс. Ключ (клиент, сервис), значение - шард. Переводы между клиентами разных шардов - оркестратор, с хранением в Kafka - объект короткоживущий, данные читаются только при сбое, когда восстанавливаем оркестратор.
Хореография. Прекрасна на полотнах Дега и в балете Моисеева. А в финансах - нет. В вопросах была реплика, что это - не так, на биржах -применяется активно.
Облачные БД. Amazon Aurora, Google AlloyDB, MS SQL DB Hyperscale. Облачные БД пишут журналы, а под ним - система хранения, которая накатывает журналы на страницы, в том числе несколько версий страниц, и по необходимости - отдает экземпляру. Все хорошо, кроме сложного деплоя. Доступны только как облачные сервисы.
К сожалению тема надежного диска и восстановления при сбое одного из узлов не была явно акцентирована. Потому что синхронная передача дает задержки, а асинхронная потенциально теряет данные. У них в Саге для клиентов внизу каждый шард дублируется синхронной репликацией - и да, это работает, так как для масштабирования можно увеличить число шародов, уменьшив объем каждого.
От себя отвечу, что есть отдельный интересный вопрос - решение, устойчивое к потере дата-центра. Там играет то, что скорость связи между дата-центрами сильно ниже локальной, и, более того, может кратковременно деградировать очень сильно. И надо отличать деградацию связи от деградации самой ноды при высокой производительности. Мы смотрели, правда несколько лет назад, и обнаружили что все кластерные решения существенно ориентированы на работу внутри дата-центра с быстрой и устойчивой сетью между узлами...
FoundationDB - в нем распределенный менеджер блокировок. Клиент читает данные, выстраивается последовательность изменений и по commit - идем в прокси-сервер. Координатор выдает номер. Дальше прокси говорит "хочу менять ключ", кеш отвечает можно/нельзя. Блокировки протухают через 5 сек, снятие - не нужно.
Сага. Подход опубликован в 1987. Просто по очереди выполняем транзакции, входящие в сагу. Сага - надежна и согласована. Но атомарность - условна, а изоляции - нет, даже инициатор видит промежуточные состояния. Сага - без сбоев, фиксированные процедуры, требования идемпотентных операций и еще несколько. Hadoop - запись в файловую систему. А так - реализуешь поверх.
Их подход - сага. Platform V AppSharding. Масштабирование функциональным делением. Если много данных - шардирование. Например, для клиентов - делят, хорошего алгоритма не нашли, явно делят по спискам. Клиента маршрутизируют. L7-маршрутизатор использует межкластерный индекс. Ключ (клиент, сервис), значение - шард. Переводы между клиентами разных шардов - оркестратор, с хранением в Kafka - объект короткоживущий, данные читаются только при сбое, когда восстанавливаем оркестратор.
Хореография. Прекрасна на полотнах Дега и в балете Моисеева. А в финансах - нет. В вопросах была реплика, что это - не так, на биржах -применяется активно.
Облачные БД. Amazon Aurora, Google AlloyDB, MS SQL DB Hyperscale. Облачные БД пишут журналы, а под ним - система хранения, которая накатывает журналы на страницы, в том числе несколько версий страниц, и по необходимости - отдает экземпляру. Все хорошо, кроме сложного деплоя. Доступны только как облачные сервисы.
К сожалению тема надежного диска и восстановления при сбое одного из узлов не была явно акцентирована. Потому что синхронная передача дает задержки, а асинхронная потенциально теряет данные. У них в Саге для клиентов внизу каждый шард дублируется синхронной репликацией - и да, это работает, так как для масштабирования можно увеличить число шародов, уменьшив объем каждого.
От себя отвечу, что есть отдельный интересный вопрос - решение, устойчивое к потере дата-центра. Там играет то, что скорость связи между дата-центрами сильно ниже локальной, и, более того, может кратковременно деградировать очень сильно. И надо отличать деградацию связи от деградации самой ноды при высокой производительности. Мы смотрели, правда несколько лет назад, и обнаружили что все кластерные решения существенно ориентированы на работу внутри дата-центра с быстрой и устойчивой сетью между узлами...
🔥5
#Highload Иван Бондаренко (НГУ) Сильный искусственный интеллект у вас в подвале: как собрать мультимодальную LLM из опенсорса и настроить ее под вашу задачу. Началось все с участия в соревновании Strong Intelligence на AIJ-2023, где надо было сделать ИИ, способный понимать картинки и звуки. Базовую LLM давали организаторы, решение надо было представить в контейнере, дальше организаторы оценивали на своих тестах. Они пошли понятным путем, собрав энкодеры из open source решений. Энкодер - два такта, перекодировка изображения или звуков в вектор параметров, а потом перекодировав вектор параметров в вектор токенов для LLM. В презентации есть подробности - что использовано.
Заняли 14 место из 30, их результат не удовлетворил. И они подумали - а что можно сделать? Анализ показал проблему: энкодеры работают независимо от контекста разговора. И появилась другая идея: сделать общую модель мира во внешней базе данных и искать в нем, создавая контекст разговора, они назвали это припоминанием знаний. Для этого использована китайская ONE-PLANE, которая связывает разные модальности и превращенная в ANNOY-вектор для поиска английская википедия. Дополнительно потребовался генератор коротких подписей к рисункам - его результат фокусирует поиск, распознаватель звуков и преобразователи для речи и других видов звуков. И уже полученный в результате текст подается на вход LLM. В докладе было разобрана механика работы на конкретном примере.
Дальше надо сравнивать результаты с другими. Они сравнивали свои с разными решениями, при этом в качестве арбитра выступал ChatGPT - он оценивал качества ответов разных систем, сравнивал их ответы между собой. Получается относительно объективная метрика. И есть сравнения с разными системами, а также в конфигурациях с разными LLM. B тут оказалось, что основной фокус переносится на этап создания контекста, а мощность LLM уже не столь важна - что существенно для производительности, так как создание контекста - относительно дешевые решения.
Таким образом, компонентная архитектура - гибкий и не требовательный к железу способ управлять знаниями системы. И архитектура распознавания через припоминание имеет большее значение, чем LLM. Университет поддержал грантом, делают систему для ориентации студентов, способную отвечать на философские вопросы, типа чему стоит учиться, и на конкретные - куда нести документы.
Заняли 14 место из 30, их результат не удовлетворил. И они подумали - а что можно сделать? Анализ показал проблему: энкодеры работают независимо от контекста разговора. И появилась другая идея: сделать общую модель мира во внешней базе данных и искать в нем, создавая контекст разговора, они назвали это припоминанием знаний. Для этого использована китайская ONE-PLANE, которая связывает разные модальности и превращенная в ANNOY-вектор для поиска английская википедия. Дополнительно потребовался генератор коротких подписей к рисункам - его результат фокусирует поиск, распознаватель звуков и преобразователи для речи и других видов звуков. И уже полученный в результате текст подается на вход LLM. В докладе было разобрана механика работы на конкретном примере.
Дальше надо сравнивать результаты с другими. Они сравнивали свои с разными решениями, при этом в качестве арбитра выступал ChatGPT - он оценивал качества ответов разных систем, сравнивал их ответы между собой. Получается относительно объективная метрика. И есть сравнения с разными системами, а также в конфигурациях с разными LLM. B тут оказалось, что основной фокус переносится на этап создания контекста, а мощность LLM уже не столь важна - что существенно для производительности, так как создание контекста - относительно дешевые решения.
Таким образом, компонентная архитектура - гибкий и не требовательный к железу способ управлять знаниями системы. И архитектура распознавания через припоминание имеет большее значение, чем LLM. Университет поддержал грантом, делают систему для ориентации студентов, способную отвечать на философские вопросы, типа чему стоит учиться, и на конкретные - куда нести документы.
👍3
#Highload Андрей Кузнецов (AIRI) Как научить фундаментальные модели читать, видеть, слышать и анализировать все одновременно. Реально доклад был только включение картинок. Конструкция - та же самая, LLM + энкодеры, с помощью которых описание изображения помещается в общий вектор текста. При этом работает и в обратную сторону, в ответе тоже могут быть токены, описывающие изображения, по которым будет порождена картинка. Решение OmniFusion, выложено в open source в апреле. Решение - открытое, можно подключить свои распознавалки для специфических изображений, например, медицинских снимок или космических. И другие виды тоже можно подключать, на очереди аудио и видео. А еще можно добавлять графы знаний. Они таким образом добавили работу с формулами и LaTeX.
#Highload Сергей Ларионенко (Авито) OpenTelemetry и эволюция распределенного пайплайна трейсинга в Авито. Это песня о том, как, сделав пайплайн на открытых инструментах, они разбирались с потерей 70% трейсов, расшивая узкие горла и делая форки в туле. Проблема началась с обнаружения битых трейсов. Вставили проверку на связность графа - и обнаружили что таких 70%. Начали разбираться. Обнаружили, что на нодах следующая конструкция: много обработчиков пишут в Go-канал, а дальше этот канал вычитывается только одним потоком и передается на другую ноду. Запись в Go-канал - точка синхронизации, буфер канала ограничен. И сделано, что когда в буфер нельзя записать, то пакет просто теряется, и увеличивается статистика сбоев. Только они этого не видят, потому что статистика в конструкторе инициализирована NullFactory. А поток вычитывания работает медленно, потому что там синхронный вызов удаленный вызов по gRpc, и на приемной стороне - приличная обработка. Для решения сделали fork Otel batching, несколько процессов чтения, из которых активен один, но при исчерпании буфера переключаемся на следующий. Массовые сбои ушли, остались индивидуальные, причина - падал коллектор данных. А он падал потому, что там две процедуры: обработка очередного события и оценка, что накопленные события пора отправлять пакетом. И оказалось, что там код написан так, что при одновременном выполнении получается конфликт и все падает. Это тоже поправили. Все заработало.
👍2
#Highload Илья Иванов из Яндекс 360. Архитектура биллинга: как не стать единой точкой отказа. В докладе - архитектура биллинга. Она по факту трехслойная. Сам биллинг получает сумму, которую надо списать за услуги, выставляет счета, принимает оплату, выдает чеки и готовит отчеты. Тарификацию ведут пребиллинги, связанные с конкретными бизнесами, в них - тарифы, промоакции и промокоды. А также платежные механики - подписки или другие способы учета. Они зависят от каждого бизнеса, свои для Яндекс 360, Яндекс Плюс, Яндекс Облако и так далее, потому что каждый из них ведет свою тарифную и рекламную политику, которую надо менять независимо от других. Собственно, независимое развитие бизнесов как раз является основанием для такой архитектуры, а вовсе не соображения про точку отказа - централизованный биллинг по-прежнему им является.
Пребиллинг в Яндекс 360 переводит конкретные тарифы в наборы подключенных услуг, которые могут быть подключены индивидуально и для компании, при этом часть услуг для компании переводится в индивидуальные для сотрудников. Добавление услуги инициирует добавление для всех сотрудников, каждое добавление выполняется индивидуально и асинхронно, простая модель состояний init-sinking-actual, поэтому даже при больших организациях 10к+ человек выполняется быстро. Добавление услуги означает обращение к конкретному сервису с установкой там каких-то квот, например, объема доступного диска. И далее этот сервис работает в пределах квоты ресурсов, или количества писем. При этом одни ресурсы, например, диск, выделяются индивидуально, а другие, например количество писем в рассылках, может быть установлено общее, на всех сотрудников компании.
Неявное ограничение модели - не должно быть ситуации, когда несколько сервисов расходуют один и тот же ресурс, или они должны сами проверять его расход, чтобы не было преувеличения. Конструкция биллинга для мобильных операторов, когда все сервисы (звонки, смс, интернет) тратят одни и те же деньги на счете в реальном времени до исчерпания тут не сделать. Но это уже мое дополнение.
А вообще доклад получился, на мой взгляд, достаточно простым и очевидным, а тема единой точки рассказ раскрыта не была. Впрочем, может это так с учетом моего опыта.
Пребиллинг в Яндекс 360 переводит конкретные тарифы в наборы подключенных услуг, которые могут быть подключены индивидуально и для компании, при этом часть услуг для компании переводится в индивидуальные для сотрудников. Добавление услуги инициирует добавление для всех сотрудников, каждое добавление выполняется индивидуально и асинхронно, простая модель состояний init-sinking-actual, поэтому даже при больших организациях 10к+ человек выполняется быстро. Добавление услуги означает обращение к конкретному сервису с установкой там каких-то квот, например, объема доступного диска. И далее этот сервис работает в пределах квоты ресурсов, или количества писем. При этом одни ресурсы, например, диск, выделяются индивидуально, а другие, например количество писем в рассылках, может быть установлено общее, на всех сотрудников компании.
Неявное ограничение модели - не должно быть ситуации, когда несколько сервисов расходуют один и тот же ресурс, или они должны сами проверять его расход, чтобы не было преувеличения. Конструкция биллинга для мобильных операторов, когда все сервисы (звонки, смс, интернет) тратят одни и те же деньги на счете в реальном времени до исчерпания тут не сделать. Но это уже мое дополнение.
А вообще доклад получился, на мой взгляд, достаточно простым и очевидным, а тема единой точки рассказ раскрыта не была. Впрочем, может это так с учетом моего опыта.
❤1
#Highload Алексей Цветков. Как воспитать себе помощника: применение локального ИИ для разработки. Это был рассказ о практических возможностях ИИ быть помощником по разработке. При этом, что важно, использовалась автономная версия, которая с нормальной скоростью работает локально на обычном компе разработчика (в презентации были характеристики). А по мощности она сравнима с GPT-4, Gemini, Copilot, правда в специализированной области разработке софта. Модель не зависит от конкретного языка и знает 338 разных языков. Модели загружаются с помощью ollama, рекомендуется модель codestral:22b (при подготовке он использовал предыдущую версию), и нужен плагин continue для VScode и GoLang - он позволяет обращаться из среды к провайдерам. Модель умеет из коробки строить индекс по вашему проекту и использовать его при выполнении заданий. В презентации были конкретные команды и ссылки.
Первым было тестовое задание: напиши функцию на Go для слияния каналов в один. За минуту достаточно хороший код, еще с комментариями на русском. Правда, с ошибками. И в реальной задаче мы их не можем увидеть через ревью. Однако, модель можно попросить написать юнит-тесты, и дальше рассматривать по-отдельности. И модель пишет тесты с большей охотой, чем разработчики.
Дальше - попытка сделать реальный проект - прототип распределенной платежной системы: сервис на Java, который получает поручения от человека и делает балансы на шардах, каждый из которых ведет баланс. Код порождался в несколько этапов, он выдавал задания. По коду была построена компонентная схема вызовов методов и диаграмма последовательности. А еще gRPC API, dockerfile для сборки, yaml для запуска, описание и схемы и тест-кейсы. Тест-кейсы - простые, но на вопрос, а что еще можно предложить, был выдан список сложных тест-кейсов: сложные, обработки ошибок, параллелизма, нагрузочное, стабильности, времени ответа, и далее можно предложить каждый их написать. Вообще это типичный способ работы: ты не сразу требуешь написать проект, а по шагам. В том числе - предложить план, а потом этот план по шагам исполняешь. Типиная работа с джуном в обучающем режиме.
Всего генерация проекта - 30 запросов к модели, 10 уточняющих. Результат 15 файлов, 3 без исправлений, а в остальных потребовались исправления человеком при отладке, но сильно меньше объема файла, всего около 5% строк. Правда, в Java процент больше, около 15% На слайде была детальная информация, и это выложено на github.
Интересное применение: читать постановки, код, логи. Модель может держать большое количество объектов. И у нее есть специализированные знания, например, как сделать сложный makefile.
В запросе можно указывать файлы, которые добавляются в запрос для контекста. Есть API и структура БД - и модель реализует CRUD. Смотришь - нет транзакций для согласованного изменения таблиц баланса и операций. Спрашиваешь "а ты консистентно сделал?" - модель сама говорит про транзакции, и может их в код добавить.
Механизм RAG. Кодовая база разбивается на фрагменты, и модель выдает вектор смысла. embeding и индекс. Запрос тоже пропускается через embeding и модель добавляет релевантные кусочки. Например, получить весь список сервисов. И описать конкретные сервисы. Или показать, где происходит распределение счетов по шардам. И это - помощь в освоении кода незнакомого проекта.
Модель может сделать рефакторинг, тоже по шагам: сначала - какие файлы затронет, потом - что поменять в каждом из них. Для теста он попросил в проекте поменять количество шардов с 2 до 8 и получил осмысленные результаты, хотя и с ошибками.
Что локальный ИИ не может делать хорошо
* Отладка сложных кейсов в runtime - для этого надо понять состояние системы в момент ошибки, а он его не знает
* Ограниченный контекст. 16384 токена, у новой - на порядок больше. Но все равно есть ограничения, и по окну внимания.
* Редактирование многих файлов одним запросом, надо по-одному.
* Выполнение последовательности одним запросом - надо дробить на куски (но набор кусков он может предложить).
Первым было тестовое задание: напиши функцию на Go для слияния каналов в один. За минуту достаточно хороший код, еще с комментариями на русском. Правда, с ошибками. И в реальной задаче мы их не можем увидеть через ревью. Однако, модель можно попросить написать юнит-тесты, и дальше рассматривать по-отдельности. И модель пишет тесты с большей охотой, чем разработчики.
Дальше - попытка сделать реальный проект - прототип распределенной платежной системы: сервис на Java, который получает поручения от человека и делает балансы на шардах, каждый из которых ведет баланс. Код порождался в несколько этапов, он выдавал задания. По коду была построена компонентная схема вызовов методов и диаграмма последовательности. А еще gRPC API, dockerfile для сборки, yaml для запуска, описание и схемы и тест-кейсы. Тест-кейсы - простые, но на вопрос, а что еще можно предложить, был выдан список сложных тест-кейсов: сложные, обработки ошибок, параллелизма, нагрузочное, стабильности, времени ответа, и далее можно предложить каждый их написать. Вообще это типичный способ работы: ты не сразу требуешь написать проект, а по шагам. В том числе - предложить план, а потом этот план по шагам исполняешь. Типиная работа с джуном в обучающем режиме.
Всего генерация проекта - 30 запросов к модели, 10 уточняющих. Результат 15 файлов, 3 без исправлений, а в остальных потребовались исправления человеком при отладке, но сильно меньше объема файла, всего около 5% строк. Правда, в Java процент больше, около 15% На слайде была детальная информация, и это выложено на github.
Интересное применение: читать постановки, код, логи. Модель может держать большое количество объектов. И у нее есть специализированные знания, например, как сделать сложный makefile.
В запросе можно указывать файлы, которые добавляются в запрос для контекста. Есть API и структура БД - и модель реализует CRUD. Смотришь - нет транзакций для согласованного изменения таблиц баланса и операций. Спрашиваешь "а ты консистентно сделал?" - модель сама говорит про транзакции, и может их в код добавить.
Механизм RAG. Кодовая база разбивается на фрагменты, и модель выдает вектор смысла. embeding и индекс. Запрос тоже пропускается через embeding и модель добавляет релевантные кусочки. Например, получить весь список сервисов. И описать конкретные сервисы. Или показать, где происходит распределение счетов по шардам. И это - помощь в освоении кода незнакомого проекта.
Модель может сделать рефакторинг, тоже по шагам: сначала - какие файлы затронет, потом - что поменять в каждом из них. Для теста он попросил в проекте поменять количество шардов с 2 до 8 и получил осмысленные результаты, хотя и с ошибками.
Что локальный ИИ не может делать хорошо
* Отладка сложных кейсов в runtime - для этого надо понять состояние системы в момент ошибки, а он его не знает
* Ограниченный контекст. 16384 токена, у новой - на порядок больше. Но все равно есть ограничения, и по окну внимания.
* Редактирование многих файлов одним запросом, надо по-одному.
* Выполнение последовательности одним запросом - надо дробить на куски (но набор кусков он может предложить).
👍2
Таким образом, даже локальные генеративные модели хорошо понимают то, чем занимаемся разработчик. Он бы модельный проект сделал быстрее, но про джуна - не уверен. Модели могут допускать ошибки - но люди тоже допускают, надо придумать защиту, например, тесты. Бум ИИ пришел на нашу улицу, они повышают скорость и качество результатов. Опасности, что джуны разучатся разрабатывать, работая с моделью Алексей не видит, потому что конечный результат все равно надо доводить совместно. А для этого надо разобраться в коде, который модель сделала. Она может его объяснить, построить схемы. Так что, скорее, джуны научатся.
На этом я завршаю отчет с Highload. В целом конференция была ожидаемая: хорошие доклады и много общения. И опять больше предыдущей, на этот раз было 2500 участников. А в четверг - Teamlead.
На этом я завршаю отчет с Highload. В целом конференция была ожидаемая: хорошие доклады и много общения. И опять больше предыдущей, на этот раз было 2500 участников. А в четверг - Teamlead.
👍5
#Teadmlead Максим Смирнов. Как рассказывать архитектурные диаграммы. Доклад из двух частей. Сначала пять затруднений, которые возникают при презентации архитектуры и способах их преодоления, а потом - о том, как сделать хороший рассказ. Вторая часть не следует из первой, она поверх нее.
Рассказывать на реальном сложно - погружение в контекст. Есть кейсы, на которых O'Reily проводит соревнования архитекторов, варианты выкладываются на github. Если не в курсе - гуглите, это интересно. И рассказ был на кейсе Sysops Squad: гигант электроники с продажами по всей стране. При покупке - абонентское обслуживание, при проблеме специалисты приезжают.
Пять затруднений
1. Пояснить запутанную диаграмму - в этом запутываешься сам и путаешь других
2. Неясно, что надо рассказывать
3. Риск потеряться в вариантах развития событий. Их много, люди не держат контекста
4. Сложно не утонуть в обсуждении деталей
5. Непонятно, как донести замысел архитектурного решения
Теперь про каждую.
Сложность. В примере большая c4 диаграмма, как водится с мелкими надписями. Подробно рассказать - невозможно, а перечисление типа "5 контейнеров, 8 очередей" - это не содержание!
Реально содержание архитектуры - другое
* Вытащим из монолита компоненты взаимодействия с клиентами
* И все их взаимодействие - через асинхронные очереди
* А взаимодействие с инженерами - вторая часть
* И третья и четвертая - платежи и отчетность
Его и надо рассказывать. И я отмечу, что для этого надо подготовиться заранее: раскрасить квадратики в разные цвета, возможно, сделать обводы и фоновые выделения. А может и нарисовать более крупную диаграмму для рассказа.
Другая идея: смотреть на картину как на карту и поверх нее рассказывать, как развиваются события - просто показать последовательность как взаимодействуют компоненты. Я бы для этого тоже крупно заранее пронумеровал пунты такого взаимодействия.
Еще отмечу, что это - два разных рассказа, для разных целей и аудиторий, и надо понимать, что именно ты рассказываешь.
В алгоритмах и поведении есть развилки, а в историях - их нет. Use case решают это через основной и дополнительные ветви. И в рассказе тоже не нужно рассказывать все варианты. Расскажите основной. Я тут дополню, что часто кроме основного есть особенно интересные кейсы, обычно касающиеся того, с чем имеются или предполагаются трудности. А структура через use case еще и поможет при вопросах про детали: вы переключаетесь на дополнительную ветку, потом возвращаетесь.
Как донести замысел решения? Есть формат.
1. Цель: желаемый результат, целевое состояние в которое хотим понять
2. Что мешает достичь целевого результата просто - препятствия
3. Хитрость, ловкий прием чтобы преодолеть эти препятствия
Три подсказки.
1. Используйте шаблон ADR записи архитектурного решения
2. Обсуждайте альтернативные варианты. Их обязательно надо сформулировать и обсудить
3. Передайте эстафету решения вашим слушателям
Шаблон Y-statements
1. Контекст - для чего применимо архитектурное решения
2. Facing - для каких требований архитектура, что мешает просто взять и сделать
3. we decided - что решили
4. and neglected - от чего отказались
5. we achieve - что мы достигнем
6. accepting what - какую цену заплатим
Например. Пиковая нагрузка может быть вызвана специфическими запросами в начале месяца - и их можно вынести в отдельный масштабируемый сервис, чтобы на основу это не влияло. Но система в целом станет сложнее.
Зачем обсуждать альтернативы? Тут пример домика: дешево и быстро, быстро и дорого, дорого и хорошо, слишком хорошо. Мы проектируем индивидуально, не вовлекая заказчика. И он далеко не всегда специалист. Но если мы предлагаем варианты - то получается пространство выбора. И критерии могут быть различны.
B конце презентации был канвас для рассказа, он опубликован на канале Максима @it_arch, посвященному архитектуре.
Рассказывать на реальном сложно - погружение в контекст. Есть кейсы, на которых O'Reily проводит соревнования архитекторов, варианты выкладываются на github. Если не в курсе - гуглите, это интересно. И рассказ был на кейсе Sysops Squad: гигант электроники с продажами по всей стране. При покупке - абонентское обслуживание, при проблеме специалисты приезжают.
Пять затруднений
1. Пояснить запутанную диаграмму - в этом запутываешься сам и путаешь других
2. Неясно, что надо рассказывать
3. Риск потеряться в вариантах развития событий. Их много, люди не держат контекста
4. Сложно не утонуть в обсуждении деталей
5. Непонятно, как донести замысел архитектурного решения
Теперь про каждую.
Сложность. В примере большая c4 диаграмма, как водится с мелкими надписями. Подробно рассказать - невозможно, а перечисление типа "5 контейнеров, 8 очередей" - это не содержание!
Реально содержание архитектуры - другое
* Вытащим из монолита компоненты взаимодействия с клиентами
* И все их взаимодействие - через асинхронные очереди
* А взаимодействие с инженерами - вторая часть
* И третья и четвертая - платежи и отчетность
Его и надо рассказывать. И я отмечу, что для этого надо подготовиться заранее: раскрасить квадратики в разные цвета, возможно, сделать обводы и фоновые выделения. А может и нарисовать более крупную диаграмму для рассказа.
Другая идея: смотреть на картину как на карту и поверх нее рассказывать, как развиваются события - просто показать последовательность как взаимодействуют компоненты. Я бы для этого тоже крупно заранее пронумеровал пунты такого взаимодействия.
Еще отмечу, что это - два разных рассказа, для разных целей и аудиторий, и надо понимать, что именно ты рассказываешь.
В алгоритмах и поведении есть развилки, а в историях - их нет. Use case решают это через основной и дополнительные ветви. И в рассказе тоже не нужно рассказывать все варианты. Расскажите основной. Я тут дополню, что часто кроме основного есть особенно интересные кейсы, обычно касающиеся того, с чем имеются или предполагаются трудности. А структура через use case еще и поможет при вопросах про детали: вы переключаетесь на дополнительную ветку, потом возвращаетесь.
Как донести замысел решения? Есть формат.
1. Цель: желаемый результат, целевое состояние в которое хотим понять
2. Что мешает достичь целевого результата просто - препятствия
3. Хитрость, ловкий прием чтобы преодолеть эти препятствия
Три подсказки.
1. Используйте шаблон ADR записи архитектурного решения
2. Обсуждайте альтернативные варианты. Их обязательно надо сформулировать и обсудить
3. Передайте эстафету решения вашим слушателям
Шаблон Y-statements
1. Контекст - для чего применимо архитектурное решения
2. Facing - для каких требований архитектура, что мешает просто взять и сделать
3. we decided - что решили
4. and neglected - от чего отказались
5. we achieve - что мы достигнем
6. accepting what - какую цену заплатим
Например. Пиковая нагрузка может быть вызвана специфическими запросами в начале месяца - и их можно вынести в отдельный масштабируемый сервис, чтобы на основу это не влияло. Но система в целом станет сложнее.
Зачем обсуждать альтернативы? Тут пример домика: дешево и быстро, быстро и дорого, дорого и хорошо, слишком хорошо. Мы проектируем индивидуально, не вовлекая заказчика. И он далеко не всегда специалист. Но если мы предлагаем варианты - то получается пространство выбора. И критерии могут быть различны.
B конце презентации был канвас для рассказа, он опубликован на канале Максима @it_arch, посвященному архитектуре.
❤3🔥2👍1😐1
#Teamlead Игорь Гранщиков из Авито. Система управления с обратной связью. Тимлид вырастает и начинает руководить не командой, а другими тимлидами. И тут старая система управления перестает работать, надо строить новую, о которой был доклад. Система состоит из двух элементов: целеполагание и операционное ревью, на котором оценивается текущее состояние команд. При этом у руководителя - светофорная модель из метрик, и если на ней горит красный сигнал, то разобраться в деталях - задача тимлида. В этом смысле, получается, что руководитель второго уровня внутри квартала не нужен - за светофорами может наблюдать и автомат. Ну или у него получается почти бесконечное масштабирование по числу команд. Какая-то тут есть засада.
Возвращаясь к докладу. Целеполагание. Три группы целей:
* Продукт - ценность, поставляемая в продакшн
* Процессы - метрики их функционирования, например, cycle time
* Люди: счастье, найм.
Цели - фиксируем ожидания. Операционное ревью: есть цели и факт. И если есть невыполнение или риск невыполнения - должен сработать триггер и дать корректировку действий.
Были рассмотрены 5 задач.
1. Контролировать результативность и эффективность
2. Настраивать процессы чужими командами
3. Запускать команды чужими руками
4. Контролировать перформанс-менеджмент
5. Развивать старших инженеров.
Теперь о них по порядку.
1. Контролировать результативность и эффективность. Результативность - делать правильные вещи, эффективность - делать их правильно (быстро, качественно). Это - разное, следить надо за обоими.
Burndown. Результативность - поставка того, что выпускает. План-факт. А скорость - эффективность, производная от скорости. Одна из метрик - cycle time.
Если цель - запустить ипотечную анкету на мобильных платформах. Отставание 10 дней, один из эпиков заблокирован смежниками. Метод изменений: в начале квартала сверять планы свои со смежниками. Цель по cycle time может быть не достигнута по той же причине.
Тимлид докапывается до причин, а руководитель тимлидов смотрит на светофор. Есть еще несоклько метрик индексов: support ticket sla reaction, zero bug policy, crashes, LSR SLA
2. Настраиваем процессы чужими руками. Досталось легаси плохого качества, много пользователей обращались в поддержку. Обращения матчатся с багами, для каждого известно. Цель: привести HD count к целевому значению. И количество решенных тикетов от суппорта 10+. Дальше мониторили - и получилось успешно за пару кварталов. Потом вывели на мониторинг.
3. Запускать команды чужими руками. При запуске команды есть общее: процессы и практики соответствуют стандарту. Agile periodic table - чек лист. Начал печатать, класть на стол и помечать. Но не масштабируется.
В Авито есть модель зрелости Team maturity model. Опрос по соответствию. И дальше по каждому пункту светофорная модель. Тимлид видит детали у себя, а руководитель - сводку по командам и динамику. И раз есть метрика - мы можем ставить цели по движению по по модели.
4. Контролировать performance management. Тимлиды затягивают обратную связь сотрудникам. Особенно начинающие. И начал включать в операционное ревью мини-оценку сотрудника. При этом требовалось каждого оценить, обязательно хорошо-плохо. Бинарно, нормально объединено с хорошо, и это - сознательно. Потому что у начинающего тимлида нормально - это плохо, по которому он не хочет выдавать обратную связь. Если плохо - то причины и action plan. Это побуждает тимлида давать обратную связь.
5. Развивать старших инженеров. Стандартные планы не работают, нужны нестандартные challenge. Например challenge: реализовать платформу календарей и применить для разных платформ. Или повысить SLA.
Как часто? Есть быстродействие, регулирование и точность. Слишком часто - задергаем команду, слишком редко - не будем реагировать. Целеполагание - как целеполагание в организации, у них раз в квартал. А операционное ревью 10% - 1-2 недели (9 дней формально). На последней период операционного ревью есть выполнение целей. И мы можем воспользоваться для обратной связи. Но! Это не должно становиться KPI, это должно быть поддерживающей штукой.
Возвращаясь к докладу. Целеполагание. Три группы целей:
* Продукт - ценность, поставляемая в продакшн
* Процессы - метрики их функционирования, например, cycle time
* Люди: счастье, найм.
Цели - фиксируем ожидания. Операционное ревью: есть цели и факт. И если есть невыполнение или риск невыполнения - должен сработать триггер и дать корректировку действий.
Были рассмотрены 5 задач.
1. Контролировать результативность и эффективность
2. Настраивать процессы чужими командами
3. Запускать команды чужими руками
4. Контролировать перформанс-менеджмент
5. Развивать старших инженеров.
Теперь о них по порядку.
1. Контролировать результативность и эффективность. Результативность - делать правильные вещи, эффективность - делать их правильно (быстро, качественно). Это - разное, следить надо за обоими.
Burndown. Результативность - поставка того, что выпускает. План-факт. А скорость - эффективность, производная от скорости. Одна из метрик - cycle time.
Если цель - запустить ипотечную анкету на мобильных платформах. Отставание 10 дней, один из эпиков заблокирован смежниками. Метод изменений: в начале квартала сверять планы свои со смежниками. Цель по cycle time может быть не достигнута по той же причине.
Тимлид докапывается до причин, а руководитель тимлидов смотрит на светофор. Есть еще несоклько метрик индексов: support ticket sla reaction, zero bug policy, crashes, LSR SLA
2. Настраиваем процессы чужими руками. Досталось легаси плохого качества, много пользователей обращались в поддержку. Обращения матчатся с багами, для каждого известно. Цель: привести HD count к целевому значению. И количество решенных тикетов от суппорта 10+. Дальше мониторили - и получилось успешно за пару кварталов. Потом вывели на мониторинг.
3. Запускать команды чужими руками. При запуске команды есть общее: процессы и практики соответствуют стандарту. Agile periodic table - чек лист. Начал печатать, класть на стол и помечать. Но не масштабируется.
В Авито есть модель зрелости Team maturity model. Опрос по соответствию. И дальше по каждому пункту светофорная модель. Тимлид видит детали у себя, а руководитель - сводку по командам и динамику. И раз есть метрика - мы можем ставить цели по движению по по модели.
4. Контролировать performance management. Тимлиды затягивают обратную связь сотрудникам. Особенно начинающие. И начал включать в операционное ревью мини-оценку сотрудника. При этом требовалось каждого оценить, обязательно хорошо-плохо. Бинарно, нормально объединено с хорошо, и это - сознательно. Потому что у начинающего тимлида нормально - это плохо, по которому он не хочет выдавать обратную связь. Если плохо - то причины и action plan. Это побуждает тимлида давать обратную связь.
5. Развивать старших инженеров. Стандартные планы не работают, нужны нестандартные challenge. Например challenge: реализовать платформу календарей и применить для разных платформ. Или повысить SLA.
Как часто? Есть быстродействие, регулирование и точность. Слишком часто - задергаем команду, слишком редко - не будем реагировать. Целеполагание - как целеполагание в организации, у них раз в квартал. А операционное ревью 10% - 1-2 недели (9 дней формально). На последней период операционного ревью есть выполнение целей. И мы можем воспользоваться для обратной связи. Но! Это не должно становиться KPI, это должно быть поддерживающей штукой.
Итак, построение системы управления
1. Настройте целеполагание
2. Выберите метрики
3. Настройте операционное ревью - формат
4. Поставьте ревью в календари
5. Make policies explicit - чтобы люди знали, что от них ожидают
В вопросах - метрики же могут не корректно показывать. Ответ: надо периодически исследовать детали, для погружения в команду любит замещать руководителя на время отпуска. И это дает дополнительную диагностику.
1. Настройте целеполагание
2. Выберите метрики
3. Настройте операционное ревью - формат
4. Поставьте ревью в календари
5. Make policies explicit - чтобы люди знали, что от них ожидают
В вопросах - метрики же могут не корректно показывать. Ответ: надо периодически исследовать детали, для погружения в команду любит замещать руководителя на время отпуска. И это дает дополнительную диагностику.
👍5
#Teamlead Роман Поборчий. Особенности создания внутренних сервисов в крупных компаниях, и как избежать провала. Рассказ начался с вопроса, что такое провал? Мы попробовали, сделали, но это не оказалось полезным. Это провал или нет? Ответ - итерация, мы потратили свое время и чужие деньги, чтобы уточнить картину мира. Полезный опыт.
Дальше была история. 1957 fairchild semiconductor. 8 человек уволились от William Shockley, чтобы основать свою компанию, и основали ее как дочку fairchild, которая занималась разным. Они изобрели интегральную схему и начали делать, начали делать процессоры и память. Одновременно с Килби, было признано. В 1971 Don Hoefler написал статью про fairchild semiconductor, где впервые употребил термин silicon valley - и он прижился.
Все росло в 2 раза, и был год, когда дочка приносила 60% холдингу, там были внутренние дележки. Но в 1968 двое ушли, основали Integrated Electronics - Intel, был первый коммерчески неуспешный год. А в 1969 - Sanders уволился и основал advanced micro devices - AMD.
Провал - когда вы были в нужное время в нужном мести, придумали то что нужно людям, сделали. Но у вас это почему-то не получается, а этот нужный сервис делает кто-то другой.
Возвращаясь к внутренним сервисам. Внутренний сервис - это сервис, потребителями которого являются клиенты компании, может быть разным: платформа, биллинг, аналитика (человек+машина). Внутренние пользователи и внешние - отличаются. Внешние - многочисленны, обезличены. Хотя в b2b некоторые важнее других. Но в целом восполнимый ресурс. Внутри пользователей мало, они рядом с руководством, и они - не восполнимый ресурс.
Внутренний сервис делает своему подразделению, часто маленькими ресурсами, а потом распространяют на другие. И общий принцип: не стоит делать чужую работу. И есть подводные камни, которые этому мешают.
1. Интеграция. Аналитический сервис, мы получаем данные и возвращаем. Клиент приходит, говорит где взять. А дальше много клиентов - и везде разные форматы и разные данные. И интеграция разнородных форматов начинает занимать значительную часть работы. Нанять 15 стажеров - не выход, с ними надо общаться, развивать, они не хотят всю жизнь парсить логи, они отнимают твое время. А еще любые внутренние логи могут поменять формат и вам надо будет переделывать. Да еще тесты у них не упадут - НЕ работает у вас.
Поэтому правильно оставить интеграцию клиента на другом конце: клади данные в этом формате сюда. Но! удобный API - ваша часть. И помощь в написании тестов. Но это работает начиная с 3-4 клиента, первых надо сделать самим - иначе они просто не начнут пользоваться.
2. Приоритеты. Agile учит планировать спринт, собирая заказчиков, и заказчики договариваются. В принципе работает, если общее дело, есть точки пересечения, на которых договариваются. Если же много разных подразделений, то они отказываются договариваться. Не приходят на встречу, а если пришли - только познакомились на ней. И они не договариваются между собой, а пытаются договорить вас. Ошибка - пытаться самому принять решение, кто важнее. Но если подразделения далекие и компания большая, то вы не можете сделать.
Что помогает? Наименьший общий начальник. Был кейс в Яндекс-поиске, много начальник. Но оказалось, что можно привлечь к планированию одного из топов. Пару раз в месяц, на планировании спринта, он приходил. Так бывает можно, не надо бояться.
Правда, на мой взгляд, это больше счастливый случай, а не правило. Если же НОК не доступен - приходится решать самому. Помогают квоты и предложение при срочных азачах ими меняться или брать в долг. Дело в том, что не хотят договариваться не со зла, а потому что нет времени вникнать в проблемы другого, а чтобы договориться - это нужно. А обмен или взять в долг - понятная конструкция.
Дальше была история. 1957 fairchild semiconductor. 8 человек уволились от William Shockley, чтобы основать свою компанию, и основали ее как дочку fairchild, которая занималась разным. Они изобрели интегральную схему и начали делать, начали делать процессоры и память. Одновременно с Килби, было признано. В 1971 Don Hoefler написал статью про fairchild semiconductor, где впервые употребил термин silicon valley - и он прижился.
Все росло в 2 раза, и был год, когда дочка приносила 60% холдингу, там были внутренние дележки. Но в 1968 двое ушли, основали Integrated Electronics - Intel, был первый коммерчески неуспешный год. А в 1969 - Sanders уволился и основал advanced micro devices - AMD.
Провал - когда вы были в нужное время в нужном мести, придумали то что нужно людям, сделали. Но у вас это почему-то не получается, а этот нужный сервис делает кто-то другой.
Возвращаясь к внутренним сервисам. Внутренний сервис - это сервис, потребителями которого являются клиенты компании, может быть разным: платформа, биллинг, аналитика (человек+машина). Внутренние пользователи и внешние - отличаются. Внешние - многочисленны, обезличены. Хотя в b2b некоторые важнее других. Но в целом восполнимый ресурс. Внутри пользователей мало, они рядом с руководством, и они - не восполнимый ресурс.
Внутренний сервис делает своему подразделению, часто маленькими ресурсами, а потом распространяют на другие. И общий принцип: не стоит делать чужую работу. И есть подводные камни, которые этому мешают.
1. Интеграция. Аналитический сервис, мы получаем данные и возвращаем. Клиент приходит, говорит где взять. А дальше много клиентов - и везде разные форматы и разные данные. И интеграция разнородных форматов начинает занимать значительную часть работы. Нанять 15 стажеров - не выход, с ними надо общаться, развивать, они не хотят всю жизнь парсить логи, они отнимают твое время. А еще любые внутренние логи могут поменять формат и вам надо будет переделывать. Да еще тесты у них не упадут - НЕ работает у вас.
Поэтому правильно оставить интеграцию клиента на другом конце: клади данные в этом формате сюда. Но! удобный API - ваша часть. И помощь в написании тестов. Но это работает начиная с 3-4 клиента, первых надо сделать самим - иначе они просто не начнут пользоваться.
2. Приоритеты. Agile учит планировать спринт, собирая заказчиков, и заказчики договариваются. В принципе работает, если общее дело, есть точки пересечения, на которых договариваются. Если же много разных подразделений, то они отказываются договариваться. Не приходят на встречу, а если пришли - только познакомились на ней. И они не договариваются между собой, а пытаются договорить вас. Ошибка - пытаться самому принять решение, кто важнее. Но если подразделения далекие и компания большая, то вы не можете сделать.
Что помогает? Наименьший общий начальник. Был кейс в Яндекс-поиске, много начальник. Но оказалось, что можно привлечь к планированию одного из топов. Пару раз в месяц, на планировании спринта, он приходил. Так бывает можно, не надо бояться.
Правда, на мой взгляд, это больше счастливый случай, а не правило. Если же НОК не доступен - приходится решать самому. Помогают квоты и предложение при срочных азачах ими меняться или брать в долг. Дело в том, что не хотят договариваться не со зла, а потому что нет времени вникнать в проблемы другого, а чтобы договориться - это нужно. А обмен или взять в долг - понятная конструкция.
👍2
Еще один трюк. После планирования приходит заказчик, говорит "Мне очень надо, ты сделай, давай я тебе помогу". Ваша работа - заранее думать, что я могу попросить у такого клиента. И в этот момент быть готовым попросить. В идеале, когда разовая услуга меняется на долгосрочные обязательства. Например, попросили сервис, который в ответ на слово отдавал основную форму - это часто нужно. Это выигрышная стратегия, стоит вкладываться.
3. Стабильность. Начинается на маленьком железе, старый сервер. Внутренние лучше внешних, они не уходят, осознают ресурсный голод. Но в какой-то момент не могут терпеть. Как оттянуть этот момент, и успеть сделать нормально?
Если от внутреннего сервиса не зависит продакшн - его не обязательно резервировать. Достаточно мониторить и вешать плашку "не работаю планово". И по входным данным - вести мониторинг, вешать плашку "мы уже знаем". Это как "мы адекватны и стараемся".
Рост нагрузки системы. Измеряться может в разном, а скачки - с новым клиентом. И часто есть точка апокалипсиса - ресурс весь потребляется. Например, может быть время на ежедневную обработку данных - не должно превышать 24 часа. Пока всего мало, можно проводить тесты и предсказать точку апокалипсиса. Это надо сделать и готовиться.
Мониторинг и информирование - важнее постоянной доступности.
4. Велосипеды. Однажды было нужно строить тепловую карту России по метрикам, по регионам. Маленькая команда, Apach Superset - позволяет подобное делать. Но! Деление по регионам может быть не очень хорошим, Красноярский край - большой, надо дробить. А еще есть города - миллионники - они маленькие, людей много - их надо показывать специально. А еще состав региона надо уметь менять. Коробка - не поддерживает. В результате аналитик данных занимается тем, что пытается поставить точку в нужное место и другой борьбой с инструментом. В результате, пока боролись, другая команда напилила собственные карты, начала им предоставлять.
Готовые инструменты хороши для прототипов, но даже для MVP - не обязательно. Надо оценивать, не слишком ли он дорог. Часто на первом этапе нужно небольшое подмножество, но с нашлепкой, которую сложно сделать, и это проще сделать самим.
3. Стабильность. Начинается на маленьком железе, старый сервер. Внутренние лучше внешних, они не уходят, осознают ресурсный голод. Но в какой-то момент не могут терпеть. Как оттянуть этот момент, и успеть сделать нормально?
Если от внутреннего сервиса не зависит продакшн - его не обязательно резервировать. Достаточно мониторить и вешать плашку "не работаю планово". И по входным данным - вести мониторинг, вешать плашку "мы уже знаем". Это как "мы адекватны и стараемся".
Рост нагрузки системы. Измеряться может в разном, а скачки - с новым клиентом. И часто есть точка апокалипсиса - ресурс весь потребляется. Например, может быть время на ежедневную обработку данных - не должно превышать 24 часа. Пока всего мало, можно проводить тесты и предсказать точку апокалипсиса. Это надо сделать и готовиться.
Мониторинг и информирование - важнее постоянной доступности.
4. Велосипеды. Однажды было нужно строить тепловую карту России по метрикам, по регионам. Маленькая команда, Apach Superset - позволяет подобное делать. Но! Деление по регионам может быть не очень хорошим, Красноярский край - большой, надо дробить. А еще есть города - миллионники - они маленькие, людей много - их надо показывать специально. А еще состав региона надо уметь менять. Коробка - не поддерживает. В результате аналитик данных занимается тем, что пытается поставить точку в нужное место и другой борьбой с инструментом. В результате, пока боролись, другая команда напилила собственные карты, начала им предоставлять.
Готовые инструменты хороши для прототипов, но даже для MVP - не обязательно. Надо оценивать, не слишком ли он дорог. Часто на первом этапе нужно небольшое подмножество, но с нашлепкой, которую сложно сделать, и это проще сделать самим.
👍4
#Teamlead Эрик Бурыгин. Сила нетворкинга, или Нетворкинг как стиль жизни. Доклад с одной сквозной историей о пользе нетворкинга и множестве частных. Основная идея: не бойтесь начать, и активно делайте. Потому что нетворкинг реально помогает достигать своих желаний и осуществлять мечты. Сила в том, что когда вам что-то нужно - вы знаете у кого спросить, и вам расскажут. Например, вы умеете шить одежду, захотели запустить производство - и вам расскажут процесс в деталях, ведь уметь шить - далеко не все. А еще через нетворкинг можно найти ресурсы. Но чтобы это случилось, надо активно знакомится, знать кто чем может помочь. Не когда у вас возник конкретных вопрос, а заранее, чтобы когда вопрос возник - уже было понятно кто ответит. При этом жизнь часто ходит очень извилистыми путями, но приводит в нужном направлении, если вы при этом активны и ловите моменты.
Это иллюстрирует сквозная история - о том, как Эрик хотел сделать курсы, и даже учился этому - но у него не получалось. Но однажды он попал в Гонку героев. Потому что до этого хотел попасть в спорт, было 100500 попыток, но не складывалось. А тут увидел в инстаграмме фотку с гонки героев, где был его друг, узнал, решил в очередной раз попробовать, друг дал телефон - и этот вариант зашел. И он не просто участвовал, а стал инструктором, сдал необходимое, хотя для этого пришлось с другими инструкторами договориться о переносе даты экзамена, он не мог в назначенную. А потом был тренинг по публичным выступлениям, где он человек рассказывал про Яндекс-практикум, и он подумал, что это клевое место, пошел туда работать. Но с курсом не складывалось, надо было пройти обучение, а там не было вакансий. Однако, Гонка героев осталась, он собрал команду от Яндекса, только формально они опоздали, но поскольку руководитель по спорту в Яндексе тоже был инструктором в гонке героев, он договорился. А потом, на гонке, познакомился с девочкой QA-факультета, рассказал ей про мечту о курсе, его начала включили в середину обучения, а позднее у него получилось сделать курс, и он быстро нашел команду для этого за счет накопленных контактов. И таких историй у Эрика много.
Дальше были рекомендации. Они, в общем простые и достаточно известные.
Люди часто охотно разговаривают о том, что они делают. Это кажется, что они не хотят. Просто они не обо всем.
Где и как разговаривать? Везде.
* Профильные конференции
* Пейте кофе, ходите на обед с новыми людьми. В Яндексе есть рандомный кофе
* Тимбилдинги и неформальные встречи. Если не хватает - свои: настолки, пати, спорт...
* Открытые и доброжелательные
* Проявляйте заинтересованность, не отвлекайтесь на встрече
* Делитесь историями
* Обменяйтесь контактами
* Не забывайте напоминать о себе
* Будьте отзывчивыми
* Не будьте навязчивыми
* Если плохое настроение - перенесите
Страхи. Ему и сейчас страшно. Но он пытался изменить, потому что хотел. Как готовиться?
* Начать здороваться с коллегами. И на улице тоже. Это точка входа.
* Больше говорить на встречах. Презентовал проекты и так далее.
* Активно использовать текстовую коммуникацию. Писать проще, чем говорить.
Систематизируйте контакты. Набрать целый телефон - не проблема, проблема вспомнить кто. Оставляйте артефакты, делайте селфи или кружки с новым знакомым и отправляйте в телегу. Больше общайтесь, со временем нетворкинг станет частью жизни.
Чек лист быстрого старта
* Какую задачу нетворкинг поможет решить сейчас
* Определиться со списком задач и подготовить вопросы
* Подумать, кто может помочь, где и как начать коммуникацию.
Хотел стать сейлом. Всех сейлов спрашивал - а как ты стал сейлом? Многие рассказывали. И руководители просили подчиненных.
Это иллюстрирует сквозная история - о том, как Эрик хотел сделать курсы, и даже учился этому - но у него не получалось. Но однажды он попал в Гонку героев. Потому что до этого хотел попасть в спорт, было 100500 попыток, но не складывалось. А тут увидел в инстаграмме фотку с гонки героев, где был его друг, узнал, решил в очередной раз попробовать, друг дал телефон - и этот вариант зашел. И он не просто участвовал, а стал инструктором, сдал необходимое, хотя для этого пришлось с другими инструкторами договориться о переносе даты экзамена, он не мог в назначенную. А потом был тренинг по публичным выступлениям, где он человек рассказывал про Яндекс-практикум, и он подумал, что это клевое место, пошел туда работать. Но с курсом не складывалось, надо было пройти обучение, а там не было вакансий. Однако, Гонка героев осталась, он собрал команду от Яндекса, только формально они опоздали, но поскольку руководитель по спорту в Яндексе тоже был инструктором в гонке героев, он договорился. А потом, на гонке, познакомился с девочкой QA-факультета, рассказал ей про мечту о курсе, его начала включили в середину обучения, а позднее у него получилось сделать курс, и он быстро нашел команду для этого за счет накопленных контактов. И таких историй у Эрика много.
Дальше были рекомендации. Они, в общем простые и достаточно известные.
Люди часто охотно разговаривают о том, что они делают. Это кажется, что они не хотят. Просто они не обо всем.
Где и как разговаривать? Везде.
* Профильные конференции
* Пейте кофе, ходите на обед с новыми людьми. В Яндексе есть рандомный кофе
* Тимбилдинги и неформальные встречи. Если не хватает - свои: настолки, пати, спорт...
* Открытые и доброжелательные
* Проявляйте заинтересованность, не отвлекайтесь на встрече
* Делитесь историями
* Обменяйтесь контактами
* Не забывайте напоминать о себе
* Будьте отзывчивыми
* Не будьте навязчивыми
* Если плохое настроение - перенесите
Страхи. Ему и сейчас страшно. Но он пытался изменить, потому что хотел. Как готовиться?
* Начать здороваться с коллегами. И на улице тоже. Это точка входа.
* Больше говорить на встречах. Презентовал проекты и так далее.
* Активно использовать текстовую коммуникацию. Писать проще, чем говорить.
Систематизируйте контакты. Набрать целый телефон - не проблема, проблема вспомнить кто. Оставляйте артефакты, делайте селфи или кружки с новым знакомым и отправляйте в телегу. Больше общайтесь, со временем нетворкинг станет частью жизни.
Чек лист быстрого старта
* Какую задачу нетворкинг поможет решить сейчас
* Определиться со списком задач и подготовить вопросы
* Подумать, кто может помочь, где и как начать коммуникацию.
Хотел стать сейлом. Всех сейлов спрашивал - а как ты стал сейлом? Многие рассказывали. И руководители просили подчиненных.
В целом Эрик весь доклад объяснял, что никакая магия тут не нужна. Нужна активность и простые приемы, и не надо бояться, и получится куча пользы. Но реально магия - требуется. Тут как со спортом: многие знают, что это нужно и несложно, и часть из них даже покупает абонементы в фитнес, а реально занимаются - гораздо меньше. Так что не в страхе дело, или не в нем одном. Возможно, лично для Эрика главным было преодолеть страх, а дальше мастерство как-то росло и сейчас это на уровне неосознанной компетентности, которую он не может раскрыть, потому что она неосознанна.
Но по-любому такой доклад заставляет заглянуть в себя и спросить - почему ты сам этого не делаешь. Я лично не то, чтобы совсем не нетворкаюсь, но вот так, как делает Эрик - точно не делаю. Хотя знаю, что это нужно. Наверное, дело в том, что я не люблю строить орг.системы из людей, не вижу именно в этом свою реализацию. А нетворкинг - он про это, ты просто копишь материал, чтобы использовать в нужный момент. Впрочем, это вполне может быть лишь рассуждение "от ответа", а не реальная причина. Но это не страшно, ведь обязанности - нет.
Но по-любому такой доклад заставляет заглянуть в себя и спросить - почему ты сам этого не делаешь. Я лично не то, чтобы совсем не нетворкаюсь, но вот так, как делает Эрик - точно не делаю. Хотя знаю, что это нужно. Наверное, дело в том, что я не люблю строить орг.системы из людей, не вижу именно в этом свою реализацию. А нетворкинг - он про это, ты просто копишь материал, чтобы использовать в нужный момент. Впрочем, это вполне может быть лишь рассуждение "от ответа", а не реальная причина. Но это не страшно, ведь обязанности - нет.
👍6❤3🔥2
#Teamlead Александр Зиза. Три субкультуры в IT-компаниях. Очень хороший рассказ о происходящих сейчас принципиальных изменениях в культуре компаний. Это был второй слот, но конспект я публикую только вечером, потому что было желание обдумать и дополнить то, что говорил Александр, а это требует времени. Свои дополнения я отделяю от конспекта, пишу от первого лица. Но надо понимать, что всякий конспект - интерпретация, а не точная передача смысла.
Итак, сейчас, летом 2024 происходит много изменений. И в результате в каждой компании есть винегрет разного. В докладе Александр расчерчивает карту, чтобы в этом разном разбираться.
До субкультур надо поговорить про культуру ИТ-компаний в целом. И это - важно, хотя многие руководители говорят "вы мне практик дайте, не надо про культуру". Я замечу, что такие руководители просто не понимают, насколько у людей различается мышление, и насколько это мышление влияет на жизнь и поведение людей. При этом про себя они бычно это понимают, а вот других считают не такими, как они сами (иначе им бы не были нужны практики управления) - основная ошибка атрибуции. Впрочем, может, они и про себя понимают, и им нужны практики не только для других, но и для себя.
Какие есть проекции, планы, viewpoint для описания культуры? Их много, они перечислены, и большинство остались за рамками доклада, но по ним есть источники.
1. Ограничивающие убеждения, система-1 и система-2 Канемана в мышлении.
2. Культура цивилизаций. Тойнби: цивилизация это культура. Запад: мышление и коммуникации между равным позициями, Россия - эмоциональное присоединение. Интернет, платформы, чаты - про организацию коммуникаций. Выстраивание отношений - это не про коммуникации, отношения бывают деловые и не деловые - разные.
3. Культура как культура быта, артефакты. Они впитаны.
4. Организационная культура - инструменты спиральной динамики.
5. Индустрия в цифровом торнадо (digidal tornado). Каждая индустрия в разных ситуациях.
6. Организационные субкультуры. DevOps, продуктовый подход.
Каждый viewpoint дает фрагментированное представление, надо собирать целое.
Безработица 2.7%, для нормального рынка труда нужно 6-7%. В ИТ не хватает 45% специалистов. У части ИТ-шников есть стратегия: каждый год менять место. Я тут хочу сказать, что это - не особенность России. Питер Друкер, рассматривая вызовы менеджмента 21 века, более 20 лет назад писал о том, что переход от физического труда к умственному приведет к переходу от профицитного рынка труда к дефицитному, при котором специалист будет сам выбирать место работы, при этом деньги будут не основным фактором. Собственно, это и происходит, в ИТ - раньше, в других отраслях - позже, но оно неизбежно.
Культура: цели, ценности, стереотипы, практики. Два способа движения по жизненному циклу: upstream и downstream.
Развитие технологий. Из жизни: как делаем самолеты. Три фазы.
* Модель, ответ на вопрос взлетит или нет.
* Два экземпляра прототипа. Один летает, второй в запасе
* Дальше завод штампует.
Жизненный цикл - детальнее. Важно, что есть Разные места, разные типы деятельности: наука, производство, бизнес.
Здравоохранение - продуктовый подход.
* Обычные задачи - поликлиника, регламенты, ОМС/ДМС
* Сложная проблема - научный клинический центр. И там - другой подход внутри.
* И еще - наука, экспериментальные методы.
Интегрировать это - все очень сложно.
Стивен Деннинг. Эпоха Agile. Складывается мозаичная система и надо интегрировать.
Инженер: назначение бизнеса - обеспечивать развитие науки и технологии. На Highload очень много докладов, и за каждой - стоит тот, кто так думает. Из основного процесса развития технологии появляются боковички развития технологии: о - можно упаковать и продать. И это может быть сырая непонятная шняга. Или Технология как продукт - он рисковая, может быть голубой океан, а может - пусто. А может быть технология как коммерческий продукт. Но инженер об упаковке не думает. Он видел историю со светодиодами времен СССР: у нас развивали науку и рассказывали, а японцы упаковывали.
Итак, сейчас, летом 2024 происходит много изменений. И в результате в каждой компании есть винегрет разного. В докладе Александр расчерчивает карту, чтобы в этом разном разбираться.
До субкультур надо поговорить про культуру ИТ-компаний в целом. И это - важно, хотя многие руководители говорят "вы мне практик дайте, не надо про культуру". Я замечу, что такие руководители просто не понимают, насколько у людей различается мышление, и насколько это мышление влияет на жизнь и поведение людей. При этом про себя они бычно это понимают, а вот других считают не такими, как они сами (иначе им бы не были нужны практики управления) - основная ошибка атрибуции. Впрочем, может, они и про себя понимают, и им нужны практики не только для других, но и для себя.
Какие есть проекции, планы, viewpoint для описания культуры? Их много, они перечислены, и большинство остались за рамками доклада, но по ним есть источники.
1. Ограничивающие убеждения, система-1 и система-2 Канемана в мышлении.
2. Культура цивилизаций. Тойнби: цивилизация это культура. Запад: мышление и коммуникации между равным позициями, Россия - эмоциональное присоединение. Интернет, платформы, чаты - про организацию коммуникаций. Выстраивание отношений - это не про коммуникации, отношения бывают деловые и не деловые - разные.
3. Культура как культура быта, артефакты. Они впитаны.
4. Организационная культура - инструменты спиральной динамики.
5. Индустрия в цифровом торнадо (digidal tornado). Каждая индустрия в разных ситуациях.
6. Организационные субкультуры. DevOps, продуктовый подход.
Каждый viewpoint дает фрагментированное представление, надо собирать целое.
Безработица 2.7%, для нормального рынка труда нужно 6-7%. В ИТ не хватает 45% специалистов. У части ИТ-шников есть стратегия: каждый год менять место. Я тут хочу сказать, что это - не особенность России. Питер Друкер, рассматривая вызовы менеджмента 21 века, более 20 лет назад писал о том, что переход от физического труда к умственному приведет к переходу от профицитного рынка труда к дефицитному, при котором специалист будет сам выбирать место работы, при этом деньги будут не основным фактором. Собственно, это и происходит, в ИТ - раньше, в других отраслях - позже, но оно неизбежно.
Культура: цели, ценности, стереотипы, практики. Два способа движения по жизненному циклу: upstream и downstream.
Развитие технологий. Из жизни: как делаем самолеты. Три фазы.
* Модель, ответ на вопрос взлетит или нет.
* Два экземпляра прототипа. Один летает, второй в запасе
* Дальше завод штампует.
Жизненный цикл - детальнее. Важно, что есть Разные места, разные типы деятельности: наука, производство, бизнес.
Здравоохранение - продуктовый подход.
* Обычные задачи - поликлиника, регламенты, ОМС/ДМС
* Сложная проблема - научный клинический центр. И там - другой подход внутри.
* И еще - наука, экспериментальные методы.
Интегрировать это - все очень сложно.
Стивен Деннинг. Эпоха Agile. Складывается мозаичная система и надо интегрировать.
Инженер: назначение бизнеса - обеспечивать развитие науки и технологии. На Highload очень много докладов, и за каждой - стоит тот, кто так думает. Из основного процесса развития технологии появляются боковички развития технологии: о - можно упаковать и продать. И это может быть сырая непонятная шняга. Или Технология как продукт - он рисковая, может быть голубой океан, а может - пусто. А может быть технология как коммерческий продукт. Но инженер об упаковке не думает. Он видел историю со светодиодами времен СССР: у нас развивали науку и рассказывали, а японцы упаковывали.
👍1
У бизнеса - противоположный взгляд. Ему не интересны технологии. Задача - делать продукты, которые продаются. Но встречаются проблемы: то, что делаем - вдруг не продается. Первая идея - выяснить почему не выполнили план. Следующая стадия: поищем другие средства, лучше готовые. Если их не получается найти, можно поставить цель на создание средств. Но в голове у бизнеса - нет способа про это подумать. Это же нельзя запланировать, нет гарантий и непонятны бюджеты.
Итого, классификация:
* Средства понятны и доступны - задачи
* Средства неясны, но их можно найти - Цель
* Средства никогда не созданы - Проблема.
Отмечу, что это близко к классификации Дэвида Майстера на три типа проектов: Мозги, Седина и Процедуры.
И есть вопрос владения результатом. Бизнес поставил задачу: инженер, сделай эту метрику не 10, а 5. Инженер думает, придумал, на коленках в выходные - сделал технологию, которая снимает проблему. Вопрос - кому принадлежат права на это средство? Менеджер "сделал у меня", инженер "в воскресенье на кухне". Эта бизнес-проблема, она не решенная. И пока выигрывают инженеры, которые уносят технологии - если не была явно поставлена цель.
Карта фаз развития технологии
* Проектирование: технологии, рынок, орг.управление
* Разработка и тестирование
* Производство и эксплуатация
Каждая фаза - своя субкультура, принципиально отличающаяся от других.
* Заказная разработка, культура операционной эффективности: инженеру ставят задачи. Фокус - орг.управления + производств и эксплуатация. За последние 2 года в России взорвалась - есть большой госзаказ. Как правило, коммерческие средства с гарантией результата. Создаются орг.формы и партнерства с заказчиком и так далее. Главный вызов - сформировать слой среднего управления, умеющий вести орг.проектирование
* Продуктовая компания: разработка и тестирование, fail fast, гибкая технология управления
* Инновационно-технологическая компания, инженерная культура. Разработка новых технологий и средств, которые обеспечат новизну. Главный вызов - связь технолога и бизнеса, это сложно, потому что говорят про разное.
* Культура операционной эффективности - план-факт, все через процессы и kpi, приходят за стабильностью.
* Продуктовая культура - fail fast fail cheap. Ключ - нетворкинг и сообщества. Потребление, а не деньги. Главное, чтобы заработало. Приходят за востребованностью.
* Инженерная культура. Придумать, чтоб показать работоспособность, дальше не важно. Любопытство. Бизнес - обеспечивающая структура для исследований.
Александр говорит, что в компании объединяются только попарно: продукты + операционная эффективность или инженерная культура + продукты. Но я хочу сказать, что изменения текущего момента состоят в том, что надо рассматривать целостную деятельность из всех трех фаз, пусть не в одной компании, а в кооперации. Это раньше, когда развитие технологий было медленным, можно было рассматривать отдельно. У меня есть есть статья https://mtsepkov.org/De3-ground, где я формулирую такую схему деятельности ценностно.
И Александр в заключении сказал, что для целостного представления необходимо коммуницировать, несмотря на разницу культур. Коммуникация есть преодоление отвращения к точки зрения собеседника, это Александр сослался на Бориса Марковича Островского, одного из учеников Щедровицкого-старшего, от которого я тоже много почерпнул. Чтобы вести такую коммуникацию, надо говорить про дело, оставляя все остальное - за рамками.
И вот такому подходу к коммуникации в России - всего 30 лет, до этого было эмоциональное присоединение. Впрочем, я считаю, что с этим надо детально разбираться: что было у нас и как это изменялось со временем, что было на западе и как оно изменялось там, когда там возникла коммуникация равных позиций и кого считали равными. Потому что есть известный эффект, когда победившая в борьбе сторона ретроспективно переписывает историю, объявляя себя продолжателем традиции...
Итого, классификация:
* Средства понятны и доступны - задачи
* Средства неясны, но их можно найти - Цель
* Средства никогда не созданы - Проблема.
Отмечу, что это близко к классификации Дэвида Майстера на три типа проектов: Мозги, Седина и Процедуры.
И есть вопрос владения результатом. Бизнес поставил задачу: инженер, сделай эту метрику не 10, а 5. Инженер думает, придумал, на коленках в выходные - сделал технологию, которая снимает проблему. Вопрос - кому принадлежат права на это средство? Менеджер "сделал у меня", инженер "в воскресенье на кухне". Эта бизнес-проблема, она не решенная. И пока выигрывают инженеры, которые уносят технологии - если не была явно поставлена цель.
Карта фаз развития технологии
* Проектирование: технологии, рынок, орг.управление
* Разработка и тестирование
* Производство и эксплуатация
Каждая фаза - своя субкультура, принципиально отличающаяся от других.
* Заказная разработка, культура операционной эффективности: инженеру ставят задачи. Фокус - орг.управления + производств и эксплуатация. За последние 2 года в России взорвалась - есть большой госзаказ. Как правило, коммерческие средства с гарантией результата. Создаются орг.формы и партнерства с заказчиком и так далее. Главный вызов - сформировать слой среднего управления, умеющий вести орг.проектирование
* Продуктовая компания: разработка и тестирование, fail fast, гибкая технология управления
* Инновационно-технологическая компания, инженерная культура. Разработка новых технологий и средств, которые обеспечат новизну. Главный вызов - связь технолога и бизнеса, это сложно, потому что говорят про разное.
* Культура операционной эффективности - план-факт, все через процессы и kpi, приходят за стабильностью.
* Продуктовая культура - fail fast fail cheap. Ключ - нетворкинг и сообщества. Потребление, а не деньги. Главное, чтобы заработало. Приходят за востребованностью.
* Инженерная культура. Придумать, чтоб показать работоспособность, дальше не важно. Любопытство. Бизнес - обеспечивающая структура для исследований.
Александр говорит, что в компании объединяются только попарно: продукты + операционная эффективность или инженерная культура + продукты. Но я хочу сказать, что изменения текущего момента состоят в том, что надо рассматривать целостную деятельность из всех трех фаз, пусть не в одной компании, а в кооперации. Это раньше, когда развитие технологий было медленным, можно было рассматривать отдельно. У меня есть есть статья https://mtsepkov.org/De3-ground, где я формулирую такую схему деятельности ценностно.
И Александр в заключении сказал, что для целостного представления необходимо коммуницировать, несмотря на разницу культур. Коммуникация есть преодоление отвращения к точки зрения собеседника, это Александр сослался на Бориса Марковича Островского, одного из учеников Щедровицкого-старшего, от которого я тоже много почерпнул. Чтобы вести такую коммуникацию, надо говорить про дело, оставляя все остальное - за рамками.
И вот такому подходу к коммуникации в России - всего 30 лет, до этого было эмоциональное присоединение. Впрочем, я считаю, что с этим надо детально разбираться: что было у нас и как это изменялось со временем, что было на западе и как оно изменялось там, когда там возникла коммуникация равных позиций и кого считали равными. Потому что есть известный эффект, когда победившая в борьбе сторона ретроспективно переписывает историю, объявляя себя продолжателем традиции...
👍2
Книги по различию Запада и России:
* Лотман. Беседы о русской культуре
* Бердяев. Истоки и смысл русского коммунизма.
* Александр Зиновьев. Русская трагедия
* Аузан Культурные коды экономики
* Эрик Мейер. Карта культурных различий
А начать можно с лекций Аузана, которые гуглятся по словам "Аузан Арзамас".
Книги про современную западную культуру.
* The beginers guide to OKR
* Никаких правил - про Netflix
* Ким Скотт. Радикальная прямота
* Стивен Деннинг. Эпоха Agile.
* Лотман. Беседы о русской культуре
* Бердяев. Истоки и смысл русского коммунизма.
* Александр Зиновьев. Русская трагедия
* Аузан Культурные коды экономики
* Эрик Мейер. Карта культурных различий
А начать можно с лекций Аузана, которые гуглятся по словам "Аузан Арзамас".
Книги про современную западную культуру.
* The beginers guide to OKR
* Никаких правил - про Netflix
* Ким Скотт. Радикальная прямота
* Стивен Деннинг. Эпоха Agile.
👍6
#Teamlead Юлия Лукина. Как окунуться в новую предметную область и не утонуть. Юлия сменила много предметок: телеком (управление железом, портал для сотрудников), DWH+BI, Порталы госуслуг, Атомные станции, e-com (озон). Погружение в новую область кому-то тяжело, кто-то обжигаешься, кому-то больно. И она рассказывала свои техники погружения, чтобы не было страхов. Приемы - простые, превратились в чек-лист. Это про предметную область, смену стека она полагает отдельной, хотя лично я не очень вижу разницы на уровне чек-листа. Дальше по пунктам.
1. Глоссарий. В новой сфере он свой, и там куча сокращений, сленга. Который ясен тем, кто работает внутри. Глоссарий часто собран в головах. И тогда надо сделать самому. И удобно сделать общедоступным. И не надо накапливать, заносить быстро, каждый день. При этом полезно не только понимать термины, но и самому начинать употреблять.
2. Волна непонятной информации. Визуализировать и собирать по крупицам. Как собирать паззл или вести расследование. Картинку сразу увидеть хочется, но ты не увидишь. Только вот в паззле есть целевой образ, а у нас - нет. Нужно место, и тоже надо обновлять регулярно, пару раз в неделю. И видеть прогресс. Стикеры в миро как процесс или сущности и связи или что-то еще. Схема процессов, но это - на любителя.
3. Множество новых контактов. В новом отделе 10-15 человек в принципе запомнишь через 2 недели. Но есть большие проекты, где в чате 1000 человек. Матрица взаимодействия, Миро или что-то еще. Кто за что отвечает.
Где брать на все это время? Реально достаточно 15 минут в день, как и с контактами. И надо каждый день. С визуализацией пореже, но тоже не накапливать.
4. Обязательно задавайте вопросы. Да, даже глупые, и если кажется, что это элементарно.
Исnория - термин Mesh. Все употребяют, а она не знает. Но не спрашивает, спрашивает у коллег, а те - не знают. И полтора часа потерянного времени, потому что спросить надо было того, кто сказал. При чем выяснилось, что это - сленг, включить "как на проде"
Спрашивать надо своевременно. Рассказывают про червяка, во-время не спрашивают, надеется понять из контекста, не получается. Но когда полчаса говорили, сложно. А это на отгрузке зона, куда паллеты ставят. Или вопрос про имя через два дня знакомства.
Будь тем, кто переспросит и уточнит. Особенно на фразу "не буду останавливаться, всем понятно". Не понятно - спросите. Может потом, в личке. Но лучше - сразу, не только вам не понятно.
Не бойся спрашивать у экспертов. Если у эксперта спрашиваешь "расскажи мне все" - он не знает, что ответить, он три года может рассказывать. Стоит в вопросе раскручивать от задаче, а потом идти вширь, если уместно. Не "какие бывают топологии сети", а "если роутер вышел из строя - как узнать топологии, в которых он включен"
5. Фокус на здесь и сейчас - погружение через текущие задачи. Отбрасывать все лишнее. Беречь силы. Не распылять внимание. Иначе вас может накрыть, узнать все - не реально.
6. Практика. Наблюдай, как реально работает предметная область, если есть возможность. Если есть порталы, приложения, сайты - попробуй работать как пользователь. Посещая объекты, для которых работаешь - если есть возможность. В озоне она реально работала на складе, 12 часов. А на немецкой атомной станции, для которых работала, было без шансов. Погружение позволяет почувствовать требуемую эргономику.
7. Понять и простить. В первую очередь себя. Если мы принимаем решение о смене предметной области, надо заходить с пониманием на входе, что ты не понимаешь ничего. И не постигнешь все за неделю-две. Будут моменты, когда будет жестко накрывать, будете сидеть с кипящей головой. Обращаемся за помощью к себе самим, сила в нас. Тут помогает книга Е.Резанова "Это норм". А еще есть эксперты. Она ищет жертву среди экспертов, и просит рассказать, как он начинал, погружался. И в 90% случаев они отвечают "я и сейчас не понимаю", а другие "первые полгода я не понимал". И тут становится легче. И можно явно попросить помощи, не обязательно сделать задачу за вас, а направить на правильный путь.
1. Глоссарий. В новой сфере он свой, и там куча сокращений, сленга. Который ясен тем, кто работает внутри. Глоссарий часто собран в головах. И тогда надо сделать самому. И удобно сделать общедоступным. И не надо накапливать, заносить быстро, каждый день. При этом полезно не только понимать термины, но и самому начинать употреблять.
2. Волна непонятной информации. Визуализировать и собирать по крупицам. Как собирать паззл или вести расследование. Картинку сразу увидеть хочется, но ты не увидишь. Только вот в паззле есть целевой образ, а у нас - нет. Нужно место, и тоже надо обновлять регулярно, пару раз в неделю. И видеть прогресс. Стикеры в миро как процесс или сущности и связи или что-то еще. Схема процессов, но это - на любителя.
3. Множество новых контактов. В новом отделе 10-15 человек в принципе запомнишь через 2 недели. Но есть большие проекты, где в чате 1000 человек. Матрица взаимодействия, Миро или что-то еще. Кто за что отвечает.
Где брать на все это время? Реально достаточно 15 минут в день, как и с контактами. И надо каждый день. С визуализацией пореже, но тоже не накапливать.
4. Обязательно задавайте вопросы. Да, даже глупые, и если кажется, что это элементарно.
Исnория - термин Mesh. Все употребяют, а она не знает. Но не спрашивает, спрашивает у коллег, а те - не знают. И полтора часа потерянного времени, потому что спросить надо было того, кто сказал. При чем выяснилось, что это - сленг, включить "как на проде"
Спрашивать надо своевременно. Рассказывают про червяка, во-время не спрашивают, надеется понять из контекста, не получается. Но когда полчаса говорили, сложно. А это на отгрузке зона, куда паллеты ставят. Или вопрос про имя через два дня знакомства.
Будь тем, кто переспросит и уточнит. Особенно на фразу "не буду останавливаться, всем понятно". Не понятно - спросите. Может потом, в личке. Но лучше - сразу, не только вам не понятно.
Не бойся спрашивать у экспертов. Если у эксперта спрашиваешь "расскажи мне все" - он не знает, что ответить, он три года может рассказывать. Стоит в вопросе раскручивать от задаче, а потом идти вширь, если уместно. Не "какие бывают топологии сети", а "если роутер вышел из строя - как узнать топологии, в которых он включен"
5. Фокус на здесь и сейчас - погружение через текущие задачи. Отбрасывать все лишнее. Беречь силы. Не распылять внимание. Иначе вас может накрыть, узнать все - не реально.
6. Практика. Наблюдай, как реально работает предметная область, если есть возможность. Если есть порталы, приложения, сайты - попробуй работать как пользователь. Посещая объекты, для которых работаешь - если есть возможность. В озоне она реально работала на складе, 12 часов. А на немецкой атомной станции, для которых работала, было без шансов. Погружение позволяет почувствовать требуемую эргономику.
7. Понять и простить. В первую очередь себя. Если мы принимаем решение о смене предметной области, надо заходить с пониманием на входе, что ты не понимаешь ничего. И не постигнешь все за неделю-две. Будут моменты, когда будет жестко накрывать, будете сидеть с кипящей головой. Обращаемся за помощью к себе самим, сила в нас. Тут помогает книга Е.Резанова "Это норм". А еще есть эксперты. Она ищет жертву среди экспертов, и просит рассказать, как он начинал, погружался. И в 90% случаев они отвечают "я и сейчас не понимаю", а другие "первые полгода я не понимал". И тут становится легче. И можно явно попросить помощи, не обязательно сделать задачу за вас, а направить на правильный путь.
🔥5👍1
8. Погружение через обучение других. Когда начали понимать - помогайте, и при этом сам разбираешься.
И в конце это сведено в чек-лист: глоссарий, визуализация, карта взаимодействий, фокус на задачах, изучай в реальности что делаешь, не пытайся объять необъятное, изучай в реальности что делаешь, не пытайся объять необъятное, фокусируйся на своих сильных сторонах, обращайся к опыту и помощи экспертов, погружайся через помощь менее опытным.
И есть смысл многое вынести в онбординг в команду. Например, глоссарий.
На этом все. А я в заключении хочу резюмировать и дополнить, что по сути есть две стороны. Во-первых, надо выкинуть свои комплексы. Синдром самозванца, стеснительность некомпетентности и так далее. И доклад был во многом об этом. А во-вторых, надо прокачивать концептуальное мышление. Не собирать картинку из кусочков, как делают сенсорики, а создавать концепции, как делают интуиты (сенсорик-интуит - это одна из дихотомий MBTI). Практически это второй пункт, визуализация, просто интуиты быстро выходят на схему верхнего уровня, применяя что-то известное из своей модели мира, которую потом доопределяют, они не работают с чистого листа.
И в конце это сведено в чек-лист: глоссарий, визуализация, карта взаимодействий, фокус на задачах, изучай в реальности что делаешь, не пытайся объять необъятное, изучай в реальности что делаешь, не пытайся объять необъятное, фокусируйся на своих сильных сторонах, обращайся к опыту и помощи экспертов, погружайся через помощь менее опытным.
И есть смысл многое вынести в онбординг в команду. Например, глоссарий.
На этом все. А я в заключении хочу резюмировать и дополнить, что по сути есть две стороны. Во-первых, надо выкинуть свои комплексы. Синдром самозванца, стеснительность некомпетентности и так далее. И доклад был во многом об этом. А во-вторых, надо прокачивать концептуальное мышление. Не собирать картинку из кусочков, как делают сенсорики, а создавать концепции, как делают интуиты (сенсорик-интуит - это одна из дихотомий MBTI). Практически это второй пункт, визуализация, просто интуиты быстро выходят на схему верхнего уровня, применяя что-то известное из своей модели мира, которую потом доопределяют, они не работают с чистого листа.
🔥3
#Teamlead Антон Огородников из Mаgnit Tech. Инженерная культура. Что это и почему она важна? У бизнеса компании есть продуктовая культура со своими принципами. Они были на слайде, но я не успел записать. А у ИТ - инженерная культура, обеспечивающая поддержку бизнеса. Принципы формулировали на уровне руководства ИТ.
1. Здоровье сервиса - нулевой приоритет. Если у тебя проблемы с продом - ты чинишь. А не сидишь на встрече с руководителем. Ты покрываешь сервис метриками, чтобы следить за его здоровьем, не катишь без метрик, не переключаешься на другие фичи.
2. Инцидент - незапланированная инвестиция в стабильность сервиса. Инцидент - нормально. Но если он произошел - сделай вклад в стабильность. Упала база, сервис - не рестарт, а постмортен и разбор причин с их устранением. Ответственность - на команде, доносим до команды целиком.
3. Platform by design. Если есть задача, то (а) поищи этот велосипед в других командах и (б) при разработке подумай об использовании в других командах, особенно если в ходе поиска обнаружил интерес. Сделали, когда в появилось два сервиса авторизации. Обобщение - в ответ на интерес другой команды.
4. Принцип горящего дома. Ситуации - разные, отпуска, болезни. Если есть проблема, то как ее изолировать от других. Ну и потушить. Поднимаем то, что упало, и потом - ищем причины. Кейс - большая кастомизация поверх базового механизма сломалась при обновлении. Сначала - делаем костыль, чтобы поднялось. Потом - хорошее решение и профилактика будущего.
5. Tech follows Business. ИТ поддерживают. Были прецеденты, когда расходились. В частности: мы как ИТ должны уметь давать оценки. Как можем по текущему описанию. Некоторые инженеры - не про бизнес, они про фреймворки и технологии, и таких не берем.
6. We build it - we run it. Команда отвечает за фичу целиком, без функционального деления, от начала и до конца. Люди приходят из разных компаний, у многих сопровождение отдельно, а у них - нет. Команда отвечает за фичи на проде, за данные, которые через себя пропускает, и метрики - чтобы следить за этим.
7. Explicit is Better Then Implicit. Явное лучше неявного. Все, что делаешь должно быть визуализировано и оставлять артефакты. Камеры на встречах, это упрощает коммуникацию и упрощает встречи, невербальная коммуникация. Например Feature release freeze в конце года: мы не катим фичи.
8. Принцип швейцарского ножа. В нем много элементов. Инженер-программист должен стремитсья к тому, чтобы быть универсальным, хотя основное время пользуется 1-2 инструментами. Можно заменить того, кто заболел, не ждете его.
Выводы
* Культура может являться фундаментом
* Нет плохой и хорошей культуры, есть текущая ситуация
* Заниматься формированием культуры можно начинать, когда становится много
* Культура не высечена в камне, она живет.
Распространение. Сначала продать принципы руководству. А затем закидывать в инженеров точечно. А потом как достигается принятие нужной массой экспертов - распространяют на всех.
1. Здоровье сервиса - нулевой приоритет. Если у тебя проблемы с продом - ты чинишь. А не сидишь на встрече с руководителем. Ты покрываешь сервис метриками, чтобы следить за его здоровьем, не катишь без метрик, не переключаешься на другие фичи.
2. Инцидент - незапланированная инвестиция в стабильность сервиса. Инцидент - нормально. Но если он произошел - сделай вклад в стабильность. Упала база, сервис - не рестарт, а постмортен и разбор причин с их устранением. Ответственность - на команде, доносим до команды целиком.
3. Platform by design. Если есть задача, то (а) поищи этот велосипед в других командах и (б) при разработке подумай об использовании в других командах, особенно если в ходе поиска обнаружил интерес. Сделали, когда в появилось два сервиса авторизации. Обобщение - в ответ на интерес другой команды.
4. Принцип горящего дома. Ситуации - разные, отпуска, болезни. Если есть проблема, то как ее изолировать от других. Ну и потушить. Поднимаем то, что упало, и потом - ищем причины. Кейс - большая кастомизация поверх базового механизма сломалась при обновлении. Сначала - делаем костыль, чтобы поднялось. Потом - хорошее решение и профилактика будущего.
5. Tech follows Business. ИТ поддерживают. Были прецеденты, когда расходились. В частности: мы как ИТ должны уметь давать оценки. Как можем по текущему описанию. Некоторые инженеры - не про бизнес, они про фреймворки и технологии, и таких не берем.
6. We build it - we run it. Команда отвечает за фичу целиком, без функционального деления, от начала и до конца. Люди приходят из разных компаний, у многих сопровождение отдельно, а у них - нет. Команда отвечает за фичи на проде, за данные, которые через себя пропускает, и метрики - чтобы следить за этим.
7. Explicit is Better Then Implicit. Явное лучше неявного. Все, что делаешь должно быть визуализировано и оставлять артефакты. Камеры на встречах, это упрощает коммуникацию и упрощает встречи, невербальная коммуникация. Например Feature release freeze в конце года: мы не катим фичи.
8. Принцип швейцарского ножа. В нем много элементов. Инженер-программист должен стремитсья к тому, чтобы быть универсальным, хотя основное время пользуется 1-2 инструментами. Можно заменить того, кто заболел, не ждете его.
Выводы
* Культура может являться фундаментом
* Нет плохой и хорошей культуры, есть текущая ситуация
* Заниматься формированием культуры можно начинать, когда становится много
* Культура не высечена в камне, она живет.
Распространение. Сначала продать принципы руководству. А затем закидывать в инженеров точечно. А потом как достигается принятие нужной массой экспертов - распространяют на всех.
👍5🔥2