Перейти до змісту
Увійти

Теорія

GitHub Projects: дошка проєкту від issue до релізу

GitHub Projects для продакта: макети канбан-дошки, таблиці й roadmap, поле статусу й власні поля, вбудовані воркфлоу, що рухають картки, і як провести фічу від issue через pull request, мердж і реліз до фіча-флагу. Чому «Done» на дошці не завжди означає, що клієнти вже можуть цим користуватися, і що показати CEO.

~10 хв читання · 11 вправ · 250 балів

Перед початком

Дошка для запуску

Вівторок третього тижня, друга половина дня, і продуктова команда Котокорму досі працює над запуском лояльності. Майлстоун показує, скільки елементів закрито, але сьогодні зранку CEO спитав про інше: хто що робить цього тижня і чи встигаємо ми? А Daniel волів би перетягувати картки, ніж писати звіти про статус.

У цьому уроці ти налаштуєш дошку проєкту поверх issues і pull requests команди й простежиш функцію від issue до релізу, зокрема коли «Done» ще не означає, що клієнти можуть нею користуватися.

GitHub Projects: план живе там, де робота

Майлстоун показує, скільки елементів закрито. Але на друге запитання CEO він не відповість: «Хто що робить цього тижня і чи встигаємо ми?» Таблиця поруч із GitHub відповіла б, але днів зо два, поки не застаріє.

GitHub Projects — простір для планування на GitHub поверх issues і pull requests. Від таблиці його відрізняють три речі:

  • Проєкт належить організації або людині, а не одному репозиторію, тож може містити issues і pull requests із кількох репозиторіїв одночасно.
  • Кожен елемент — справжнє issue чи pull request, а не копія. Коли #159 закрили, кожен проєкт, де воно було, одразу це показав.
  • З репозиторію нічого не переїжджає. Issues лишаються на своїх місцях, а проєкт лише впорядковує їх.

Тож у Котокормі створюють проєкт «Loyalty launch» в організації catchow і додають туди елементи майлстоуна. Відтепер план і робота не можуть розійтися, бо це ті самі об'єкти, на які дивляться з двох місць.

  • Так
    Проєкт «Loyalty launch» в організації catchow зі справжніми issues і pull requests із майлстоуна.

    Закриття issue саме оновлює план.

  • Не так
    Таблиця статусів, куди хтось щопонеділка копіює назви й стани issues.

    До середи вона вже застаріла.

Як додавати елементи й чернеткові елементи

Проєкт наповнюється трьома способами.

  • Наявні issues і pull requests. Встав посилання або набери # у проєкті й знайди елемент за номером чи назвою. Елементи можуть бути з будь-якого репозиторію, який бачить власник проєкту.
  • Чернеткові елементи. Швидка нотатка, яка живе лише в проєкті: назва, опис і ті самі поля, що й у будь-якої картки, тож вона може стояти в колонці й мати пріоритет. Номера й репозиторію в неї немає, і в списку issues репозиторію її не видно. Коли ідея дозріла, вибери Convert to issue, вкажи репозиторій, і вона стане справжнім issue з номером.
  • Воркфлоу можуть додавати елементи за тебе, наприклад кожне нове issue з певною міткою. До них ми дійдемо за хвилину.

Чернеткові елементи пасують для сирих думок на плануванні: «Ask support for a loyalty FAQ». Тримати в них справжню роботу не варто, бо поза проєктом їх ніхто не знайде й не зможе на них послатися. А видалення issue з проєкту лише знімає картку з плану; саме issue лишається відкритим у репозиторії.

  • Так
    Чернетковий елемент «Ask support for a loyalty FAQ» на плануванні, перетворений на issue, щойно Emma погодилася це написати.

    Швидка нотатка, яка стає справжньою роботою, коли дозріла.

  • Не так
    Уся зміна оформлення замовлення тижнями живе як чернетковий елемент.

    Немає номера, тож жоден pull request не може його закрити чи згадати.

Один проєкт, три макети

