будни

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

Два месяца переписывались с Apple по поводу in-app purchases и прочих коммерческих моментов. В результате всё решилось одним коротким звонком с Купертино. По телефону нам на хорошем русском объяснили, что «правила AppStore — это направляющие принципы, каждую ситуацию не распишешь формально, конкретно вам нужно сделать 1, 2, 3». Не стесняйтесь пользоваться опцией заказа звонка!

Интересно, что ни единого вопроса про Capacitor у Apple не было, хотя некоторые люди нас очень пугали, что любые веб-технологии — это сразу бан. Правда, наши фронтендеры собрали полноценное мобильное приложение — с оффлайном, входом через Apple ID и прочим, чего у сайтов обычно нет.

Раньше я был скептически настроен к кросс-платформенной мобильной разработке, но для не супер сложных приложений веб, кажется, победил.

Такой кайф, когда единая команда отвечает за продукт на всех платформах! Нет этого: «веб уже запрогал, андроид сделал не совсем как нужно, но сойдёт, а iOS-команда пока занята, ждём...»

Ура!

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

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

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

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

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

Тут современный ИИ может даже помешать.

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

Но вернемся к Рою, которого уволили из университета.

Через месяц, Рой с другом основывают компанию Cluely. Этот сервис — уже не просто способ обмануть собеседования, но общий инструмент для удобного и незаметного использования ИИ. Слоган компании, оцененной в 120 млн долларов — «cheat on everything» — «жульничай во всем / списывай везде». Рекламный ролик — парень пользуется ИИ через виртуальные очки, чтобы врать на свидании. Самоирония?

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

Стала ли наша память слабее от того, что мы не запоминаем десятков номеров телефонов, как раньше? Хуже ли мы ориентируемся в городе с появлением навигаторов? Становятся ли наши ноги и тело слабее от того, что мы ездим на машинах? Стоит ли отказываться от смартфонов, навигаторов, автомобилей? Стали ли мы хуже разбираться в мире с появлением гугла и тем, как он заменил библиотеки? К чему в этой цепочке примеров ближе ИИ?

Ещё одна аналогия, которая приходит в голову — это как если бы я поехал марафон на велосипеде. Буду ли я быстрее любого человека? Имеет ли это смысл? А что, если на работу доставщиком пиццы будут брать только победителей марафона?

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

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

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

Технически сейчас это программа на C#, которая в одну сторону торчит админкой для редакции, а в сторону читателей генерирует HTML-страницы сайта. Это популярный сетап из 2000-х. Техническую задачу я формулирую как облегчение процесса разработки без потери производительности сайта.

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

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

Но будет ли современное веб-приложение (SPA) так же производительно, как HTML-страницы из 90-х? Речь и о скорости первого открытия — можно ли загрузить JS после полной отрисовки страницы? — и о скорости перехода между страницами — быстрее ли JavaScript-логика, чем отдать готовый HTML с сервера?

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

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

Вдохновляюсь я вот этим видео, где инженер разбирает устройство фронтенда магазина строительных и промышленных инструментов McMaster. На первый взгляд может показаться, что это сайт из 90-х, на самом деле там под капотом почти все ускорения современного веба, которые только можно представить. Редкий случай хорошего видео для разработчиков, очень рекомендую.

P. S. Один из разработчиков McMaster пишет, что под капотом там VB.NET, хранимки и XSL-трансформации поверх XML для генерации веб-страниц. Хочется вот всё то же самое, только без VB, хранимок и XSLT. 🙈

Тормозит приложение.

На днях написала топ-менеджер одной ритейл-сети. Тормозит мобильное приложение. Медленно работает поиск, добавление в корзину, оформление заказа. Нажимаешь на кнопку и ждешь…

В ритейле каждая доля секунды задержки — это люди, которые не купили товары, прямые потери. Мобильные разработчики не исправляют ситуацию. Переводят стрелки на бэкендеров, мол это бэкенд тормозит. Как разобраться, на чьей стороне сломалось и починить проблему?

Хорошие разработчики собирают аналитику по производительности своих приложений — какое время занимают ключевые действия типа «открытие главной», «поиск», «добавление в корзину», «оплата». Это называется Real User Monitoring.

