DEV Community

Я сделал Tinder для код-ревью. Вот что из этого вышло.

У каждого разработчика есть тот самый проект. Который начинается в 2 часа ночи с мысли "а что если...", продолжается энергетиком и тремя пакетами чипсов, а заканчивается в 6 утра осознанием, что ты только что потратил ночь на что-то абсолютно бесполезное. Но при этом невероятно весёлое.

Это история именно такого проекта.

Идея

Всё началось с очередного мучительного код-ревью на работе. Знаете этот момент: открываешь PR, а там 47 файлов, 2000 строк изменений, и ты должен всё это внимательно прочитать и оставить полезные комментарии?

Я сидел, листал этот PR, и подумал: "А что если бы код-ревью работало как Tinder? Свайп вправо, код нравится. Свайп влево, код не нравится. Никаких длинных комментариев. Никаких часовых ревью. Просто быстрая оценка."

Нормальный человек посмеялся бы и продолжил работать. Я открыл Xcode.

Прототип за ночь

Вот что я собрал за одну ночь на SwiftUI (спойлер: получилось кривое, но рабочее).

Концепт простой:

  1. Приложение показывает случайный сниппет кода
  2. Ты свайпаешь вправо (хороший код) или влево (плохой код)
  3. Если свайп влево, можно быстро выбрать причину из списка (нейминг, производительность, читаемость, "что вообще происходит?")
  4. Статистика собирается в реальном времени

Звучит глупо? Возможно. Но подождите до результатов.

Для MVP я взял несколько реальных сниппетов из открытых GitHub репозиториев. Потом добавил специально плохой код, который я сам когда-то писал (да, у меня есть архив стыда). И несколько примеров из StackOverflow.

Интерфейс был максимально простой. Карточка с кодом в центре экрана. Свайп в стороны. Анимация сердечка при свайпе вправо и черепа при свайпе влево.

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

Тестирование на живых людях

Утром я скинул приложение трём друзьям-разработчикам. "Попробуйте эту штуку, только не спрашивайте зачем."

Реакция была... неожиданной.

Друг 1 (бэкенд на Python): "Я потратил 40 минут, свайпая код. Зачем ты это сделал? Я ненавижу тебя. Когда будет обновление?"

Друг 2 (фронтенд на React): "Это самый тупой и самый залипательный проект, который я видел. Я нашёл 3 бага в примерах кода, пока свайпал. Это считается как код-ревью?"

Друг 3 (iOS на Swift): "Добавь мультиплеер. Я хочу соревноваться, кто быстрее найдёт плохой код."

Вот это последнее предложение зажгло новый огонь.

Мультиплеер и режим "Баттл"

За следующие выходные я добавил режим, который назвал "Code Battle":

  • Два игрока видят один и тот же сниппет
  • Оба свайпают
  • Если оба свайпнули одинаково, оба получают очки
  • Если по-разному, начинается дискуссия
  • Быстрый свайп даёт больше очков (но и больше шанс ошибиться)

И вот тут случилось интересное.

Я показал это ещё нескольким людям, и они начали спорить о коде. По-настоящему. Жарко. Со страстью.

"Этот switch нормальный, зачем ты свайпнул влево?!"
"Потому что тут нет default кейса, ты что, хочешь крэш в продакшне?!"

Люди, которые обычно молча аппрувят PR и пишут максимум "LGTM", вдруг начали обсуждать качество кода. Геймификация делала своё дело.

Что я реально узнал

Помимо того, что делать тупые проекты в 2 часа ночи это весело, я вытащил из этого эксперимента несколько серьёзных выводов.

Вывод 1: Люди не любят длинные ревью

Когда код-ревью это "прочитай 2000 строк и напиши комментарии", люди или делают это формально, или откладывают до последнего. Когда это "свайпни 50 сниппетов за 10 минут", люди делают это добровольно. В метро. На обеде. Перед сном.

