Интервью: Software Applications Architect в SoftServe и стартапер Олег Новосад | robot_dreams
Для отслеживания статуса заказа — авторизируйтесь
Введите код, который был выслан на почту Введите код с SMS, который был выслан на номер
 
Код действителен в течение 5 минут Код с sms действителен в течение 5 минут
Вы уверены, что хотите выйти?
Сеанс завершен
На главную
По популярности перегнали Duolingo: CTO «Давай займемся текстом» о разработке стартапов параллельно с фултайм-работой

По популярности перегнали Duolingo: CTO «Давай займемся текстом» о разработке стартапов параллельно с фултайм-работой

Интервью с Олегом Новосадом, Software Applications Architect в SoftServe и стартапером

Software Applications Architect в SoftServe Олег Новосад за свою десятилетнюю карьеру в IT параллельно с основной работой реализовал два стартапа и несколько собственных пет-проектов. Его последний продукт — мобильное приложение для изучения украинского «Давай займемося текстом», где Олег выполняет роль CTO.

Соучредительница стартапа, копирайтер Наталья Мисюк, во время оккупации Крыма переехала во Львов и перешла с русского на украинский. Вместе Олег и Наталья нацелены влюбить в украинский язык как минимум 40 млн человек.

Приложение в первые дни после запуска вошло в топы AppStore и PlayMarket, его загрузили более 60 тыс. раз. Каждый пятый пользователь посещает его по меньшей мере раз в месяц.

В интервью robot_dreams Олег Новосад рассказывает:

  • как увлекся мобильной разработкой и за несколько дней осилил Swift после Java;
  • об опыте реализации стартапов самостоятельно параллельно с фултайм-работой;
  • почему React Native он доверяет меньше, чем Flutter, и как организован бэкенд приложения;
  • об игре внутри игры и как в приложении планируют реализовать обучение с использованием искусственного интеллекта и синтеза речи.

[ред: интервью переведено с украинского]

[ред: интервью переведено с украинского]

 Олег Новосад, CTO «Давай займемось текстом»

От helloworld на Java до CTO в масштабном проекте: с чего все начиналось

— С чего возник интерес к IT и как вы попали в SoftServe?

Влечение к IT возникло еще в детстве, поэтому по окончании школы я поступил во Львовскую политехнику на компьютерную инженерию. На последнем курсе прошел в SoftServe IT Academy на направление Java и в результате работаю здесь уже 10 лет. На первом проекте я был FullStack и к мобильной разработке прикасался лишь частично. Но впоследствии проект закрылся и я попал набэнч. Параллельно с тем «пилил» что-то свое на Android, мои два приложения были в PlayMarket: одно, связанное с VK, я уже удалил, а другое, блокнот в виде папок, еще есть. Где-то в Бангладеше им до сих пор пользуются, потому что оно написано под старую версию Android.

Между тем в SoftServe успешно закончился мой второй проект, и меня позвали на другой, с iOS. Хотя опыта с ним я не имел, через несколько дней я подучил Swift, и, как оказалось в процессе, iOS очень похож на Android. Работа продолжалась полтора года и потом еще полгода на Android-проекте, где я дорос от middle-pro до практически техлида. Но у нас уже был человек в этой должности, я был словно «подлидом». Поэтому я решил идти в архитектуру и официально с Senior перескочил на архитектора.

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

— У вас за плечами — два собственных стартапа. Какой опыт, вынесенный из них, помогает в работе над ДЗТ?

Оба стартапа я реализовывал своими силами, работая фултайм в SoftServe. В отличие от предыдущих двух приложений, это уже были более серьезные и масштабные проекты:

1. Онлайн-квест Severenity — планировался как MMORPG в реальном мире. Идея заключалась в том, чтобы пользователи в реальном мире через AR при помощи смартфонов применяли игровые скилы: атаковали, ставили блоки, фармили игровых боссов и т. д. Игра была бесплатной, с внутриигровыми покупками. Я верил в проект, развивал 3,5 года. Но он выжирал столько ресурсов, что в конце концов я его закрыл.

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

2. Второй продукт пошел лучше, там были реальные платежеспособные клиенты. Partymaker — приложение для стриминга из заведений, благодаря которому люди могли увидеть, что сейчас происходит в баре или ресторане, прежде чем туда идти. Сервисом пользовалась даже львовская сеть !FESTrepublic, в которую входит «Криївка», «Мазох-café», «Львівська майстерня шоколаду» и т. д.

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

