← Kursa Dön
📄 Text · 30 min

Issues ve Proje Yönetimi

Giriş — Kod Yazmak İşin Yarısı

Bir yazılım projesi sadece kod yazmaktan ibaret değil. Bir bug keşfettiğinde, yeni bir özellik fikrin olduğunda, bir refactoring planladığında ya da kullanıcıdan bir geri bildirim geldiğinde — bunları bir yere kaydetmen gerekir. Aksi halde hafızana güvenmek zorundasın ve hafıza, yazılım projelerinde en güvenilmez araçtır.

GitHub Issues, bir projedeki tüm görevleri, bug'ları, önerileri ve tartışmaları tek bir yerde toplayan bir görev yönetim sistemidir. Jira, Trello, Asana gibi araçların yaptığını GitHub'ın içinden, kodunla iç içe yapar.


Issue Nedir?

Analoji — Post-it Panosu

Bir ofis düşün. Duvarda büyük bir beyaz tahta var. Üzerinde renkli Post-it'ler yapıştırılmış:

  • 🔴 Kırmızı: "Login sayfası çöküyor — ACİL!"

  • 🟡 Sarı: "Kullanıcı profil sayfası tasarlanacak"

  • 🟢 Yeşil: "API dokümantasyonu güncellenmeli"

  • 🔵 Mavi: "Performans optimizasyonu araştırılacak"

Her Post-it'in üzerinde kimin sorumlu olduğu, ne zaman yapılacağı, hangi sürüme dahil olduğu yazıyor. İnsanlar geldikçe Post-it alıyor, yapıyor, tamamlandı bölümüne taşıyor.

İşte GitHub Issues tam olarak bu Post-it panosunun dijital hali. Ama çok daha güçlü: aranabilir, filtrelenebilir, otomatize edilebilir ve kod commit'leriyle doğrudan bağlantılı.

Post-it          → GitHub Issue
Renk             → Label (etiket)
"Sprint 3'e ait" → Milestone
Pano bölümleri   → Projects (Kanban board)
Yapıştıran kişi  → Issue author
Sorumlu kişi     → Assignee

Issue Oluşturma

Web Arayüzünden

Repo sayfasında Issues sekmesine git → New issue butonuna tıkla:

Title:    Login sayfası 500 hatası veriyor

Body:
## 🐛 Bug Açıklaması
Login sayfasına geçersiz e-posta girildiğinde 500 Internal Server Error alıyorum.

## Tekrarlama Adımları
1. `/login` sayfasına git
2. E-posta alanına "invalid-email" yaz
3. Şifre alanına herhangi bir şey yaz
4. "Giriş Yap" butonuna tıkla

## Beklenen Davranış
"Geçersiz e-posta formatı" hata mesajı gösterilmeli.

## Gerçekleşen Davranış
500 Internal Server Error sayfası gösteriliyor.

## Ortam
- Tarayıcı: Chrome 120
- İşletim Sistemi: macOS 14.2
- API Sürümü: v2.3.1

## Ekran Görüntüsü
![error-screenshot](url-to-image)

## Ek Bilgi
Server loglarında `TypeError: Cannot read property 'validate' of undefined` hatası görünüyor.

---
Assignees: @backend-dev
Labels: bug, priority:high, backend
Milestone: v2.4

GitHub CLI ile Issue Oluşturma

# Basit issue
gh issue create --title "Login 500 hatası" --body "Detaylı açıklama burada"

# Detaylı issue
gh issue create \
  --title "Login sayfası 500 hatası veriyor" \
  --body "## Bug
Geçersiz e-posta girilince 500 hatası alınıyor.

## Adımlar
1. /login'e git
2. Geçersiz e-posta gir
3. Submit et" \
  --assignee backend-dev \
  --label "bug,priority:high" \
  --milestone "v2.4"

# İnteraktif mod
gh issue create
? Title:  Login sayfası 500 hatası
? Body:   <Received>
? What's next?  Submit
https://github.com/username/project/issues/42

Issue Yönetimi (CLI)

# Issue'ları listele
gh issue list
gh issue list --state open
gh issue list --state closed
gh issue list --label "bug"
gh issue list --assignee @me
gh issue list --milestone "v2.4"

# Issue detayını gör
gh issue view 42
gh issue view 42 --web  # Tarayıcıda aç

# Issue'yu kapat
gh issue close 42
gh issue close 42 --comment "PR #47 ile çözüldü"