Дальше мы кладем эту информацию на график: на оси Х — время, которое занимает действие, на оси Y — количество пользователей. Столбики слева — хорошо. Длинный хвост справа — это несчастные, у них, например, экран оплаты грузится минуту! Эти люди поменяют приложение, если у них будет выбор!

Но это средние значения. Что, если приложение хорошо работает 23 часа в сутки, а по вечерам, в час-пик, в самое важное время, начинает тормозить?

Тут поможет другой классический график: на оси Х — время (вчера, сегодня в течении дня, завтра), на оси Y — время ответа (задержка, latency). Три черты — среднее время, медиана и 95 персентиль. То есть за сколько миллисекунд происходит оплата в среднем, у медианы и за какое время происходит оплата у 95% быстрых пользователей? Он помогает отследить, нет ли тормозов в определенное время суток или в день недели.

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

Итак, шаг первый — замерить экраны и действия.

Теперь можно переходить к поиску первопричины. Приложение может тормозить само по себе или из-за медленного бэкенда.

Тут мы опираемся на те же два графика, но уже смотрим скорость ответа бэкенда.

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

Хотите заказать классную разработку или аудит? Обращайтесь! @samatg https://fansdev.ru

Будущее уже наступило. Знакомый продакт-дизайнер, без опыта в программировании, показал проект, который собрал самостоятельно с помощью Windsurf. Это мини-приложение в телеграме для генерации картинок и видео через доступные на рынке модели. Человек без знания программирования в одиночку запускает сервис!

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

Договорились, что если проект взлетит — то мы его быстро перепишем, благо кода там немного.

А вот второе «будущее» не такое приятное. Мошенники начали притворяться мной в телеграме и писать знакомым. Коллеги говорят, это беда всех успешных студий сейчас. Так что, друзья, будьте осторожны, я в телеграме только @samatg

Опубликовал поздравление с 8 марта в бейзкемпе (это наш внутренний рабочий форум) и пожалуй продублирую его сюда.

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

Мне очень повезло — всю карьеру меня окружают крутые женщины-профессионалы и мне есть что вам сказать.

Поздравляю вас с международным женским днем! Это день посвящен женщинам, вашим правам, достижениям и борьбе за равенство. 

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

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

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

Ещё я горжусь тем, что в нашей компании ценят результат, а не пол. Если вдруг вы заметите, что в чем-то это не так, — пожалуйста, дайте знать.

С праздником!

Встречали это «вечное противостояние» между продактами и разрабами? Каждый думает, что лучше знает, что делать с продуктом:

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

Раньше я думал, это — «здоровый производственный конфликт». Теперь я считаю, что это — признаки «бытовой неустроенности», того, что с разработкой в компании есть проблемы. К сожалению, 90% команд живёт в этом состоянии.

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

Я приму участие в этом курсе — но об этом в следующий раз.

Помогая клиенту из России запустить мобильное приложение, узнал, что Apple теперь разрешает принимать платежи картами напрямую (раньше всё шло только через App Store, к которому российские карты сейчас не привязать).

В Европе это стало возможно благодаря закону о цифровых рынках, а в России — благодаря решению ФАС.

Разработчикам всё равно придется платить Apple комиссию 27%, но зато можно принимать российские карты. Доступно только для российских разработчиков и пользователей. Вот тут отличная инструкция.

5 лет назад мы с Федей начали свое дело.

Начинали мы как два технических директора-консультанта и назвали компанию «Федя и Самат».

За 5 лет мы набрались опыта, собрали свою команду. Теперь мы автоматизируем бизнесы, проводим большие аудиты, (пере)запускаем сложные проекты; в компании уже больше 20 инженеров, архитекторов и менеджеров и называемся мы теперь более серьезно — «ФАНС разработка».

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

В честь праздника мы запускаем новый сайт, на котором будем потихоньку собирать кейсы и статьи. А еще там есть про то, как мы работаем и почти вся команда!

🎉 🥳

На днях у нас случилась сложная ситуация с одним из проектов: тревожность клиента и неидеальная коммуникация с нашей стороны породили у клиента сомнения в нашей компетентности.

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

Федя написал замечательный пост по мотивам этой ситуации. Распечатаю и повешу на стену.