В одному абзаці
Krapka – тренажер друку для тих, хто вчиться читати другою мовою: ви набираєте справжню літературу свого рівня тією абеткою, яку хочете довести до автоматизму. Сама ідея продукту невелика. Зате виробництво за нею зовсім не мале: кожна історія в каталозі має три перекази різної складності, написані мовою оригіналу, і переклад кожною з семи інших мов, звірений речення до речення. Тож той самий текст можна набирати й читати з перекладом, хоч би з якою мовою прийшов читач. Шістдесят вісім історій, вісім мов, три рівні складності – це понад 1600 окремих текстів, і в кожному перекладі речення точно відповідає реченню оригіналу. Якби все це замовляти в людей, пішов би річний бюджет цілої редакції. Тут це конвеєр, який бере по п’ять історій за раз і не може оминути дві перевірки: на авторські права і на збіг речень. Керує ним одна людина паралельно з основною роботою на повну ставку. Дев’ять місяців, 460 комітів, справжні платежі.
Проблема мовою бізнесу
Контентний продукт вісьмома мовами зазвичай упирається в штат: під кожну мову наймаєш людей або замовляєш тексти, і кожна нова історія множиться на всю матрицю мов і рівнів, ще нічого не заробивши. Саме ця арифметика тримає маленькі продукти для вивчення мов в одній мові. Справа не в софті – його можна написати за два тижні, – а в редакційному виробництві, яке ніколи не зупиняється. Насправді цей кейс про одне питання: чи може одна людина зробити каталог такого розміру з якістю, за яку читач готовий платити, і що має бути закладено в саму будову системи, щоб відповідь була «так».
- окреме завдання на кожну мову й кожен рівень – 24 замовлення на одну історію
- за збіг речень ніхто не відповідає, тож переклад поволі розходиться з текстом, який набирають
- чистота щодо авторських прав тримається на совісті кожного виконавця, і ніхто її не перевіряє
- дев'ята мова означає наново замовити весь каталог
- витрати ростуть разом із каталогом, тож каталог лишається маленьким
- одне завдання на партію з п'яти історій; набір мов – це параметр, а не рахунок до оплати
- переклад будується на тому самому еталонному списку речень, тож розійтися вони не можуть
- автоматична перевірка відхиляє будь-які шість слів поспіль, перенесені з джерела
- дев'ята мова – це ще один прогін по готових основних текстах, а не нове замовлення
- витрати ростуть разом із кількістю партій, тож каталог виріс до 68 історій ще до запуску
Чим це відрізняється від тренажера, у який просто додали книжки
Основну вагу тримають два рішення в будові продукту. Перше: у кожної історії є рівно один еталонний список речень, а все інше – лише різні способи їх згрупувати. Читач може набирати речення за реченням, абзац за абзацем або довшими шматками, і переклад поруч завжди відповідає саме тому фрагменту, що під курсором. Абзаци й шматки ніколи не перекладають окремо: їх просто склеюють із речень, що в них входять, – один раз і однаково для кожної мови. Інший шлях спробували й виміряли: коли одну українську історію наново розбили по абзацах, вийшло 248 фрагментів проти 227 речень у загальному списку – тобто переклад мовчки показував би не на той рядок. Один список, три способи нарізки, жодних розбіжностей. Для бізнесу це означає, що новий спосіб нарізки чи нова мова не вимагають жодного повторного перекладу.
Друге – чітка межа того, що моделі дозволено писати. Першоджерела – це література, яку написали люди і на яку вже не діють авторські права. Перекази й переклади пише модель, але далі вони проходять перевірки: українську й англійську вичитує людина, решта шість мов проходять самоперевірку за задокументованими правилами, і все без винятку – автоматичну перевірку на авторські права, перш ніж текст підготують до публікації. Фонова музика свідомо лежить по той бік межі: це атмосфера, а не зміст, тож її генерують без обмежень. Саме те, що межу проведено явно, дозволяє каталогу рости зі швидкістю конвеєра й не дає продуктові стати тим, від чого його читачі сюди й утекли.
Сюжет повністю – на кожному рівні. Перекази A1–A2 зберігають усю історію, тільки простішими словами й коротшими реченнями, – це не стислий виклад. Початківець, який дочитав такий переказ, прочитав саму історію, а не її конспект, і лише заради цього її взагалі варто набирати.
| критерій | замовляти під кожну мову | брати текст моделі як є | чернетка моделі + перевірки різної суворості обрано |
|---|---|---|---|
| дешево додати нову історію | ні | так | так |
| швидко додати дев'яту мову | ні | так | так |
| переклад збігається з текстом 1:1 | частково | частково | так |
| авторські права перевіряє автоматика | ні | частково | так |
| читається так, ніби написала людина | так | ні | так |
| упорається одна людина | ні | так | так |
Сесія наживо
Один репозиторій, дві роботи
Серед цих кейсів Krapka вирізняється тим, що агент відповідає за обидві половини бізнесу. Та сама сесія, що виправляє тонку помилку синхронізації в рушії набору, вирішує, яких п’яти історій бракує каталогу, – і сама їх готує. Передавати роботу від контент-команди інженерам не доводиться, бо немає ні тих, ні інших.
Тримається це на двох файлах контексту. Перший – власний путівник репозиторію: дизайн-система, тарифна модель і підводні камені розгортання. Другий – інструкція до конвеєра історій із редакційними правилами: які мови вичитує людина, що дозволено пропустити на кожному рівні складності, що вважати порушенням авторських прав.
Три сесії нижче – справжні, лише скорочені. Одна поповнює каталог, друга лагодить те, що читач назвав би атмосферою, а інженер – перемішуванням, третя – буденний цикл «виміряти, виправити, виміряти знову», від якого залежить, чи захоче читач за все це платити.
Каталог росте за планом
Каталог вісьмома мовами непомітно перекошується. Мовам, якими читає засновник, дістається увага, решті – те, що було під рукою. Читач, який прийшов по португальські тексти, знайшов лише п’ять історій і пішов, – це втрачений клієнт, якого жоден звіт про помилки не покаже.
Тому партія починається не зі смаку, а з підрахунку. Завдання визначають мови, де історій найменше, а вимоги до джерел – справді вільні від авторських прав і досить короткі, щоб дочитати за один присід, – це фільтр, який працює ще до того, як написано бодай слово, а не суперечка після.
Найважливіше тут – збій посередині. Переказ для початківців вийшов на 804 слова, понад ліміт довжини, завдяки якому рівень A1 справді можна читати на рівні A1. Ліміт існує тому, що складність за рівнями – це і є продукт: рівень, який непомітно повзе вгору, гірший, ніж узагалі жодних рівнів. Перевірка це спіймала, партію перегенерували, і поки це тривало, до читачів нічого не потрапило.
Бізнес отримує каталог, що росте запланованими кроками, а не спалахами ентузіазму, і настільки низьку вартість однієї історії, що навіть восьма мова себе виправдовує.
Коли «повторюється» – задачка з арифметики
У фонової музики в клавіатурному тренажері одне завдання: сорок п’ять хвилин лишатися непоміченою. Щойно слухач упізнає, що мелодія пішла по колу, вона вже відволікає, і краще б її не було зовсім.
Перше, що спадає на думку, – згенерувати більше треків – не допомагає: шість варіантів з одного промпту – це шість варіантів того самого звучання. Друге – додати більше настроїв – теж не допомагає, бо за одну сесію звучить лише одна фонова підкладка. Важіль – розмаїття всередині однієї підкладки, тому промпт розклали на два виміри, настрій і палітру: який характер має музика і що саме фізично звучить.
А далі – вимірювання, яке не дало власному плеєрові тихцем звести цю роботу нанівець. Звичайне перемішування дев’яти треків у дев’яти випадках із десяти ставить поруч два треки з однієї палітри. Три старанно різні звучання, роздані навмання, звучать рівно як одне. Саме перевірка на моделі до релізу відрізняє функцію від функції, яка справді працює.
Це й найнаочніший приклад межі, яку проводить продукт: музику генерують вільно, бо це атмосфера. А текст, який набирає читач, проходить перевірки, вичитку й контроль, бо саме по нього людина сюди й прийшла.
Виміряти, виправити, виміряти знову
У продукті, який обіцяє неквапливу увагу, швидкість напряму впливає на те, чи купить людина. Читач, який шість секунд чекає на сторінку про усвідомлене читання, уже дещо дізнався про продукт – і зовсім не те, що написано на головній сторінці.
Першим заходом зробили те, що зазвичай роблять, коли зменшують обсяг коду для браузера: знайшли два аналітичні SDK, які вантажилися раніше за все, по що прийшов відвідувач, відклали їх на момент, коли сторінка вже нічим не зайнята, і перенесли шрифти, які гальмували показ сторінки зі стороннього CDN, на власний сервер. Обсяг JavaScript на першому завантаженні впав на чверть, а оцінка для комп’ютерів піднялася туди, де й мала бути.
А мобільна оцінка застрягла на 65 – і саме ця половина історії найкорисніша. Робота з JavaScript спрацювала чисто, час блокування – нуль, а решта шести з половиною секунд припадала на одне зображення. Велика картинка на всю ширину екрана не мала версії, меншої за 1536 пікселів, тож телефон завантажував чверть мегабайта й більшу частину викидав. Якби повірили першому виправленню й не виміряли вдруге, випустили б повільний продукт із гарним списком змін.
Вирішує звичка перевимірювати на живому сайті, а не на локальній збірці. Локальні цифри лестять; важить те число, яке бачить читач із телефоном, а воно з’являється лише після того, як зміни потрапили на сайт.
Що вже випущено
- ● 01відбір джерелавторські права вже не діють · дочитати за один присід · сюжет тримає
- ● 02три рівні складностіA1–A2 · B1–B2 · C1, мовою оригіналу
- ● 03переклад сімома мовамиречення до речення, 1:1 з еталонним списком
- ● 04перевірки якостіжодних шести слів поспіль з оригіналу · звірка речень · ліміт довжини
- ● 05обкладинка + сторінка історіїзгенерована обкладинка, біографія автора, перекладена назва, дібрані відгуки
- ● 06publish-on-deployзаписи лишаються чернетками, доки їхні файли не з'являться в сховищі
- ● 01рушій наборурежим прихованих символів · переклад до кожного фрагмента · три способи нарізки
- ● 02розкладки клавіатуриEN ×6 · FR + bépo · DE + neo2 · корейська dubeolsik + sebeolsik
- ● 03тарифи + платежібез реєстрації / безкоштовний / платний · у безкоштовній стрічці – лише речення
- ● 04інтерфейс 8 мовамиразом із головними сторінками, підлаштованими під ринок кожної мови
- ● 05фонові підкладки7 настроїв × 3 палітри · плеєр чергує палітри · музика з власного домену
- ● 06тести109 тестів · рушій набору, модуль розкладок, аудіорушій
Дві пастки варто назвати окремо, бо кожна, перш ніж стати правилом, коштувала аварії на живому сайті. Контент виходить окремо від коду й має потрапити на місце першим: SDK сховища проходить автентифікацію через допоміжний процес, який існує лише всередині хостингу, тож із ноутбука нічого не завантажиш, а нова версія, що звертається до файлу раніше, ніж той з’явився, показує справжнім читачам 404. А зміни в структурі бази даних мають потрапити в робочу базу раніше за код, який до них звертається, бо під час публікації платформа синхронізує структуру бази – і одного разу так видалила колонку й зламала живу стрічку. Обидві пастки тепер – пункти контрольного списку з перевіркою на вході: першу стереже publish-on-deploy.ts, другу – інструкція з розгортання.
Скільки коштував би каталог, якби його писали люди
Кожна історія має три перекази різної складності, і кожен перекладено всіма мовами продукту речення до речення. Підставте свої припущення: скільки часу забрало б замовити один такий текст і скільки вам коштує година роботи редактора.
працює у вашому браузері · 0 мережевих запитів · щоразу той самий результат
Зі значеннями за замовчуванням виходить понад тисяча годин редакторської роботи – майже людино-рік – на каталог, який ще не продав жодної підписки. Засновник-одинак такого собі не дозволить, тому майже всі продукти цієї категорії виходять однією мовою й нею ж обмежуються.
Конвеєр, який тягне одна людина
Krapka доводить більше, ніж те, що модель уміє перекладати: виробництво зі справжніми перевірками може вести одна людина, і результат усе одно прийме читач, який платить. Уся цінність – саме в перевірках: ліміт довжини, який не дає рівню для початківців стати складнішим; правило збігу речень, через яке хибний переклад неможливий за самою будовою, а не просто малоймовірний; перевірка на авторські права, яку жоден виконавець не обійде вмовляннями. Це рішення головного редактора, один раз записані в код і застосовані до кожної партії, – а це зовсім інше, ніж просто швидко генерувати тексти. Продукт вийшов із каталогом, якого досить для запуску, вісьмома мовами, ще до того, як з’явився перший клієнт, що виправдав би ці витрати.
Дев’ять місяців. Один розробник. 68 історій, 8 мов, 3 рівні складності, 460 комітів. Каталог, на який пішов би людино-рік редакційних замовлень, зроблений паралельно з основною роботою й випущений за перевірками, яких не обійти.
Krapka – мій власний продукт, тож я називаю його прямо й відкрито описую, на чому він зроблений. Навмисно в загальних рисах описано лише будову промптів і те, як працює модель: тут показано підхід, а не рецепт.