# Issue'yu yeniden aç
gh issue reopen 42

# Issue'ya yorum ekle
gh issue comment 42 --body "Bu sorunu tekrarlayabildim, çözüm üzerinde çalışıyorum"

# Issue'yu düzenle
gh issue edit 42 --add-label "in-progress" --add-assignee @me

Labels — Renkli Etiketler

Labels, issue'ları kategorize etmenin en temel yoludur. Her label'ın bir adı, rengi ve (isteğe bağlı) açıklaması vardır.

Varsayılan Labels

GitHub her yeni repository'ye şu label'ları otomatik ekler:

┌──────────────────┬────────┬─────────────────────────────────┐
│ Label            │ Renk   │ Açıklama                        │
├──────────────────┼────────┼─────────────────────────────────┤
│ bug              │ 🔴     │ Bir şey doğru çalışmıyor        │
│ documentation    │ 🔵     │ Dokümantasyonla ilgili           │
│ duplicate        │ ⚪     │ Zaten var olan bir issue          │
│ enhancement      │ 🟢     │ Yeni özellik veya iyileştirme    │
│ good first issue │ 🟣     │ Yeni katkıcılar için uygun       │
│ help wanted      │ 🟡     │ Yardım aranıyor                 │
│ invalid          │ ⚪     │ Geçerli görünmüyor              │
│ question         │ 🟠     │ Bilgi isteniyor                 │
│ wontfix          │ ⚪     │ Düzeltilmeyecek                 │
└──────────────────┴────────┴─────────────────────────────────┘

Özel Label Sistemi Oluşturma

Profesyonel ekipler kendi label sistemlerini oluşturur. İşte önerilen bir yapı:

TÜR (Type):
  🔴 bug              → Hata
  ✨ feature           → Yeni özellik
  ♻️ refactor          → Kod iyileştirme
  📝 docs             → Dokümantasyon
  🎨 design           → Tasarım
  ⚡ performance       → Performans
  🔒 security         → Güvenlik

ÖNCELİK (Priority):
  🔴 priority:critical → Üretimi etkiliyor, hemen düzelt
  🟠 priority:high     → Bu sprint'te çözülmeli
  🟡 priority:medium   → Planlanmalı
  🟢 priority:low      → Zaman oldukça

DURUM (Status):
  📋 status:backlog    → Beklemede
  🔄 status:in-progress→ Üzerinde çalışılıyor
  👀 status:review     → İncelemede
  ✅ status:done       → Tamamlandı

ALAN (Area):
  🖥️ area:frontend     → Frontend ile ilgili
  ⚙️ area:backend      → Backend ile ilgili
  🗄️ area:database     → Veritabanı ile ilgili
  🚀 area:devops       → CI/CD, deployment
  📱 area:mobile       → Mobil uygulama

DİĞER:
  🆘 help wanted       → Yardım aranıyor
  👶 good first issue   → Yeni başlayanlar için
  🚫 wontfix           → Düzeltilmeyecek
  🔁 duplicate          → Tekrar
  ❓ needs-triage       → Sınıflandırılmamış

Label Oluşturma

# Web arayüzünde:
# Issues → Labels → New label

# GitHub CLI ile (gh api kullanarak):
gh label create "priority:critical" --color "B60205" --description "Üretimi etkiliyor"
gh label create "priority:high" --color "D93F0B" --description "Bu sprint'te çözülmeli"
gh label create "priority:medium" --color "FBCA04" --description "Planlanmalı"
gh label create "priority:low" --color "0E8A16" --description "Zaman oldukça"

gh label create "area:frontend" --color "1D76DB" --description "Frontend ile ilgili"
gh label create "area:backend" --color "5319E7" --description "Backend ile ilgili"

💡 İpucu: Label'ları repo'lar arasında taşımak için github-label-sync gibi araçlar veya GitHub API kullanabilirsin. Bir kere iyi bir label sistemi oluşturup tüm projelerinde kullanabilirsin.


Milestones — Hedef Noktaları

Milestone, bir grup issue'yu belirli bir hedefe veya sürüme bağlamanı sağlar. "Bu issue'lar tamamlanırsa v2.0 çıkar" demektir.

Analoji — Yol Haritası

Bir yolculuğa çıkıyorsun. Hedefin İstanbul → Ankara. Yol boyunca kilometre taşları var: Bolu, Düzce, Eskişehir... Her taşa ulaştığında ne kadar ilerlediğini görebilirsin.

