Метка: рост

  • Печеньки в браузере — зачем они и почему нас о них предупреждают?

    Печеньки в браузере — зачем они и почему нас о них предупреждают?

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

    Куки пришли в браузеры в конце 90-х ради создания привычной нам корзины в интернет-магазинах. Сайт выдавал номер корзины пользователю. А после загрузки следующей страницы читал куки и находил корзину пользователя.

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

    Сайты не спрашивали пользователя, нужна ли ему печенька. Конечно нужна, зачем спрашивать? Без неё сохранить логин на сайте или корзину было невозможно.

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

    Законотворцы узнали про это безобразие и начали выпускать законы 🤦‍♂️. Теперь мы смотрим на предупреждения, которые обязаны вешать владельцы сайтов, что они используют куки. Даже свои собственные — белые и пушистые — для запоминания вашей корзины. Но даже если предупреждения нет — куки вы, скорее всего, всё равно получите 👿.

    Проблема должна решаться технологически на стороне браузера.
    Safari, Firefox, Brave и Edge уже частично блокируют куки сторонних сайтов. Chrome блокирует их пока только в режиме инкогнито, ведь больше всего от этой технологии зарабатывает разработчик Chrome — Google 🙈.

    Когда браузеры договорятся — предупреждения о кукисах уйдут в историю. А пока — терпим.

  • Горшочек с мёдом

    Горшочек с мёдом

    Honeypot — в переводе с английского “горшочек с мёдом”. Красивое и безобидное название, которое в веб-разработке обозначает хитрую ловушку. Ловим роботов! Ловим в естественной среде обитания — на нашем сайте, на самую обычную форму регистрации, комментария или обратной связи.
    Обычный пользователь видит свою обычную форму:
    Имя: ____________
    Email: ___________
    Ваш комментарий: ____________________

    Робот не смотрит глазами на монитор — он читает исходный код. И видит робот ещё одно поле.
    Фамилия: __________
    Ничего подозрительного, просто ещё одно поле. Нужно заполнить! А это и есть наш горшочек с мёдом.
    Настоящий пользователь это поле не увидел — мы его скрыли с помощью CSS. Он отправил форму с пустой фамилией. А старательный робот фамилию заполнил.

    Попался!
    Мы его игнорируем: заполненная форма уничтожается, письма не отсылаются, аккаунт не регистрируется. Спам не прошёл!

  • Почему Fix Price — это ловушка

    Почему Fix Price — это ловушка

    По данным PMI, средний большой IT-проект превышает бюджет на 45%, сроки на 7%, а выхлоп даёт на 56% меньше ожидаемого.
    В исследовании Harvard Business Review, каждый шестой IT-проект обошёлся более чем на 200% дороже и вышел за сроки более чем на 70%.
    Люди плохо оценивают трудозатраты. Не учтены все внешние факторы, слишком оптимистично оценивается время и ресурсы. В процессе работы с проектом приходит более глубокое понимание предметной области и деталей.
    Мы интуитивно ожидаем нормальное гауcсово распределение по срокам, но в реальности у нас распределение с тяжёлым хвостом. Это значит, что редкие, но очень долгие проекты — не исключение, а закономерность.

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

    Чем это заканчивается:
    – Клиент недоволен, что сроки не соблюдены. Прогноз всегда ошибочен, но клиенту пообещали эксперты.
    – Не попадаем в оценку трудозатрат. Не редки случаи, когда студия уходит в минус просто чтобы довести проект до конца.
    – На проекте тлеет, а затем разгорается пожар конфликта. Может дойти до суда.
    – Все недовольны и демотивированы.

    Проекты по модели Fix Price можно брать, но если есть ряд условий:
    – Вы уверены, что в проекте нет рисков.
    – В проекте очень мало неопределенности. Например, у вас уже почти всё готово, осталось прилепить логотип заказчика сверху стандартной заготовки.
    – У вас наценка от 500% на качественно просчитанную себестомость.

    Точная оценка нового проекта — иллюзия. Большой проект с неопределённостью нельзя брать по фиксированной цене. Каждый раз, когда вы берёте большой проект по Fix Price в надежде, что получится заработать, вы играете в рулетку.

  • Как измерять работу программистов

    Как измерять работу программистов

    Как измерять работу программистов.

    CEO и CFO приходят к CTO с вопросом: можно ли оптимизировать затраты на разработку? Как понять, кого уволить, а кто хорошо работает? Кому сколько платить?

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

    Очевидные метрики, которые придумает HR:
    – Присутствие на рабочем месте.
    – Количество выполненных задач.
    – Количество часов, затраченных на выполнение этих задач.
    – Уложился ли в план.

    Неочевидные метрики, которые добавит CTO:
    – “Бизнес ценность” — баллы, которыми стейкхолдеры оценивают задачи по их значимости или приоритету для бизнеса.
    – “Стори пойнты” — баллы трудоёмкости. Разработчики собираются на “Покер Планирования” и оценивают задачи между собой. Используют футболки (XS, S, M, L, XL) или степени числа 2 (1, 2, 4, 8, 16, 32).
    – Количество багов в коде, написанном разработчиком.
    – Скорость — любые баллы делим на время.
    – % отклонения от собственной или командной оценки.

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

    Рассмотрим роль тимлида в качестве примера: индивидуальная отгрузка ниже среднего, но каждый разработчик под его влиянием работает быстрее и качественнее. Увольнять его на основании общих метрик просто преступно.

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

    Что с этим делать?
    – Если хочется кого-то уволить или повысить — спросите менеджера отдела. Он всё знает без метрик. Для уверенности проведите 360-градусную оценку.
    – Всё равно измерять все возможные/удобные показатели, но не принимать решения только на них.

  • Прибыльное агентство: Отказ от уникальных услуг

    Прибыльное агентство: Отказ от уникальных услуг

    Прибыльное агентство: Отказ от уникальных услуг.

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

    Один из способов победить эту проблему — перестать создавать полностью уникальные решения под каждого клиента.

    Как превратить услугу во внутренний продукт:
    – Берём одну типовую услугу, которую мы точно умеем оказывать и на которую есть спрос.
    – Документируем весь процесс оказания.
    – Выделяем шаги, которые требуют высокой квалификации.
    – В этих шагах заменяем квалифицированного специалиста на полуфабрикаты — заготовки, готовые рецепты, чеклисты, шаблоны. Теперь он делает заготовки, а не уникальные решения.
    – Добавляем границы кастомизации. За границы не выходим — это уже другой процесс.
    – Обучаем менее квалифицированных сотрудников проходить по шагам весь процесс.
    – Добавляем контроль качества — чтобы стандарт не падал при росте объёмов.
    – Повторяем с правками и улучшениями до тех пор, пока процесс не будет работать без вмешательства специалиста и руководителя.

    Для агентства — это конвейер. Внутри всё одинаковое, снаружи — кажется уникальным. Клиент может думать, что услуга уникальна — брендирование, выбор оформления из нескольких вариантов, пара уникальных страничек.

    Очевидные плюсы:
    – Увеличенная маржа — высокооплачиваемый специалист привлекается только к созданию конвейера.
    – Услугу могут оказывать легко заменяемые сотрудники или начинающие специалисты.
    – Просчитываемая экономика с точками масштабирования.
    – Ниже риски, так как услуга проще.
    – Можно построить бизнес, а не самозанятость.

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

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

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

    Я считаю, что лучшее решение — гибрид.
    – Работает конвейер: основатель-специалист преодолел себя и построил скучную, но маржинальную услугу.
    – Цены не потоковые, а чуть выше рынка.
    – В отделе продаж происходит сортировка клиентов. Уникальные и сложные случаи переводятся в проектный отдел — с другими процессами, командой и бюджетом.

  • Почему 💾 обозначает Сохранить?

    Почему 💾 обозначает Сохранить?

    Удивительно, но в 2025 году мы всё ещё используем иконку дискеты как символ сохранения документов.

    Но как дискета, прародитель флэшки из прошлого века, связана с сохранением файлов на моём компьютере?
    Я начинал путь с ZX Spectrum, мне всё понятно и я сейчас объясню этот незаметный парадокс.

    В первых компьютерах не могло закончиться место на жестком диске. Потому что совсем не было жесткого диска! 🤯 Пользователь включал компьютер и попадал в “чистую” операционную систему с заводскими настройками, которая ничего не знала про предыдущие сеансы. Сама операционная система была записана на чип. Хранить наши файлы в компьютере было негде.

    Для хранения и перемещения информации использовали перфокарты, магнитную ленту, а позднее ­дискеты разного диаметра.

    Созданный на компьютере файл нужно было “сохранять” — копировать из оперативной памяти на вставленную в дисковод дискету. Если этого не сделать, оперативная память стиралась при выключении и все труды терялись.
    Для первых пользователей иконка дискеты была понятна, ведь она делала ровно то, что нарисовано — сохраняла на дискету. Образ менялся вместе с носителем и остановился на последнем массовом формате: 3,5-дюйма, 1,44 МБ.

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

    Сегодня мы видим, как подросток нажимает на иконку дискеты на айфоне в интерфейсе облачного приложения. Он никогда не держал дискету в руках. Что он думает про этот значок? Стала ли для него дискета абстрактным символом без смысла?

  • Скрипт для проброса UTM-меток через лендинг во внешний сервис

    Ситуация:
    На лендинг из разных каналов заливается трафик, размеченный utm-метками.
    Оформление заказа происходит на внешнем сервисе. На лендинге размещены кнопки [КУПИТЬ], по нажатию на которые посетитель покидает лендинг. Внешний сервис тоже умеет учитывать utm-метки.

    Задача:
    Проставить в ссылки на кнопках действия те же метки, с которым посетитель пришёл на лендинг.

    Решение:
    Скрипт автомагически добавит utm-метки ко всем ссылкам с указанной базой на странице.
    Укажите базовую ссылку в переменной TICKET_URL_BASE.
    Если utm-меток в адресной строке нет, ничего не произойдёт.

    Для Tilda вставляем скрипт в блок HTML-код.
    Для остальных сайтов — добавляем скрипт в подвал сайта.

  • План выхода на миллион

    План выхода на миллион

    Давно читал статью про движение успешных стартапов, которые не стали брать инвестиции. Один из самых известных таких проектов — Mailchimp. Компания с огромным оборотом осталась в руках основателей. Идея мне очень понравилась. Мысль окупаться и зарабатывать без внешних инвесторов засела в голове.
    Чтобы это получилось, мы (пока) не тратим время на привлечение инвестиций, а считаем, сходится ли экономика проекта. Сможем ли платить по счетам?

    Мы запустили новое направление, которое должно стать основой нашего процветания.

    Со средней покупки в этом направлении стартап зарабатывает 160 рублей — несколько процентов от сделки. Усилий по продаже практически нет, заказ оформляется клиентом без участия операторов и продавцов. Трафик условно бесплатный — мы уже получаем его через SEO. Чтобы заработать миллион, нам нужно продать 6500 заказов в месяц. Кажется, дохрена. Делим на 30 дней — примерно 220 заказов в день, теперь норм.

    Инвентарь для заказов поставляют партнёры, они же получают львиную долю выручки и приводят часть трафика в воронку.
    В данном проекте именно партнёры являются драйвером роста.

    По опыту и анализу средний партнёр приведёт 200-300 заказов за месяц. Это почти совпадает с расчётом выше — 220 заказов в день. Условно, прикинем, что нам нужно 30 действующих средних партнёров в каждом месяце.

    За прошлый год в нашей CRM было взаимодействие с 397 целевыми партнёрами, которым мы продали любую небольшую услугу. Задача ближайших месяцев — подключить 10% этой базы на новое направление.

    Выглядит всё реально. Пойду делать.

  • Матрица роста агентства

    Матрица роста агентства

    Упрощённая модель предлагает два пути роста: бутик или конвейер. Много лет назад на конференции я увидел расширенную матрицу 2х2, которая точнее отражает будущую эволюцию — не только по чеку, но и по открытости.

    Диджитал-агентство начинает свой путь где-то в центре матрицы.
    Агентство готово делать уникальные и сложные проекты, но берёт и серийные в низком чеке. Запускает лидген и выстраивает клиентский сервис. При этом охотно берёт субподряды. Добавляет новые направления и слабо их оптимизирует. В общем, агентство пробует всё и питается всем, что под руку попалось.

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

    Классическое Агентство — владеет портфелем клиентов, делает им стратегию, часть закрывает инхаус и ходит по рынку за субподрядами.

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

    Конвейер делает одинаковые штуки на потоке и с низким чеком. Кому не подходит конвейер — извините, следующий. Массовая настройка Авито или лендинг под ключ в этой категории.

    SaaS / Продукт — мы хотим сделать один раз, а потом видеть от клиентов только деньги. Упаковываем накопленный опыт в продукт: в робота, сервис или набор методичек.

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

    В любом случае, определяться с вектором движения придётся. Лучше это сделать как можно раньше и двигаться осознанно.

  • Как возглавить восстание машин

    Как возглавить восстание машин

    Небольшая памятка самому себе как внедрить AI в реальные процессы в проекте.

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

    • В самом начале нужно забыть, что мы хотим внедрить AI. Думаем от задачи, а не от технологии.
    • Какой ценный конечный результат ожидается от этой роли?
    • Какие должностные инструкции мы для него создадим?
    • До компьютеров это решалось иначе. Продумать в точности по шагам, как бы это решал живой человек.
    • Ассистента нужно проектировать точно также, как проектируются компьютерные игры, финансовые автоматизации и учётные системы — на бумаге. В нашем случае — нарисовать блок-схему по шагам.
    • До того как втыкать везде AI, нужно разобраться где действительно нужен AI. Главный вывод всех AI-стартапов, пытающихся выполнять повторямые задачи реального мира — чем меньше участков с AI, тем меньше фронт ошибок.
    • Если можно обойтись без AI — лучше обойтись без AI: есть логика, весовые модели принятия решений, ML и даже участие человека. Подходить с умом.
    • Для каждого участка схемы выбираем подходящий способ автоматизации. Если принятое решение логическое (Да/Нет/И/Или/Если) — пусть принимает решение логический автомат с помощью прозрачного кода.
    • AI попадёт только в те участки, где нужно принимать осознанные решения. На практике это 1 из 5-10 действий.
    • Если разбить задачу на более простые участки, то некоторые участки могут выполнять более дешёвые и быстрые LLM-модели. Попробовать на практике, какая модель справится.
    • Также работает наоборот — самые чувствительные и сложные участки отдавать более умным и дорогим LLM-моделям.
    • Не забывать передавать полный контекст происходящего из памяти и прошлых шагов в агента.
    • Проверить, какие персональные данные в какие AI и API мы отдаём. Постараться не передавать ненужную для принятия решения чувствительную информацию.
    • Эксперименты демонстрируют, что LLM дает лучшие результаты, если его мотивировать. Поэтому в каждый промпт добавляем обещание денежного вознаграждения, повышения на работе и подчёркиваем значимость задачи в формулировке.
    • Исследования китайских учёных показывают, что наилучшие результаты дают топологии с участием нескольких AI-агентов.
    • Самый простой способ достичь качества — использовать на участке пару агентов Контролера и Исполнителя. Это эффективно устраняет нежелательные галлюцинации и другие сбои в ответах.
    • На каждый участок схемы нужна своя пара агентов.
    • Сложные топологии (звезда, дерево, mesh-сеть, рандом) улучшают качество, но в большинстве случаев можно ограничиться парой агентов.
    • Если нужно переводить результат — делать это на самом последнем шаге непосредственно перед отправкой пользователю. Так избежим каскадного накопления неточностей перевода при обработке на разных шагах.
    • Хранить все логи: сам запуск автоматизации, смена статуса, полученные после вставки переменных итоговые промпты (!), ответы AI. В общем, все шаги записывать.

    Вывод: до внедрения AI разложить процесс на шаги и понять в каком шаге нам нужен AI. И постараться обойтись без него.