Кстати, я подавал Partymaker на Украинский фонд стартапов, но его отсеяли, и в январе 2020 года я его закрыл. Потом начался локдаун, поэтому в то время Partymaker точно не взлетел бы. УФС впоследствии сам предложил сотрудничество, но было уже поздно.

— Как узнали о ДЗТ и что мотивировало присоединиться к нему?

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

Я тогда немного интересовался Flutter и решил, что нужно попробовать набросать приложение. За полдня сделал демку с механикой свайпа правильного ответа, типа Tinder.

Как выглядело демо проекта

В тот же день написал основательнице проекта Наталье Мисюк, показал демоверсию и рассказал об идее сделать мобильное приложение, описал возможные форматы игр.

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

— Как в SoftServe реагируют на ваши сайд-проекты?

Вся моя параллельная деятельность никак не влияет на эффективность работы, я все успеваю, потому в SoftServe поддерживают мои начинания. Через месяц после запуска ДЗТ компания на внутреннем ресурсе написала пост о приложении с призывом попробовать его. А в День украинской письменности и языка у нас была коллаборация с SoftServe: в своих соцсетях они написали об украинских аналогах айтишного сленга.

Скриншот поста SoftServe о приложении

Для компании это тоже дополнительный пиар, и пока не страдает моя производительность, почему должны быть какие-то вопросы?

Что «под капотом». На чем и как создавался ДЗТ и что стало главным техническим вызовом

— Чем вдохновлялись при работе над приложением?

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

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

Игра «Врум-врум»

Во время ее создания вдохновился когда-то популярной игрой с похожей механикой «Клавогонки». Работая с Flutter, я присоединился к разработке игрового движка Flame для этой платформы. Мне было интересно попробовать его на реальном продукте, потому решил сделать так, чтобы машинка в этой игре реально ездила.

В «Круть-верть» игрокам нужно выбрать два слова и картинку, имеющие одинаковое значение. Мы с командой всегда стараемся сделать игровые механики более интересными, ведь просто двумя кликами образовывать пару правильных ответов — скучно. Рисовать стрелочки между ними — уже интереснее, но еще не то.

Игра «Круть-верть»

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

— С какими техническими вызовами сталкивались при разработке?

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

Возможность редактировать контент без необходимости обновлять приложение позволяет нам быть гибкими и вносить изменения в уже опубликованные уровни. Мы тоже не все знаем, и может прийти человек и сказать: «А у нас так не говорят». Когда выпускали «Круть-верть» с говорами, общались с закарпатцами, и они сказали нам, что одно слово у них так не употребляют. Мы проверили и изменили это задание в приложении.

Сейчас Наталья сбрасывает мне новые уровни в Excel-таблице и папку с изображениями к ним, и я с помощью скриптов заливаю все. Возможно, нашему будущему работнику дадим задачу сделать своеобразную админку, чтобы будущий ассистент мог добавлять уровни самостоятельно, вводя информацию в соответствующие поля, после чего она будет улетать на наш dev и production.

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

Хорошо, что у нас восстановление энергии не зашито в приложении, а контролируется бэкендом. Мы это сделали намеренно, ведь пользователь может выключить устройство, приложение может «умереть» или быть «убитым системой». А я по опыту знаю, какие непредсказуемые что Android, что iOS: сегодня может работать в фоне, а завтра что-то переигралось — и уже нет. А бэкенд на инфраструктуре Google, который дает SLA 99 %, работает стабильно.

Были вопросы от пользователей, почему всем генерируется энергия в одно и то же время, а не персонально (условно, если потратил всю энергию в 16:58, то в 17:00 получаешь новую; если потратил в 17:02, то ждешь до 18:00). Мы это сделали нарочно, для оптимизации расходов на инфраструктуру, так как если насчитывать каждому из 60+ тысяч пользователей отдельно, то это потребует немало ресурсов. Но вопросы энергии и ее восстановления остаются открытыми, возможно, будем экспериментировать с ним.

— Для разработки вы использовали Flutter. Почему именно он, а не Kotlin, например?

Опыт двух моих прошлых стартапов. Первый я писал нативно для Android и iOS (Java и Swift, соответственно) и понял, что делать на две платформы одной технологией быстрее, особенно если речь идет о типовом продукте. Нативная разработка нужна только тогда, когда видишь, что нельзя реализовать это кроссплатформенно, потому что есть сильная интеграция с системой. Наше приложение не из таких.