Формат имеет значение. Тот же контент, поданный по-другому, вызывает совершенно другую реакцию.

Вывод 2: Геймификация работает даже на программистах

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

Вывод 3: Контекст это всё

Один из самых частых споров был: "Этот код плохой? Зависит от контекста." И это правда. Сниппет из прототипа оценивается иначе, чем сниппет из банковского приложения.

Я добавил метки контекста (прототип / продакшн / обучение), и это сильно изменило результаты свайпов.

Вывод 4: Побочные проекты не обязаны быть полезными

Это, наверное, самый важный вывод. Я начал этот проект как шутку. Он не приносит денег. Он не впечатлит работодателя (хотя, может, и впечатлит, кто знает). Он не решает глобальную проблему.

Но он научил меня:

  • Работать с SwiftUI анимациями и жестами
  • Делать мультиплеер через WebSocket
  • Проектировать геймификацию
  • Собирать и анализировать данные о поведении пользователей
  • Запускать MVP за сутки

Всё это применимо в реальных проектах. Технические навыки, полученные на дурацком проекте, ничем не хуже навыков, полученных на серьёзном.

Статистика после двух недель

За две недели "тестирования" (читай: мои друзья и их друзья):

  • 23 человека попробовали приложение
  • 12,400+ свайпов в сумме
  • Средняя сессия: 14 минут (!!!)
  • Самый спорный сниппет: вложенные тернарные операторы. 60% свайпнули влево, 40% вправо. Война в комментариях.
  • Самый однозначный сниппет: функция на 200 строк без единого комментария. 97% влево.
  • Среднее время на один свайп: 4.2 секунды

Для контекста: среднее время обычного код-ревью одного PR в нашей команде было 45 минут. При этом качество комментариев после "Тиндера" было не хуже, потому что люди привыкли быстро оценивать код и замечать паттерны.

Почему я это не довёл до продукта

Честный ответ: потому что мне стало интересно что-то другое.

И это нормально. Не каждый проект должен превращаться в стартап. Не каждая идея должна приносить деньги. Иногда проект существует для того, чтобы ты научился чему-то новому, повеселился, и двинулся дальше.

У меня 47 незаконченных проектов. "Тиндер для код-ревью" один из немногих, которые я не стыжусь показать. Потому что у него была ясная цель (повеселиться), и эта цель была достигнута.

Мораль истории

Если у вас есть тупая идея для проекта, сделайте её. Прямо сейчас. Не думайте о монетизации, масштабировании, PMF, или что там ещё любят обсуждать на стартап-митапах.

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

Худший сценарий: вы потратите ночь и выучите что-то новое. Лучший сценарий: вы создадите что-то, о чём будете рассказывать годами.

В любом случае вы провели время лучше, чем если бы смотрели очередной туториал на YouTube.

Бонус: идеи для ваших тупых проектов

Раз уж мы тут, вот ещё несколько концептов, которые живут в моём списке "сделать когда-нибудь":

  • StackOverflow RPG. Отвечаешь на вопросы и прокачиваешь персонажа. Правильный ответ = опыт. Неправильный = урон.
  • Git Blame Roulette. Случайный выбор строки из проекта. Угадай, кто её написал.
  • Daily Code Roast. Каждый день присылает тебе один сниппет плохого кода. Твоя задача: найти все проблемы.
  • PR Review Speed Run. Таймер + реальные PR. Как быстро ты можешь найти все баги?

Если кто-то из вас реально сделает что-то из этого списка, напишите мне. Я хочу попробовать.


Если вам заходят такие истории, у меня есть ещё:

Telegram: t.me/SwiftUIDaily - истории, код, карьера, и всё что между

Boosty: boosty.to/swiftuidev - наборы для разработчиков, шаблоны, и инструменты

Какой ваш самый тупой проект? Тот, за который вам немного стыдно, но который вы втайне любите? Делитесь в комментариях, мне правда интересно.

Top comments (0)