Linear - Kompletny Przewodnik po Nowoczesnym Project Management
Czym jest Linear?
Linear to narzędzie do zarządzania projektami stworzone przez i dla zespołów software. W przeciwieństwie do tradycyjnych narzędzi jak Jira czy Asana, Linear stawia na szybkość, minimalizmem i keyboard-first experience - każda akcja może być wykonana bez dotykania myszki, co sprawia, że praca z narzędziem jest tak naturalna jak kodowanie.
Linear został założony w 2019 roku przez byłych pracowników Uber (Karri Saarinen - ex-Head of Design Airbnb i Jori Lallo - ex-engineer Uber). Ich frustracją było to, że narzędzia do zarządzania projektami są wolniejsze i mniej intuicyjne niż same narzędzia developerskie - dlatego stworzyli Linear jako narzędzie, które jest równie szybkie i przyjemne w użyciu jak VS Code czy terminal.
Linear jest używany przez tysiące firm technologicznych, w tym Vercel, Retool, Ramp, Loom, Cash App i wielu innych. Stał się de facto standardem dla startupów i nowoczesnych zespołów software.
Dlaczego Linear?
Kluczowe zalety Linear
- Szybkość - Instant load, zero lag, optimistic updates
- Keyboard-first - Wszystko przez skróty klawiszowe
- Beautiful design - Minimalistyczny, estetyczny UI
- GitHub native - Głęboka integracja z kodem
- Cycles - Sprints bez zbędnego boilerplate
- Roadmaps - Wizualna timeline projektów
- No-configuration - Działa out-of-the-box
- Real-time sync - Natychmiastowa synchronizacja
Linear vs Jira vs Asana vs Notion
| Cecha | Linear | Jira | Asana | Notion |
|---|---|---|---|---|
| Szybkość UI | ⚡ Błyskawiczna | 🐌 Wolna | 🚶 Średnia | 🚶 Średnia |
| Keyboard shortcuts | ✅ Pełne | ❌ Ograniczone | ❌ Ograniczone | ✅ Dobre |
| GitHub integration | ✅ Native | ✅ Plugin | ❌ Webhook | ❌ Embed |
| Setup time | ⚡ Instant | 🐌 Długi | 🚶 Średni | 🚶 Średni |
| Learning curve | ✅ Niska | ❌ Wysoka | ✅ Niska | 🚶 Średnia |
| Dla dev teams | ✅ Perfect | ✅ Tak | ❌ Ogólne | ❌ Ogólne |
| Free tier | 250 issues | ✅ Do 10 | ✅ Limited | ✅ Limited |
| Cena | $10/user | $8.15/user | $11/user | $10/user |
Podstawy Linear
Interfejs użytkownika
┌─────────────────────────────────────────────────────────────────┐
│ Linear 🔍 Cmd+K [?] [⚙️] │
├──────────────┬──────────────────────────────────────────────────┤
│ │ │
│ 📥 Inbox │ Issues │
│ 🎯 My Issues│ ┌────────────────────────────────────────────┐ │
│ 📋 Backlog │ │ ○ LIN-123 Fix auth redirect bug │ │
│ ▶️ Active │ │ 🔴 Urgent · @alice · Frontend │ │
│ 📊 Triage │ ├────────────────────────────────────────────┤ │
│ │ │ ○ LIN-124 Add dark mode toggle │ │
│ ─────────── │ │ 🟡 Medium · @bob · Design │ │
│ │ ├────────────────────────────────────────────┤ │
│ Teams: │ │ ○ LIN-125 Refactor API client │ │
│ 🏠 Product │ │ 🟢 Low · Unassigned · Backend │ │
│ ⚙️ Enginee. │ └────────────────────────────────────────────┘ │
│ 🎨 Design │ │
│ │ [+ New Issue] │
│ ─────────── │ │
│ │ Filters: Status | Priority | Assignee | Label │
│ 🗺️ Roadmap │ │
│ 📅 Cycles │ │
│ │ │
└──────────────┴──────────────────────────────────────────────────┘Hierarchia w Linear
Workspace (Firma/Organizacja)
│
├── Team: Engineering
│ ├── Project: Mobile App v2.0
│ │ ├── Issue: LIN-101 Setup React Native
│ │ ├── Issue: LIN-102 Navigation system
│ │ └── Issue: LIN-103 API integration
│ │
│ └── Project: Backend Refactor
│ ├── Issue: LIN-201 Migrate to NestJS
│ └── Issue: LIN-202 Add caching layer
│
├── Team: Design
│ └── Project: Design System
│ ├── Issue: DES-001 Color palette
│ └── Issue: DES-002 Component library
│
└── Team: Product
└── Project: User Research
└── Issue: PRD-001 Conduct interviewsTworzenie issues
Szybkie tworzenie (C lub Cmd+I):
Title: Fix login redirect bug
─────────────────────────────────────────
Description (Markdown):
## Problem
Users are redirected to wrong page after login.
## Steps to reproduce
1. Go to /login
2. Enter credentials
3. Click "Sign In"
4. Expected: Dashboard
5. Actual: Landing page
## Technical details
- [ ] Check auth middleware
- [ ] Review redirect logic in AuthContext
─────────────────────────────────────────
Status: 📋 Backlog
Priority: 🔴 Urgent
Assignee: @alice
Labels: bug, frontend, auth
Project: Authentication Improvements
Cycle: Sprint 24
Estimate: 2 pointsKeyboard Shortcuts
Podstawowe skróty
NAWIGACJA:
G I - Go to Inbox
G M - Go to My Issues
G B - Go to Backlog
G A - Go to Active
G P - Go to Projects
G C - Go to Cycles
G R - Go to Roadmap
G T - Go to Team
G S - Go to Settings
GLOBALNE:
Cmd/Ctrl + K - Command palette (najważniejszy!)
/ - Quick search
? - Show all shortcuts
Escape - Close/Cancel
TWORZENIE:
C - Create issue
Shift + C - Create issue from anywhere
I - Create sub-issue
P - Create project
EDYCJA ISSUES:
Space - Select/Deselect
Enter - Open issue detail
S - Change status
A - Assign
L - Add label
E - Edit estimate
D - Set due date
M - Move to project
X - Archive
Delete - Delete (with confirmation)
NAWIGACJA W LIŚCIE:
J / ↓ - Move down
K / ↑ - Move up
[ / ] - Previous/Next issueZaawansowane skróty
BULK ACTIONS:
Shift + click - Select range
Cmd + click - Multi-select
Cmd + A - Select all visible
Shift + S - Change status for selected
Shift + A - Assign selected
Shift + L - Label selected
WIDOKI:
1 - List view
2 - Board view
3 - Calendar view
Cmd + Shift + \ - Toggle sidebar
F - Full screen issue
Cmd + / - Toggle activity
MARKDOWN (w edytorze):
Cmd + B - Bold
Cmd + I - Italic
Cmd + K - Link
Cmd + E - Code
Cmd + Shift + M - Mention user
Cmd + Shift + E - Mention issueCommand Palette (Cmd+K)
Cmd+K otwiera command palette - najszybszy sposób na wszystko:
> create issue
> assign to alice
> set status in progress
> add label bug
> move to project Authentication
> set priority urgent
> go to settings
> switch team engineering
> open preferences
Pro tip: Możesz łączyć akcje:
> LIN-123 status done assign meStatus i Workflow
Domyślne statusy
Backlog (📋) - Issues do rozważenia
│
├── Triage (📊) - Nowe issues do przeglądu
│
▼
Todo (○) - Gotowe do pracy
│
▼
In Progress (◐) - W trakcie realizacji
│
▼
In Review (◑) - Code review / QA
│
▼
Done (●) - Zakończone
│
└── Canceled (⊘) - AnulowaneCustomowe workflow
Zespół może dostosować workflow:
Settings → Teams → [Team Name] → Workflow
Przykład workflow dla Design team:
📋 Backlog
├── 📊 Triage
├── 💡 Discovery
├── ✏️ Designing
├── 👀 Design Review
├── 🔄 Revisions
├── ✅ Ready for Dev
└── ● DoneCycles (Sprints)
Konfiguracja cycles
Settings → Teams → [Team] → Cycles
Cycle length: 2 weeks
Start day: Monday
Auto-archive after: 1 week
Auto-move incomplete: ✅ (do następnego cycle)Planowanie cyklu
1. Przejdź do Cycles (G C)
2. Wybierz nadchodzący cycle
3. Przeciągnij issues z Backlog
4. Lub użyj M (move) na issue → wybierz cycle
Cycle Planning View:
┌─────────────────────────────────────────────────────────────┐
│ Cycle 24: Jan 20 - Feb 2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Capacity: 32 points │
│ Committed: 28 points │
│ Progress: ████████░░░░░░░░░░░░ 35% │
│ │
│ Issues: │
│ ● LIN-101 Setup React Native @alice 3 pts │
│ ◐ LIN-102 Navigation system @bob 5 pts │
│ ○ LIN-103 API integration @alice 8 pts │
│ ○ LIN-104 Unit tests @charlie 5 pts │
│ ○ LIN-105 Documentation Unas. 2 pts │
│ │
└─────────────────────────────────────────────────────────────┘Velocity i metryki
Cycle metrics automatycznie śledzone:
- Velocity: średnia liczba punktów/cycle
- Completion rate: % ukończonych issues
- Scope change: ile dodano/usunięto w trakcie
- Lead time: czas od created do done
- Cycle time: czas od started do done
Linear automatycznie pokazuje trendy i przewiduje
capacity dla przyszłych cycles.GitHub Integration
Linkowanie issues
W commit messages lub PR:
─────────────────────────────
fix: resolve auth redirect bug
Fixes LIN-123
Closes LIN-124
Relates to LIN-125
─────────────────────────────
Lub w PR description:
Closes LIN-123
Linear automatycznie:
1. Linkuje PR do issue
2. Zmienia status issue na "In Review"
3. Po merge zmienia na "Done" (opcjonalne)Automatyzacja statusów
Settings → Integrations → GitHub → Automations
Dostępne triggery:
│
├── PR opened → Move issue to "In Review"
├── PR merged → Move issue to "Done"
├── PR closed → Move issue to "Backlog"
├── Branch created → Move issue to "In Progress"
└── Commit pushed → Show activity on issue
Przykładowa konfiguracja:
[✓] When PR is opened, move to "In Review"
[✓] When PR is merged to main, move to "Done"
[✓] Show commits and PRs on issue timeline
[✓] Auto-link issues from branch names (feature/LIN-123)Branch naming
Linear może automatycznie generować nazwy branchy:
Issue: LIN-123 "Fix login redirect bug"
Branch: feature/lin-123-fix-login-redirect-bug
Settings → Integrations → GitHub:
Branch format: {prefix}/{issueId}-{title}
Prefix: feature, fix, chore (based on label)GitHub Sync
Dwukierunkowa synchronizacja:
GitHub Issue → Linear Issue
- Import issues z GitHub
- Sync komentarzy
- Sync labels
Linear Issue → GitHub Issue
- Export issues do GitHub
- Mirror status changesProjects i Roadmaps
Tworzenie projektu
1. G P (go to projects)
2. P (create project)
3. Wypełnij:
Project: Mobile App v2.0
─────────────────────────────────────────
Icon: 📱
Description: Complete rewrite of our mobile app
using React Native for both iOS and Android.
Status: 🟡 In Progress
Lead: @alice
Target date: March 30, 2025
─────────────────────────────────────────
Projects mogą zawierać:
- Multiple milestones
- Linked issues
- Documents
- Updates (progress posts)Milestones
Project: Mobile App v2.0
│
├── Milestone 1: Foundation (Feb 15)
│ ├── LIN-101 Setup project
│ ├── LIN-102 Core navigation
│ └── LIN-103 Design system integration
│
├── Milestone 2: Core Features (Mar 1)
│ ├── LIN-201 User authentication
│ ├── LIN-202 Profile management
│ └── LIN-203 Settings screen
│
├── Milestone 3: Polish (Mar 20)
│ ├── LIN-301 Performance optimization
│ ├── LIN-302 Accessibility
│ └── LIN-303 Bug fixes
│
└── Milestone 4: Launch (Mar 30)
├── LIN-401 App Store submission
└── LIN-402 Marketing assetsRoadmap view
Roadmap pokazuje projekty na timeline:
Jan Feb Mar Apr
├──────────┼──────────┼──────────┼──
│ │ │ │
Mobile │██████████████████████████░░░░░░│ ← In Progress
App v2 │ │ │ ↑ Target│
│ │ │ │
Backend │ ████████████████│ │ ← Completed
Refactor │ │ │ │
│ │ │ │
Design │ ██████████████████│ ← Planned
System │ │ │ │
│ │ │ │
Możesz drag & drop aby zmienić daty,
i kliknąć projekt aby zobaczyć szczegóły.Triage i Inbox
Triage workflow
Triage to miejsce gdzie trafiają nowe issues
przed przypisaniem do backlogu:
1. Issue created → Status: Triage
2. Team lead przegląda
3. Przypisuje:
- Priority
- Labels
- Project/Cycle
- Assignee
4. Przenosi do Backlog lub Todo
5. Lub zamyka jako duplicate/invalid
Triage View (G T):
┌─────────────────────────────────────────────────────────────┐
│ Triage · 12 issues need attention │
├─────────────────────────────────────────────────────────────┤
│ Today (5) │
│ ○ LIN-200 Bug: Login fails on Safari @user reported │
│ ○ LIN-201 Feature: Dark mode support @user requested │
│ ○ LIN-202 Bug: Crash on large files @user reported │
│ │
│ Yesterday (4) │
│ ... │
│ │
│ Older (3) │
│ ... │
└─────────────────────────────────────────────────────────────┘Inbox
Inbox (G I) pokazuje twoje notyfikacje:
- Issues assigned to you
- Issues where you're mentioned
- Comments on your issues
- Status changes on watched issues
Możesz:
- Mark as read (Enter)
- Snooze (z) - przypomni później
- Archive (x) - usuń z inboxLabels i Filtering
System labels
Labels pomagają kategoryzować issues:
Type labels:
├── 🐛 bug
├── ✨ feature
├── 📝 documentation
├── 🧹 chore
└── 🔧 refactor
Area labels:
├── frontend
├── backend
├── mobile
├── infrastructure
└── design
Priority labels (wbudowane):
├── 🔴 Urgent (P0)
├── 🟠 High (P1)
├── 🟡 Medium (P2)
├── 🟢 Low (P3)
└── ⚪ No priorityZaawansowane filtry
Filtrowanie w Linear jest potężne:
status:inProgress - Issues in progress
assignee:me - My issues
priority:urgent,high - Urgent or high priority
label:bug,frontend - Bugs in frontend
created:>2024-01-01 - Created after date
updated:<7d - Updated in last 7 days
cycle:current - Current cycle
project:"Mobile App" - Specific project
has:attachment - Has attachments
estimate:>3 - Estimate > 3 points
Kombinacje:
assignee:me status:todo,inProgress label:bug
Zapisane filtry:
Views → Custom Views → Save current filterViews
Tworzenie custom view:
1. Ustaw filtry
2. Wybierz kolumny i sortowanie
3. Click "Save view"
4. Nazwij i wybierz widoczność:
- Personal
- Team
- Workspace
Przykładowe views:
- "My urgent bugs" - assignee:me label:bug priority:urgent
- "Ready for review" - status:inReview
- "Blocked issues" - has:blocker
- "Unestimated" - estimate:noneIntegracje
Slack
Linear ↔ Slack Integration:
1. Notifications → Slack channel
- New issues created
- Status changes
- Mentions
2. Create issues from Slack:
/linear create "Bug: Login broken"
/linear LIN-123 - show issue details
3. Unfurl Linear links:
Paste Linear URL → rich preview
Settings → Integrations → SlackFigma
Figma Integration:
1. Paste Figma link in issue → rich preview
2. Attach Figma files to issues
3. Open Figma from Linear
Workflow:
Designer creates design in Figma
→ Attaches to Linear issue
→ Developer sees preview in Linear
→ No context switching neededInne integracje
Oficjalne integracje:
├── GitHub/GitLab/Bitbucket
├── Slack
├── Figma
├── Sentry
├── Zendesk
├── Intercom
├── Notion
├── Discord
└── Zapier (dla custom)
API i Webhooks:
├── GraphQL API
├── Webhooks
└── OAuth appsLinear API
GraphQL API
// Linear SDK
import { LinearClient } from '@linear/sdk'
const linear = new LinearClient({
apiKey: process.env.LINEAR_API_KEY
})
// Pobierz issues
async function getMyIssues() {
const me = await linear.viewer
const issues = await me.assignedIssues()
return issues.nodes.map(issue => ({
id: issue.id,
identifier: issue.identifier, // LIN-123
title: issue.title,
state: issue.state?.name,
priority: issue.priority
}))
}
// Utwórz issue
async function createIssue(teamId: string, title: string, description: string) {
const issue = await linear.createIssue({
teamId,
title,
description,
priority: 2, // Medium
labelIds: ['bug-label-id']
})
return issue.issue
}
// Aktualizuj issue
async function updateIssueStatus(issueId: string, stateId: string) {
await linear.updateIssue(issueId, {
stateId
})
}
// Dodaj komentarz
async function addComment(issueId: string, body: string) {
await linear.createComment({
issueId,
body
})
}Webhooks
// Webhook handler (Next.js API route)
import { LinearWebhooks, LINEAR_WEBHOOK_SIGNATURE_HEADER } from '@linear/sdk'
const webhook = new LinearWebhooks(process.env.LINEAR_WEBHOOK_SECRET!)
export async function POST(request: Request) {
const body = await request.text()
const signature = request.headers.get(LINEAR_WEBHOOK_SIGNATURE_HEADER)
if (!webhook.verify(body, signature!)) {
return Response.json({ error: 'Invalid signature' }, { status: 401 })
}
const payload = JSON.parse(body)
switch (payload.type) {
case 'Issue':
if (payload.action === 'create') {
console.log('New issue:', payload.data.title)
// Send to Slack, update CRM, etc.
}
break
case 'Comment':
if (payload.action === 'create') {
console.log('New comment on:', payload.data.issue.identifier)
}
break
}
return Response.json({ success: true })
}Best Practices
Issue writing
Dobry issue zawiera:
Title: Krótki, opisowy (co, nie jak)
✓ "Fix: Users can't reset password"
✗ "Password bug"
✗ "Use bcrypt instead of md5"
Description:
1. Problem/Context - co i dlaczego
2. Acceptance criteria - kiedy done
3. Technical notes - dla developera
Przykład:
─────────────────────────────────────────
## Problem
Users are unable to reset their password.
The reset email is sent but the link returns 404.
## Root cause
Token expires before email is delivered (5 min TTL).
## Acceptance criteria
- [ ] Increase token TTL to 1 hour
- [ ] Add expiry message on 404
- [ ] Add "resend email" option
## Technical notes
- Token stored in Redis: `reset:{userId}`
- Email sent via ResendTeam workflow
Rekomendowany workflow:
Monday:
1. Cycle planning (30 min)
2. Review triage
3. Assign issues
Daily:
1. Check inbox (5 min)
2. Update issue statuses
3. Add blockers/comments
End of cycle:
1. Close completed issues
2. Review velocity
3. Incomplete → next cycle
4. Retrospective
Pro tips:
- Use keyboard shortcuts religiously
- Keep issues small (1-3 days max)
- Update status in real-time
- Link all PRs to issuesEstimation
Story points w Linear:
1 - Trivial (< 1 hour)
2 - Small (half day)
3 - Medium (1 day)
5 - Large (2-3 days)
8 - Very large (1 week) → consider splitting
Alternatywnie - T-shirt sizes:
XS, S, M, L, XL (mapują na 1, 2, 3, 5, 8)
Settings → Teams → Estimation:
- Points
- T-shirt
- Hours
- NoneCennik
Plany
Free:
├── Do 250 issues
├── Unlimited members
├── Basic integrations
├── Mobile apps
└── Public API
Standard ($10/user/month):
├── Unlimited issues
├── Cycles
├── Roadmaps
├── All integrations
├── Custom workflows
├── Triage
└── Priority support
Plus ($15/user/month):
├── Everything in Standard
├── Advanced insights
├── SAML SSO
├── SCIM provisioning
├── Audit logs
├── Custom roles
└── 99.99% SLA
Enterprise (custom):
├── Everything in Plus
├── Dedicated support
├── Custom contracts
├── On-premise option
└── Advanced securityPorównanie z Jira
Linear vs Jira - Total Cost of Ownership:
Linear Standard: $10/user/month
Jira Standard: $8.15/user/month (seems cheaper but...)
Hidden Jira costs:
+ Admin time for configuration
+ Plugin costs ($5-20/user)
+ Training (steep learning curve)
+ Performance issues (developer frustration)
+ Context switching (slow UI)
Real-world comparison:
10-person team, 1 year:
Linear:
$10 × 10 × 12 = $1,200/year
+ 0 hours setup
+ 1 hour training
= $1,200 + minimal time
Jira:
$8.15 × 10 × 12 = $978/year
+ 20 hours setup × $50/hr = $1,000
+ 10 hours training × $50/hr = $500
+ Plugins ~$500/year
+ Lost productivity (slow UI) = ???
= $2,978+ annuallyFAQ - Często zadawane pytania
Czy Linear ma darmowy tier?
Tak, Linear oferuje darmowy plan do 250 issues z unlimited members. To wystarcza dla małych zespołów i side projects. Po przekroczeniu limitu musisz przejść na Standard ($10/user/month).
Jak zmigrować z Jira?
Linear oferuje oficjalny importer:
- Settings → Import → Jira
- Połącz konto Jira
- Wybierz projekty do importu
- Mapuj statusy i labels
- Import (może potrwać zależnie od ilości issues)
Linear migruje: issues, comments, attachments, labels, assignees.
Czy Linear działa offline?
Linear jest web-first i wymaga internetu. Jednak:
- PWA można zainstalować
- Desktop app (Electron) cache'uje dane
- Optimistic updates - czujesz się jak offline
Jak Linear wypada dla non-dev teams?
Linear jest zoptymalizowany dla software teams. Dla:
- Marketing/Sales → Notion, Asana
- All-purpose → Monday, ClickUp
- Design teams → Linear jest OK
Czy mogę używać Linear z GitLab/Bitbucket?
Tak, Linear ma oficjalne integracje z GitLab i Bitbucket. Funkcjonalność jest podobna do GitHub - linkowanie issues, auto-status changes.
Jak zarządzać wieloma zespołami?
Linear obsługuje multiple teams w jednym workspace:
- Każdy team ma własny backlog i workflow
- Issues mogą być przenoszone między teamami
- Roadmap pokazuje wszystkie projekty
- Cross-team dependencies
Podsumowanie
Linear to idealne narzędzie do zarządzania projektami dla zespołów software, oferujące:
- Błyskawiczną szybkość - Instant load, zero lag
- Keyboard-first UX - Wszystko przez skróty
- Native GitHub - Głęboka integracja z kodem
- Cycles - Sprints bez boilerplate
- Roadmaps - Wizualne planowanie
- Beautiful design - Przyjemny w użyciu
Jeśli jesteś zmęczony wolną Jirą lub ogólnymi narzędziami jak Asana - Linear to game-changer dla dev teams.
Linear - a complete guide to modern project management
What is Linear?
Linear is a project management tool built by and for software teams. Unlike traditional tools like Jira or Asana, Linear prioritizes speed, minimalism, and a keyboard-first experience - every action can be performed without touching the mouse, making working with the tool feel as natural as coding itself.
Linear was founded in 2019 by former Uber employees (Karri Saarinen - ex-Head of Design at Airbnb and Jori Lallo - ex-engineer at Uber). Their frustration was that project management tools were slower and less intuitive than the developer tools themselves - so they created Linear as a tool that is just as fast and pleasant to use as VS Code or the terminal.
Linear is used by thousands of technology companies, including Vercel, Retool, Ramp, Loom, Cash App, and many others. It has become the de facto standard for startups and modern software teams.
Why Linear?
Key advantages of Linear
- Speed - Instant load, zero lag, optimistic updates
- Keyboard-first - Everything via keyboard shortcuts
- Beautiful design - Minimalist, aesthetic UI
- GitHub native - Deep integration with code
- Cycles - Sprints without unnecessary boilerplate
- Roadmaps - Visual project timelines
- No-configuration - Works out-of-the-box
- Real-time sync - Instant synchronization
Linear vs Jira vs Asana vs Notion
| Feature | Linear | Jira | Asana | Notion |
|---|---|---|---|---|
| UI speed | ⚡ Lightning fast | 🐌 Slow | 🚶 Average | 🚶 Average |
| Keyboard shortcuts | ✅ Full | ❌ Limited | ❌ Limited | ✅ Good |
| GitHub integration | ✅ Native | ✅ Plugin | ❌ Webhook | ❌ Embed |
| Setup time | ⚡ Instant | 🐌 Long | 🚶 Medium | 🚶 Medium |
| Learning curve | ✅ Low | ❌ High | ✅ Low | 🚶 Medium |
| For dev teams | ✅ Perfect | ✅ Yes | ❌ General | ❌ General |
| Free tier | 250 issues | ✅ Up to 10 | ✅ Limited | ✅ Limited |
| Price | $10/user | $8.15/user | $11/user | $10/user |
Linear basics
User interface
┌─────────────────────────────────────────────────────────────────┐
│ Linear 🔍 Cmd+K [?] [⚙️] │
├──────────────┬──────────────────────────────────────────────────┤
│ │ │
│ 📥 Inbox │ Issues │
│ 🎯 My Issues│ ┌────────────────────────────────────────────┐ │
│ 📋 Backlog │ │ ○ LIN-123 Fix auth redirect bug │ │
│ ▶️ Active │ │ 🔴 Urgent · @alice · Frontend │ │
│ 📊 Triage │ ├────────────────────────────────────────────┤ │
│ │ │ ○ LIN-124 Add dark mode toggle │ │
│ ─────────── │ │ 🟡 Medium · @bob · Design │ │
│ │ ├────────────────────────────────────────────┤ │
│ Teams: │ │ ○ LIN-125 Refactor API client │ │
│ 🏠 Product │ │ 🟢 Low · Unassigned · Backend │ │
│ ⚙️ Enginee. │ └────────────────────────────────────────────┘ │
│ 🎨 Design │ │
│ │ [+ New Issue] │
│ ─────────── │ │
│ │ Filters: Status | Priority | Assignee | Label │
│ 🗺️ Roadmap │ │
│ 📅 Cycles │ │
│ │ │
└──────────────┴──────────────────────────────────────────────────┘Hierarchy in Linear
Workspace (Company/Organization)
│
├── Team: Engineering
│ ├── Project: Mobile App v2.0
│ │ ├── Issue: LIN-101 Setup React Native
│ │ ├── Issue: LIN-102 Navigation system
│ │ └── Issue: LIN-103 API integration
│ │
│ └── Project: Backend Refactor
│ ├── Issue: LIN-201 Migrate to NestJS
│ └── Issue: LIN-202 Add caching layer
│
├── Team: Design
│ └── Project: Design System
│ ├── Issue: DES-001 Color palette
│ └── Issue: DES-002 Component library
│
└── Team: Product
└── Project: User Research
└── Issue: PRD-001 Conduct interviewsCreating issues
Quick creation (C or Cmd+I):
Title: Fix login redirect bug
─────────────────────────────────────────
Description (Markdown):
## Problem
Users are redirected to wrong page after login.
## Steps to reproduce
1. Go to /login
2. Enter credentials
3. Click "Sign In"
4. Expected: Dashboard
5. Actual: Landing page
## Technical details
- [ ] Check auth middleware
- [ ] Review redirect logic in AuthContext
─────────────────────────────────────────
Status: 📋 Backlog
Priority: 🔴 Urgent
Assignee: @alice
Labels: bug, frontend, auth
Project: Authentication Improvements
Cycle: Sprint 24
Estimate: 2 pointsKeyboard shortcuts
Basic shortcuts
NAVIGATION:
G I - Go to Inbox
G M - Go to My Issues
G B - Go to Backlog
G A - Go to Active
G P - Go to Projects
G C - Go to Cycles
G R - Go to Roadmap
G T - Go to Team
G S - Go to Settings
GLOBAL:
Cmd/Ctrl + K - Command palette (the most important one!)
/ - Quick search
? - Show all shortcuts
Escape - Close/Cancel
CREATING:
C - Create issue
Shift + C - Create issue from anywhere
I - Create sub-issue
P - Create project
EDITING ISSUES:
Space - Select/Deselect
Enter - Open issue detail
S - Change status
A - Assign
L - Add label
E - Edit estimate
D - Set due date
M - Move to project
X - Archive
Delete - Delete (with confirmation)
LIST NAVIGATION:
J / ↓ - Move down
K / ↑ - Move up
[ / ] - Previous/Next issueAdvanced shortcuts
BULK ACTIONS:
Shift + click - Select range
Cmd + click - Multi-select
Cmd + A - Select all visible
Shift + S - Change status for selected
Shift + A - Assign selected
Shift + L - Label selected
VIEWS:
1 - List view
2 - Board view
3 - Calendar view
Cmd + Shift + \ - Toggle sidebar
F - Full screen issue
Cmd + / - Toggle activity
MARKDOWN (in editor):
Cmd + B - Bold
Cmd + I - Italic
Cmd + K - Link
Cmd + E - Code
Cmd + Shift + M - Mention user
Cmd + Shift + E - Mention issueCommand Palette (Cmd+K)
Cmd+K opens the command palette - the fastest way to do anything:
> create issue
> assign to alice
> set status in progress
> add label bug
> move to project Authentication
> set priority urgent
> go to settings
> switch team engineering
> open preferences
Pro tip: You can chain actions:
> LIN-123 status done assign meStatus and workflow
Default statuses
Backlog (📋) - Issues to consider
│
├── Triage (📊) - New issues to review
│
▼
Todo (○) - Ready to work on
│
▼
In Progress (◐) - Currently being worked on
│
▼
In Review (◑) - Code review / QA
│
▼
Done (●) - Completed
│
└── Canceled (⊘) - CanceledCustom workflows
Teams can customize their workflow:
Settings → Teams → [Team Name] → Workflow
Example workflow for a Design team:
📋 Backlog
├── 📊 Triage
├── 💡 Discovery
├── ✏️ Designing
├── 👀 Design Review
├── 🔄 Revisions
├── ✅ Ready for Dev
└── ● DoneCycles (Sprints)
Configuring cycles
Settings → Teams → [Team] → Cycles
Cycle length: 2 weeks
Start day: Monday
Auto-archive after: 1 week
Auto-move incomplete: ✅ (to next cycle)Planning a cycle
1. Navigate to Cycles (G C)
2. Select the upcoming cycle
3. Drag issues from Backlog
4. Or use M (move) on an issue → select cycle
Cycle Planning View:
┌─────────────────────────────────────────────────────────────┐
│ Cycle 24: Jan 20 - Feb 2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Capacity: 32 points │
│ Committed: 28 points │
│ Progress: ████████░░░░░░░░░░░░ 35% │
│ │
│ Issues: │
│ ● LIN-101 Setup React Native @alice 3 pts │
│ ◐ LIN-102 Navigation system @bob 5 pts │
│ ○ LIN-103 API integration @alice 8 pts │
│ ○ LIN-104 Unit tests @charlie 5 pts │
│ ○ LIN-105 Documentation Unas. 2 pts │
│ │
└─────────────────────────────────────────────────────────────┘Velocity and metrics
Cycle metrics are tracked automatically:
- Velocity: average number of points per cycle
- Completion rate: percentage of completed issues
- Scope change: how many issues were added/removed during the cycle
- Lead time: time from created to done
- Cycle time: time from started to done
Linear automatically shows trends and predicts
capacity for future cycles.GitHub integration
Linking issues
In commit messages or PRs:
─────────────────────────────
fix: resolve auth redirect bug
Fixes LIN-123
Closes LIN-124
Relates to LIN-125
─────────────────────────────
Or in the PR description:
Closes LIN-123
Linear automatically:
1. Links the PR to the issue
2. Changes the issue status to "In Review"
3. After merge, changes it to "Done" (optional)Status automation
Settings → Integrations → GitHub → Automations
Available triggers:
│
├── PR opened → Move issue to "In Review"
├── PR merged → Move issue to "Done"
├── PR closed → Move issue to "Backlog"
├── Branch created → Move issue to "In Progress"
└── Commit pushed → Show activity on issue
Example configuration:
[✓] When PR is opened, move to "In Review"
[✓] When PR is merged to main, move to "Done"
[✓] Show commits and PRs on issue timeline
[✓] Auto-link issues from branch names (feature/LIN-123)Branch naming
Linear can automatically generate branch names:
Issue: LIN-123 "Fix login redirect bug"
Branch: feature/lin-123-fix-login-redirect-bug
Settings → Integrations → GitHub:
Branch format: {prefix}/{issueId}-{title}
Prefix: feature, fix, chore (based on label)GitHub Sync
Two-way synchronization:
GitHub Issue → Linear Issue
- Import issues from GitHub
- Sync comments
- Sync labels
Linear Issue → GitHub Issue
- Export issues to GitHub
- Mirror status changesProjects and roadmaps
Creating a project
1. G P (go to projects)
2. P (create project)
3. Fill in:
Project: Mobile App v2.0
─────────────────────────────────────────
Icon: 📱
Description: Complete rewrite of our mobile app
using React Native for both iOS and Android.
Status: 🟡 In Progress
Lead: @alice
Target date: March 30, 2025
─────────────────────────────────────────
Projects can contain:
- Multiple milestones
- Linked issues
- Documents
- Updates (progress posts)Milestones
Project: Mobile App v2.0
│
├── Milestone 1: Foundation (Feb 15)
│ ├── LIN-101 Setup project
│ ├── LIN-102 Core navigation
│ └── LIN-103 Design system integration
│
├── Milestone 2: Core Features (Mar 1)
│ ├── LIN-201 User authentication
│ ├── LIN-202 Profile management
│ └── LIN-203 Settings screen
│
├── Milestone 3: Polish (Mar 20)
│ ├── LIN-301 Performance optimization
│ ├── LIN-302 Accessibility
│ └── LIN-303 Bug fixes
│
└── Milestone 4: Launch (Mar 30)
├── LIN-401 App Store submission
└── LIN-402 Marketing assetsRoadmap view
The roadmap displays projects on a timeline:
Jan Feb Mar Apr
├──────────┼──────────┼──────────┼──
│ │ │ │
Mobile │██████████████████████████░░░░░░│ ← In Progress
App v2 │ │ │ ↑ Target│
│ │ │ │
Backend │ ████████████████│ │ ← Completed
Refactor │ │ │ │
│ │ │ │
Design │ ██████████████████│ ← Planned
System │ │ │ │
│ │ │ │
You can drag & drop to change dates,
and click on a project to see its details.Triage and inbox
Triage workflow
Triage is where new issues land
before being assigned to the backlog:
1. Issue created → Status: Triage
2. Team lead reviews
3. Assigns:
- Priority
- Labels
- Project/Cycle
- Assignee
4. Moves to Backlog or Todo
5. Or closes as duplicate/invalid
Triage View (G T):
┌─────────────────────────────────────────────────────────────┐
│ Triage · 12 issues need attention │
├─────────────────────────────────────────────────────────────┤
│ Today (5) │
│ ○ LIN-200 Bug: Login fails on Safari @user reported │
│ ○ LIN-201 Feature: Dark mode support @user requested │
│ ○ LIN-202 Bug: Crash on large files @user reported │
│ │
│ Yesterday (4) │
│ ... │
│ │
│ Older (3) │
│ ... │
└─────────────────────────────────────────────────────────────┘Inbox
Inbox (G I) shows your notifications:
- Issues assigned to you
- Issues where you're mentioned
- Comments on your issues
- Status changes on watched issues
You can:
- Mark as read (Enter)
- Snooze (z) - will remind you later
- Archive (x) - remove from inboxLabels and filtering
System labels
Labels help categorize issues:
Type labels:
├── 🐛 bug
├── ✨ feature
├── 📝 documentation
├── 🧹 chore
└── 🔧 refactor
Area labels:
├── frontend
├── backend
├── mobile
├── infrastructure
└── design
Priority labels (built-in):
├── 🔴 Urgent (P0)
├── 🟠 High (P1)
├── 🟡 Medium (P2)
├── 🟢 Low (P3)
└── ⚪ No priorityAdvanced filters
Filtering in Linear is powerful:
status:inProgress - Issues in progress
assignee:me - My issues
priority:urgent,high - Urgent or high priority
label:bug,frontend - Bugs in frontend
created:>2024-01-01 - Created after date
updated:<7d - Updated in last 7 days
cycle:current - Current cycle
project:"Mobile App" - Specific project
has:attachment - Has attachments
estimate:>3 - Estimate > 3 points
Combinations:
assignee:me status:todo,inProgress label:bug
Saved filters:
Views → Custom Views → Save current filterViews
Creating a custom view:
1. Set your filters
2. Choose columns and sorting
3. Click "Save view"
4. Name it and choose visibility:
- Personal
- Team
- Workspace
Example views:
- "My urgent bugs" - assignee:me label:bug priority:urgent
- "Ready for review" - status:inReview
- "Blocked issues" - has:blocker
- "Unestimated" - estimate:noneIntegrations
Slack
Linear ↔ Slack Integration:
1. Notifications → Slack channel
- New issues created
- Status changes
- Mentions
2. Create issues from Slack:
/linear create "Bug: Login broken"
/linear LIN-123 - show issue details
3. Unfurl Linear links:
Paste Linear URL → rich preview
Settings → Integrations → SlackFigma
Figma Integration:
1. Paste Figma link in issue → rich preview
2. Attach Figma files to issues
3. Open Figma from Linear
Workflow:
Designer creates design in Figma
→ Attaches to Linear issue
→ Developer sees preview in Linear
→ No context switching neededOther integrations
Official integrations:
├── GitHub/GitLab/Bitbucket
├── Slack
├── Figma
├── Sentry
├── Zendesk
├── Intercom
├── Notion
├── Discord
└── Zapier (for custom workflows)
API and Webhooks:
├── GraphQL API
├── Webhooks
└── OAuth appsLinear API
GraphQL API
import { LinearClient } from '@linear/sdk'
const linear = new LinearClient({
apiKey: process.env.LINEAR_API_KEY
})
async function getMyIssues() {
const me = await linear.viewer
const issues = await me.assignedIssues()
return issues.nodes.map(issue => ({
id: issue.id,
identifier: issue.identifier,
title: issue.title,
state: issue.state?.name,
priority: issue.priority
}))
}
async function createIssue(teamId: string, title: string, description: string) {
const issue = await linear.createIssue({
teamId,
title,
description,
priority: 2,
labelIds: ['bug-label-id']
})
return issue.issue
}
async function updateIssueStatus(issueId: string, stateId: string) {
await linear.updateIssue(issueId, {
stateId
})
}
async function addComment(issueId: string, body: string) {
await linear.createComment({
issueId,
body
})
}Webhooks
import { LinearWebhooks, LINEAR_WEBHOOK_SIGNATURE_HEADER } from '@linear/sdk'
const webhook = new LinearWebhooks(process.env.LINEAR_WEBHOOK_SECRET!)
export async function POST(request: Request) {
const body = await request.text()
const signature = request.headers.get(LINEAR_WEBHOOK_SIGNATURE_HEADER)
if (!webhook.verify(body, signature!)) {
return Response.json({ error: 'Invalid signature' }, { status: 401 })
}
const payload = JSON.parse(body)
switch (payload.type) {
case 'Issue':
if (payload.action === 'create') {
console.log('New issue:', payload.data.title)
}
break
case 'Comment':
if (payload.action === 'create') {
console.log('New comment on:', payload.data.issue.identifier)
}
break
}
return Response.json({ success: true })
}Best practices
Issue writing
A good issue contains:
Title: Short, descriptive (what, not how)
✓ "Fix: Users can't reset password"
✗ "Password bug"
✗ "Use bcrypt instead of md5"
Description:
1. Problem/Context - what and why
2. Acceptance criteria - when is it done
3. Technical notes - for the developer
Example:
─────────────────────────────────────────
## Problem
Users are unable to reset their password.
The reset email is sent but the link returns 404.
## Root cause
Token expires before email is delivered (5 min TTL).
## Acceptance criteria
- [ ] Increase token TTL to 1 hour
- [ ] Add expiry message on 404
- [ ] Add "resend email" option
## Technical notes
- Token stored in Redis: `reset:{userId}`
- Email sent via ResendTeam workflow
Recommended workflow:
Monday:
1. Cycle planning (30 min)
2. Review triage
3. Assign issues
Daily:
1. Check inbox (5 min)
2. Update issue statuses
3. Add blockers/comments
End of cycle:
1. Close completed issues
2. Review velocity
3. Incomplete → next cycle
4. Retrospective
Pro tips:
- Use keyboard shortcuts religiously
- Keep issues small (1-3 days max)
- Update status in real-time
- Link all PRs to issuesEstimation
Story points in Linear:
1 - Trivial (< 1 hour)
2 - Small (half day)
3 - Medium (1 day)
5 - Large (2-3 days)
8 - Very large (1 week) → consider splitting
Alternatively - T-shirt sizes:
XS, S, M, L, XL (map to 1, 2, 3, 5, 8)
Settings → Teams → Estimation:
- Points
- T-shirt
- Hours
- NonePricing
Plans
Free:
├── Up to 250 issues
├── Unlimited members
├── Basic integrations
├── Mobile apps
└── Public API
Standard ($10/user/month):
├── Unlimited issues
├── Cycles
├── Roadmaps
├── All integrations
├── Custom workflows
├── Triage
└── Priority support
Plus ($15/user/month):
├── Everything in Standard
├── Advanced insights
├── SAML SSO
├── SCIM provisioning
├── Audit logs
├── Custom roles
└── 99.99% SLA
Enterprise (custom):
├── Everything in Plus
├── Dedicated support
├── Custom contracts
├── On-premise option
└── Advanced securityComparison with Jira
Linear vs Jira - Total Cost of Ownership:
Linear Standard: $10/user/month
Jira Standard: $8.15/user/month (seems cheaper but...)
Hidden Jira costs:
+ Admin time for configuration
+ Plugin costs ($5-20/user)
+ Training (steep learning curve)
+ Performance issues (developer frustration)
+ Context switching (slow UI)
Real-world comparison:
10-person team, 1 year:
Linear:
$10 × 10 × 12 = $1,200/year
+ 0 hours setup
+ 1 hour training
= $1,200 + minimal time
Jira:
$8.15 × 10 × 12 = $978/year
+ 20 hours setup × $50/hr = $1,000
+ 10 hours training × $50/hr = $500
+ Plugins ~$500/year
+ Lost productivity (slow UI) = ???
= $2,978+ annuallyFAQ - frequently asked questions
Does Linear have a free tier?
Yes, Linear offers a free plan for up to 250 issues with unlimited members. This is enough for small teams and side projects. Once you exceed the limit, you need to upgrade to Standard ($10/user/month).
How do I migrate from Jira?
Linear offers an official importer:
- Settings → Import → Jira
- Connect your Jira account
- Select projects to import
- Map statuses and labels
- Import (may take a while depending on the number of issues)
Linear migrates: issues, comments, attachments, labels, assignees.
Does Linear work offline?
Linear is web-first and requires an internet connection. However:
- The PWA can be installed
- The desktop app (Electron) caches data
- Optimistic updates make it feel like you're working offline
How does Linear work for non-dev teams?
Linear is optimized for software teams. For other use cases:
- Marketing/Sales → Notion, Asana
- All-purpose → Monday, ClickUp
- Design teams → Linear works well
Can I use Linear with GitLab/Bitbucket?
Yes, Linear has official integrations with GitLab and Bitbucket. The functionality is similar to GitHub - issue linking, auto-status changes.
How do I manage multiple teams?
Linear supports multiple teams within a single workspace:
- Each team has its own backlog and workflow
- Issues can be moved between teams
- The roadmap shows all projects
- Cross-team dependencies are supported
Summary
Linear is the ideal project management tool for software teams, offering:
- Lightning-fast speed - Instant load, zero lag
- Keyboard-first UX - Everything via shortcuts
- Native GitHub - Deep integration with code
- Cycles - Sprints without boilerplate
- Roadmaps - Visual planning
- Beautiful design - A pleasure to use
If you're tired of slow Jira or general-purpose tools like Asana - Linear is a game-changer for dev teams.