Blog

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

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

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

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

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

  • К недавним воспоминаниям про ZX Spectrum добавились свежие новости и неизвестные факты

    К недавним воспоминаниям про ZX Spectrum добавились свежие новости и неизвестные факты

    К недавним воспоминаниям про ZX Spectrum добавились свежие новости и неизвестные факты.

    В 1980-х игры и программы можно было получить по радио! Буквально записать FM-эфир на аудиокассету. Такие передачи выходили на BBC и других национальных радиостанциях по всей Европе.

    Поскольку версии языка BASIC отличались на ZX, Commodore, Atari и других платформах, был создан универсальный стандарт BASICODE. В этом формате шло вещание. Для воспроизведения таких записей нужно было вначале загрузить BASICODE, а затем записанную программу.

    В мае 2024 года игру для ZX Spectrum вновь передали в эфире Словенского радио.

    А в октябре 2024 вышел документальный фильм про историю ZX Spectrum “Чудо с резиновыми кнопками”, деньги на съемки которого собрали на Кикстартере.

    Интересные ссылки:
    – BASICODE на Wikipedia
    – Новость об эфире с игрой
    – Фильм The Rubber-Keyed Wonder (англ.)
    – Фильм Чудо с резиновыми кнопками (перевод на русский язык)

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

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

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

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

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

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

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

  • Матрица “Винни-Пух” для Отдела продаж

    Матрица “Винни-Пух” для Отдела продаж

    Матрица “Винни-Пух” для Отдела продаж.

    Понять, как продавать клиенту, можно за 5 минут — если представить его героем «Винни-Пуха». Мы давно применяем эту матрицу в продажах и работе с клиентами. Подсмотрено у Павла Гительмана на курсе по маркетингу.

    Итак, к нам пришёл новый клиент.
    Определяем его положение в матрице по двум осям — открытый/закрытый и
    уверенный/неуверенный.

    Результат легко соотносим с персонажами сказки Винни-Пух и все-все-все.

    Винни-Пух — Открытый + уверенный в себе.
    Чтобы продать что-то Винни, достаточно указать на новую возможность — где-то там за холмом есть дуб с пчёлами. Медведь уже схватил Пятачка, взял ружьё и сам туда пошёл.

    Пятачок — Открытый + неуверенный в себе. Чтобы Пятачок что-то купил, ему нужен Винни-Пух и его вера в успех.
    Пятак, мы уже ходили за мёдом много раз, тут всё то же самое. Бери меня за руку, бери ружьё, оплачивай счёт и запускаем проект.

    Ослик Иа — Закрытый + неуверенный в себе.
    А вы точно не мошенники? Покажите сертификаты. Есть ли возврат денег? У вас там неточность в реквизитах. Ослик — самый сложный случай. Под него стоит сделать лендинг, подготовить список частых ответов, но продавать ему ­тяжелее всего.

    Кролик или Сова — Закрытый + уверенный в себе. Этот клиент сам всё знает, он пришёл подготовленным. Расскажите про скидки и команду.

    Типаж клиента легко определить — стоит спросить, как он принимает решения и что важно при выборе.
    Менеджеры легко описывают клиента друг другу и адаптируют рабочие процессы, стиль общения и акценты коммуникации под его потребности.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Открываем диджитал агентство — плюсы и реальные ограничения

    Открываем диджитал агентство — плюсы и реальные ограничения

    Открываем диджитал агентство — плюсы и реальные ограничения.

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

    Плюсы для старта:
    – Не требует стартового капитала — можно взять первый заказ и выполнить самому.
    – Рынок насыщен заказами — многие находят первых клиентов через рекомендации знакомых. “Сарафан” — значимый источник денег для многих малых агентств.
    – Легко найти исполнителей на фриланс, в найм, аутсорс, аутстафф или субподряд.
    – Доход специалиста быстро начинает превышать доход в найме.

    Вот только при всех этих плюсах в бизнес-модели агентств есть существенные ограничения.

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

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

    В агентство чаще всего не на что брать инвестиции. Самая популярная попытка “вложиться” в агентство — потратить бюджет на маркетинг самого агентства в новом рекламном канале.

    Можно построить большой отдел продаж, но есть предельное количество клиентов и стеклянный потолок — подробнее в этом посте.

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

    Агентство (особенно маленькое) сложно продать — персонал и контракты могут быстро уйти на рынок после покупки. Покупатели это понимают.

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

  • Как быстро провести аудит чужого кода с помощью AI

    Как быстро провести аудит чужого кода с помощью AI

    Как быстро провести аудит чужого кода с помощью AI.

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

    Моя версия, как сделать аудит кода с помощью AI:
    Клонируешь репозиторий.
    Запускаешь Cursor AI — форк VS Code с встроенным AI.
    Ждёшь пока Cursor проиндексирует код и построит локальную базу.
    В это же время в чат с ChatGPT загружаешь файлы package.json, composer.json, requirements.txt, gitlab-ci.yml, docker-compose.yml или что у вас там в корне лежит.
    Формулируешь задание написать промпт на английском языке для другого AI, который будет проводить аудит кода. Указываешь все аспекты и особенности, на которые хочешь обратить внимание. Можно попросить сфокусироваться на безопасности или тех долге.
    GPT пишет промпт на пару страниц и этот промпт вставляешь в Cursor AI.

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

    PS: Очень полезно запускать такой аудит на своём проекте.

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

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

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

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

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

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

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

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

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

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

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

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

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

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