<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Адель Шигабутдинов</title>
<link>http://ashigabutdinov.ru/</link>
<description>Блог технического директора про системный дизайн, архитектуру приложений, менеджмент команд</description>
<author>Адель Шигабутдинов</author>
<language>ru</language>
<generator>E2 (v3831; Aegea)</generator>

<itunes:owner>
<itunes:name>Адель Шигабутдинов</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Блог технического директора про системный дизайн, архитектуру приложений, менеджмент команд</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Про AI-агентскую разработку</title>
<guid isPermaLink="false">314</guid>
<link>http://ashigabutdinov.ru/all/pro-ai-agentskuyu-razrabotku/</link>
<pubDate>Sat, 04 Apr 2026 12:15:50 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pro-ai-agentskuyu-razrabotku/</comments>
<description>
&lt;p&gt;Наконец сформулировал то, что наблюдаю, когда продакты, менеджеры, даже CEO и фаундеры массово засели за claude code, codex, cursor и неистово вайб-кодят свои продукты.&lt;/p&gt;
&lt;p class="loud"&gt;Сбылась мечта: виртуальная команда, которая работает как feature-factory. Только то, что нужно бизнесу, только функционал который нужен, сразу, быстро и без нытья. Никто не ноет про технический долг, не просит остановиться и сделать рефакторинг. Не боится переработок и стоит почти бесплатно. А главное — никто, никто не сопротивляется воле и повелениям Творца!&lt;/p&gt;
&lt;p&gt;Модель с промптом «ты крутой аналитик» ставит задачи агенту с промптом «ты senior backend разработчик» и она же с промптом «ты qa» проверяет. Великолепный театр!&lt;/p&gt;
&lt;iframe data-testid="embed-iframe" style="border-radius:12px" src="https://open.spotify.com/embed/track/51vbY5rXPH5OYTRCDr2JG2?utm_source=generator" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;b&gt;Founder-driven AI feature factory. &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Идеально для прототипов. Но  где догонит реальность?&lt;/p&gt;
&lt;p&gt;А, ну да. Надо же добавить Агента с промптом «ты неудобный сеньёор и токсичный критик».&lt;br /&gt;
Деплой.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Пособираю сюда ссылок на истрии:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/founder/comments/1s8ie9a/a_startup_founder_showed_me_his_mvp_today_and_he/?share_id=_j5uYaTtjUXQ0vAk5JiG1"&gt;https://www.reddit.com/r/founder/comments/1s8ie9a/a_startup_founder_showed_me_his_mvp_today_and_he/?share_id=_j5uYaTtjUXQ0vAk5JiG1&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Gemini по-человечески, по-братски!</title>
<guid isPermaLink="false">312</guid>
<link>http://ashigabutdinov.ru/all/gemini-po-chelovecheski-po-bratski/</link>
<pubDate>Tue, 03 Mar 2026 19:41:36 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/gemini-po-chelovecheski-po-bratski/</comments>
<description>
&lt;p&gt;Под руководством Gemini по-ошибке потратил TRX на 120$ на коммиссиях сети&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/Screenshot-2026-03-03-at-6.02.52PM.png" width="2314" height="1496" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/Screenshot-2026-03-03-at-6.03.06PM.png" width="2338" height="866" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Инженерный подход к оценке сроков: формула вместо гадания</title>
<guid isPermaLink="false">311</guid>
<link>http://ashigabutdinov.ru/all/pro-ocenku-slozhnosti-zadach-proektov-podhod-cto/</link>
<pubDate>Sun, 04 Jan 2026 17:34:10 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pro-ocenku-slozhnosti-zadach-proektov-podhod-cto/</comments>
<description>
&lt;p&gt;Cпособы оценки и планирования проектов, которые &lt;a href="https://agilelab.org/blog/product-backlog"&gt; сложились в индустрии&lt;/a&gt; софтверной разработки для планирования: стори-поинты, футболки и числа Фибоначчи хороши для тактики (планирование на 2 недели вперед), но не подходят для стратегии (сколько денег готовить на проект длиной в квартал).&lt;/p&gt;
&lt;p&gt;У программистов есть BigO-нотация для описания сложности алгоритмов. Обычно её используют, чтобы пообсуждать эффективность примененных алгоритмов для сферических задач в ваккууме.  Там измеряют скорость исполнения и потребление памяти.&lt;/p&gt;
&lt;p&gt;Что, если подобный подход переложить на наши прикладные инженерные задачи?&lt;br /&gt;
Здесь O(…) — не алгоритмическая сложность в строгом CS-смысле, а способ описать структуру роста инженерных усилий.&lt;/p&gt;
&lt;p class="loud"&gt;Например: подключение нового эквайринга в существующую систему продажи авиа-билетов.&lt;/p&gt;
&lt;p&gt;По сути это комбинаторная задача, то есть сложность которой зависит от количества изменений, которые нужно учесть.&lt;/p&gt;
&lt;h2&gt;1. Основные параметры:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;P&lt;/b&gt; — количество платёжных сценариев&lt;br /&gt;
(payment, refund, partial refund, cancel, chargeback, webhook retry и т. д.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C&lt;/b&gt; — количество валют&lt;/li&gt;
&lt;li&gt;&lt;b&gt;M&lt;/b&gt; — количество методов оплаты&lt;br /&gt;
(cards, Apple Pay, Google Pay, local methods, installments)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S&lt;/b&gt; — количество системных интеграций в нашей системе&lt;br /&gt;
(billing, orders, tickets, ledger, AML, notifications, analytics)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;E&lt;/b&gt; — количество edge-cases (timeouts, double spend, idempotency, retries)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;R&lt;/b&gt; — количество регуляторных/комплаенс-ограничений&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Попробуем записать инженерную сложность в виде O-нотации:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;O(P × (S + C + M + E) + R)&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Так как каждый платёжный сценарий (P) должен быть:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;встроен во все системы (S)&lt;/li&gt;
&lt;li&gt;проверен по валютам (C)&lt;/li&gt;
&lt;li&gt;поддержан по методам оплаты (M)&lt;/li&gt;
&lt;li&gt;защищён от edge-cases (E)&lt;/li&gt;
&lt;li&gt;соответствует регуляторным/комплаенс требованиям (R)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Часто &lt;i&gt;R = 0&lt;/i&gt;, но иногда это большая константа, например 3DS/SCA/PCI DSS&lt;/p&gt;
&lt;h2&gt;3. Минимальная граница сложности:&lt;/h2&gt;
&lt;p&gt;Невозможно подключить эквайринг не реализовав хотя бы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;payment&lt;/li&gt;
&lt;li&gt;refund&lt;/li&gt;
&lt;li&gt;webhook handling&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;O(P)&lt;/b&gt; — абсолютный минимум&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;4. Структурная сложность&lt;/h2&gt;
&lt;p&gt;Сколько конфигураций, сколько справочников, сколько долгоживущих сущностей,&lt;br /&gt;
сколько вариантов правил, которые система обязана помнить&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;O(S + C + M + E)&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Появляются:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;новые конфиги&lt;/li&gt;
&lt;li&gt;маппинги статусов (из внешних систем во внутренние)&lt;/li&gt;
&lt;li&gt;таблицы комиссий&lt;/li&gt;
&lt;li&gt;маршрутизация платежей&lt;/li&gt;
&lt;li&gt;нужно предусмотреть ретраи в конфигах, идемпотентность в базе&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если всё сделано правильно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O(1) на транзакцию&lt;/li&gt;
&lt;li&gt;O(n) в логах и аудите&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;Почему это вообще важно?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Потому что это дает ответы на вопросы: сколько времени мы будем это делать? → Time / effort&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;И насколько это усложнит систему навсегда? → Space / state&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Это сложность, которая добавляется даже если через этот эквайринг будет проходить 0 платежей.&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;4. Зависимость от текущей архитектуры&lt;/h2&gt;
&lt;p&gt;При плохой архитектуре трудозатраты могут зависеть от сочетаний параметров (например, сценариев × сервисов × валют), что увеличивает рост усилий:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;O(P × S × C)&lt;/b&gt; (реально больно)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Например, если нет абстракции платежей, логика размазана по сервисам, эквайринг «вшивается» напрямую (скорее всего программисты воют об огромном техническом долге)&lt;/p&gt;
&lt;p&gt;Каждый новый эквайринг в этом случае — это комбинаторный рост потенциальных конфликтов/интеракций между компонентами.&lt;/p&gt;
&lt;p&gt;При хорошей архитектуре, наоборот&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;→ &lt;b&gt;O(P)&lt;/b&gt; (кайф)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Если система изначально строилась для поддержки разных эквайрингов, имеется абстрактный платёжный адаптер или применяется strategy pattern, то добавление ещё одного эквайринга:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O(P) по бизнес-логике&lt;/li&gt;
&lt;li&gt;O(1) по остальной системе&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ПРИМЕНЕНИЕ НА ПРАКТИКЕ&lt;/h2&gt;
&lt;p&gt;Для бизнеса важны только ответы на два вопроса:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Сколько времени займет&lt;/li&gt;
&lt;li&gt;Сколько будет стоить&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Попробуем применить нашу формулу&lt;/p&gt;
&lt;p&gt;&lt;b&gt;O(P × (S + C + M + E) + R)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Где:&lt;br /&gt;
&lt;b&gt;P&lt;/b&gt; — платёжные сценарии&lt;br /&gt;
&lt;b&gt;S&lt;/b&gt; — системы интеграции&lt;br /&gt;
&lt;b&gt;C&lt;/b&gt; — валюты&lt;br /&gt;
&lt;b&gt;M&lt;/b&gt; — методы оплаты&lt;br /&gt;
&lt;b&gt;E&lt;/b&gt; — edge-cases&lt;br /&gt;
&lt;b&gt;R&lt;/b&gt; — регуляторные/комплаенс требования&lt;/p&gt;
&lt;p&gt;Математическая функция  O(…) показывает структуру сложности. Чтобы превратить её в сроки, нам нужно добавить весовые коэффициенты (сколько в среднем занимает одна интеграция).&lt;/p&gt;
&lt;p&gt;В инженерной практике это превращается в &lt;b&gt;аддитивную модель трудозатрат&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Total_days&lt;/i&gt; =&lt;br /&gt;
P × (&lt;br /&gt;
base_days&lt;br /&gt;
+ S × days_per_system&lt;br /&gt;
+ C × days_per_currency&lt;br /&gt;
+ M × days_per_method&lt;br /&gt;
+ E × days_per_edge_case&lt;br /&gt;
) + R × days_per_requirement&lt;/p&gt;
&lt;p&gt;Функция O показывает как растёт, а коэффициенты — сколько стоит один шаг.&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;параметр&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;значение&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;base_days&lt;/td&gt;
&lt;td style="text-align: right"&gt;1.0—1.5 дня&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;days_per_system&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.5—1 день&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;days_per_currency&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.3—0.7 дня&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;days_per_method&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.7—1.5 дня&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;days_per_edge_case&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.2—0.5 дня&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;days_per_requirement&lt;/td&gt;
&lt;td style="text-align: center"&gt;5-8 дней&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;R-добавки для платежей это&lt;/b&gt;:&lt;br /&gt;
3DS / SCA → +5—10 дней&lt;br /&gt;
delayed capture → +3—5&lt;br /&gt;
split payments → +5—8&lt;br /&gt;
local compliance → +5—15&lt;/p&gt;
&lt;h2&gt;Считаем человеко-дни&lt;/h2&gt;
&lt;p&gt;P (payment scenaries): payment, refund, partial refund, webhook reconciliation = 4&lt;br /&gt;
S (systems): orders, tickets, billing / ledger, notifications, analytics = 5&lt;br /&gt;
C (currencies): EUR, USD = 2&lt;br /&gt;
M (methods): cards, Apple Pay = 2&lt;br /&gt;
E (edge cases): retry, timeout, idempotency, duplicate webhook, partial capture = 5&lt;br /&gt;
R (regulatory): SCA, Split payments = 2&lt;/p&gt;
&lt;h3&gt;Калькуляция трудозатрат:&lt;/h3&gt;
&lt;p&gt;1.&lt;b&gt;Базовая реализация (P=4 сценария):&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сами сценарии: 4 × 1.2 дня = 4.8 д.&lt;/li&gt;
&lt;li&gt;Интеграции (S=5): 4 × 5 × 0.8 дня = 16 д.&lt;/li&gt;
&lt;li&gt;Валюты (C=2): 4 × 2 × 0.5 дня = 4 д.&lt;/li&gt;
&lt;li&gt;Методы (M=2): 4 × 2 × 1.0 день = 8 д.&lt;/li&gt;
&lt;li&gt;Edge-cases (E=5): 4 × 5 × 0.3 дня = 6 д.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2.&lt;b&gt;Регуляторика (R=2 требования):&lt;/b&gt;&lt;br /&gt;
-SCA + Split payments: 2 × 7.5 дней = 15 д.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Итого:&lt;/b&gt; 4.8 + 16 + 4 + 8 + 6 + 15 ≈ &lt;b&gt;54 человеко-дня&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Итого получается&lt;br /&gt;
📌 ≈ 11 календарных недель одного инженера&lt;br /&gt;
📌 ≈ 6 недель для команды из 2—3 человек&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Это только на разработку, но когда мы говорим про продакшен-решение нельзя забывать добавить QA и DevOps:&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Блок&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;% от development&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;+30-50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevOps / Infra&lt;/td&gt;
&lt;td&gt;+10-20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product / Docs&lt;/td&gt;
&lt;td&gt;+10%&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Итог 54 × 1.6 ≈ 86 человеко-дней до продакшена&lt;/p&gt;
&lt;h2&gt;Что реально уменьшает стоимость изменений в деньгах&lt;/h2&gt;
&lt;p&gt;Добавим коэффициент эффективности &lt;b&gt;k&lt;/b&gt; (расширяемости) нашей архитектуры системы&lt;/p&gt;
&lt;p&gt;T = k × P × (S + C + M + E)&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;k&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Архитектура&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;b&gt;Человеко-дни&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Почему такие цифры&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;td&gt;Без абстракции&lt;/td&gt;
&lt;td&gt;60—100&lt;/td&gt;
&lt;td style="text-align: center"&gt;каждое измерение усиливает остальные&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.4-0.5&lt;/td&gt;
&lt;td&gt;С адаптером&lt;/td&gt;
&lt;td&gt;25—40&lt;/td&gt;
&lt;td style="text-align: center"&gt;переиспользование сценариев и тестов&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.2-0.3&lt;/td&gt;
&lt;td&gt;С shared payment core&lt;/td&gt;
&lt;td&gt;15—25&lt;/td&gt;
&lt;td style="text-align: center"&gt;линейность по сценариям + конфиг&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Формула остается той же но &lt;b&gt;коэффициенты падают в 2—3 раза&lt;/b&gt;.&lt;/p&gt;
&lt;h2&gt;Что именно снижает коэффициент (k)&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Без абстракции (60—100 дней)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Почему k большой:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;логика размазана по сервисам&lt;/li&gt;
&lt;li&gt;каждый сервис знает детали провайдера&lt;/li&gt;
&lt;li&gt;тесты пишутся заново&lt;/li&gt;
&lt;li&gt;баги исправляются каскадно&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Каждое измерение — будь то системы (S) или валюты (C), методы (M) или edge-кейсы (E) → коэффициент растёт.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;С адаптером (25—40 дней)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Что меняется:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;появляется интерфейс PaymentProvider&lt;/li&gt;
&lt;li&gt;маппинг статусов и ошибок локализован&lt;/li&gt;
&lt;li&gt;сценарии P переиспользуются&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Что НЕ решено полностью:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;state machine может быть не единой&lt;/li&gt;
&lt;li&gt;идемпотентность иногда “дырявая”&lt;/li&gt;
&lt;li&gt;ledger/analytics всё ещё знают лишнее&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;коэффициент падает примерно в 2 раза.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Shared Payment Core (15—25 дней)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Это ключевой момент.&lt;/p&gt;
&lt;p&gt;Что происходит архитектурно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;есть &lt;b&gt;одна&lt;/b&gt; state machine&lt;/li&gt;
&lt;li&gt;есть &lt;b&gt;один&lt;/b&gt; источник истины&lt;/li&gt;
&lt;li&gt;все сервисы работают по событиям&lt;/li&gt;
&lt;li&gt;эквайринг — &lt;i&gt;чистый&lt;/i&gt; адаптер&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Фактически:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S почти исчезает из формулы&lt;/li&gt;
&lt;li&gt;C и M становятся конфигурацией&lt;/li&gt;
&lt;li&gt;E решаются централизованно&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;формула по факту становится ближе к: &lt;b&gt;T ≈ k × P&lt;/b&gt;, все зависимости по-прежнему существуют, но коэффициенты при них близки к нулю. Это и есть цель любой инженерной команды — сделать так, чтобы стоимость новой фичи зависела только от её бизнес-сути (P), а не от сопротивления старой системы&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Итого: Что этот подход дает бизнесу и менеджменту&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Математическое обоснование сроков&lt;/b&gt;. Вместо гадания на кофейной гуще мы получаем прозрачную формулу. Если задача занимает 80 дней — это не потому, что разработчики медленные, а потому что у нас  &lt;i&gt;S = 5&lt;/i&gt; (много интеграций) и &lt;i&gt;R=2&lt;/i&gt; (сложная регуляторика).&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Цена архитектуры становится осязаемой&lt;/b&gt;. Мы наконец-то можем в деньгах оценить стоимость «плохого кода». Плохая архитектура — это коэффициент  &lt;i&gt;k = 1.0&lt;/i&gt;, хорошая — &lt;i&gt;k = 0.3&lt;/i&gt;. Инвестиции в платформу (Shared Core) снижают стоимость каждой следующей фичи в 3 раза.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;Калькулятор вместо абстракций&lt;/b&gt;. Эту модель можно превратить в простой Excel-калькулятор. Менеджер может сам прикинуть: «Если мы добавим еще одну валюту &lt;i&gt;(C)&lt;/i&gt;, срок вырастет на &lt;i&gt;X&lt;/i&gt; дней». Это переводит разговор в конструктивное русло.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;b&gt;Стратегия вместо тактики&lt;/b&gt;. Стори-поинты помогут закрыть спринт, а эта формула поможет спланировать бюджет на квартал и понять, потянем ли мы этот проект вообще.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Важное для менеджеров</title>
<guid isPermaLink="false">310</guid>
<link>http://ashigabutdinov.ru/all/vazhnoe-dlya-menedzherov/</link>
<pubDate>Wed, 31 Dec 2025 09:37:51 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/vazhnoe-dlya-menedzherov/</comments>
<description>
&lt;p&gt;Какими бы крутыми, зрелыми, осознанными &lt;a href="https://ashigabutdinov.ru/all/vazhnoe-dlya-seniorov/"&gt;сеньиорами с прокачанными софт-скиллами&lt;/a&gt; вы не обложились, управлять разработкой по факту возможно фиксируя только одну часть на выбор:&lt;/p&gt;
&lt;p&gt;А. Объем работы&lt;br /&gt;
Б. Срок исполнения&lt;/p&gt;
&lt;p&gt;Бюджет у вас уже и так зафиксирован по умолчанию, и, скорее всего, он уменьшается.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Прочитав данное сообщение вы прошли краткий курс подготовки по программе PMI PMP.&lt;/i&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Срок — сегодня</title>
<guid isPermaLink="false">309</guid>
<link>http://ashigabutdinov.ru/all/srok-segodnya/</link>
<pubDate>Wed, 31 Dec 2025 09:23:23 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/srok-segodnya/</comments>
<description>
&lt;ol start="1"&gt;
&lt;li&gt;Долго думать перед тем как взяться дело — бывает полезно.&lt;/li&gt;
&lt;li&gt;Иногда по результатам раздумий &lt;b&gt;не&lt;/b&gt; браться за дело — весьма разумно.&lt;/li&gt;
&lt;li&gt;Некоторые цели и задачи закрываются сами собой, нужно только ждать и ничего в связи с этим не предпринимать. С некоторыми так не работает.&lt;/li&gt;
&lt;li&gt;У некоторых людей работает долгосрочное планирование, а у некоторых оно отбивает охоту действовать, все разные.&lt;/li&gt;
&lt;li&gt;Моя жизнь управляется Google-календарем. Всё, что в него внесено, происходит с гораздо большей вероятностью, чем то, что туда не попало. Остается только выбирать, чем его наполнять.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ashigabutdinov.ru/video/SrokSegodnya.mp4#t=0.001"&gt;Самая действенная схема краткосрочного и результативного планирования&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Пиши код</title>
<guid isPermaLink="false">308</guid>
<link>http://ashigabutdinov.ru/all/pishi-kod/</link>
<pubDate>Tue, 16 Dec 2025 15:38:20 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pishi-kod/</comments>
<description>
&lt;p&gt;Интересно, что сейчас, в эпоху post-agile, когда все перестали использовать ритуалы scrum и повально  канбанизировались, этот текст выглядит опередившим свое время лет на десять:&lt;br /&gt;
&lt;a href="https://evil-frees.livejournal.com/290185.html"&gt;https://evil-frees.livejournal.com/290185.html&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Решение iam.disableServiceAccountKeyCreation</title>
<guid isPermaLink="false">307</guid>
<link>http://ashigabutdinov.ru/all/solved-iam-disableserviceaccountkeycreation/</link>
<pubDate>Mon, 30 Jun 2025 18:40:22 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/solved-iam-disableserviceaccountkeycreation/</comments>
<description>
&lt;p&gt;Периодически на разных проектах сталкиваюсь с тем, что у Google Cloud заблокировано создание Service Accounts. Проблема с &lt;b&gt;iam.disableServiceAccountKeyCreation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Выходит сообщение:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Troubleshooting URL: console.cloud.google.com/iam-admin/troubleshooter;permissions=orgpolicy.constr
Missing permissions: 
    orgpolicy.constraints.list 
    orgpolicy.policies.list&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ни одно из решений через интерфейс Google Cloud не срабатывает.&lt;/p&gt;
&lt;p&gt;Есть решение через Google Cloud Console:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Выбрать проект&lt;/li&gt;
&lt;li&gt;Вызвать Google Cloud Console&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/Screenshot-2025-06-30-at-6.35.08PM.png" width="2304" height="1154" alt="" /&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Выполнить две команды:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;cat &amp;gt; key-creation.yaml &amp;lt;&amp;lt; ENDOFFILE
name: projects/$(gcloud config get-value project)/policies/iam.disableServiceAccountKeyCreation
spec:
  rules:
  - enforce: false
ENDOFFILE

gcloud org-policies set-policy key-creation.yaml 

rm key-creation.yaml&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Коротко о результатах</title>
<guid isPermaLink="false">305</guid>
<link>http://ashigabutdinov.ru/all/1/</link>
<pubDate>Tue, 11 Mar 2025 17:39:24 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/1/</comments>
<description>
&lt;p class="loud"&gt;«У корпоративного самурая нет результата, есть только процесс».&lt;/p&gt;
</description>
</item>

<item>
<title>Важное для сениоров</title>
<guid isPermaLink="false">301</guid>
<link>http://ashigabutdinov.ru/all/vazhnoe-dlya-seniorov/</link>
<pubDate>Mon, 04 Nov 2024 09:32:27 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/vazhnoe-dlya-seniorov/</comments>
<description>
&lt;p&gt;Очень давно писал про вопрос-индикатор на собеседованиях «&lt;a href="https://ashigabutdinov.ru/2013/06/09/1/"&gt;Два раза вовремя или один раз правильно?&lt;/a&gt;».&lt;/p&gt;
&lt;p&gt;Профессионала от непрофессионала отличает способность держать слово.&lt;br /&gt;
В разработке это чаще всего это — &lt;b&gt;выдерживание сроков плюс качественный результат&lt;/b&gt;.  Да, иногда важнее сроки, а иногда — качество (это важно выяснять заранее, если не удается обеспечить оба показателя). Но не одно без другого.&lt;/p&gt;
&lt;p&gt;Сказал — сделал. Пообещал — выполнил.&lt;br /&gt;
К человеку есть доверие, тогда, когда на его слово можно опереться.&lt;br /&gt;
А опереться можно тогда, когда есть подтвержденный опыт обеспечения качественными результатами в оговоренные сроки.&lt;/p&gt;
&lt;p&gt;Если человек постоянно называет сроки, а потом они постоянно съезжают, человек — балабол (человек, дающий пустые обещания). Постоянно подводит, верить ему — нельзя.&lt;/p&gt;
&lt;p&gt;Работать с такими не хотят. Промоутить таких не хотят. С таким работают, с отношением «так уж и быть» — просто терпят.&lt;/p&gt;
&lt;p&gt;Почему так?&lt;br /&gt;
Да если до сих пор не очевидно, по тому, что на твоем слове я даю свои обещания.&lt;br /&gt;
А на моих обещаниях дает свое слово мой шеф. А уже на них и владелец компании.&lt;br /&gt;
Поэтому когда/если, это все начинает сыпаться, все бегают с «раскаленной кочергой». Потому что если не деливеришь то, что обещал — вся компания пойдет с рынка.&lt;/p&gt;
&lt;p&gt;Короче, когда работаешь — будь молодцом!&lt;/p&gt;
</description>
</item>

<item>
<title>Про «волков» — как люди устраиваются на две работы и получается не норм</title>
<guid isPermaLink="false">300</guid>
<link>http://ashigabutdinov.ru/all/pro-volkov/</link>
<pubDate>Sat, 05 Oct 2024 18:36:20 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pro-volkov/</comments>
<description>
&lt;p&gt;В последнее время много попадается видео и статей о том, как кто-то успешно трудоустраивается на две работы и получает две зарплаты. Есть даже профессиональное движение, посвященное этому и ведутся споры, как правильно таких людей называть: «волки» или «шакалы»?&lt;/p&gt;
&lt;p&gt;Есть те, кому, невероятными усилиями, получается успешно совмещать. А есть те, кто изначально идут на вторую работу, чтобы что-то минимально на ней делать, чтобы получить несколько зарплат до увольнения из-за плохого перформанса.&lt;/p&gt;
&lt;p class="lead"&gt;У меня есть несколько историй.&lt;/p&gt;
&lt;h2&gt;Колян, просто Колян&lt;/h2&gt;
&lt;p&gt;Лет десять назад в одном финтех-стартапе  была очень молодая и задорная команда. Все работали в офисе, в редкие дни кто-то подключался и работал из дома. Работал там залихватский джун-Николай, который брался за всё что ему дают, усердно трудился. Иногда давал неплохой результат, а иногда получалась полная фигня, но в целом — терпимо. Работал он иногда из офиса, иногда из дома, бывало что пропадал из чатиков в течение дня на несколько часов, но потом объявлялся.&lt;/p&gt;
&lt;p&gt;Уволил я его тогда по правилам «учить-лечить-мочить», после того как он второй раз уехал в отпуск, не залив в репозитарий изменения, которые команда от него ждала.&lt;/p&gt;
&lt;p&gt;Через десять лет на одной из встреч с кипрскими айтишниками, случайно нашлись общие знакомые, которые в те далекие времена вместе с Николаем были коллегами по его второй, удаленной работе,  про которую никто не знал. Рассказали примерно ту же историю про внезапные исчезновения и меняющееся качество результата.&lt;/p&gt;
&lt;p&gt;Так что Колян делал это, еще тогда, когда это не стало мейнстримом.&lt;/p&gt;
&lt;h2&gt;Рома Звезда&lt;/h2&gt;
&lt;p&gt;Роман блестяще прошел тех. собеседование, показал пару своих книг о том как правильно проектировать архитектуру, а профиль на GitHub с кучей звезд только подогревал радость об удачном пополнении команды.&lt;/p&gt;
&lt;p&gt;Во время испытательного срока делал огромную фичу, которой не повезло стать отмененной: крупный партнер реализовал схожий функционал. После — сделал несколько небольших полезных изменений в других частях проекта. Следующую свою крупную фичу он как-то слил, просто не коммиття ничего в репозиторий, зато изливая на рабочих созвонах свою экспертность и советы, как всем надо делать работу. В общем от него требовался код, которого не было, поэтому надолго у нас не остался. И несмотря на то, что у нас нет фактов, что Рома одновременно работал на какую-то еще компанию, у нас — просиживал штаны.&lt;/p&gt;
&lt;h2&gt;Даня Халява&lt;/h2&gt;
&lt;p&gt;Даниил, молодой, талантливый студент, прошел интервью у рекрутера, у технического менеджера команды и меня на позицию Manual QA. Рассказал, что пару лет работал в беттинге, но не захотел переходить на новый проект по моральным принципам.&lt;br /&gt;
Очень быстро думал. Ответил на массу заковыристых вопросов, о том как тестировать финансовые приложения, великолепно разложил все корнер-кейсы по представленным примерам. Показал свой годовалый профиль на leet-code с кучей решенных задач. Порадовались, что наконец-то пришла свежая кровь (зумер!) с головой на плечах.&lt;/p&gt;
&lt;p&gt;Оказалось, в дальнейшем, что в той компании и том подразделении он не работал, а сам вел личный телеграмм-канал с парой тысяч подписчиков, в котором хвастался потрясающими результатами развода компаний.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/danya1.png" width="600" height="337" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Возможно, если бы он реально начал работать QA, быстро бы вкатился и стал хорошим специалистом. Но намерение его было изначально деструктивным, так что решили с ним не продолжать.&lt;br /&gt;
(Интересно, кто и за сколько ему прокачивал профайл на литкоде?!)&lt;/p&gt;
&lt;h2&gt;Денис-Тройничок&lt;/h2&gt;
&lt;p&gt;Денис — зрелый разработчик, пришел на собеседование к нам, объясняя тем, что не сработался с коллегами в каком-то НИИ. Плюс вел курсы по программированию в ВУЗе. Наше собеседование прошел на высоком уровне и достаточно легко, очень понравился команде. За месяц вкатился в сложный проект, закрыл пять задач среднего размера. А потом позвонил мне и сказал что увольняется, т. к. не вытягивает. Оказалось, что он не уволился не только с предыдущей работы, выходя к нам. Он не уволился и с еще более ранней компании, т. е. у парня было три работы! :-)&lt;/p&gt;
&lt;p&gt;Денис оставил очень смешанные впечатления.&lt;br /&gt;
Мы заплатили ему мидловую зарплату за мидловую работу — мы ничего не потеряли.&lt;br /&gt;
А вот те две компании, возможно, не получили того, о чем они договаривались, т. е. понесли потери.&lt;/p&gt;
&lt;h2&gt;Из моих наблюдений, как можно выявлять людей, которые работают на двух работах&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Необъяснимое снижение (или изначально низкий) перформанс — долгие сроки исполнения, низкое качество работы&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Непостоянная доступность — пропадает на долгие периоды, недоступен для звонков, не отвечает на срочные вопросы, чего раньше не было&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Нестандартное время активности и использование рабочих инструментов — раннее утро/поздний вечер/выходные/ вне рабочего времени&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Перекрёстные чаты — ошибки пересылок сообщений, то, что должно было быть переслано в одну компанию, отправляется в другую. Или не тем людям/не в те чаты.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Странное поведение на созвонах — например, трудно выглядеть адекватным находясь сразу на двух коллах&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="6"&gt;
&lt;li&gt;Снижение вовлеченности — меньший интерес к проектам, избегание доп обязанностей, не участие в обсуждениях&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="loud"&gt;Вообще-то, все эти признаки могут быть и связаны с тем, что у сотрудника в жизни что-то происходит, не обязательно то, что он устроился на вторую работу. Выявить это вполне возможно через приватные доверительные беседы. Важно предложить поддержку и рассмотреть различные сценарии, не делая поспешных выводов.&lt;/p&gt;
&lt;h2&gt;Когда работа на две компании всё же может быть приемлемой и этичной&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Если сотрудник открыто информирует обе компании о своих намерениях работать в фулл-тайм или частично в двух местах и получает разрешение от обеих. У нас было несколько случаев, когда хорошие специалисты «уходили за мечтой» в другие компании, при этом оставаясь парт-таймить у нас. И да, их новая компания была изначально в курсе этих договоренностей.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Фриланс или парт-тайм занятость могут быть этичными и приемлемыми если не страдает производительность. Я иногда нанимаю парт-таймить скучающих сениоров на мидловые задачи на короткой,  проектной основе.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Отсутствие конфликта интересов, если компании не являются конкурентами и если сотрудник не использует ресурсы одной компании для выполнения задач другой. Это просто создает риски для обеих компаний — не надо так.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Чего делать с «волками» и как от них защищаться?&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Нужны четкие правила касательно полной или частичной занятости, конфликта интересов, фриланса, информировать о них сотрудников еще до начала работы.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Использовать договора о неразглашении (NDA), трудовые договора с положениями о раскрытии параллельной занятости. Не факт что помогут, но разумные люди могут сообщить что работают в другом месте. Или не смогут принести трудовую книжку, так как она лежит на предыдущем месте работы!&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Выдавать рабочие компьютеры с преднастроенными правами и софтом, без права самостоятельно установки. Правда, с техническими специалистами, работает плохо.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Использовать тайм-трекеры, просить фиксировать время работы над задачами и отслеживать активность вне рабочих часов (в рабочих чатах, таск-трекерах, репозиториях, серверах).&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Обучать руководителей проводить перформанс ревью так, чтобы на ранних стадиях выявлять что сотрудник может быть занят на стороне и как корректно обсуждать это с сотрудниками.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="6"&gt;
&lt;li&gt;Проверить, вы вообще нормально платите тем кто у вас уже работает? Может быть они не в рынке, не могут получить апдейт? Достаточно ли у них задач, может быть слишком много свободного времени?&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="7"&gt;
&lt;li&gt;Некоторые компании ввели запрет на удаленную работу. Работать из офиса на сторонние проекты — крайне сложное мероприятие.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Последствия работы на две компании&lt;/h2&gt;
&lt;p&gt;Вообще, рисков и последствий может быть множество, как для компаний, так и для сотрудника, который выбрал совмещать работу.&lt;/p&gt;
&lt;p&gt;— Юридические (нарушения условий договора, конфликт интересов между компаниями)&lt;br /&gt;
— Риски по достижению долгосрочных целей компании (если спец сфокусирован на сторонней работе, а не на интересах работодателя)&lt;br /&gt;
— Влияние на командную работу (коллегам, возможно, придется компенсировать недостаток вовлеченности сотрудника)&lt;br /&gt;
— Возможные последствия для карьеры и репутации специалиста (ладно я про них просто так написал, а мог бы и ссылки на Linkedin приложить)&lt;br /&gt;
— Качество жизни (может просто не остаться времени на личную жизнь, семью или отдых)&lt;br /&gt;
— &lt;a href=https://ashigabutdinov.ru/all/burnout-theme/&gt;Выгорание&lt;/a&gt; и &lt;a href=https://ashigabutdinov.ru/all/pro-stress-i-produktivnost/&gt;стресс&lt;/a&gt; (в следствие невозможности поддерживать здоровый work-life balance)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Остается открытым вопрос, о том как отсеивать таких кандидатов на входе.&lt;/b&gt;&lt;br /&gt;
Очевидно, существующие фильтры нужно еще настраивать на оценку намерений. Впрочем, вспоминая «просто Коляна», видимо, это было нужно делать давно.&lt;/p&gt;
</description>
</item>