Второй мой стартап я писал на React Native. Он интересен, но до сих пор не вышла даже версия 1.0. На нем реализовано немало крутых продуктов, но React Native проседал в плане производительности, ведь архитектурно он сделан так, что существует мост между платформами, и JavaScript фактически «спрашивает» у iOS, что там; а Flutter рисует все сам, как оно должно выглядеть на Android и iOS.

Важно, что React Native — это разработка Facebook, а Flutter — от Google. Последнему я доверяю больше, мне кажется, меньшая вероятность того, что Google закроет его.

Еще одно преимущество Flutter — если есть приложение на мобильных платформах, то его легко можно сделать для web, а React Native это не очень умеет. Также Flutter трендовый и имеет огромное сообщество, что немаловажно.

С Flutter разработка идет быстро, а ее длительность тоже играет важную роль. По той же причине для бэкенда выбрали Google Cloud Platform и Firebase, у нас нет типичных микросервисов как таковых. Есть несколько триггеров, на которые реагирует бэкенд, это дешево и быстро пишется.

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

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

«Врум-врум» ​​— это де-факто игра в игре. За движение машинки отвечает отдельный игровой движок, реализующий ее анимацию, перемещение, детали. Сделать такие плавные движения в других приложениях довольно сложно. Поэтому благодаря этому движку практически любую 2D-игру мы можем запихнуть в приложение. Тут уж на что фантазии хватит: самолетом летаешь, ракетой, сбиваешь что-то, достаешь символы и т. д. Посимвольный ввод текста в этой игре — это тоже уникальный виджет.

Когда искал идеи оформления для «Круть-верть», то обращался к ChatGPT, чтобы придумать визуально похожую на iOS date picker механику; он набросал мне направления, и я начал искать. Но наш барабан в игре — это уникальная с точки зрения нашего контента разработка. Хотя по факту это три списка, каждый из которых листается бесконечно.

Также я был первым, кто интегрировал платежную систему LiqPay в Flutter для этого приложения. Пользователи говорили: «Ну ты точно не первый», но я в публичном пространстве информации не нашел, по крайней мере я первый, кто об этом рассказал (смеется, — авт.). Писал все сам нативно, но опубликовал библиотеку для работы с LiqPay, теперь все могут ею пользоваться.

— Какой технический челлендж был для вас самым интересным во время работы над приложением «Давай займемося текстом»?

Мы работаем над одной большой интеграцией. Если у нас все получится, то бум будет еще больше, чем в день релиза. Не могу рассказать детали, но скажу так: «Давай займемося текстом» появится еще кое-где. Все слышали об этом бренде. Это все, что я могу пока сказать. Сложность состоит в том, что наш кусок мы должны реализовать в другом продукте, а технологии совсем разные. То есть мы должны «нас имплементировать в них», мобильное приложение в мобильном приложении. Есть техническое решение, которое я придумал сейчас на стадии реализации.

Не челленджем, но интересной технической задачей были ежедневные напоминания о посещении приложения, которые очень классно подняли нам активность. Это был первый момент, когда я столкнулся с недостатками Flutter. Я не хотел переносить эту функцию на бэкенд. Во-первых, это лишние деньги, во-вторых, был вопрос с интернационализацией, ведь пользователи у нас в разных часовых поясах: есть и из США, Канады, Индонезии и т. д.

Мы хотели, чтобы сообщения поступали в 20:00 по местному времени и чтобы эти пуши были разными. Потратил две-три недели, но на Flutter это реализовать нормально не смог, поэтому пришлось делать по-другому. Мы собираем смещение временной зоны пользователей, сравниваем в минутах их местное время относительно украинского. Каждый час сервер мониторит, кому нужно отправить сообщение. Условно, сейчас в Украине 14:00, он проходит по списку пользователей и ищет, у кого сейчас 20:00, и присылает им. А в 20:00 по нашему времени рассылает сразу нескольким тысячам.

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

— Что планируете добавить в приложение в будущем?

Есть ряд новых фич, которые в процессе. Они не являются техническим вызовом, на них просто нужно время или людей. А по техническому вызову и концептуально новому направлению — это аудио и искусственный интеллект на пару с ним. Я активно общаюсь с музыкальной индустрией по поводу синтезирования языка. Искусственный интеллект мы хотим применить для изучения самого сложного элемента украинского языка — нашего произношения. Мы уже двигаемся в этом направлении, но нам нужно будет немало ресурсов для реализации.

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

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

Команда трех. Как распределены зоны ответственности в проекте и каких результатов достигли

— Кто сейчас в вашей команде и каково распределение ролей?