У проєкту є подання (views), збережені як вкладки вгорі. Станом на 2026 рік кожне подання використовує один із трьох макетів.

  • Table — це таблиця: рядок на кожен елемент, поля як колонки, редагування просто в клітинці. Найшвидший спосіб за один присід виставити пріоритет двадцятьом новим issues.
  • Board — канбан-дошка: картки в колонках, одна колонка на кожне значення поля, зазвичай Status. Перетягнеш картку в іншу колонку — зміниться значення поля. Тут живуть розробники: In progress, коли почали, In review, коли pull request готовий.
  • Roadmap розкладає елементи на часовій шкалі за полем дати чи ітерації, з позначками на кшталт дедлайну майлстоуна. Відповідає на запитання «коли?», тож це природне подання для CEO.

Фільтри, сортування й групування — не окремий макет: вони є в кожному поданні й зберігаються разом із ним. Фільтр на кшталт label:bug is:open працює і в таблиці, і на дошці, і в roadmap.

Усі подання показують ті самі елементи. Зміни поле в одному, і решта покажуть цю зміну.

Ті самі кольорові картки показано тричі: рядками в таблиці, по колонках на дошці й уздовж часової шкали.
Зміни картку в одному поданні, і її побачать усі інші.
  • Так
    Подання Table, щоб виставити Priority двадцятьом новим issues; Board — для щоденного руху роботи; Roadmap — для CEO.

    Кожен макет для того запитання, на яке він відповідає найкраще.

  • Не так
    Копіювати дошку в окремий «проєкт для CEO» й оновлювати обидва вручну.

    Один проєкт із кількома поданнями вже це робить, і нічого не розходиться.

Статус і власні поля

Колонки дошки беруться з полів. Status вбудований і спершу має значення Todo, In Progress і Done. Додай четверте значення, In review, між двома останніми, і на дошці одразу з'явиться четверта колонка.

Issues приносять у проєкт власні поля: виконавців, мітки, майлстоун, пов'язані pull requests і навіть прогрес sub-issues на кшталт «1 з 4». Це поля самого issue, тож вони однакові в кожному проєкті й на сторінці issue.

Крім того, проєкт може мати власні поля (custom fields). Для запуску лояльності досить трьох:

  • Priority — вибір одного значення з P1, P2 і P3;
  • Target date — дата, з якої будується макет roadmap;
  • Iteration — тижневі проміжки з понеділка до п'ятниці, тож «що в нас цього тижня?» стає фільтром, а не нарадою.

Власні поля належать проєкту, а не issue. #163 може мати P1 у «Loyalty launch» і не мати пріоритету в іншому проєкті. На сторінці самого issue вони показуються в розділі Projects бокової панелі, окремим блоком для кожного проєкту.

  • Так
    Відфільтрувати дошку за поточною Iteration, щоб відповісти на «що в нас цього тижня?».

    Фільтр замість наради.

  • Не так
    Вважати, що P1 для #163 з «Loyalty launch» з'явиться й у проєкті команди підтримки.

    Власні поля лишаються у своєму проєкті.

Як читати дошку

До середи на дошці «Loyalty launch» чотири колонки справжньої роботи. #164, перемикач запуску, чекає в Todo. Батьківське #147 стоїть у In progress із позначкою «закрито 1 з 4» sub-issues, поруч із #163, списанням балів під час оформлення (Daniel, P1, ціль 5 листопада), і чернеткою сторінки програми від контент-маркетологині Emma, #157. #162, баланс, у колонці In review з пов'язаним pull request #166. #159 у Done, його закрив #165.

«Loyalty launch», подання Board, середаКожна примітка починається з колонки Status, у якій лежить картка.
  • Switch on loyalty points for all customers#164

    Todo · Sofia · ціль 10 листопада

  • Launch loyalty points before Black Friday#147

    In progress · Sofia · закрито 1 з 4 sub-issues

  • Spend points at checkout#163

    In progress · Daniel · P1 · ціль 5 листопада

  • Write loyalty programme page#157

    In progress · Emma · P2

  • Show points balance in the account#162

    In review · пов'язаний pull request #166 · Daniel · P1

  • Points counted before promo discount#159

    Done · закрито через #165

Читай дошку справа наліво: що завершено, що чекає на рев'юера, що будують, що ще не почали. Праві колонки найближчі до клієнтів, тож цього тижня вони найважливіші.