<item>
<title>Про ошибки</title>
<guid isPermaLink="false">299</guid>
<link>http://ashigabutdinov.ru/all/pro-oshibki/</link>
<pubDate>Fri, 20 Sep 2024 20:26:00 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pro-oshibki/</comments>
<description>
&lt;p&gt;Есть два вида ошибок.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Ошибки инноватора.&lt;/b&gt;&lt;br /&gt;
Когда ошибка, это обратная связь на проверку гипотезы.&lt;br /&gt;
«Не ошибается только тот, кто ничего не делает» — отсюда.&lt;br /&gt;
Здесь ошибки ожидаемы и приемлемы и должны превращаться в lessons learned.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;&amp;quot;Failure is an option here. If things are not failing, you are not innovating enough&amp;quot; — Elon Musk &lt;a href="https://t.co/5tc7yGFAOd"&gt;pic.twitter.com/5tc7yGFAOd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;mdash; Curiosity (@MAstronomers) &lt;a href="https://twitter.com/MAstronomers/status/1836954617734664551?ref_src=twsrc%5Etfw"&gt;September 20, 2024&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;p&gt;&lt;b&gt;2. Ошибки плохого исполнения &lt;i&gt;(Bad execution)&lt;/i&gt;.&lt;/b&gt;&lt;br /&gt;
Например, не сданная вовремя платёжка или отчет. Не сделанный или не проверенный бекап. Там, где нет неизвестности и ожидается безупречное исполнение.&lt;br /&gt;
Здесь ошибки &lt;b&gt;неприемлемы&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Если они регулярно возникают, это может быть следствием нескольких факторов: недостаток навыков, непонимание задач, плохая мотивация, отсутствие четких инструкций или перегрузка другими задачами.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;— Что делать? &lt;/b&gt;&lt;br /&gt;
— Выяснить причину.&lt;br /&gt;
— Как?&lt;br /&gt;
— Спросить человека напрямую!&lt;/p&gt;
&lt;p&gt;Если проблема в непонимании задачи, недостатке знаний или навыков — организовать обучение, передачу знаний и тренировку.&lt;/p&gt;
&lt;p&gt;Если инструкции кривые — переписать, точнее, пусть сам и перепишет понятно.&lt;/p&gt;
&lt;p&gt;Если сотрудник перегружен — разобраться, что там за аврал, почему он возник и решить эту проблему&lt;/p&gt;
&lt;p&gt;Если не хочет (!) — выяснить в чем причина и найти способ чтобы сам захотел.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Вопрос со звездочкой, кстати. Что нужно, чтобы сотрудники сами хотели?&lt;/b&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Влёт в облака</title>
<guid isPermaLink="false">298</guid>
<link>http://ashigabutdinov.ru/all/vlyot-v-oblaka/</link>
<pubDate>Fri, 20 Sep 2024 19:11:36 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/vlyot-v-oblaka/</comments>
<description>
&lt;p&gt;Наконец-то встретил баг на &lt;b&gt;фронтенде&lt;/b&gt;, который привел к потерям в $$.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/google-cloud-costizon.png" width="1666" height="506" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;На скриншоте рост костов за Google Cloud Storage за одну неделю.&lt;/p&gt;
&lt;p&gt;На одном из проектов предварительный кост за Google Cloud вырос &lt;b&gt;в четыре раза&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Выяснилось: криво поставленный скрипт продуктовой аналитики на сервисе с огромным траффиком вызывал множественные повторные загрузки огромного числа файлов из Google S3.&lt;/p&gt;
</description>
</item>

