analyst_exe | инженерное мышление в IT
508 subscribers
343 photos
32 videos
3 files
283 links
Помогаю аналитикам понять, а не просто делать
Сайт — https://analystexe.ru
Чат — @analyst_balabol
Админ, душнила и такой же как ты — @darkwing_duck101
Download Telegram
Соц опроооос

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

И вывалить вам все фишечки "Никита + компуктер"

Пальчик вверх, если надо

@analyst_exe
👍35
Честно украденный мем, не опять, а снова

@analyst_exe
😁142
Короче, я собрал себе угол интернета.

analystexe.ru

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

Что там сейчас:

Методичка. Бета, прям совсем бета. Учебник аналитика, который пишу по кусочкам — то, что обычно объясняю на встречах по сто раз. Будет расти.

О себе. Кто я, где работал, чем занимаюсь. Чтоб не пересказывать каждый раз.

Статьи. Сюда дублирую посты из канала. Зачем — ну вы сами видели опрос: у 17% телега вообще не открылась, а большинство уже сидит через впн. Если её однажды прикроют, вы знаете, где меня искать. Подстраховка такая.

В планах — тренажёры (хочу, чтоб можно было реально порешать, а не только почитать) и раздел «полезное». Всё, что выкладываю, постепенно переедет туда тоже.

Накодил всё в паре с claude, на любимом янтарном терминале. Да, характер такий, мне нравится 🫡

Залетайте, потыкайте → analystexe.ru

Что добавить или где косяк — пишите в комменты, чиню оперативно.

@analyst_exe
🔥106🥰1
К Claude у меня подключены Figma, таск-трекер, база знаний, аналитика канала. Я не написал ни строчки кода для интеграции — просто поставил четыре сервера, и ассистент сам разобрался, что умеет каждый.

Сижу, смотрю на это и думаю: а почему оно вообще работает? Раньше так было нельзя.

Чтобы прикрутить чужой сервис к своей программе, ты открываешь доку API и руками пишешь клиент. Вот эндпоинт, вот поля, вот так авторизуйся. Под каждый сервис — заново. Сто программ, сто сервисов — и кто-то живой клеит десять тысяч интеграций.

Вот это и ломает MCP (Model Context Protocol, придумали в Anthropic в конце 2024).

Что это по-простому

Общий разъём между ИИ-приложением и сервисами. Как USB-C: один протокол, втыкаешь что угодно.

Участников трое. Хост — само приложение (Claude, IDE, мой движок канала). Клиент сидит внутри хоста, связь один-на-один с сервером. Сервер — обёртка над сервисом, та самая Figma или трекер. Подробности на схеме.

Что под капотом

Да почти ничего нового. Транспорт: stdio (сервер — отдельная программа рядом, общаются через ввод-вывод) или HTTP, если сервер удалённый. Сообщения — по JSON-RPC. По проводу тот же текст, что у REST-сервиса, только устроен иначе: не «дёрни ресурс по адресу», а «вызови вот этот метод» (RPC, удалённый вызов процедуры). Мелочь, но наш разрабский ревьюер придерётся — говорю как есть.

Сервер отдаёт три типа штук — смотря кто командует вызовом: tools (действия, решает модель), resources (данные на чтение, даёт приложение — у меня та же аналитика канала), prompts (заготовки, зовёт человек). Дальше по делу — только tools.

А теперь самое сочное

Когда клиент цепляется к серверу, он первым делом спрашивает: «ты что умеешь?» И сервер отвечает списком инструментов — с описаниями на человеческом языке. Не в доке для разработчика. Сам, в рантайме. И читает их не человек, а модель.

Вот тут весь фокус. Обычный API писали под код. Код дубовый и предсказуемый: ему один раз зашили доку — и он знает наперёд, какой эндпоинт дёрнуть и в каком порядке. А MCP пишут под модель. А она тупит и решает на ходу. Поэтому ей надо, чтобы сервер сам по-человечески рассказал, что умеет — иначе не сообразит, какой инструмент к месту.