Milestone'lar da yazılım projesindeki kilometre taşlarıdır:

v1.0 (MVP)          v1.1 (Stabilizasyon)    v2.0 (Büyük Güncelleme)
├── #1 Login ✅      ├── #12 Bug fix ✅       ├── #20 Dark mode
├── #2 Register ✅   ├── #13 Performans      ├── #21 API v2
├── #3 Dashboard     ├── #14 Docs ✅          ├── #22 Mobile app
├── #4 Profile ✅    └── #15 Security         ├── #23 Notifications
└── #5 Settings                               └── #24 Analytics
     75% complete         50% complete             0% complete
     ████████░░           █████░░░░░               ░░░░░░░░░░

Milestone Oluşturma

# Web arayüzünde:
# Issues → Milestones → New milestone

# Title:       v2.0
# Due date:    2025-06-30
# Description: Büyük güncelleme. Dark mode, API v2, mobil uygulama.

Milestone detay sayfasında şunları görürsün:

v2.0 — Büyük Güncelleme
Due by June 30, 2025

Progress: ████████░░░░░░░░░░░░ 40%

Open (6)    Closed (4)

✅ #20 Dark mode implementation
✅ #21 API v2 design document
✅ #22 Mobile app wireframes  
✅ #23 Push notification service
   #24 Analytics dashboard
   #25 Export functionality
   #26 User onboarding flow
   #27 Performance optimization
   #28 Documentation update
   #29 Security audit

Milestone Best Practices

  1. Tarihi belirle — Due date olmadan milestone anlamsızlaşır

  2. Küçük tut — Bir milestone'da 10-20 issue ideal

  3. Sürüm tabanlı düşün — v1.0, v1.1, v2.0 gibi semver ile uyumlu

  4. İlerlemeyi takip et — Düzenli olarak milestone sayfasını kontrol et


Issue Templates — Standart Formlar

Farklı türdeki issue'lar için farklı şablonlar oluşturabilirsin. Bu sayede kullanıcılar doğru bilgiyi doğru formatta verir.

Bug Report Template

mkdir -p .github/ISSUE_TEMPLATE

cat > .github/ISSUE_TEMPLATE/bug_report.md << 'EOF'
---
name: 🐛 Bug Report
about: Bir hata bildirin
title: '[BUG] '
labels: bug, needs-triage
assignees: ''
---

## 🐛 Bug Açıklaması
<!-- Hatayı kısaca açıklayın -->

## 📋 Tekrarlama Adımları
1. '...' sayfasına git
2. '...' butonuna tıkla
3. '...' alanına gir
4. Hatayı gör

## ✅ Beklenen Davranış
<!-- Ne olması gerekiyordu? -->

## ❌ Gerçekleşen Davranış
<!-- Ne oldu? -->

## 📸 Ekran Görüntüsü
<!-- Varsa ekleyin -->

## 🖥️ Ortam
- İşletim Sistemi: [ör. macOS 14, Windows 11]
- Tarayıcı: [ör. Chrome 120, Firefox 121]
- Sürüm: [ör. v2.3.1]

## 📝 Ek Bilgi
<!-- Başka bir şey eklemek ister misiniz? -->
EOF

Feature Request Template

cat > .github/ISSUE_TEMPLATE/feature_request.md << 'EOF'
---
name: ✨ Feature Request
about: Yeni bir özellik önerin
title: '[FEATURE] '
labels: enhancement, needs-triage
assignees: ''
---

## 🎯 Problem
<!-- Hangi sorunu çözecek? Neden bu özellik gerekli? -->

## 💡 Çözüm Önerisi
<!-- Nasıl çalışmasını istiyorsunuz? -->

## 🔄 Alternatifler
<!-- Başka çözüm düşündünüz mü? -->

## 📸 Mockup / Örnek
<!-- Varsa görsel veya örnek ekleyin -->

## 📝 Ek Bilgi
<!-- Başka bir şey eklemek ister misiniz? -->
EOF

YAML Tabanlı Issue Forms (Daha Modern)

GitHub artık Markdown yerine YAML tabanlı form templates de destekliyor:

