будни

P.S. Android-пользователи жалуются, что у них вместо Unicode-символов 𝑥 (mathematical italic small x), 𝑐, 𝑢 и 𝑛 в тексте показывается вытянутый прямоугольник ☐. Так мы узнали, что в Android-ах (видимо, речь идет о системном Roboto) нет ключевых математических символов. Приземление в реальность.

Проблему можно починить, добавив в медузные шрифты нужные глифы (артдиректор в отпуске, дизайн отдел и так перегружен) или заменив красивые специальные буквы типа 𝑥 на обычные курсивные английские x. Так и сделали. Извините, что сразу не догадались.

Увольняюсь из Пьюр.

Мне трудно и я устал. Дело в отношениях с владельцем Pure, Ромой. Я благодарен Роме за возможность поработать вместе, это были очень интересные полгода, я многому научился.

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

Плохие пользователи (bad actors) бывают двух типов: те, кто стригут мелкую монету с массовых рассылок и те, кто шантажируют точечно, но на крупные суммы. За эти полгода мы ударили по обоим категориям.

Массовые рассылки происходили из Нигерии (не шутка). Мы прикрыли этот канал и придумали и запустили удобную админку для модерации тысяч фотографий, так что у нас в ленте больше нет странных фотографий с номерами вацапа на них. Мы начали накапливать данные ручной модерации для последующей реализации алгоритмов машинного обучения.

Шантаж происходит так, что вас уводят в не анонимный (читай любой другой) мессенджер, где вы обмениваетесь текстами или фото/видео. Атака может продолжаться часы или даже дни. Злоумышленник деанонимизирует вас по номеру телефона или соцсетям, находит ваших близких и шантажирует вас раскрытием деталей переписки. Для борьбы с этим мы теперь даем отключить таймера у чата (ошейник!) — можно добавить человека в контакты и продолжать общение в Pure.

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

Ещё на нас была хакерская атака, которую мы успешно отразили (к сожалению, пока без подробностей).

Но главная моя работа в другом. Когда я пришел в компанию, в ней было 19 технарей. Много формальной документации, но мало реального общения, инициативы и ответственности за результат. Ухожу я из команды в 9 человек, с гораздо более живыми процессами. Буквально месяца не хватило запустить полноценный продуктовый цикл с новым, очень многообещающим дизайнером (привет, Надя!), но я знаю, что Pure на правильном пути.

До этого я работал в компаниях, в которых уже был правильный дух в технической команде. Я чувствовал его и пытался не сломать, но как его создать? Как целенаправленно поддерживать? Для меня это было загадкой и я боготворил людей, которые умеют его создавать — Егора Хмелева и Андрея Зайцева-Зотова, например.

Оказывается, нет никакой магии, недоступной мне, простому смертному. Достаточно не бояться говорить «нет» и верить своим чувствам. Это из области, которую трудно формализовать, но легко увидеть и почувствовать. Как это прекрасно сказал судья конституционного суда США, I know it when I see it. Если ваши разработчики ясно излагают свои мысли (ясно мыслят), свободны и инициативны — то всё в порядке. Если чего-то из этого не хватает — у вас будут проблемы. Я не говорю тут о hard skills вроде умения программировать — с этим проблемы возникают куда реже. Сложнее всего правильно договориться, что мы будем программировать и для чего.

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

Менять мир вокруг себя страшно, но эти изменения и есть жизнь.

Воу, программный пост получился. Аминь и с рождеством вас 🎄

Если после обновления на High Sierra у вас в скетче у части картинок «вымылись» цвета — вы не сходите с ума, это баг и для его починки нужно обновить скетч до 47 версии и прогнать на побитых файлах специальный плагин.

У нашего арт-директора Насти эта ошибка совпала с установкой нового монитора (тот самый 4K 21” от LG) и я чуть с ума не сошел в поиске проблемы с цветовым профилем.

В кружочках «вымылись цвета»

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

Наша задача — привести все это в порядок, стабилизировать, обеспечить развитие и масштабирование.

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

Год назад назад я рассказывал вам про нашего клиента, w1d1. Они собирались сделать приложение для развития креативности сотрудников IT и дизайн-компаний. Обычно, мы заключаем контракт на пару месяцев за фиксированную сумму денег.