(на картинках это и есть «детерминированный» и «недетерминированный потребитель» — не пугайтесь слов: код знает заранее, модель прикидывает по ситуации)

А теперь посчитаем, в чём кайф. Сто программ, сто сервисов. Раньше — десять тысяч интеграций руками. С MCP — двести: написал сервер раз — поймёт любой клиент, написал клиент — подхватит любой сервер. (В фирме клиентов два-три, но суть та же: складываем, а не умножаем.) Руками под каждую пару клеить не надо.

Но не бесплатно

За то, что потребитель «думает сам», ты платишь. Описания всех инструментов висят в контексте модели: навешал тридцать тулов — половина окна забита, а ты ещё ничего не сделал. Плюс модель может выбрать не тот инструмент или дёрнуть лишнее — а если в данные с сервера подсунули вредный текст, она послушает его, а не тебя (привет, prompt injection). Поэтому на важных действиях — подтверждение, урезанные права, человек в цепочке. И ещё авторизация — отдельная морока: локально серверу всё равно, он под боком, а по HTTP будь добр нормальный OAuth — он же реальные системы дёргать будет.

Итого

MCP — никакой не новый API. Это старый API, которому переписали инструкцию: теперь её читает не кодер, а модель — сама смотрит, что умеет сервер, и сама решает, что дёрнуть.

Провод тот же. Поменялся только тот, кто его читает.

И вот что меня цепляет. Десять лет интеграционные аналитики писали ТЗ под каждый сервис руками — «дёрни GET /orders, поля такие-то». Вот эта часть обнуляется. Не вся: описания инструментов и guardrails (подтверждения, права) всё равно кто-то пишет — мы же. Но «клеить руками под каждую пару» уходит. Вопрос не «учить или нет», а «успеть, пока MCP не стал базой как SQL». Хотя, может, я разогнался — спорьте.

А вы бы что подключили к ассистенту первым? Накидайте, к чему руки чешутся прикрутить.

@analyst_exe | https://analystexe.ru/articles/mcp-vs-api
👍2🔥2
🔥 ВЕБИНАР STORM MCP+AI
Сегодня. 17:00 МСК

Вас уже почти 2000, поэтому регистрацию закрываем через 15-20 заявок, чтобы не было проблем с трансляцией.

В прямом эфире соберём BPMN-диаграмму за минуты - через MCP+AI прямо в Stormbpmn. ТЗ возьмём прямо у вас: напишите идею в чат вебинара - её и будем моделировать.

Никаких заготовок и «отрепетированных кейсов».
Результат увидите сами.

Боитесь, что ничего не поймёте, если в AI "не шарите"? Зря.

Быстро погрузим в базу:
что такое LLM, как она вообще думает, при чём тут MCP и почему это меняет работу аналитика. Доступно объясним и тем, кто уже "игрался" с ChatGPT, и тем, кто впервые услышит слово промпт.

После вебинара спорить будете не «AI или классика», а «какую часть работы доверить ИИ, а что оставить себе». Это другой разговор - и мы хотим, чтобы вы вели его одними из первых.

👉 Зарегистрироваться

До встречи в эфире 👋
2🤔2
Оставили отзыв - я публикую!

Приходите @darkwing_duck101

@analyst_exe
6🔥2
Помните, я грозился сделать тренажёры и довести методичку до ума? Вот, отчитываюсь. Пилю это по вечерам и выходным, под пивко — так что не молниеносно, но дело идёт.

🔸 Методичка больше не про «что такое API». Почти в каждую статью добавил блок «как это спрашивают на собесе»: реальные вопросы и то, что в ответе отличает джуна от мидла. И там, где раньше было только «как сделать красиво», теперь написано, чем за это платишь — у каждого решения есть цена, и я перестал про неё молчать. По такому реально готовиться к собесу, а не наизусть долбить определения.