cat > .github/ISSUE_TEMPLATE/bug_report.yml << 'EOF'
name: 🐛 Bug Report
description: Bir hata bildirin
title: "[BUG]: "
labels: ["bug", "needs-triage"]
body:
  - type: markdown
    attributes:
      value: |
        Bug bildirimi için teşekkürler! Lütfen aşağıdaki alanları doldurun.

  - type: textarea
    id: description
    attributes:
      label: Bug Açıklaması
      description: Hatayı kısaca açıklayın
      placeholder: Login butonuna tıklayınca sayfa çöküyor...
    validations:
      required: true

  - type: textarea
    id: steps
    attributes:
      label: Tekrarlama Adımları
      description: Hatayı nasıl tekrarlayabiliriz?
      value: |
        1. 
        2. 
        3. 
    validations:
      required: true

  - type: textarea
    id: expected
    attributes:
      label: Beklenen Davranış
      description: Ne olması gerekiyordu?
    validations:
      required: true

  - type: dropdown
    id: severity
    attributes:
      label: Ciddiyet
      options:
        - Kritik (Uygulama çöküyor)
        - Yüksek (Özellik çalışmıyor)
        - Orta (Geçici çözüm var)
        - Düşük (Kozmetik)
    validations:
      required: true

  - type: dropdown
    id: browser
    attributes:
      label: Tarayıcı
      multiple: true
      options:
        - Chrome
        - Firefox
        - Safari
        - Edge
        - Diğer

  - type: textarea
    id: screenshots
    attributes:
      label: Ekran Görüntüsü
      description: Varsa sürükle-bırak ile ekleyin
EOF

Bu YAML form'unu kullanıcı açtığında şöyle bir form görür — düz metin yerine dropdown, checkbox, textarea gibi form elemanları gelir. Bu, özellikle açık kaynak projelerde bilgi kalitesini çok artırır.

Template Chooser

Birden fazla template varsa, kullanıcıya seçim ekranı gösterilir:

cat > .github/ISSUE_TEMPLATE/config.yml << 'EOF'
blank_issues_enabled: false  # Boş issue açmayı kapat (template kullanmak zorunlu)
contact_links:
  - name: 💬 Soru Sorun
    url: https://github.com/username/project/discussions
    about: Sorularınız için Discussions kullanın
  - name: 📖 Dokümantasyon
    url: https://docs.example.com
    about: Belki cevap dokümantasyonda vardır
EOF

Bu yapılandırma ile "New issue" butonuna basıldığında:

┌─────────────────────────────────────────────────┐
│             Choose an issue template             │
├─────────────────────────────────────────────────┤
│                                                  │
│  🐛 Bug Report                    [Get started]  │
│     Bir hata bildirin                            │
│                                                  │
│  ✨ Feature Request                [Get started]  │
│     Yeni bir özellik önerin                      │
│                                                  │
│  💬 Soru Sorun                     [Open →]      │
│     Sorularınız için Discussions kullanın         │
│                                                  │
│  📖 Dokümantasyon                  [Open →]      │
│     Belki cevap dokümantasyonda vardır           │
│                                                  │
└─────────────────────────────────────────────────┘

GitHub Projects — Kanban Board

GitHub Projects, issue'ları görsel bir panoda yönetmeni sağlar. Trello veya Jira'daki board'lar gibi düşün.

Projects v2 (Yeni Nesil)

GitHub'ın yeni Projects sistemi çok güçlü:

┌─────────────────────────────────────────────────────────────────┐
│  📋 Project: E-Commerce v2.0                                   │
│  Views: Board | Table | Roadmap                                 │
├──────────────┬──────────────┬──────────────┬───────────────────┤
│  📋 Backlog  │ 🔄 In Progress│  👀 Review  │  ✅ Done          │
│              │              │              │                    │
│  ┌────────┐  │  ┌────────┐  │  ┌────────┐  │  ┌────────┐      │
│  │ #30    │  │  │ #25    │  │  │ #22    │  │  │ #20    │      │
│  │ Search │  │  │ Cart   │  │  │ Payment│  │  │ Auth   │      │
│  │ 🟡 med │  │  │ 🟠 high│  │  │ 🔴 crit│  │  │ ✅     │      │
│  │ @ayse  │  │  │ @ahmet │  │  │ @ali   │  │  │ @ahmet │      │
│  └────────┘  │  └────────┘  │  └────────┘  │  └────────┘      │
│              │              │              │                    │
│  ┌────────┐  │  ┌────────┐  │              │  ┌────────┐      │
│  │ #31    │  │  │ #27    │  │              │  │ #21    │      │
│  │ Filter │  │  │ Stock  │  │              │  │ User   │      │
│  │ 🟢 low │  │  │ 🟠 high│  │              │  │ ✅     │      │
│  └────────┘  │  └────────┘  │              │  └────────┘      │
│              │              │              │                    │
│  ┌────────┐  │              │              │  ┌────────┐      │
│  │ #32    │  │              │              │  │ #19    │      │
│  │ Export │  │              │              │  │ Setup  │      │
│  │ 🟢 low │  │              │              │  │ ✅     │      │
│  └────────┘  │              │              │  └────────┘      │
│              │              │              │                    │
│   3 items    │   2 items    │   1 item     │   3 items         │
└──────────────┴──────────────┴──────────────┴───────────────────┘

