будни

Похвастаюсь: ко мне на работу в Pure пришел бэкендер Антон Шурашов и начал приводить бэкенд Pure в чувство.

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

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

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

Я ищу опытного бэкендера для наведения порядка в PURE.

Pure это приложение для анонимного общения и знакомств. Профиль, лента, чаты, платежи. Мобильные клиенты под iOS и Android, веб версия.

Бэкенд сейчас в плачевном состоянии. Django python2 и немного python3, не DRF. Писался 4 года назад с планами, что это будет «платформа» для запуска разных приложений знакомств — был введен слой абстракций, который усложняет разработку и поддержку (на самом деле приложений два и они мало отличаются). Части вроде аналитики, которые стоит вынести в отдельные проекты, всё ещё внутри основного приложения. Нужно привести всё это в порядок. Задача не для слабых духом и не для тех, кого пугает слово legacy.

Из хорошего: 1) несколько сотен тысяч MAU, пользователи радуются и платят деньги; 2) интересные продуктовые планы — хотим быть лучшим приложением для анонимного общения; 3) мы готовы выделять 40-60% времени на улучшения и рефакторинг — хочется сделать конфетку не только снаружи, но и изнутри; 4) работа удаленная и щедро оплачивается; 5) я ищу человека готового включать голову и брать ответственность — не «просто кодера».

В команде: ещё один бэкенд-разработчик (толковый!), по два мобильных разработчика на iOS и Android, три фронтендера, два дизайнера, инженер ops и два тестировщика. Основатель и владелец проекта — продакт, я — технический директор. Вся команда распределенная.

Идеальный кандидат: разработчик с опытом создания и поддержки больших python приложений в продакшене, которому хочется сделать большое и сложное дело. Работал с платежами и с мобильной разработкой: писал структуру взаимодействия клиентов с сервером, документацию и моки, занимался траблшутингом клиент-серверных ошибок. Понимает про базы данных, деплои, нагрузку и масштабирование, интересуется дейтингом и анонимными мессенджерами, ответственен и самостоятелен. Я сам далеко не идеальный техдир, так что готов к неидеальным кандидатам.

Пишите в личку или на [email protected]

Я отсмотрел 5000 фотографий профилей в Pure за 3 часа и нашёл среди них несколько пенисов и вульв.

Важное различие магазинов мобильных приложений Apple AppStore и Google Play в том, что каждое обновление всех приложений в AppStore проходит ручную проверку модераторами Apple. Правила достаточно подробные и написаны понятным языком, но при этом напирают на здравый смысл, а не на следование букве текста. Например, про порно они раньше приводили знаменитую цитату судьи конституционного суда США «узнаю, когда увижу» (сейчас цитируют определение из словаря). При этом то, к чему придерется один модератор, может пропустить другой. Гуглу всё фиолетово.

Новую версию нашего приложения недавно задержали в ревью AppStore из-за голого тела в ленте, так что держать ленту чистой от органов — важная задача.

Книжная цензура в царской России и СССР была в режиме премодерации, цензоры читали каждую книгу до печати; Роскомнадзор работает по схеме постмодерации, блокирует уже публичный контент. У нас гибридная модель: при загрузке фото его рассматривает наш алгоритм и при необходимости сервис машинного зрения Amazon Rekognition. Если они не находят голого тела, то картинка становится публичной и её с большой вероятностью посмотрит наш модератор и может удалить постфактум.

Наши модераторы работают в стандартной джанго-админке, из-за чего часть фотографий оставалась непросмотренной. Я провел в ней три часа. За эти три часа я успел просмотреть 5 тысяч фоток и хорошенько обдумать, что главное в новой админке — возможность одним кликом отмечать плохие фотки и мгновенно переходить к следующей пачке фотографий для просмотра. Очевидно хочется, чтобы все дубликаты однажды забаненной фотки банились автоматически. Главная метрика качества системы — сколько времени голая фотка провисит в ленте до удаления (хочется как можно меньше).

Наткнулся после этого экспириенса на разговор Марка Цукерберга и техдира фейсбука и удивился, что они там говорят про то же самое «улучшение детекта дубликатов в модерации». Правда у них другая большая проблема — всякая рачлененка и прочая жесть, от просмотра которой полный рабочий день 30 тысячам модераторов фейсбука очень плохо, а некоторые даже кончают жизнь самоубийством. Для борьбы с этим они собираются машинно блюрить части «жестких» картинок или переводить их в чб, чтобы смысл оставался понятен, а урон психике модераторов был поменьше. Слава богу у нас такого нет.

Очень интересно, как устроена система модерации во Вконтакте и у Одноклассников. Это ведь целый мир, гиганская сложная машина. Мне рассказывали, что у фейсбука есть отдельная система модерации приватных групп, в которых никто ни на что не жалуется. В этих группах сидят педофилы и довольные обмениваются детским порно, пока их не засекает сам ФБ и не сдает правоохранителям. Хочется похожие кулстори от ВК и Одноклассников послушать. Сколько платят модераторам? Какой рабочий день? На что странное жалуются пользователи? Интересно!

А админкой новой похвастаюсь как запустим, уже скоро.

P.S. После длительного просмотра фоток на самом деле больше ничего не хочется. Жаль, что приходится людям это делать.

Никогда ещё я не работал так много, как в последние 2 недели.

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