🔸 Новая статья — аналитический дата-поток. Давно мозолила дыра: откуда вообще на дашборде берутся цифры. Как клик доезжает до отчёта, почему нельзя гонять аналитику прямо на боевой базе, чем ETL отличается от ELT, почему продуктовая выручка и финансовая вечно не бьются друг с другом. Все этим пользуются каждый день, а объяснить целиком — попробуй.

🔸 И тренажёры — те самые, обещанные. Даже говорить ниче не буду. Идите и смотрите.

Чтоб не на словах: прогнал всё через злых критиков — преподов и практиков. Где наврал или недосказал — переделал. Три статьи вылизал до эталона, остальные (а их под полсотни) тоже крепкие — просто без финального блеска.

Всё открыто и бесплатно:
📚 методичка → analystexe.ru/materials
🎮 тренажёры → analystexe.ru/games

Залетайте, ломайте. Где косяк или какой темы не хватает — пишите в комменты, чиню и дописываю оперативно.

@analyst_exe
10🔥6🤩1
Среда, my dudes
Работаем в поте лица!

🔥 - работаю сэр да сэр
😢 - хочется спааать

@analyst_exe
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😢2
JSON никто не придумывал. Его, по словам автора, просто нашли — лежал внутри JavaScript и ждал.

Звучит как понты, но это буквально так. Дуглас Крокфорд в районе 2001-го (компания State Software) не сочинял новый формат. Он взял синтаксис, которым в JS уже описывали объект — фигурные скобки, ключ-значение — и сказал: вот этим и будем обмениваться данными. Зарегистрировал json.org, описал на одной страничке. Всё.

А теперь зачем это вообще понадобилось.

Тогда правил XML

Начало нулевых. Данные между браузером и сервером гоняли в XML. Штука мощная, спору нет: схемы, валидация, namespace'ы. Но для «отдай мне юзера с именем и почтой» это как забивать гвоздь отбойным молотком.

Открывающий тег, закрывающий тег — по два на каждое поле. Половина байтов это </вот\_это\_вот>. Чтобы прочитать — тащи парсер, ковыряй DOM, доставай значения по узлам, не забудь про схему и namespace. Возни много, данных мало. Перебор для простого обмена.

Перелом — AJAX

2005-й, Джесси Джеймс Гарретт вводит слово AJAX. Идея: браузер дёргает сервер в фоне, без перезагрузки страницы. Тогда это была магия — карты, которые тянутся мышкой, подсказки в поиске на лету.

И вот тут XML посыпался. Браузер на JavaScript, сервер ему шлёт XML — а чтобы разобрать, опять DOM, опять руками.

А JSON? Он же синтаксис самого JavaScript. Пришёл ответ — и на выходе сразу готовый объект, разбирать нечего. Родное. (Поначалу его вообще скармливали eval() — да, исполняли как код, дыра жуткая; потом одумались и сделали безопасный JSON.parse().)

С этого момента всё.

Чем взял

Горстка типов, и никаких церемоний. Объект, массив, строка, число, true/false/null. Шесть штук. Человек читает глазами без тулзы, машина парсит влёт. Учить нечего — открыл и понял.

Дальше его просто причесали комитеты: RFC 4627 → ECMA-404 → RFC 8259 / STD 90 (2017, финал). Скучная часть, но без неё формат не стал бы стандартом.

Кстати, забавное. Крокфорд впихнул в лицензию пункт: «The Software shall be used for Good, not Evil» — софт использовать во благо, не во зло. И понеслось: юристы крупных контор хватались за голову, а одна на полном серьёзе попросила письменное разрешение «использовать во зло». Он разрешил.

Но не всё гладко

JSON выехал на минимализме — и тем же местом огребает. Чего в нём нет:

