RS Tandem — Observer
RS School: Connecting people, growing together, having fun
Issue #5
Пятый чекпоинт — последний. Страницы 404, индикаторы загрузки, обработка ошибок, видео-доказательства в README. Две недели до финала — проекты обретают форму. В этом выпуске: песочница для кода в браузере, четыре нейросети против одного квиза и призрачная ветка на macOS.
25 марта 2026 г. в 1538 teams
Герой недели

Человек-оркестр, или Как собрать проект, команду и нервы в одном коммите

konfuzz не просто тимлид — он архитектор, прототипист, бэкендер и штатный психолог команды Devtones в одном лице. Пока команда обсуждала идеи в чате, он уже завайбкодил прототип CSS-баттла на Qwen Code, залил на свой VPS и скинул ссылку — «посмотрите, что может получиться». Дальше — больше: настроил репозиторий, branch protection, канбан-доску, нарисовал макеты в Figma. Параллельно нырнул в OpenRouter и неделю бился с моделями, пытаясь заставить LLM одновременно давать фидбек текстом и оценку через tool calling. «Бесит работа с моделями как с чёрным ящиком», — честно пишет он после десятков итераций промпта. Но не сдался: нашёл Qwen3.5-Flash, добился стабильного стриминга через SSE и собрал полноценный бэкенд на Express + SQLite + Drizzle ORM с авторизацией на JWT. Его главный инсайт звучит отрезвляюще: «50% работы — это коммуникация. Нет ничего сложнее командной работы». Когда коммуникация забуксовала, konfuzz просто впрягся сам — и потащил.
Highlights
  • konfuzz: 10 дневниковых записей, CSS-баттл прототип, AI-интервьюер с OpenRouter + SSE стримингом
  • Полный бэкенд: Express + better-sqlite + Drizzle ORM + JWT-авторизация + Zod-валидация
  • Настроил инфраструктуру команды: репозиторий, branch protection, канбан-доска, Figma-макеты
  • Десятки итераций промпта для LLM — добился стабильного tool calling с фидбеком и оценкой
Кейс недели

Диагноз: гигантизм, или Как лечить макет онлайн-конференциями

Восемь часов в Figma — по два часа в день — и перед MegaRostBLR1 разрастается мир вариантов. Кнопки, отступы, попапы: команда фонтанирует идеями, и каждую нужно отрисовать, показать, обсудить. «Приходится отрисовывать довольно много вариантов элементов, чтобы найти максимально оптимальное решение, которое устроит всех ребят», — признаётся он, и в этой фразе — суть проблемы: дизайн в команде из четырёх человек — это не рисование, а переговоры. Выход нашёлся в онлайн-конференциях. Именно на одной из них прозвучал диагноз: «гигантизм». Макет распух — элементы слишком крупные, отступы съедают пространство. MegaRostBLR1 садится за переработку системы размеров, параллельно переводит тексты на английский, а с Morevna держит связь в чате, «чтобы быстро реагировать на возникающие вопросы по макету в реальном времени». Дизайнер и разработчик работают почти синхронно — редкая картина на ранних неделях. Что интересно: к третьей неделе MegaRostBLR1 начинает писать код — сначала фиксы багов, потом попапы авторизации, потом тест-кейсы для API-клиента и сервисов. Переход от чистого дизайна к разработке — плавный, без шва. «Проблемы уже не кажутся такими страшными, появился курс движения», — пишет он, и это, пожалуй, главный итог: стратегия «одна фича — одна ветка — один коммит» и живая коммуникация превратили хаос идей в конвейер. Урок для всех: макет — не финальная картинка, а инструмент переговоров. Чем раньше команда увидит «гигантизм», тем дешевле его вылечить.
MegaRostBLR1Legendary frontend developersОтрисовал множество вариантов UI в Figma, инициировал онлайн-конференции для выбора решений, обнаружил и исправил проблему «гигантизма» в макете, плавно перешёл от дизайна к разработке и тестированию
MorevnaLegendary frontend developersРаботала синхронно с дизайнером через чат, обеспечивая быструю обратную связь по макету в реальном времени при переносе в код
Rorodeathless1Legendary frontend developersУчастник команды, вовлечён в обсуждение вариантов дизайна на онлайн-конференциях
bssierLegendary frontend developersУчастник команды, вовлечён в обсуждение вариантов дизайна на онлайн-конференциях
Грабли недели

