- name
- developer-relations
- description
- Developer relations - community building, documentation, DevRel metrics.
# Developer Relations
## Open Source Community Management
### Community Health Scorecard
| Metrik | Saglikli | Dikkat | Kritik |
|--------|---------|--------|--------|
| Time to First Response | < 24 saat | 1-3 gun | > 3 gun |
| Issue Close Rate (monthly) | > %70 | %40-70 | < %40 |
| PR Merge Time | < 3 gun | 3-7 gun | > 7 gun |
| External Contributors | > %30 | %10-30 | < %10 |
| Bus Factor | > 3 | 2-3 | 1 |
| Release Cadence | Regular (2-4 hafta) | Duzensiz | > 3 ay |
| Documentation Coverage | > %80 | %50-80 | < %50 |
### Community Roles & Responsibilities
```
Maintainer
|-- Core Contributor (write access)
| |-- Regular Contributor (frequent PRs)
| | |-- Occasional Contributor (1-5 PRs)
| | |-- First-time Contributor
|-- Reviewer (code review)
|-- Triage (issue labeling)
|-- Community Moderator (Discord/Slack)
|-- Documentation Contributor
```
### Issue Triage Labels
```yaml
# Issue labels taxonomy
type:
- bug # Something isn't working
- feature # New feature request
- enhancement # Improvement to existing feature
- documentation # Documentation update
- question # Community question
priority:
- critical # Production breaking
- high # Important, next release
- medium # Normal priority
- low # Nice to have
status:
- needs-triage # Awaiting maintainer review
- confirmed # Bug confirmed, feature accepted
- needs-info # Waiting for reporter input
- in-progress # Being worked on
- blocked # Dependency blocker
experience:
- good-first-issue # Newcomer friendly
- help-wanted # Community contribution welcome
- mentor-available # Maintainer will guide
```
### Automated Community Workflows
```yaml
# .github/workflows/community.yml
name: Community Management
on:
issues:
types: [opened]
pull_request:
types: [opened]
jobs:
welcome-new-contributor:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
with:
issue-message: |
Welcome to the project! Thanks for opening your first issue.
Please make sure you've filled out the issue template completely.
A maintainer will review this shortly.
pr-message: |
Thanks for your first PR! A maintainer will review it soon.
Please make sure all checks pass and you've signed the CLA.
auto-label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
stale-check:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: "This issue has been inactive for 30 days. It will be closed in 7 days if no further activity occurs."
days-before-stale: 30
days-before-close: 7
```
## Developer Documentation Best Practices
### Documentation Architecture
```
docs/
getting-started/
installation.md # 5 dakikada calistir
quickstart.md # Ilk basari deneyimi
configuration.md # Temel ayarlar
guides/
authentication.md # How-to guide
data-migration.md # Step-by-step
deployment.md # Production setup
reference/
api/ # Auto-generated API docs
cli/ # CLI commands
configuration/ # All config options
concepts/
architecture.md # Mimari aciklama
data-model.md # Data yapisi
examples/
basic/ # Basit ornekler
advanced/ # Ileri ornekler
integrations/ # 3rd party entegrasyonlar
contributing/
CONTRIBUTING.md # Katki rehberi
CODE_OF_CONDUCT.md # Davranis kurallari
DEVELOPMENT.md # Dev environment setup
changelog/
CHANGELOG.md # Release notes
```
### Documentation Quality Checklist
| Kriter | Aciklama |
|--------|----------|
| 5-Minute Success | Yeni kullanici 5 dk'da calisan bir sey gorebilmeli |
| Copy-Paste Ready | Kod ornekleri direkt calisabilmeli |
| Up-to-Date | Kod degisince doc da guncellenecek (CI check) |
| Searchable | Arama motoru ile bulunabilir |
| Progressive Disclosure | Basit -> Orta -> Ileri siralama |
| Error Messages | Hata mesajlari doc'a linklemeli |
| Platform Coverage | macOS, Linux, Windows ornekleri |
| Language Coverage | En az 3 dilde SDK ornegi |
### API Documentation Template
```markdown
## Create User
Creates a new user account.
### Request
`POST /api/v1/users`
#### Headers
| Header | Required | Description |
|--------|----------|-------------|
| Authorization | Yes | Bearer token |
| Content-Type | Yes | application/json |
#### Body
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| email | string | Yes | Valid email address |
| name | string | Yes | Full name (2-100 chars) |
| role | string | No | "admin" or "member" (default: "member") |
#### Example
\```bash
curl -X POST https://api.example.com/v1/users \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"name": "Jane Smith",
"role": "member"
}'
\```
### Response
#### 201 Created
\```json
{
"id": "usr_abc123",
"email": "user@example.com",
"name": "Jane Smith",
"role": "member",
"created_at": "2026-01-15T10:30:00Z"
}
\```
#### 400 Bad Request
\```json
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid email format"
}
}
\```
#### 409 Conflict
\```json
{
"error": {
"code": "DUPLICATE_EMAIL",
"message": "A user with this email already exists"
}
}
\```
```
## Tutorial ve Workshop Olusturma
### Tutorial Structure
```
1. WHAT: Ne yapacagiz? (1 paragraf, 30 saniye okuma)
2. WHY: Neden onemli? (1 paragraf)
3. PREREQUISITES: Nelere ihtiyac var? (liste)
4. STEPS: Adim adim (her adim bitmis, calisan bir sey)
- Step 1: Setup (copy-paste)
- Step 2: Basic usage (calisan output goster)
- Step 3: Build something (gercek problem coz)
- Step 4: Advanced (opsiyonel)
5. NEXT STEPS: Sonra ne yapabilirim? (linkler)
6. TROUBLESHOOTING: Yaygın sorunlar ve cozumleri
```
### Workshop Format (90 Dakika)
```
00:00 - 00:10 Giris ve motivasyon (demo goster)
00:10 - 00:20 Setup kontrolu (herkes calisiyor mu?)
00:20 - 00:40 Guided exercise 1 (birlikte yapariz)
00:40 - 00:50 Solo exercise 1 (kendiniz yapin)
00:50 - 01:00 Ara + sorular
01:00 - 01:20 Guided exercise 2 (ileri seviye)
01:20 - 01:30 Solo exercise 2
01:30 - 01:40 Showcase (katilimcilar gosterir)
01:40 - 01:50 Q&A + next steps
```
## Conference Talk Preparation
### Talk Structure Template
```
Title: [Catchy, specific, searchable]
Duration: [15/25/40 min]
Audience Level: [Beginner/Intermediate/Advanced]
OUTLINE:
1. Hook (2 min)
- Surprising stat or demo
- "How many of you have...?"
2. Problem (3 min)
- Pain point everyone recognizes
- Why existing solutions fall short
3. Solution (Main Content) (60% of time)
- Core concept explanation
- Live demo or code walkthrough
- Before/After comparison
4. Deep Dive (20% of time)
- Technical details
- Architecture decisions
- Performance numbers
5. Takeaways (3 min)
- 3 actionable items
- Resources & links
- QR code to slides/repo
```
### Speaker Checklist
| Asama | Kontrol |
|-------|---------|
| Proposal | CFP'ye uygun mu? Abstract compelling mi? |
| Slides | Max 1 nokta per slide, buyuk font (24pt+) |
| Demo | Offline calisir mi? Backup video var mi? |
| Timing | Prova yapildi mi? %10 buffer biraktin mi? |
| Setup | Adaptor, clicker, backup laptop? |
| After | Slides paylastin mi? Repo public mi? |
## Developer Advocate Programi
### Advocate Tipleri
| Tip | Odak | Ciktilar |
|-----|------|---------|
| Content Advocate | Blog, video, tutorial | Haftalik icerik |
| Community Advocate | Forum, Discord, events | Gunluk etkilesim |
| Technical Advocate | SDK, samples, integrations | Kod + doc |
| Field Advocate | Customer visits, workshops | Aylik workshop |
| Product Advocate | Feedback loop, beta testing | Feature requests |
### Advocate Program Metrics
```typescript
interface AdvocateMetrics {
content: {
blog_posts: number;
videos: number;
tutorials: number;
total_views: number;
avg_engagement_rate: number;
};
community: {
questions_answered: number;
avg_response_time_hours: number;
community_satisfaction: number; // 1-5
new_members_influenced: number;
};
events: {
talks_given: number;
workshops_run: number;
attendees_reached: number;
post_event_signups: number;
};
product: {
feedback_submitted: number;
features_influenced: number;
beta_testers_recruited: number;
sdk_contributions: number;
};
}
```
## Community Metrics
### GitHub Community Health
```typescript
interface GitHubHealth {
stars: number;
star_growth_weekly: number;
forks: number;
open_issues: number;
closed_issues_30d: number;
open_prs: number;
merged_prs_30d: number;
contributors_total: number;
contributors_new_30d: number;
avg_issue_close_time_hours: number;
avg_pr_merge_time_hours: number;
releases_90d: number;
commit_frequency_weekly: number;
code_frequency: { additions: number; deletions: number };
}
// GitHub API ile metrikleri cek
async function fetchGitHubHealth(owner: string, repo: string): Promise<GitHubHealth> {
const headers = { Authorization: `token ${process.env.GITHUB_TOKEN}` };
const [repoData, issues, prs, contributors, releases] = await Promise.all([
fetch(`https://api.github.com/repos/${owner}/${repo}`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/issues?state=all&per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/pulls?state=all&per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/contributors?per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/releases?per_page=10`, { headers }).then(r => r.json()),
]);
return {
stars: repoData.stargazers_count,
star_growth_weekly: 0, // weekly delta hesapla
forks: repoData.forks_count,
open_issues: repoData.open_issues_count,
closed_issues_30d: issues.filter((i: any) => i.state === "closed").length,
open_prs: prs.filter((p: any) => p.state === "open").length,
merged_prs_30d: prs.filter((p: any) => p.merged_at).length,
contributors_total: contributors.length,
contributors_new_30d: 0,
avg_issue_close_time_hours: 0,
avg_pr_merge_time_hours: 0,
releases_90d: releases.length,
commit_frequency_weekly: 0,
code_frequency: { additions: 0, deletions: 0 },
};
}
```
### Community Growth Metrics
| Metrik | Tanim | Hedef |
|--------|-------|-------|
| Stars / Week | Haftalik yeni star | +50/hafta |
Auf GitHub ansehen