— Комментарии. Никаких. Хочешь пометку в конфиге — а некуда.
— Даты и бинарь. Нет таких типов. Дата едет строкой, и каждый парсит как хочет.
— И главная подстава — числа. Сам стандарт точность не ограничивает, но почти все реализации (привет, JavaScript) суют число в float64. И целый id больше 2^53 (\~9 квадриллионов — туда дорастают банковские счётчики, телеком, 64-битные Snowflake ID) теряет точность молча. Послал 1234567890123456789 — на той стороне прилетело что-то рядом, и никто не ругнулся. Кто-то умеет тянуть аккуратно (BigInt в JS, UseNumber в Go), но самый надёжный межъязыковой костыль — гнать большой id строкой, в кавычках. Кто не знал — ловил баг, который «на моих данных не воспроизводится».

Схема? JSON Schema — вообще сторонняя спека, приехала позже и сбоку, в стандарт не входит. Запятую в конце списка (trailing comma) тоже нельзя — прод падал и не на таком.

Итого

JSON победил XML не потому, что мощнее. Наоборот — он слабее. XML мог всё, но за всё драл. JSON умел мало, зато не выносил мозг.

Короче, выехал не самый мощный, а самый ненапряжный. Как-то так))

Мне тут понравилось копать-ковырять в историю инструментов. Ну, чтобы получше понимать, почему так. Ну кто вам об этом расскажет, если не я?

❤️ - если продолжать исторические справки

@analyst_exe
11
Формат, на котором сейчас написан почти весь интернет — порядка 98% страниц — набросали ручкой на салфетке в придорожной закусочной. За ужином. И в ту же ночь запустили.

Сентябрь 1992-го, Нью-Джерси. Кен Томпсон и Роб Пайк (те самые, из Bell Labs, делали Unix и Plan 9) сидят в дайнере. Томпсон берёт подложку из-под тарелки и рисует схему кодирования. Это UTF-8. Ночью дописали в коде — и оно поехало. Салфетку, конечно, никто не догадался сохранить — артефакт на миллиард уехал в мусорку с тарелками.

А теперь зачем это понадобилось.

Что было до

Был ASCII. 128 символов — латиница, цифры, знаки препинания и управляющие (перевод строки, табуляция, тот самый нулевой байт). Влезает в 7 бит, всем хорошо. Ровно до тех пор, пока текст на английском.

Кириллица, японский, греческий — для них в ASCII пусто. Стали лепить свои 8-битные кодировки: KOI-8 и Windows-1251 под русский, Latin-1 под Европу, Shift-JIS под японский. Десятки таблиц. И во всех один и тот же байт значит разную букву.

Открываешь письмо — а там «Ïðèâåò». Это не сломанный файл. Это твой «Привет», записанный в Windows-1251 и прочитанный как западный Latin-1: байты те же, таблица другая. Кракозябры — отсюда. Все мы это ловили: то в письме, то в кривой выгрузке из старой базы.

Попробовали починить — придумали Unicode. Первая версия, UCS-2: дай каждому символу ровно 16 бит (два байта), и хватит на всех. Звучит логично. По факту — три проблемы, одна другой больнее. ASCII перестал работать (латинская буква теперь два байта, старый софт давится). Текст распух вдвое. И 65 536 ячеек кончились — одни китайцы с японцами выбрали их под завязку.

Тупик. Зоопарк кодировок есть, замены нет.

Что придумали на салфетке

UTF-8 зашёл иначе. Вопрос не «сколько бит на символ». Вопрос — как ужиться с тем, что уже написано. Отсюда переменная длина: 1–4 байта на символ.

И вот тут кайф:

🔸 Обратная совместимость. Все 128 символов ASCII кодируются одним байтом, как раньше — байт в байт. Любой ASCII-файл за прошлые 30 лет уже валидный UTF-8. Старый софт ничего не заметил.

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

🔸 Сортировка по байтам = правильный алфавитный порядок. Без приседаний.