Четыре нейросети и один квиз, или Почему вариант A — всегда правильный

Казалось бы, что сложного — попросить ИИ сгенерировать набор тестовых вопросов? AlexeyDmt из RainbowUnicorn знает ответ: всё. Сначала ChatGPT. Структура идеальная, формат безупречный. Одна мелочь — в 90% случаев правильный ответ оказывался вариантом A. Несколько итераций, и каждый раз одно и то же обещание: «сейчас всё будет OK». Не было. Тогда — Claude. Принял 153 страницы, честно сократил. Но правильные ответы массово переехали на B и C, а потом закончились токены. Алиса обрывала генерацию на полуслове. Gemini справилась — но после пяти итераций и ювелирного промпта. «Потрачено несколько часов. Использовано 4 разных ИИ. Много итераций и переформулировок», — подытожил AlexeyDmt. А на этапе React у ChatGPT снова кончились лимиты, и финальный кусок дотягивали через Gemini. Урок простой: LLM плохо рандомизируют. Генерировать данные — отдельная задача, и иногда скрипт на десять строк сделает shuffle лучше, чем четыре нейросети за полдня.
Highlights
  • AlexeyDmt потратил несколько часов и 4 ИИ (ChatGPT, Claude, Алиса, Gemini) на генерацию квизов
  • ChatGPT ставил правильный ответ на вариант A в ~90% случаев
  • Финальный набор собран из кусков разных моделей — JS через ChatGPT, React через Gemini
Грабли недели

Призрак ветки, или Почему macOS и Git видят мир по-разному

alekspanda хотела всего лишь переименовать ветку — с «feat/» на «feature/», чтобы соответствовать соглашениям команды. Казалось бы, тривиальная задача. Но файловая система macOS не различает регистр, а Git — различает. В результате на GitHub появились две ветки, «Feature/» и «feature/», а локально они слились в одну — призрачный дубль, который невозможно ни удалить, ни переименовать. «Потратила больше часа только на то, чтобы нормально настроить ветки», — пишет alekspanda. Час превратился в детективную историю: терминал показывал одно, GitHub — другое, а каждая попытка починить только углубляла путаницу. Решение оказалось радикальным — полный реклон репозитория. Грубо, но эффективно: удалённая ветка уже была правильной, проблема жила только в локальном кэше. Урок для всех, кто работает на macOS: Git хранит ссылки на ветки как файлы, и `.git/refs/heads/Feature` и `.git/refs/heads/feature` — для вашего диска это один и тот же путь. Знать это заранее — сэкономить себе вечер.
Highlights
  • alekspanda: потеряла 1+ час на конфликт регистра веток macOS vs Git
  • Причина: case-insensitive FS (macOS) + case-sensitive refs (Git) = фантомные дубли
  • Решение: реклон репозитория — локальный кэш .git/refs был неисправимо повреждён
  • Совет: на macOS избегать веток, отличающихся только регистром, или использовать APFS case-sensitive
Грабли недели

Свод правил, которые никто не понял, или Как объяснить то, чего не понимаешь сам

«Дорогой дневник, мне не описать ту боль и страдания, которые я...» — так начинается хроника kupzov2000, тимлида Dev Journey, и это не преувеличение. Сначала — Husky. Двенадцать часов на конфиги, из которых pre-commit отказывался запускаться наотрез. Гугл, ИИ, помощь тиммейтов — ничего. Удалил, переустановил, нашёл инициализацию в .git. Pre-commit ожил, но lint-staged так и не сдался: каждый фикс порождал новую ошибку. Час борьбы — и капитуляция: «отложил на потом». Потом — архитектура. Десять часов kupzov2000 писал свод правил по FSD для ванильного TypeScript, где туториалов почти нет. Отправил команде, созвонился объяснить. «Мы прообщались около часа, и вопросов стало только больше, чем ответов. Кажется, я катастрофически провалил эту задачу :)» Урок простой: нельзя учить тому, что сам ещё осваиваешь. Но kupzov2000 это понял — и вместо лекций стал помогать точечно, разбирая конкретные случаи. Иногда лучший способ научить — признать, что ты ещё учишься.
Highlights
  • kupzov2000: 12 часов на Husky — lint-staged так и не заработал
  • 10 часов на свод правил FSD — команда после объяснения поняла меньше, чем до
  • Переход от лекций к точечной помощи по архитектуре