<item>
<title>Про стресс и продуктивность</title>
<guid isPermaLink="false">297</guid>
<link>http://ashigabutdinov.ru/all/pro-stress-i-produktivnost/</link>
<pubDate>Fri, 20 Sep 2024 16:47:29 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/pro-stress-i-produktivnost/</comments>
<description>
&lt;p&gt;Недавно слушал аудиокнигу &lt;a href="https://www.litres.ru/audiobook/ned-dzhonson/samostoyatelnye-deti-51829615/"&gt;“самостоятельные дети”&lt;/a&gt;, она начинается с очень интересного раздела про стресс.&lt;/p&gt;
&lt;p&gt;Что под влиянием страха  человек (любого возраста) сначала вырабатывает адреналин (с реакциями &lt;i&gt;бей или беги&lt;/i&gt;), а под длительным влиянием стресса — вырабатывает кортизол. При этом есть особенность, что у животных кортизол исчезает из крови в течение десятков часов (одних суток), а у людей он держится несколько дней, иногда до недель.&lt;/p&gt;
&lt;p&gt;И под влиянием кортизола у человека угнетается сначала когнитивная функция, способность запоминать (кортизол разрушает клетки в мозге которые отвечают за память). Человек начинает «тормозить», ошибаться, потом начинаются нарушения сна, которые усугубляют потерю когнитивных функций и снижают мотивацию (внутреннее желание и порывы) человека к действию, человеку становятся безразличны его деятельность и смыслы к существованию.&lt;/p&gt;
&lt;p&gt;Снижается уровень дофамина, норадреналина и серотонина.&lt;br /&gt;
Хронический стресс приводит к выученной беспомощности —  если чтобы человек ни делал, ситуация не улучшается, зачем вообще пытаться? Это чувство заставляет думать, что человек не в силах справиться с задачей, хотя на самом деле вполне качественно мог бы её решить.&lt;/p&gt;
&lt;p&gt;А дальше, если стресс не уменьшается, кортизол приводит к изменениям в головном мозге создавая сначала депрессивное состояние, а потом вызывает эту болезнь, с печальными последствиями.&lt;/p&gt;
&lt;p&gt;Это очень коррелировало с теми вещами которые я до этого писал про &lt;a href="https://ashigabutdinov.ru/all/burnout-theme/"&gt;выгорание&lt;/a&gt; (Burnout).&lt;/p&gt;
&lt;p&gt;Так что, несмотря на то, что &lt;i&gt;короткая&lt;/i&gt; «живительная» обратная связь, &lt;i&gt;«морковка сзади»&lt;/i&gt; может оказаться полезной, «активировав» человека на короткий период, постоянно прибегать к ней — пагубный способ управления.&lt;/p&gt;
&lt;p&gt;Окошмаренные люди, на продолжительном периоде мотивированные агрессивными сроками, обвинениями, угрозами увольнением, в страхе и стрессе, как правило, замыкаются и замирают, а не демонстрируют инновации и свои лучшие качества.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Как-нибудь я расскажу о совершенно лютом проекте, на котором весь менеджмент и команда разработки набрала в среднем +15-20 кг, заедая стресс.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Проект был крутой, с агрессивными сроками, огромным количеством фич и высокими рисками.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Полезные ссылки&lt;/b&gt;&lt;br /&gt;
&lt;a href="https://psytests.org/boyko/boburn.html"&gt;Тест Бойко (Диагностика уровня эмоционального выгорания) &lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Как не коммитя и не теряя  изменения переключиться на другую ветку Git.</title>
<guid isPermaLink="false">295</guid>
<link>http://ashigabutdinov.ru/all/git-stash-git-worktree/</link>
<pubDate>Fri, 13 Oct 2023 09:17:48 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/git-stash-git-worktree/</comments>
<description>
&lt;p&gt;Оказалось, что многие разработчики не знают, что можно не создавать коммит изменений в коде, чтобы переключиться на другую ветку, что-то поправить и вернуться к своей текущей задаче.&lt;/p&gt;
&lt;p&gt;Бывает удобно, когда нужно быстро пофиксить баг и вернуться.&lt;/p&gt;
&lt;h2&gt;1. Способ через git stash&lt;/h2&gt;
&lt;p&gt;Если вы внесли изменения в вашем рабочем каталоге и хотите переключиться на другую ветку без коммита, вы можете использовать `git stash`. Это временно сохранит ваши изменения и очистит рабочий каталог.&lt;/p&gt;
&lt;p&gt;Вот шаги:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Сохраните изменения с помощью stash:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git stash&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;Переключитесь на другую ветку:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git checkout [имя_ветки]&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;Если вы захотите вернуть свои изменения на текущей ветке, используйте:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git stash apply&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если у вас несколько сохраненных изменений в stash, вы можете увидеть список всех stash с помощью:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git stash list&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И применить конкретный stash с помощью:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git stash apply stash@{номер}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Учтите, что `git stash apply` применяет изменения, но оставляет их в stash. Если вы хотите применить изменения и удалить их из stash, используйте:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git stash pop&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;2. Способ через git worktree&lt;/h2&gt;
&lt;p&gt;git worktree позволяет вам иметь несколько рабочих копий одного репозитория. Таким образом, вы можете работать в одной ветке в одной рабочей копии, а в другой ветке — в другой рабочей копии.&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Добавление новой рабочей директории для другой ветки&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Например, вы работаете над функцией в ветке `feature-x`, но вам также нужно срочно внести изменения в `master`.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git worktree add ../worktree-master master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Это создаст новую рабочую директорию `worktree-master`, где активной будет ветка `master`.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Создание новой ветки в новой рабочей директории&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если вы хотите начать работу над новой функцией и хотите, чтобы у нее была своя рабочая директория:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git worktree add ../worktree-feature-y feature-y&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если ветка `feature-y` еще не существует, она будет создана автоматически.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Просмотр списка рабочих директорий&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git worktree list&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Это покажет вам все текущие рабочие директории и их связанные ветки.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Удаление рабочей директории&lt;br /&gt;
Если вы закончили работу в дополнительной рабочей директории и хотите ее удалить&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;rm -rf ../worktree-feature-y
git worktree prune&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Здесь мы сначала удаляем директорию, а затем говорим Git очистить устаревшие рабочие директории с помощью команды `prune`.&lt;/p&gt;
&lt;h2&gt;3. Самый не технологичный способ: сделать клон проекта в соседней дирректории&lt;/h2&gt;
&lt;p&gt;Да, можно сделать git clone репозитория в соседнюю дирректорию, сделать срочные изменения и запушить их, не трогая при этом ничего в текущей рабочей копии.&lt;/p&gt;
</description>
</item>

