Інтерв'ю: Software Applications Architect у SoftServe та стартапер Олег Новосад | robot_dreams
Для відстеження статусу замовлення - авторизуйтесь
Введіть код, який був надісланий на пошту Введіть код із SMS, який був надісланий на номер
 
Код дійсний протягом 2 хвилин Код з SMS дійсний протягом 2 хвилин
Ви впевнені, що хочете вийти?
Сеанс завершено
На головну
За популярністю перегнали 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 з цим завданням погано дає раду, ми хочемо зробити краще, аби іноземці могли легше та ефективніше вчити українську.

Ще статті
Експертки про те, як оцінюють кандидатів на нетехнічних інтерв’ю
Частина 2. Робота із записами: вставка, читання, змінення й видалення