Aha! Moments

Aha! Moments

MorevnaLegendary frontend developersReact перерисовывает всё — и твои иллюзии тоже
в React любая функция, объявленная прямо в теле компонента, создаётся заново при каждом рендере. А у меня в профиле функция, отрисовывающая сообщения для пользователя, имела таймер, который запускался заново при любом действии на странице.
Morevna не просто наступила на грабли useEffect — она разобрала их на запчасти и собрала обратно. Когда таймер начинает жить своей жизнью при каждом рендере, это уже не баг, а урок о том, как React на самом деле думает.
YekaterinaAlexOutstanding Alex And SmesharikiКод-ревью как школа маршрутизации
AI helped me to understand that vanila-routing automatically inserts the element returned from element() into the target container.
Жёсткое код-ревью — лучший учебник. YekaterinaAlex прошла через circular dependency и вышла с пониманием того, как SPA-роутинг работает под капотом, а не просто «как-то работает».
ArtemovEgorAuto-Team 3Три правила дружбы с AI
важно помнить, что ИИ — это всего неидеальный инструмент, и окончательное решение всегда остается за человеком
ArtemovEgor ловил модели на архитектурных ошибках и вывел собственный манифест: дроби задачу, формулируй чётко, не доверяй слепо. Редкая зрелость — не восторгаться инструментом, а научиться им управлять.
ThrapisAuto-Team 5Когда фреймворк решает за тебя — и это хорошо
фреймворк Nuxt будет куда мощнее. Nuxt прямо из коробки имеет всё то, что мы до этого ручками устанавливали, к тому же, он имеет свою систему правил размещения модулей по проекту, что очень упрощает нашу будущую разработку
Thrapis неделю собирал на Vue то, что Nuxt даёт из коробки. Иногда лучшее инженерное решение — признать, что кто-то уже всё продумал за тебя.
Ulya10Т-8Первый коммит без линтера — как первый вздох
Зато в первый раз сделала коммит, к которому не прикопался линтер! Вспоминаю, как решала первое core-js, смотрела на ошибки линтера и надеялась, что это просто задание такое странное, и больше этого ужаса никогда не будет. Хаха.
От ужаса перед линтером в core-js до чистого коммита и первого успешного rebase — Ulya10 проделала путь, который измеряется не строчками кода, а количеством побеждённых страхов.
lerttiDev JourneyПрограммирование — это переговоры, а не код
Теперь знаю, как работают настоящие программисты: минимум времени на написание кода, максимум - на общение с командой и решение сопутствующих задач и конфликтов!
lertti открыла главный секрет индустрии: код пишется за минуты, а договариваются о нём часами. Паттерны проектирования, казавшиеся монстрами из учебника, оказались старыми знакомыми с Codewars.
Teams
29ok
8caution
1alert
/
Typocalypse
ok
RainbowUnicorn
ok
RSSAgents
caution
Legendary frontend developers
ok
Team42
ok
Джунгли зовут!
ok
GrowLab
caution
Strict Mode
ok
Дрим Тим
caution
JSGods
ok
Алекс и его друзья
ok
VueJS Tandem
ok
Tuple Trouble
ok
asyncmind
ok
Nova
ok
DevCraft
ok
Outstanding Alex And Smeshariki
ok
Gang of Four
ok
Devtones
ok
404 Skill Not Found
caution
OrangeCats
caution
DevBand
ok
JustBuildIt
ok
Auto-Team 3
ok
Auto-Team 4
caution
Auto-Team 5
ok
SAA Cat
ok
Т-8
ok
SkillsZen team
caution
Unexpected Case
ok
TetraTeam
caution
111 Blind Kittens
ok
CodePain
ok
Dev Journey
ok
Tandem Trauma Team
alert
Auto-Team 7
ok
Auto-Team 9
ok
ngKittyDebug
ok
Над выпуском работали: Статист · Скаут · Жюри · Перо · Корректор · Курьер