Project Oluşturma

  1. Profil sayfanda veya organizasyon sayfasında Projects sekmesine git

  2. New project butonuna tıkla

  3. Template seç veya boş başla:

Templates:
  📋 Board      → Kanban tarzı (Backlog → In Progress → Done)
  📊 Table      → Spreadsheet tarzı (Excel gibi)
  🗺️ Roadmap    → Zaman çizelgesi (Gantt chart benzeri)
  📋 Team Backlog → Ekip backlog yönetimi

Custom Fields (Özel Alanlar)

Projects v2'de özel alanlar ekleyebilirsin:

Field Name       Type          Options
─────────────    ────────      ───────────────────────
Status           Single select  Backlog, In Progress, Review, Done
Priority         Single select  🔴 Critical, 🟠 High, 🟡 Medium, 🟢 Low
Sprint           Iteration      Sprint 1, Sprint 2, Sprint 3...
Estimate         Number         Story points (1, 2, 3, 5, 8, 13)
Start Date       Date           
Due Date         Date           
Team             Single select  Frontend, Backend, DevOps, Design

Views (Görünümler)

Aynı projeyi farklı açılardan görüntüleyebilirsin:

Board View:    Kanban paneli — sürükle-bırak ile durum değiştir
Table View:    Tablo — filtrele, sırala, grupla
Roadmap View:  Zaman çizelgesi — start/end date'e göre timeline

Her view'da farklı filtreler ve gruplamalar uygulayabilirsin:

View: "Backend Sprint 3"
Filter: label:area:backend AND milestone:Sprint-3
Group by: Priority
Sort by: Due date (ascending)

Automation (Otomasyon)

GitHub Projects'te bazı otomasyonlar hazır gelir:

┌──────────────────────────────────────────────────────────┐
│ Otomasyonlar                                              │
├──────────────────────────────────────────────────────────┤
│                                                           │
│ ☑ Yeni eklenen item → "Backlog" durumuna al              │
│ ☑ Issue kapandığında → "Done" durumuna taşı              │
│ ☑ PR merge edildiğinde → "Done" durumuna taşı            │
│ ☑ PR açıldığında → "In Progress" durumuna taşı           │
│                                                           │
└──────────────────────────────────────────────────────────┘