<item>
<title>Немного про Agile и Agile Manifesto, качество, бюджет, сроки</title>
<guid isPermaLink="false">294</guid>
<link>http://ashigabutdinov.ru/all/nemnogo-pro-agile-i-agile-manifesto-kachestvo-byudzhet-sroki/</link>
<pubDate>Sun, 01 Oct 2023 07:36:50 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/nemnogo-pro-agile-i-agile-manifesto-kachestvo-byudzhet-sroki/</comments>
<description>
&lt;ol start="1"&gt;
&lt;li&gt;Интересный факт, что в &lt;a href="https://www.agilealliance.org/agile101/12-principles-behind-the-agile-manifesto/"&gt;12 принципах лежащих в основе Agile&lt;/a&gt;, пункт про техническое совершенство идет четверым с конца. Даже развернулась небольшая &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7112680265751101440/"&gt;дискуссия в Linkedin на этот счет&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если читать их по порядку, может сложиться представление, (в духе манифеста) что несмотря на то, что мы ценим нижние 4 пункта, верхние четыре мы ценим все-таки больше. Так ли это?&lt;/p&gt;
&lt;p&gt;Техническое совершенство и вообще все параграфы этого документа снизу вверх, на мой взгляд, должны рассматриваться как фундамент для достижения Agility.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/agility-base.jpeg" width="828" height="551" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;(попалась картинка в тему)&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;a href="https://www.agilealliance.org/agile101/the-agile-manifesto/"&gt;Agile Manifesto&lt;/a&gt; очень гибко обходит вопросы сроков и бюджетирования, так что вот два обоснованных мнения на этот счет от ChatGPT:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;A.&lt;/b&gt; While there is value in meeting deadlines,&lt;b&gt; we value technical excellence more.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;By emphasizing technical quality, we ensure the foundation for resilient and adaptable solutions. A fixation on deadlines might risk the integrity and sustainability of our work. We believe that by striving for excellence today, we reduce the risk of future setbacks and rework, leading to better outcomes in the long run. Even in the face of time constraints, our commitment to quality remains paramount.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;B.&lt;/b&gt; While there is value in technical excellence, &lt;b&gt;we value meeting deadlines more.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In a rapidly evolving environment, delivering on our commitments in a timely manner ensures trust, momentum, and immediate value. Technical quality is vital, but we believe that it should not compromise our ability to meet the expectations set with our stakeholders. Balancing excellence with timeliness, we ensure both immediate impact and a foundation for continuous improvement. In our journey, the punctuality of our deliveries stands at the forefront.&lt;/p&gt;
&lt;p&gt;На моем опыте, у бизнеса и технических команд возникает конфликт интересов в точке соблюдения сроков и обеспечения качества кодовой базы. В случае работы по итерациям, обязательство заделиверить что-то в конце спринта — это компромисс между поставкой ASAP (в интересах бизнеса) и бесконечным доведением до идеала (в интересах технических команд).&lt;/p&gt;
&lt;p&gt;Помогает прозрачность в обе стороны: технические команды должны знать, почему что-то важно для бизнеса, какие последствия, а бизнес должен быть информирован о том, что что-то важно в технике и последствия. Это увеличивает доверие и становится проще договариваться.&lt;/p&gt;
</description>
</item>