🔸 Нет нулевых байтов внутри символов. В C строка кончается на нулевом байте, и весь сишный мир на этом стоит. UTF-8 нулей внутрь не суёт — строки не рвутся.

Сложи всё вместе — он не ломает старое. Просто ложится сверху. Поэтому и расползся: переходить не больно.

Но не бесплатно

Только не подумай, что халява. За переменную длину тоже платишь. «N-й символ» больше не равен «N-й байт» — прыгнуть к 50-му за раз нельзя, идёшь с начала и считаешь.

Дальше — вес. Латиница 1 байт, кириллица 2, иероглифы 3. За совместимость с ASCII по байтам платят все, кто пишет не латиницей.

И исторический грабли — overlong-кодирование: один символ можно было записать длиннее, чем нужно. Казалось мелочью — пока через это не полезли мимо проверок безопасности: закодируешь / хитро, фильтр не увидел, а система прочитала. Позже залатали, объявив такие формы невалидными.

Ну и 16-битная идея не умерла: её подлатали суррогатными парами и назвали UTF-16 — на нём до сих пор сидят Windows и Java. Но это уже костыль поверх, а не победа.

Зачем это аналитику

Проблему, об которую индустрия билась лет двадцать, два инженера закрыли за ужином. UCS-2 был чище и правильнее — а выиграл формат, который ужился со всем старым барахлом.

И вы ровно это решаете каждый раз, когда садитесь за новую версию API или схему БД: запилить красиво с нуля и сломать совместимость — или натянуть новое поверх старья. UTF-8 намекает, что второе чаще выживает.

А вы какие кодировки в дикой природе ещё застали? Кто чинил «Ïðèâåò» в выгрузке руками — отзовитесь 🙂

@analyst_exe
4🔥4
🫡 Понедельник день тяжелый

Но своровать мем из рабочего чата - лучше чашечки кофя

@analyst_exe
😁3
Нажали «оплатить». Крутится колёсико. Связь моргнула, приложение молчит. И палец сам тянется нажать ещё раз.

Вопрос на сотку: спишут один раз или два?

Зависит от одного занудного слова. Идемпотентность. На деньгах без неё лучше не лезть. Слово пугает, по факту фигня: повторил операцию — и ничего не поменялось. Дёрнул перевод один раз, дёрнул пять раз подряд тем же запросом — деньги уйдут ровно один раз.

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

Так вот, чинят это ключом. Клиент к каждой операции цепляет уникальный код — обычно UUID, длинную случайную строку. Кладёт его в HTTP-заголовок Idempotency-Key. Сервер по нему понимает, видел он эту операцию или нет. Впервые — выполняет и кладёт рядом с ключом результат: тело ответа и статус. Тот же ключ снова — ничего не делает, отдаёт сохранённое.

И вот тут все думают — всё, готово. Ага, щас.

Представьте: два запроса с одним ключом прилетели одновременно. Двойной тап. Или клиент сам ретрайнул по таймауту, пока первый ещё в полёте. Оба лезут в базу, оба видят «ключа нет», оба идут списывать. И вот оно, двойное списание (то самое, из-за которого потом не спишь). А теперь умножьте на чёрную пятницу и тысячи человек. К этому вернёмся.

Спасает атомарная вставка. По-простому: ключ кладут в базу так, что записать его сможет только один запрос из двух. Делает это уникальный индекс — база сама не даёт положить два одинаковых ключа. Кто записал первым, тот и выполняет. Второй обламывается и сразу получает 409 (код ответа «такое уже в обработке»). Дальше повторит тем же ключом и заберёт результат. Или снова словит 409, если первый ещё считается — тогда ждёт и повторяет (повтор — на клиенте). Без этой защиты от гонки идемпотентность не работает, хоть что делай.

Ну и дальше пошли нюансы. На них ТЗ и горят.