Сейчас нас трое: Наталья Мисюк, я и наша дизайнер Кристина Салабан, которую мы взяли недавно. Когда я заключал договор с Наталией, то четко оговорили зоны ответственности: вся разработка — на мне, контент — на Наталье. Маркетинг — в основном тоже она, я разве что делал ревью текстов, подыскивал знакомых в СМИ и т. д. Общается с аудиторией в большинстве своем тоже Наталья. Поиск партнеров, помощь и взаимодействие с бизнесами ложится на нас двоих, но где-то 70 % — на Наталье.

Первоначальный дизайн приложения нам сделала Лиза Дудик, с которой я познакомился, помогая с волонтерским приложением для молодежи. Она поработала с нами до сентября, но больше времени заниматься проектом у нее не было. Также мы участвовали в стартап-акселераторе Yep! Starter и в январе 2023 года взяли дизайнера в команду.

Менеджментом и поиском команды где-то на 80 % занимаюсь я. Но даже если кто-то хочет помочь, берем не всех. Так как это предполагает доступ к контенту, базе данных, тестовым версиям, следует подписать NDA и т. д. Сейчас два человека из SoftServe вызвались помочь с автотестами и автоматизацией, поэтому если и берем людей на волонтерских началах, то тех, которые могут не просто покликать приложение и найти баги, а улучшить процессы. Однако штатных middle-тестировщиков под Android и iOS нам не хватает, ведь наши тестеры-волонтеры полный regression не прогонят.

— Как вам работается без Project Manager, Business Analyst и т. д.?

Работается сложно, но вдохновенно. У нас есть ряд некритических багов, но глобальных проблем нет, 99 % пользователей — этоcrash-free-users, и этот показатель не падал ниже 97 %.

— После релиза приложение оказалось в топах украинских AppStore и PlayMarket. Что этому способствовало?

Еще с сентября 2022 года Наталья начала активно подогревать аудиторию информацией о том, что скоро выйдет мобильное приложение. В то время суммарная аудитория Facebook, LinkedIn и Telegram составила около 50к подписчиков. Я планировал релиз на октябрь, был уверен, что ревью приложений пройдет быстро. Но AppStore затянул с модерацией на месяц.

Также сыграла свою роль актуальность приложение, ведь с начала большой войны многие украинцы решили перейти с русского на украинский. Мы не обращались в СМИ, но о нас тогда написали немало ресурсов: от радио до профильных изданий. На третий день после релиза мы стали TOP-1 в украинском AppStore в разделе «Образование», на время перегнав Duolingo. После этого другие издания подхватили медийную волну, что тоже дало свой буст.

— Какие были показатели активности и справились ли сервисы с нагрузкой в ​​первые дни?

25 ноября мы запустились, уже через четыре дня у нас было 7 тыс. загрузок, за месяц — 15 тыс., и это без рекламы. Сейчас более 60 тыс. загрузок. Каждый пятый пользователь хотя бы раз в месяц заходит в приложение.

На старте был только упомянутый выше нюанс с начислением энергии для игроков. Связан он с тем, что Firebase-функции имеют ограничения в 9 минут: за это время они должны выполнить свои действия. Из-за плохо написанного кода функция насчитывала энергию не всем: она брала слишком большую выборку для начисления энергии и просто не успевала ее пройти. Условно, насчитывала первой тысяче, на следующий час уже пропускала этих пользователей, а брала тех, кому должна была добавить энергии до этого. Это продолжалось день, дальше мы этот баг исправили.

Жалоб по поводу крашей не было, зато были вопросы по контенту. Некоторые умники писали: «А почему «Давай займемося текстом», а не «Займімося текстом»?», однако Наталья им аргументированно отвечала. Также пользователи просили функцию просмотра своих ответов, которую мы и планировали, но реализовали позже, а также требовали больше контента.

— Как монетизируетесь и как относитесь к внешним инвестициям? Каковы дальнейшие планы развития проекта?

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

Поначалу пользователи жаловались на большое количество рекламы, но Google решил эту проблему вместо нас. Ему показалось странным такое большое количество трафика на старте, поэтому рекламу в приложении он урезал до 10 %. В первый день мы получали до $ 20 от рекламы, а после этого — по 1-2. Подключили рекламу от других платформ, ее Google не трогал и через две недели уже снял свои лимиты.

Мы подавались на грантовые программы, проходим отбор в Украинский фонд стартапов, но процесс идет медленно. Также прошли отбор на стартап-трек конференции Web Summit.

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

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

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

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