Тут, мы договорились консультировать основателя за небольшой опцион — сделали ставку на то, что проект вырастет в десятки раз и мы продадим свою долю за много денег (да, прямо как в кино). В течении года я пару раз делился, как мы делали для них что-то техническое и постил вакансии.

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

Если очень кратко — то дела на картинках ниже, а подробнее — внутри.

Сегодня общался с клиентом, который хочет знать, сколько стоит сделать маркетплейс.

Трагедия в том, что предыдущий подрядчик уже взял кучу денег и потратил полгода клиента «на разработку», не задав базовые вопросы о бизнесе. Честно говоря, у него и не было шанса запуститься вовремя.

Пускай это жёсткий пример, но история классическая:
1. заказчик описывает задачу и просит назвать сроки и цены;
2. подрядчики называют сроки и цену и берут проект;
3. начинаются работы по проекту, и что-то идёт не так;
4. к дедлайну нужного результата нет, все недовольны. Но проект надо доделать.

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

Почему так происходит?

- 💼 заказчики живут в реальном мире: если продукт не начнет продаваться или решать другие задачи вовремя, то экономика бизнеса не сойдется и можно закрываться — поэтому они требуют четких сроков и смет;
- 🙏 подрядчики вынуждены комититься в сроки и деньги без детальной проработки проекта. Иначе проект возьмет более сговорчивый конкурент, и команда останется без зарплаты;
- 🛠️ разработчики в команде мечтают работать над сложными проектами уровня Яндекса, но вынуждены пилить такие кривые задачи, как будто их ставили некомпетентные дураки.

На самом деле все хотят как лучше.

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

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

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

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

На старте проекта бессмысленно требовать от заказчика четкости: вообще самое плохое, что можно сделать — это заставить его написать техническое задание (если он умеет писать ТЗ — то он и программирует неплохо). Вместо этого мы вначале 70-90% времени работаем исследователями — разбираемся, какую бизнес-задачу заказчика решаем и какие ресурсы и ограничения у нас есть.

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

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

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

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

Самое сложное в маркетплейсе — это источники спроса и предложения. Запрограммировать крупный маркетплейс — нетривиальная задача, но рекомендательные системы, борьба со фродом и прочие проблемы масштабирования — это problems good to have. Если вы столкнулись с этими задачами — значит, у вас есть покупатели и есть продавцы.

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

К сожалению, такое исследование рынка — не наша специализация. Мы с Федей теряем клиентов и деньги. Зато спокойно спим по ночам.

Не рекомендую делать «контрольные закупки» и просить своих разработчиков сделать не имеющие смысла вещи, но если ваши программисты редко задают вам вопросы «зачем», «как это будет работать» и «как это принесет нам денег» — то это красный флаг 🚩

Мы в компании «Федя и Самат» проводим эксперимент.

Пробуем 4-дневную рабочую неделю.

Мотивация простая: всё равно больше 4 дней нормально думать, именно думать, не просто клавиши нажимать — не получается. Раз так — что время зря терять? Лучше с толком отдохнуть.

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

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

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

Эксперимент продлится 2-3 месяца. Федя обещает регулярно отчитываться публично у себя в канале, а я, наверное, буду как обычно время от времени байки травить и отчитаюсь в конце.

Краткий список литературы (я сомневаюсь в её валидности): свежая статья от Harvard Business Review, английская википедия, красивый лендос и аж целое НКО.

Я записываю все зум-звонки по умолчанию. Зум напомнил в письме, что за три года я использовал 1,3Тб — 27406% из 5 гигабайт, включенных в тарифный план. Раньше он просто напоминал, а теперь обещает отключить запись, если не заплатить или не удалить лишнее.

Терабайт хранилища в зуме стоит 100 долларов в месяц, следующий шаг — уже 5 терабайт за 500$ в месяц. Облачные хранилища — довольно дорогая штука, но есть замечательный Backblaze, 2ТБ в котором стоят 10$ в месяц. Решено, перегоню все записи в него.

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

За пару вечеров я написал скрипт, который прямо сейчас переносит весь мой архив — 3000 записей. Средняя скорость — 1,3ГБ/минуту. Скрипт можно дергать сколько угодно раз и использовать даже для автоматического переноса всех новых записей. Пользуйтесь на здоровье.

А вы записываете зум звонки?

Да, по умолчанию5%
Изредка39%
Нет56%
3 733 ответов