<item>
<title>Автомобиль не начинается со скейтборда</title>
<guid isPermaLink="false">287</guid>
<link>http://ashigabutdinov.ru/all/we-do-not-start-with-a-skateboard-and-end-up-with-a-car/</link>
<pubDate>Sat, 03 Sep 2022 19:51:40 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/we-do-not-start-with-a-skateboard-and-end-up-with-a-car/</comments>
<description>
&lt;p&gt;Эта хайповая картинка хотя и пытается рассказать о том, что Agile это про итеративный импрувмент, на мой взгляд, некорректна.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/FazB-1DXkAA6cql.png" width="828" height="618" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Здесь две проблемы:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Предполагается, что на каждом этапе заказчик хочет разного: то скейтборд, то самокат, то велоспед. Что правдой не является: заказчик обычно сразу знает, что он хочет именно автомобиль, а не какой-то эфемерный транспорт каким бы паршивым он ни был. Если дать ему самокат вместо автомобиля он его сразу отвергнет.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Так как из скейтборда невозможно сделать самокат, а из самоката невозможно сделать велосипед, как и из велосипеда невозможно сделать автомобиль — предполагается что результаты предыдущей работы выбрасываются и новый этап начинается с нуля. Так не бывает, обычно весь импрувмент как раз и строится на основе предыдущих разработок (привет легаси!)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Мы всегда идем от автомобиля. Он должен быть самым простым, хоть как повозка на колесах, но это всегда автомобиль, на каждом шаге.&lt;br /&gt;
&lt;b&gt;Вот правильная картинка про Agile:&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/FbltxQaXgAIyeiI.jpeg" width="1046" height="527" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Reference:&lt;/b&gt; &lt;a href="https://twitter.com/allenholub/status/1561836459447013378?cxt=HBwWhMC-qYT_4KwrAAAA&amp;cn=ZmxleGlibGVfcmVjcw%3D%3D&amp;refsrc=email"&gt;Allen Houb&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Переболевшим Agile</title>
<guid isPermaLink="false">290</guid>
<link>http://ashigabutdinov.ru/all/perezhivshim-agile/</link>
<pubDate>Sun, 28 Aug 2022 14:06:26 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/perezhivshim-agile/</comments>
<description>
&lt;p&gt;Наткнулся на блестящий комментарий к видео с беседой о проблемах скрам и том почему аджайл все-таки не работает. Если нет времени смотреть все 1.5 ч интервью:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;Большинству компаний не нужна гибкость, им нужен водопад с высокой пропускной способностью. Они уже определились с объемом работ, сроками и ресурсами. Они просто думают, что Agile каким-то волшебным образом повысит производительность (и винят разработчиков, когда это не происходит).&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/hxXmTnb3mFU?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Пост про ошибки в платежных системах</title>
<guid isPermaLink="false">289</guid>
<link>http://ashigabutdinov.ru/all/post-pro-oshibki-v-platezhnyh-sistemah/</link>
<pubDate>Wed, 24 Aug 2022 09:09:34 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/post-pro-oshibki-v-platezhnyh-sistemah/</comments>
<description>
&lt;p&gt;Попался невероятно хороший пост про баги и проблемы платежных систем, которые создают уязвимости и риски потери денег.&lt;/p&gt;
&lt;p&gt;&lt;a href=https://habr.com/en/post/683846/&gt;Ссылка на хабр: 20 лет проблем приема платежей&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Документ по GDPR</title>
<guid isPermaLink="false">288</guid>
<link>http://ashigabutdinov.ru/all/dokument-po-gdpr/</link>
<pubDate>Wed, 24 Aug 2022 09:02:30 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/dokument-po-gdpr/</comments>
<description>
&lt;p&gt;Документ на ~450 страниц который поможет разобраться с GDPR. Внутри много схем, картинок, ссылок и всяческих примеров.&lt;/p&gt;
&lt;p&gt;&lt;a href="/files/gdpr_28.12.2020.pdf"&gt;Скачать документ&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://ashigabutdinov.ru/pictures/gdprpic.png" width="2348" height="1428" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>О монолитах</title>
<guid isPermaLink="false">285</guid>
<link>http://ashigabutdinov.ru/all/o-monolitah/</link>
<pubDate>Sat, 30 Jul 2022 14:52:00 +0300</pubDate>
<author>Адель Шигабутдинов</author>
<comments>http://ashigabutdinov.ru/all/o-monolitah/</comments>
<description>
&lt;p&gt;Не всегда для того чтобы победить проблемы с деплоем, сформировать отдельные команды для работы над разными частями продукта  нужно заниматься такой русской народной забавой как распиливание монолита на микросервисы.&lt;/p&gt;
&lt;p&gt;Пара статей по этому поводу, не теряющих актуальность на сегодняшний день&lt;br /&gt;
&lt;a href="https://m.signalvnoise.com/the-majestic-monolith/"&gt;https://m.signalvnoise.com/the-majestic-monolith/&lt;/a&gt; от 2016г&lt;br /&gt;
&lt;a href="https://m.signalvnoise.com/the-majestic-monolith-can-become-the-citadel/"&gt;https://m.signalvnoise.com/the-majestic-monolith-can-become-the-citadel/&lt;/a&gt; и от 2020&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/y8OnoxKotPQ?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
</item>


</channel>
</rss>