Колонка рев'ю — місце, де продакт може допомогти найбільше. Робота в ній уже зроблена й чекає на людей: на схвалення, на відповідь на коментар, на мердж. Нагадування потрібному рев'юеру часто зрушує картку далі, ніж будь-яка нова робота.

Читаючи, розрізняй дві речі. Priority каже, що найважливіше, а не що найближче до завершення. А колонка батьківського issue мало що каже про прогрес; справжню картину показують його sub-issues.

  • Так
    «#162 готове й чекає на рев'ю. Попрошу Oscar сьогодні подивитися #166.»

    Починає справа й розблоковує роботу, що чекає.

  • Не так
    «#163 має P1, тож його змерджать наступним.»

    Пріоритет — не прогрес: #163 ще будують.

Вбудовані воркфлоу рухають картки

Ніхто не хоче щоп'ятниці бігати за людьми, щоб вони перетягували картки. Станом на 2026 рік у проєкту є вбудовані воркфлоу в меню Workflows, і частину дошки вони підтримують актуальною самі.

У кожному новому проєкті ввімкнено два:

  • Item closed: коли issue чи pull request закривають, його Status стає Done.
  • Pull request merged: коли pull request змерджено, його Status стає Done.

Daniel вмикає ще два. Item added to project ставить Status = Todo, а Auto-add to project додає кожне нове issue з catchow/website з міткою loyalty. Тепер нове issue лояльності саме опиняється в Todo, а pull request із Fixes #162 під час мерджу закриває #162, і картка переходить у Done. Середні колонки люди й далі рухають вручну або скриптом GitHub Actions.

Невелика роботизована рука переставляє картку в наступну колонку дошки, коли поруч крізь ворота проїжджає посилка.

Ось чому ключове слово закриття тепер важить удвічі більше. Якщо в описі написано Part of #162, #162 лишиться відкритим, його картка застрягне в In review, і дошка брехатиме, поки хтось не помітить. А публікація релізу взагалі не рухає карток.

  • Так
    Опис pull request: Fixes #162. Part of #147.

    Мердж закриває #162, і воркфлоу переносить картку в Done.

  • Не так
    Опис pull request: Part of #162.

    Після мерджу #162 лишається відкритим, а його картка — в In review.

Done ще не означає запуск

У четвер команда публікує v1.5.0: #156, #160, #165 і #166 від часу v1.4.1. Дві картки лояльності лежать у Done, нотатки до релізу перелічують їхні pull requests, а клієнти досі нічого не бачать.

На цій дошці Done означає змерджено або закрито. У Котокормі це ще й «викладено за кілька хвилин». Але вся програма схована за фіча-флагом loyalty-points, увімкненим лише для працівників, а флага дошка не бачить.