Ключ генерит клиент и привязывает к операции, а не к кнопке. Один перевод — один ключ. Шлёте другу второй перевод на ту же сотку — нужен новый ключ, иначе система решит «дубль» и второй платёж тихо проглотит. И ключ уникален в рамках клиента: ваш ключ и чужой с тем же значением — разные операции.

Тот же ключ, но тело другое (была сотка — стала тысяча). Это не повтор, это косяк клиента. Сервер отвечает ошибкой, а не молча отдаёт старый результат.

Ключ живёт не вечно. У Stripe, например, сутки. Срок жизни надо проставить в спеке, иначе таблица ключей пухнет, а клиент через месяц ретрайнет «старую» операцию и получит сюрприз.

И почему ключ нужен именно на POST. Смотрите: повторный GET просто ещё раз покажет баланс, повторный DELETE снесёт уже снесённое — этим ретрай не страшен, они идемпотентны сами по себе. А POST каждый раз создаёт новое. Вот ему и нужна страховка.

И да, это не только про оплату. Очереди вроде Kafka и RabbitMQ доставляют сообщение «хотя бы один раз» — значит, одно и то же прилетит дважды штатно, без всякой моргнувшей сети. Вебхуки провайдер тоже шлёт с повторами. Везде, где есть ретрай, нужен ключ и дедуп — отсев повторов.

Так вот про чёрную пятницу. Нагрузка, один пропущенный уникальный индекс — и за ночь система дважды списывает с тысяч человек. Прикиньте: по 3000₽ с восьми тысяч — это под 24 миллиона, которые утром надо возвращать. А утром с этим прибегут к вам. Инцидент, разбор, начальство.

Чеклист, проверить контракт за минуту:
— есть Idempotency-Key на всех POST, что двигают деньги или необратимы?
— вставка ключа атомарна (защита от гонки)?
— что сохраняем по ключу и отдаём на повтор?
— что отвечаем на тот же ключ с другим телом?
— сколько ключ живёт?

Душнила-режим, да. Но этот чеклист экономит недели разгребания.

Хоть на один пункт ответа в спеке нет — там дыра. А через дыры утекают деньги.

Гляньте свой контракт. Есть там POST на платёж без ключа? Вот с него и начинайте.

🔥 если разложил по полочкам. А в комментах — ловили двойное списание? Расскажите, как было (без названий).

@analyst_exe
1🔥92
Когда заказчик говорит «это срочно», он почти никогда не имеет в виду «быстро». Чаще это значит: «если это не сделать — виноват буду не я».

«Срочно», «горит», «приоритет» — слышим в этом оценку времени. А времени там часто нет. Есть способ протащить задачу без очереди и заранее свалить ответственность на того, кто возьмёт. Сделаешь — молодец, так и надо было. Не успеешь — ну тебе же сказали, что горит.

И вот ты уже двигаешь спринт под чужую тревогу.

Проверяю это двумя вопросами. Не «когда надо», а вот этими.

1. Что мы НЕ делаем, если берём это сейчас? Срочное всегда кого-то задвигает. Если задвигать нечего — либо у вас пустой бэклог, либо задача горит не так сильно, как кричат.

2. Что случится, если сделать на неделю позже? Конкретно. Кто пострадает, какой процесс встанет, сколько денег утечёт. Если в ответ «ну… хотелось бы побыстрее» — это не срок, это настроение.

Если на оба вопроса честный ответ «ничего» — задача не срочная, а тревожная. А тревогу спринтом не лечат. А если ответ конкретный — «встанет релиз», «дедлайн регулятора» — отлично, теперь у срочности есть цена, и её видно всем. Этим приёмом вы не отменяете пожары, вы отделяете настоящие от выдуманных.

Дальше — заставьте ранжировать.

Не бывает пяти задач «первого приоритета». Это не приоритеты, это список «всё важное». А когда всё важное — не важно ничего, и порядок за вас выберет тот, кто громче. Положите задачи рядом и попросите пронумеровать. Один, два, три. Без повторов.