Daha karmaşık otomasyonlar için GitHub Actions kullanabilirsin (Bölüm 8'de göreceğiz).


Issue Bağlantıları ve Referanslar

Issue'lar Arası Referans

# Aynı repo'da
Bu issue #42 ile ilişkili.
Bkz. #42

# Farklı repo'da
Bkz. username/other-repo#15

# Commit'ten issue'ya
# Commit mesajında:
git commit -m "Fix login validation, ref #42"

Issue'yu Commit ile Kapatma

Commit mesajında belirli anahtar kelimeler kullanarak issue'yu otomatik kapatabilirsin:

# Bu anahtar kelimeler issue'yu kapatır:
git commit -m "Fix login bug, closes #42"
git commit -m "Resolve validation error, fixes #42"
git commit -m "Handle edge case, resolves #42"

# Birden fazla issue
git commit -m "Refactor auth module, closes #42, closes #43"

💡 İpucu: Bu otomatik kapatma sadece varsayılan branch'e (main/master) merge edildiğinde çalışır. Feature branch'e push etmek issue'yu kapatmaz — PR merge edildiğinde kapanır.

Tasklist (Görev Listesi)

Issue içinde alt görevler oluşturabilirsin:

## Görevler
- [x] Veritabanı şemasını tasarla
- [x] API endpoint'lerini yaz
- [ ] Frontend formu oluştur
- [ ] Unit testleri yaz
- [ ] Dokümantasyonu güncelle

Progress: 2/5 (40%)

GitHub bu checkboxları interaktif hale getirir — tıklayarak işaretleyebilirsin. Ve issue listesinde ilerleme çubuğu olarak görünür:

#42  E-Commerce checkout flow   ████░░░░░░ 2/5   @ahmet

Issue'yu PR ile İlişkilendirme

Issue #42 ◄──── linked ────► PR #47

Bağlantı yöntemleri:
1. PR açıklamasında "Closes #42" yaz
2. PR'ın sağ panelinde "Linked issues" bölümünden bağla
3. Issue sayfasında "Development" bölümünden PR oluştur

Issue Arama ve Filtreleme

GitHub'ın güçlü arama sözdizimi ile issue'ları filtreleyebilirsin:

# Temel filtreler
is:open                    # Açık issue'lar
is:closed                  # Kapalı issue'lar
is:issue                   # Sadece issue'lar (PR hariç)
is:pr                      # Sadece PR'lar

# Label filtresi
label:bug                  # "bug" label'ı olan
label:"priority:high"      # "priority:high" label'ı olan
-label:wontfix             # "wontfix" label'ı OLMAYAN

# Kişi filtresi
author:ahmet               # ahmet'in oluşturduğu
assignee:ayse              # ayse'ye atanmış
mentions:ali               # ali'den bahseden
involves:veli              # veli'nin dahil olduğu (author/assignee/mention)

# Milestone filtresi
milestone:"v2.0"           # v2.0 milestone'ına ait
no:milestone               # Milestone'ı olmayan

# Tarih filtresi
created:>2025-01-01        # 2025'ten sonra oluşturulan
updated:<2024-06-01        # 6 aydan önce güncellenen
closed:2025-01-01..2025-01-31  # Ocak'ta kapanan

# Birleşik filtre
is:open label:bug assignee:@me sort:created-desc

💡 İpucu: Sık kullandığın filtreleri URL olarak kaydet. Örneğin: https://github.com/username/project/issues?q=is:open+label:bug+assignee:@me — bu URL'yi bookmark yapabilirsin.


Issue Best Practices

İyi Bir Issue Nasıl Yazılır?

1. AÇIK VE SPESIFIK BAŞLIK
   ❌ "Bug var"
   ❌ "Çalışmıyor"
   ✅ "Login sayfası: geçersiz e-posta girilince 500 hatası"
   ✅ "Dashboard: grafik verileri 24 saatten eski gösteriyor"

2. TEKRARLANABILIR ADIMLAR (Bug için)
   ❌ "Bazen çöküyor"
   ✅ "1. Login ol  2. Dashboard'a git  3. 'Export' tıkla  4. Çöküyor"

3. BEKLENEN vs GERÇEKLEŞEN
   Ne olması gerekiyordu? Ne oldu? Aradaki farkı net yaz.

4. ORTAM BİLGİSİ
   Tarayıcı, OS, uygulama sürümü, ekran boyutu...
   
5. EKRAN GÖRÜNTÜSÜ / LOG
   "Bir resim bin kelimeye bedel" — özellikle UI bug'ları için

6. BİR ISSUE = BİR KONU
   ❌ "Login bozuk, ayrıca dashboard yavaş, bir de şu butonu değiştirelim"
   ✅ Her konu için ayrı issue aç

Issue Triage (Sınıflandırma)

Yeni gelen issue'ları sınıflandırma süreci:

Yeni Issue Geldi
     │
     ▼
Geçerli mi? ──── Hayır ──► invalid/duplicate label → kapat
     │
     Evet
     ▼
Tür ne? ──── Bug ──────► bug label + öncelik belirle
     │       Feature ──► enhancement label
     │       Soru ────► question label (veya Discussions'a yönlendir)
     │
     ▼
Öncelik? ──── Critical ──► Hemen ata
     │        High ──────► Bu sprint'e ekle
     │        Medium ────► Backlog'a al
     │        Low ───────► Backlog'a al, zaman oldukça
     │
     ▼
Kime ait? ──► Assignee ata, milestone belirle
     │
     ▼
needs-triage label'ını kaldır ✅

Discussions — Tartışma Alanı

GitHub Issues belirli görevler (bug, feature) için idealdir. Ama bazen daha genel tartışmalar, sorular, fikirler için bir alan gerekir. İşte Discussions bunun için var.

Issues          → Spesifik, aksiyonlanabilir görevler
                   "Login butonu çalışmıyor" → Bug fix → Kapat

Discussions     → Genel tartışmalar, sorular, fikirler
                   "Hangi state management kütüphanesini kullanalım?"
                   "Yeni logo tasarımları hakkında fikirleriniz?"

Discussion Kategorileri

📣 Announcements    → Duyurular (sadece maintainer'lar açabilir)
💬 General          → Genel tartışma
💡 Ideas            → Fikirler ve öneriler
🙏 Q&A              → Soru-cevap (cevap işaretlenebilir)
🗳️ Polls            → Oylama
🙌 Show and Tell    → Projelerini göster

💡 İpucu: Açık kaynak projeler için Discussions'ı etkinleştir. Issue tracker'ı temiz tutar — gerçek bug'lar ve feature request'ler issue olarak kalır, sorular ve tartışmalar Discussions'a yönlendirilir.


Pratik: Proje Yönetim Sistemi Kurma

Tüm öğrendiklerini bir araya getirerek bir proje yönetim sistemi kuralım:

# 1. Issue template'leri oluştur
mkdir -p .github/ISSUE_TEMPLATE

# Bug report template (zaten yukarıda yazdık)
# Feature request template (zaten yukarıda yazdık)

# 2. Config dosyası
cat > .github/ISSUE_TEMPLATE/config.yml << 'EOF'
blank_issues_enabled: false
contact_links:
  - name: 💬 Soru Sorun
    url: https://github.com/username/project/discussions
    about: Sorularınız için Discussions kullanın
EOF

# 3. Label'ları oluştur
gh label create "priority:critical" --color "B60205" --description "Üretimi etkiliyor"
gh label create "priority:high" --color "D93F0B" --description "Bu sprint'te çözülmeli"
gh label create "priority:medium" --color "FBCA04" --description "Planlanmalı"
gh label create "priority:low" --color "0E8A16" --description "Zaman oldukça"
gh label create "area:frontend" --color "1D76DB" --description "Frontend"
gh label create "area:backend" --color "5319E7" --description "Backend"
gh label create "status:in-progress" --color "0075CA" --description "Üzerinde çalışılıyor"
gh label create "needs-triage" --color "D876E3" --description "Sınıflandırılmamış"

# 4. Milestone oluştur (web arayüzünden)
# v1.0 MVP — Due: 2025-03-31
# v1.1 Stabilizasyon — Due: 2025-04-30

# 5. Birkaç issue oluştur
gh issue create \
  --title "[FEATURE] Kullanıcı kayıt sistemi" \
  --body "JWT tabanlı auth sistemi gerekli" \
  --label "enhancement,area:backend,priority:high" \
  --milestone "v1.0"

gh issue create \
  --title "[BUG] Anasayfa yükleme süresi çok uzun" \
  --body "3 saniyeden fazla sürüyor, optimize edilmeli" \
  --label "bug,area:frontend,priority:medium" \
  --milestone "v1.1"

# 6. Project oluştur (web arayüzünden)
# Board view: Backlog → In Progress → Review → Done
# Issue'ları sürükle-bırak ile taşı

# 7. Commit'lerle issue'ları kapat
git commit -m "feat: add user registration, closes #1"

Özet

Bu derste GitHub'ın proje yönetim araçlarını derinlemesine öğrendik:

  • Issues, projedeki bug'ları, özellik isteklerini ve görevleri takip etmenin temel yoludur — her issue bir görev, bir konuşma ve bir tarihçedir

  • Labels ile issue'ları kategorize edersin: tür (bug, feature), öncelik (critical, high), alan (frontend, backend) — renkli etiketler görsel organizasyon sağlar

  • Milestones ile issue'ları sürümlere veya hedeflere bağlarsın — v1.0'a ne kadar yakınsın bir bakışta görürsün

  • Issue Templates ile kullanıcılardan doğru bilgiyi doğru formatta alırsın — YAML forms ile dropdown ve checkbox bile ekleyebilirsin

  • GitHub Projects (Kanban) ile issue'ları görsel panoda yönetirsin — Board, Table ve Roadmap view'ları ile farklı perspektiflerden bakarsın

  • Discussions genel tartışmalar için ayrı bir alan sağlar — issue tracker'ı temiz tutar

Bir sonraki derste kod kalitesini artıran en önemli pratiklerden birini göreceğiz: Code Review.