main від v1.4.1 до v1.5.0Кожен коміт лояльності тут змерджено, викладено й випущено у v1.5.0, і він досі прихований: флаг loyalty-points увімкнено лише для працівників.
  1. e5f81a3Hide loyalty menu link when flag is off (#158)v1.4.1
  2. b2e6f10Earn points on paid orders (#156)
  3. 6e0b4d8Add issue templates (#160)
  4. 7a1d9c3Count points after discounts (#165)
  5. c3f7a05Show points balance in the account (#166)mainv1.5.0

Граф комітів, від найстарішого: main від v1.4.1 до v1.5.0 1. коміт e5f81a3 у main "Hide loyalty menu link when flag is off (#158)", тег v1.4.1 2. коміт b2e6f10 у main "Earn points on paid orders (#156)" 3. коміт 6e0b4d8 у main "Add issue templates (#160)" 4. коміт 7a1d9c3 у main "Count points after discounts (#165)" 5. коміт c3f7a05 у main "Show points balance in the account (#166)", тег v1.5.0 (виділено)

На кожне запитання є своє джерело правди:

  • Дошка проєкту: робота, відповідальні і чи вкладаємося в графік.
  • Сторінка pull request: рев'ю, схвалення й перевірки.
  • Deployments → production: який коміт зараз працює на живому сайті.
  • Сторінка релізу: у якій версії зміна з'явилася вперше.
  • Панель флагів: чим клієнти справді можуть користуватися.
Дошка показує роботу, pull request — рев'ю, сторінка релізу — версію, а панель флагів із Deployments — те, що отримують клієнти.

Тож коли питають «це вже працює?», не зачитуй дошку. Подивись production у Deployments і флаг, і скажи, яку з двох відповідей ти даєш.

  • Так
    «Баланс змерджено, викладено, він є у v1.5.0. Клієнти побачать його, коли 10 листопада флаг увімкнуть для всіх.»

    Кожен факт зі свого джерела.

  • Не так
    «На дошці воно в Done, отже, у клієнтів воно вже є.»

    Дошка не бачить флага.

Чесне Done і запуск як окрема картка

CEO відкриває дошку й пише: «2 з 4 sub-issues у Done, тобто ми наполовину запустилися?» Для дошки, створеної не для нього, це чесне прочитання, і воно хибне: обидві готові частини сховані за флагом, тож у клієнтів поки нічого немає.

Команди розв'язують це двома способами. Одні додають колонку Released і переносять туди картки в день релізу. Котокорм лишає за Done значення «змерджено або закрито» й робить запуск окремою карткою: #164 «Switch on loyalty points for all customers», відповідальна Sofia, чекає в Todo до 10 листопада. Так момент, коли клієнти отримують фічу, видно на дошці, з відповідальною і датою.

Колонка дошки, повна завершених карток, стоїть поруч із вимкненим настінним вимикачем, від якого тягнеться дріт до темної вивіски крамниці.
Дошка показує роботу, а фіча-флаг — що отримують покупці.

Добра відповідь CEO у двох-трьох реченнях розділяє три речі:

  • що збудовано: виправлення бага й баланс змерджено, і вони працюють для працівників;
  • що бачать клієнти: поки нічого, бо флаг увімкнено лише для працівників;
  • що далі: списання під час оформлення (ціль 5 листопада), потім увімкнення 10 листопада.

Згадка про флаг ще й заспокоює: запуск — це перемикач, яким керує команда, а не лотерея.

  • Так
    «Дві з чотирьох частин збудовано, вони працюють для працівників; клієнти нічого не побачать, доки ми не ввімкнемо флаг, заплановано на 10 листопада. Далі: списання балів під час оформлення.»

    Збудовано, видно клієнтам, далі.

  • Не так
    «Так, 50% готово, ідемо за планом до запуску.»

    Рахує картки, а не те, що отримують клієнти.

Від issue до клієнтів, крок за кроком

Простежмо одну частину програми лояльності, #163 «Spend points at checkout», на всьому шляху:

  1. Відкривають issue #163 з міткою loyalty.
  2. Воркфлоу auto-add додає його на дошку в Todo.
  3. Daniel переносить картку в In progress і починає pull request #167 з Fixes #163.
  4. Картка переходить у In review; Oscar і Sofia переглядають #167.
  5. #167 змерджено й викладено; #163 закривається, і воркфлоу переносить картку в Done.
  6. Реліз наступного четверга, v1.6.0, згадує #167 у нотатках.
  7. 10 листопада флаг loyalty-points вмикають для всіх клієнтів.

Лише крок 7 змінює те, що можуть робити клієнти. Усе до нього — робота команди, за якою стежить дошка.

Ілюстрація: Дошка показує роботу, pull request — рев'ю, сторінка релізу — версію, а панель флагів із Deployments — те, що отримують клієнти. · є вище

Цей самий поділ задає й щотижневе оновлення для CEO: що змінилося за тиждень, що під ризиком і що буде далі, його словами, а не мовою дошки. Дай йому власне подання — Roadmap, відфільтрований за issues лояльності, за цільовими датами й із позначкою майлстоуна, — і не показуй чернеток і деталей по колонках.

  • Так
    Щотижневе оновлення: «Зроблено: виправлення бага й баланс (у v1.5.0, лише для працівників). Ризик: рев'ю оформлення потребує двох днів, ціль 5 листопада під загрозою. Далі: флаг для всіх 10 листопада.»

    Зміни, ризик і наступний крок простими словами.

  • Не так
    Щоп'ятниці надсилати CEO скриншот усієї дошки.

    Він мусить сам розшифровувати колонки, а флага там немає.

Готові потренуватися?

Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.

Розпочати вправи