И зафиксируйте письменно. Не в голове, не на словах в коридоре. «Берём А, значит B и C уезжают на следующую неделю. Все согласны?» — и в чат. Не чтобы прикрыться, а чтобы тот, кто кричит «горит», увидел цену своего «горит». Обычно на этом месте половина пожаров тухнет сама.

Как только trade-off становится видимым и подписанным, слово «срочно» теряет всю магию. Потому что дело почти никогда не в часах. А в том, чью спину этим словом прикрывают.

🔥 если у вас тоже «горит» через раз без причины

А вам как чаще пытаются протащить задачу — «это срочно» или «это же на пять минут»? Да будет срач в комментариях

@analyst_exe
🔥84👍1
«Откатили хотфикс, на стейдже регресс, и у нас конфликт».

Если вы на дейлике кивнули, а потом пошли гуглить под столом — держите словарь. Я сам в первый год кивал и гуглил. Спорим, не я один)

Никто это специально не объясняет. Разработчики так говорят с первого курса, им в голову не приходит, что «смержить» — не общеизвестное слово.

22 слова с дейлика. Перевожу на наш язык и сразу пишу, чем это вам грозит. Листайте ⬇️

Про код

Ветка — отдельная копия кода под вашу задачу. Разработчик пилит фичу в ней и не ломает остальным.

Коммит — сохранённая порция изменений. Ctrl+S с комментарием.

Запушить — отправить коммиты на общий сервер. До пуша код живёт только на ноуте разработчика.

Ревью — другой разработчик проверяет код, прежде чем влить его в общий код проекта. «Висит на ревью» = код написан, ждём коллегу. Пинать автора тут бесполезно. Пинайте ревьюера)

МР / ПР (merge request / pull request) — заявка «гляньте мой код и влейте». «Открыл МР» = задача почти готова, осталось ревью.

Мерж — влить ветку в общий код. «Смержили» = фича в общей кодовой базе. Обычно пользователи её ещё не видят — но если у команды автодеплой, мерж означает «уже на проде». Спросите один раз, как у вас.

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

Куда оно едет

Деплой — выкладка кода на сервер. Пока не задеплоили — код нигде не работает, даже если написан и смержен.

Дев — песочница разработчиков. Тут всё может лежать сломанным, это норма. На баги на деве не жалуйтесь, вас не поймут.

Стейдж — репетиционная копия прода. В маленьких командах test, UAT и препрод — это всё одна среда, в больших — три разные. «Задеплоили на стейдж» = можно тестировать, пользователи ничего не видят.

Прод — боевой сервер, то, что видят реальные пользователи. Услышали «прод» — отложите телефон и слушайте.

Релиз — выкатка готовых фич на прод, обычно пачкой по расписанию. «Едет в ближайший релиз» = скоро у пользователей.

Фриз (code freeze) — заморозка: перед релизом новые изменения в него больше не берут, только критичные фиксы. «Завтра фриз» = что не успели влить — едет в следующий релиз. Ваши сроки это двигает напрямую.

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

Хотфикс — срочная починка прода вне расписания релизов. Слышите «хотфикс» — значит где-то горит) ваша задача сегодня скорее всего подвинется.

Фича-флаг — выключатель фичи на проде. Код выехал, но фича спит, пока флаг не включат. Так что «задеплоили» ещё не значит, что юзеры что-то увидели.

Почему «готово» — это не готово

Баг — программа делает не то, что задумали. Сначала разработчики смотрят логи и код. К вам придут, когда начнётся спор «это баг или так задумано» — тут решают требования.

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

Воспроизвести — повторить баг руками. «Не воспроизводится» = баг кто-то видел, но повторить не выходит. Помогите шагами: что нажимали, на каких данных, скриншот.

