Пишу о производстве сложных проектов, управлении продуктами, профессиональном росте программистов. borshev.com / patreon.com/f213 Связаться со мной — fedor@borshev.com Реклама не продаётся.
23 600подписчиков сейчас
55.0%ERR
48.0цитируемость
5постов/день
Русскийязык
Россиягео
Подписаться в Telegram
Данные обновлены 22.07.2020
Публикации всего: 53
У Зои недавно случился первый outage — перестали ходить авторизационные СМС.
Я с самого начала решил, что проект будет исключительно монолитным. Так и живем уже год — весь код, включая бухгалтерию, шаблоны сторисов и учёт затрат на маркетинг живет в одном репозитории. Полгода назад, правда, искал сокращалку урлов и решил, что навайбать свою будет быстрее, чем разбираться с традиционно кривыми API отечественного производителя. В итоге она и выпала.
У нас есть массовая (вернее не совсем, всего пара сотен) рассылка СМС. В какой-то момент скорость создания этих СМС переросла порог тротлинга в сокращалке урлов (не спрашивайте, зачем там тротлинг на внутреннем API — это только клод знает). Сокращалка отказала, и СМС пошли с полными урлами, всеми этими utm_medium и utm_source — кароч по три СМС вместо одной.
Как назло, на балансе было мало денег — СМС-провайдер начал отказывать с 402. Но у нас же ретраи! Из-за ретраев случился уже шторм — в какой-то момент провайдер стал отвечать уже не 402, а 403 (вернее заменил 200 ok с текстом «No Money», на 200 ok с текстом «ip blocked», но кого такое удивляет). В общем пока я проснулся, пока сообразил как чистить очередь ретраев, пока пополнил баланс — потеряли кучу денег на рекламу.
Вот и получилось, что есть несколько сервисов, каждый по отдельности работает хорошо, а когда начинают коммуницировать между собой — случается хуйня. Мне кажется в эпоху AI все баги такими и будут: потому что на привычные ошибки в коде легко нагенерить тестов, даже не имея специальных знаний. А вот коммуникацию между сервисами, просто так, увы, не протестируешь.
Делайте монолиты кароч. Ну или хотя бы слушайте Антона.
Слезайте с хайп-трейна
Не понимаю, почему профессионалы тратят время на AI-хайп.
Конечно у новостей и помоек с публикациями типа «500 лучших скиллов» аудитория будет всегда — непрофессионалу легко превратиться в Буратино, поверившего в чудо: вчера NFT, сегодня AI.
Но вот почему профессиональные программисты продолжают тратить часы чтения и экспериментов на то, чтобы на полтора процента увеличить себе производительность, я не понимаю.
Очевидно же, что генерация буковок в коде — это теперь товар широкого потребления. Как ты в ней не тренируйся, завтра выйдет новый харнес, в который вложены десятки тысяч часов, а не твоя жалкая сотня. И тренироваться теперь надо не в умножении сложности, которую мы так любим, а наоборот, в её уменьшении.
Не пилить микросервисы, а выпиливать. Не генерить код для новых фичей, а обсуждать эти фичи с бизнесом и выделять важное. Не сочинять сложный system design (его и навайбать вообще-то можно), а придумывать простые и элегантные решения.
Кароч, приходите на Коммункиацию Систем 30 сентября — будем говорить о вечных, а не проходящих, ценностях: чем простые системы отличаются от сложных, как они хранят данные и изолируют ответственность, и как обходить легаси и не создавать новое в больших системах.
Будем рады всем, кто хочет научиться сначала думать, а потом делать.
Не бегать от того, что не умеешь
Мне всегда было легко программировать и сложно заниматься продуктовой работой. Чуть устал — и начинаешь все проблемы решать бекендом, а не головой.
Когда программируешь — всё бинарно: CI проходит — значит ты молодец, не проходит — иди разбирайся. В продуктовой работе всё непонятно: вот сделал ты фичу, а как понять, пользуются ли ей вообще? А ту ли ты фичу вообще сделал? Надо говорить с пользователями, проверять гипотезы — сложно, в общем, особенно для программиста.
Сейчас я почти перестал программировать (ai же), а к продуктовой работе добавил маркетинг. Теперь продуктовая работа кажется понятной. Делов-то — придумал гипотезу, поставил тестировать, через неделю проверил. Выстрелила — молодец, не выстрелила — тоже молодец: всё равно завтра следующую гипотезу запускать.
А вот маркетинг — тёмный лес. Как понять, почему с нового канала приходит мусорный трафик — это я таргетинг плохо настроил, офер кривой или канал мёртвый? Почему органика выстреливает в одном сторе и не выстреливает в другом, и по каким запросам люди нас вообще ищут? Как распределить деньги между работающими каналами и экспериментами? Чуть устал — и идёшь заниматься микроулучшениями в продукте вместо дистрибуции.
Кажется так устроен любой человек: хочет делать то, что умеет, и не хочет делать то, что не умеет. И работа стартапного CEO как раз и состоит в том, чтобы делать то, что не умеешь. А что умеешь — делегировать, чтобы освобождать место в голове.
Системная память в AI-харнессе — это плохо
Мне кажется, что память в клоде — это зло. Конечно большой кайф в том, что агент под тебя подстраивается — запоминает привычные имена переменных, просьбы писать меньше буллшита в комментах и способы называть миграции.
Но проблема в том, что все эти инструкции остаются внутри ~/.claude. То есть у другого программиста в том же репозитории и переменные будут названы по-другому, и буллшит будет другой формы. Со временем твой агент посмотрит на чужие примеры, и начнёт писать так же. Потом, наверное, и память незаметно подменит, если долго его не ругать.
Кароч, считаю что любые инструкции для агента должны быть воспроизводимыми — лежать прямо в репозитории, для которого они предназначены. А глобальный CLAUDE.md должен быть вообще пустым.
Я спросил у опуса
Верный признак плохого менеджера — пересылать в команду письма от клиента без каких-либо приписок, ну разве что иногда добавляя что-нибудь вроде JFYI. С 25 года появился новый жанр — «я спросил у опуса и <тонна копипасты>». Напишу тем, кто так делает — вдруг у вас ещё не всё потеряно.
Друзья, у опуса я могу и сам спросить. Кожаный мешок существует не для того, чтобы перекладывать текст из одного места в другое — он нужен, чтобы приносить ценность и принимать ответственность. К копипасте из LLM можно приложить много ценности: начиная от фактчекинга и заканчивая тем, что вообще убрать копипасту и написать мне в один абзац, что в предлагаете сделать.
Префикс «я спросил у LLM» не спасает от ответственности: вас уволят, а опус останется. Всё, что делает этот префикс — говорит команде, что вы не уважаете их настолько, что не готовы потратить даже 5 минут на банальную проверку источников.
День рождения школы
Мы с Марьяной впервые встретились в перерыве между карантинами — в августе 2020 года. Почти сразу начали делать первую версию «Стать Тимлидом» — он родился из накопленного у обоих опыта, которым хотелось делиться.
Прошло уже целых 6 лет, офигеть. Школа пережила ковид, пережила сломанные платежи и потерянные данные. Надеюсь, переживёт и текущий кризис.
День рождения получается не очень весёлый, но всё таки это повод — так что вот вам скидка 25% на все самостоятельные курсы. Действует до вечера среды — приходите знакомиться, если давно присматриваетесь к «Анализу Систем» или лидерским курсам. Забирайте «Самому не проще» или «Есть минутку» если хотите прокачаться в делегировании или управляемой коммуникации. Промокод
SIX.
Что там у них →
С днём рождения нас!Как дела у Зои
TLDR — прорывов нет, работаем.
Реклама продолжает болтаться вокруг прибыльности — чтобы нормально достроить финмодель, надо подождать ещё 2 месяца, чтобы когорты, пришедшие на текущую версию продукта, стали хоть чуть-чуть зврослее.
По фичам — запустили медицинские карты: теперь модель знает, какие лекарства и диагнозы есть у пользователя. Доработали память — теперь контекст старых бесед не теряется: это важно, т.к. количество сообщений у активного юзера измеряется сотнями. Научили модель просматривать историю анализов и искать врачей, добавили голосовухи (на удивление не так уж и востребованные, подозреваю технические проблемы). Скоро запустим мобильное приложение и тудушки — чтобы пользователь вместе с моделью планировал свои медицинские дела.
Очень необычно себя чувствовать одновременно CEO, который берётся за всё непонятное и думает про стратегию, и разработчиком, который просто пилит фичи. Во всех прошлых продуктовых забегах я ограничивался ролью CTO, изолировал себя от маркетинга. А сейчас осознал, что кроме меня это никто не сделает — и поменял букву T на E.
Жутко интересно и страшно — только живых денег потратили уже 1.3 млн, и дальше эту сумму надо только увеличивать.
Вернулся на Claude code
Вот уже больше месяца прошло, как я отказался от OpenCode и pi в пользу Claude code. Попробовал просто в надежде сэкономить токенов после того, как Copilot перестал выдавать свои первые бесплатные дозы, да так и остался.
Да, Claude code намного медленнее свободных альтернатив, но планы, которые он приносит — гораздо полнее и продуманнее. Оказалось, что мне гораздо ценнее получать ответы через 5 минут, чем через 2 — потому что через 5 минут мне достаточно будет написать «ok», а сколько ещё итераций понадобится после двухминутного ответа — заранее неизвестно.
Клёво, что теперь не надо думать о выборе модели и о том, насколько заполнено контекстное окно — всё это происходит где-то в недрах харнеса.
Немного бесит кривая система настроек и театр безопасности (а вы точно доверяете этому фолдеру? А можно я запущу find? Ой, а find -exec?). Но со всем этим можно мириться ради большей автономности агента и проработанных планов.
Opencode остался только в местах, где нужно совсем тонкое взаимодействие с моделью — к примеру для системы перевода материалов школы на английский, или в экспериментах с локальными моделями.
Вспоминаю ощущения от перехода с линукса на мак — контроля стало меньше, а результата больше.
А вы заметили как обесценилась в последнее время команда ping? 10 лет назад, чтобы проверить интернет в сомнительных условиях, я делал
ping google.com, 1.1.1.1 или yandex.ru, и смотрел результат.
Сейчас такой пинг ничего не значит — ответ может прилететь от ВПН-клиента или вообще от ТСПУ. Даже если ответ прилетит от оригинального хоста — далеко не факт что я до него достучусь с реальным запросом — пинг может проходить, а коннект на 443 порту рваться посередине хендшейка.
Теперь, чтобы проверить интернет, хожу на 443 порт — пишу curl ifconfig.co: сразу проверяет и доступность интернета, и маршрутизацию. А вы как?DevEx → VibeEx
Кажется, я насмотрелся на достаточное количество новых проектов, чтобы утверждать, что AI-тулинга повылезали ровно те же проблемы, что и любых других программистских инструментов. И самая главная из них — воспроизводимость.
Какие-то проекты хранят все llm-наработки в курсоре одного из разработчиков. Кто-то жёстко рассчитывает на внешние скиллы, которые неизвестно где взять. Где-то каждую новую юзер-сторю реализуют с новым паттерном, потому что никто не озаботился выкинуть неактуальный код, и llm считает его живыми примерами.
Принцип «поработал — убери» стал ещё более актуальным. Раньше можно было расчитывать, что бардак выбесит кого-нибудь настолько, что тот потратит пару дней и выкинет мусор. Сейчас бардак бесит только агентов — а они ребята терпеливые.
Сделать проект удобным одновременно и для агентов, и для кожаных мешков — это всё ещё работа кожаных мешков. И это такой же техдлолг, как и любой другой.
Rozetked
ВИЛСАКОМ РЕД / WYLSACOM RED
Библиотека программиста
[netstalkers]
Типичный программист
СТАС БОМБИТ