Теперь я боюсь меньше. Ставлю вопросы ребром, увольняю, выражаю недовольство и хвалю. Причин изменения поведения три: 1) я теперь знаю, что из любой ситуации есть выход, 2) нет смысла врать и притворяться, лучше говорить как знаю и как чувствую, 3) я довольно много повидал всяких технических штук и продуктовой работы, не боги горшки обжигают, как-нибудь прорвемся. Ещё одна важная причина — Рома (владелец бизнеса) не дает скучать и жестко, но справедливо спрашивает :)

Моя задача сейчас — это сделать из 16 специалистов (3 iOS, 2 Android, 3 бэкендеров, 3 фронтендеров, 2 дизайнеров, 2 тестировщиков и сисадмина) крутую продуктовую команду. Команда, в отличие от набора специалистов, решает задачи сообща, слаженно.

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

Мне важно, чтобы программисты имели и высказывали своё собственное мнение о продукте; чтобы недовольство дизайнером, процессом постановки задач, договоренностями и сроками высказывалось и решалось, а не копилось как «это руководители идиоты, уж я-то знаю, как сделать хорошо, но кого интересует моё мнение». Я хочу, чтобы программисты чувствовали ответственность за результат, а не только за код.

Недостаточно высказать эти лозунги. Нужно каждый день предлагать, требовать, не забывать контролировать обещания, выслушивать критику, тюнить процесс, правила игры. Это трудно, но безумно увлекательно. И я начинаю замечать первую положительную обратную связь. Такой кайф!

Коллеги - технические руководители, давайте встретимся поговорим, поделимся опытом. Хочу устроить неформальный митап в Москве. Пара докладов и общение за едой. Записывайтесь в формочку, договоримся о дате и формате.

Начнём с простого: почему дейтинг, почему Pure?

Знакомства и общение - самая интересная мне область приложения технологий. Здесь сильные эмоции; мы создаём среду, влияем на поведение людей, на их жизни. Я люблю книги (Bookmate), мне интересны медиа (Медуза) и я начал ценить видеоигры (RAWG), но дейтинг, общение - самый 🔥

Pure сегодня - сотни тысяч пользователей в приложениях под iOS, Android и в вебе. Распределенная продуктовая команда из более чем дюжины толковых специалистов. Есть куда приложить мои умения. При этом Pure - не корпорация как Badoo или Одноклассники с ВК. Не в обиду сказано, вы крутые, просто хочется другого.

Ну и самое важное для меня - создатель Pure и его продакт, Рома Сидоренко. Во первых, он мне очень нравится. Во вторых, у Ромы сильные те стороны, которых мне не хватает и которым я хочу научиться. Рома классно спрашивает по договорённостям, делегирует, использует рацио там, где я ударяюсь в эмоции и крутой продакт ❤

Привет! Давненько не писал и тому были причины:

1. У нас с женой родился сын. На третьем ребёнке я наконец распробовал, как классно быть отцом.

2. Ухожу из RAWG. Горжусь, что мы открыли API самой большой базы данных видеоигр в мире. Скоро ребята презентуют интеграции с крупными игроками. Коллеги, спасибо, вы классные!

3. Я технический директор Pure. Pure - анонимный дейтинг, где можешь быть кем захочешь.

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

Про страх начать 🙈

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

Стоило начать писать отчет, как он уже готов. Это заняло меньше получаса.

Я бы с удовольствием обменял 90% школьной программы на курсы прикладной психологии.

Ищете программиста? Я начинаю с того, что пишу описание вакансии, которое не стыдно показать классным кандидатам. Во время редактуры становится яснее, кто же нужен.

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

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

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

Вот пример вакансии до и после редактуры.

Исполнение детской мечты: я на встрече IETF в Монреале. IETF — инженерный совет интернета. За длинным столом сидят инженеры Google, Apple, Cloudflare, Fastly и Akamai и работают над протоколом QUIC. Рядом коллеги пишут патч для OpenSSL, занимаются шифрованием. За соседним столом работают над улучшением протоколов сетевого уровня, роутинга.

Мой вклад — внимание к цензуре. 4 года назад, мы играли в кошки-мышки с казахским министерством, пытавшимся заблокировать Медузу. Блокировки — фоновая мысль, с которой я живу до сих пор. Я часто думаю: как бы я решал задачу, если работал на государство и пытался заблокировать неугодный сайт или приложение. Не многие разработчики протоколов думают эту мысль — им не приходилось сталкиваться с цензурой самим.

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

😍🥰

Выяснили сегодня, что nginx плохо относится к кукам с дефисами в имени. Если кука не существует — то считает, что значение cookie-name равно всему, что идет после дефиса — -name в этом примере. Могли бы показывать какое-то уведомление, когда используешь такую бяку в конфигурации.

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

Интересно, что ввели мы дополнительную куку из-за изменений в Safari. Для большей приватности Safari начал сбрасывать куку поставленную через javascript, а не с сервера (чтобы рекламщики не могли следить за всеми). Если вы владелец макбука или айфона и вас регулярно выкидывает с сайтов — проблема именно в этом.

Такая вот цепочка событий.

upd: читатели замечают, что это поведение nginx — известная «фича, а не баг». Вот так и выдали мы себя, что не настоящие мы сварщики (админы), а только мимикрируем :)