Флаки тест — тест, который то проходит, то падает сам по себе. Чаще всего с вашей фичей всё ок, просто тест нервный — но бывает, флак ловит реальную плавающую ошибку. Копать или перезапускать — решает разработчик, не вы.

Билд красный / пайплайн упал — автоматическая сборка и проверки кода не прошли. Пока не позеленеет, дальше ничего не едет. Звучит страшно, бывает по три раза на дню.

Блокер — то, из-за чего задача стоит. «У меня блокер на аналитике» = это вам. Бросайте всё и отвечайте.

Завтра на дейлике минимум три слова отсюда прозвучат. Проверьте. И киньте коллеге, который кивает)

@analyst_exe | https://analystexe.ru/articles/daily-standup-dictionary
8👍2
Я разработке учился семь раз. СЕМЬ. И до сих пор хочу зайти на восьмой — только вайбкодинг пока отговаривает.

Весь мой рабочий путь — это путь говна и превозмоганий. И именно на нём до меня дошла одна неприятная штука про то, как мы меняемся. Точнее — как НЕ меняемся.

Вот понял ты что-то про себя. Прочитал книжку, сходил к психологу, словил инсайт в душе. И как будто уже поработал, красавчик. А по факту не поменялось ничего. В голове щёлкнуло «о, понял!», стало приятно — и отпустило. Галочка есть, жизнь прежняя.

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

А меняться-то начинается дальше — там, где кайф от инсайта кончился и идти уже совсем не хочется.

Я ходил в зал, бросал, возвращался. Задачи поначалу вообще не умел делать — садился, тупил и падал. Падал, падал, падал. Но не перестал — просто потом вставал. Через боль, через не хочу, иногда после долгих пауз. И заходил снова.

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

Вот тут почти все и сливаются. И сила воли ни при чём — на одной мотивации эту яму не проедешь.

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

И ещё одно. В одиночку это тянуть — почти нереально. Меня в зале через не хочу поднимал тренер — без него я бы слился сто раз. Когда рядом кто-то, кто пинает и не даёт бросить на падении, доходишь в разы чаще. Один на один с собой — почти никогда. Найдите себе такого бадди. Серьёзно.

Кстати. Я снова готов потащить — приходите качаться об меня в аналитику. Буду тем самым, кто поднимает через не хочу. Пишите в личку @darkwing_duck101. Дисклеймер прежний: думать за вас не буду, но направлю и пинать буду 🫡

А вы на каком заходе? И на чём чаще застреваете — на «всё про себя понял» или сливаетесь уже в процессе?

@analyst_exe
11
Среда my dudes

вы также на встречах сидите?

@analyst_exe
😁10💯4
This media is not supported in your browser
VIEW IN TELEGRAM
Еще один честно найденный мем.

🫡 Пятница господа, время расквитаться со всей работой и пойти в выходные

@analyst_exe
😁7
когда просишь техлида подсказать по задаче

@analyst_exe
😁5
Так, у нас митап

Совершенно внезапно, мы решили собраться в субботу на Tech Analyst Meetup, чтобы обсудить использование AI в работе аналитиков. Пригласили как скептиков, так и оптимистов со своими практическими кейсами — хотим посмотреть на тему со всех сторон.

Что будет:

• Екатерина Пантелей — SDD против здравого смысла: какие артефакты аналитика переживут AI?

• Антон Константинов — Опыт коллаборации с AI: спеки, навыки, контекст

• Егор Марюшко — AI тут, AI там — какие возможности и инструменты на самом деле доступны аналитику в большинстве энтерпрайз-проектов, без иллюзий

• Иннокентий Бодров — Source map для системного аналитика: что нужно AI-напарнику кроме модели

• Анастасия Кайнова — тема уточняется

📆 27 июня, суббота, 11:00-15:00 мск

🔗 Регайтесь в ботике, это бесплатно
Please open Telegram to view this post
VIEW IN TELEGRAM
2