design/linear
Linear: Nowy standard projektowania oprogramowania
„Oprogramowanie powinno być zdecydowane i szybkie." — Karri Saarinen, CEO Linear
Linear to narzędzie do zarządzania projektami, które na nowo zdefiniowało, jak może wyglądać nowoczesne oprogramowanie. Uruchomione w 2019 roku przez byłych projektantów z Uber i Airbnb, dowodzi, że oprogramowanie B2B nie musi być brzydkie ani wolne.
Dlaczego Linear ma znaczenie
Linear stanowi manifest projektowy przeciwko rozdętemu oprogramowaniu korporacyjnemu projektowanemu przez komitety. Pokazuje, co się dzieje, gdy projektanci tworzą dla projektantów.
Kluczowe osiągnięcia: - Sprawił, że oprogramowanie dla firm zaczęło przypominać aplikacje konsumenckie - Udowodnił, że interfejsy zorientowane na klawiaturę mogą być piękne - Zademonstrował, że wydajność to funkcjonalność - Ustanowił nowy standard jakości produktów SaaS
Kluczowe wnioski
- Szybkość to funkcjonalność, nie metryka - Obsesyjna koncentracja Linear na interakcjach poniżej 100ms dowodzi, że postrzegana wydajność wywołuje emocjonalną reakcję
- Klawiatura na pierwszym miejscu oznacza zwycięstwo zaawansowanych użytkowników - Paleta poleceń (Cmd+K) i mnemoniczne skróty (S dla Status, P dla Priority) przyspieszają ekspertów bez blokowania początkujących
- Gęstość informacji wygrywa z białą przestrzenią - Pokaż więcej danych przy mniejszej ilości elementów interfejsu; ujawniaj szczegóły po najechaniu myszką zamiast ukrywać je za kliknięciami
- Tryb ciemny jako główne doświadczenie - Projektowanie najpierw w trybie ciemnym tworzy premium estetykę i zmniejsza zmęczenie oczu zaawansowanych użytkowników
- Optymistyczny UI eliminuje czekanie - Najpierw aktualizuj lokalnie, synchronizuj w tle i pokazuj błędy tylko wtedy, gdy faktycznie wystąpią
Podstawowe zasady projektowania
1. Szybkość jako funkcjonalność
Linear jest obsesyjnie szybki. Każda interakcja wydaje się natychmiastowa.
Jak to osiągają: - Optymistyczne aktualizacje UI (zakładaj sukces, cofnij przy niepowodzeniu) - Architektura local-first - Agresywne cache'owanie - Minimalna liczba żądań sieciowych
Wgląd w implementację:
// Optimistic update pattern
function updateIssue(id: string, changes: Partial<Issue>) {
// 1. Update local state immediately
localStore.update(id, changes)
// 2. Show success state
ui.showSaved()
// 3. Sync with server in background
api.updateIssue(id, changes).catch(() => {
// 4. Rollback only on failure
localStore.rollback(id)
ui.showError()
})
}
Zastosowanie w projektowaniu: - Stany ładowania powinny być niewidoczne, gdy to możliwe - Szkielety ekranów tylko gdy konieczne - Nigdy nie blokuj użytkownika przed wykonaniem kolejnej akcji
2. Klawiatura na pierwszym miejscu, mysz mile widziana
Linear jest zaprojektowany dla zaawansowanych użytkowników, ale przyjazny dla początkujących.
Paleta poleceń (Cmd+K): - Uniwersalny punkt wejścia dla wszystkich akcji - Wyszukiwanie rozmyte we wszystkim - Skróty klawiaturowe do odkrycia - Nigdy nie wymaga opuszczenia klawiatury
┌────────────────────────────────────────────────────────────┐
│ Cmd+K │
├────────────────────────────────────────────────────────────┤
│ > Search issues, projects, or commands... │
│ │
│ Recent │
│ ├─ FE-123 Fix navigation animation Cmd+O │
│ ├─ BE-456 API rate limiting Cmd+O │
│ └─ Create new issue C │
│ │
│ Commands │
│ ├─ Change status S │
│ ├─ Assign issue A │
│ └─ Set priority P │
│ │
└────────────────────────────────────────────────────────────┘
Zasady implementacji: - Każda akcja ma skrót klawiaturowy - Skróty są mnemoniczne (S dla Status, P dla Priority) - Mysz działa doskonale. Klawiatura jest szybsza - Pomoc jest zawsze o jedno naciśnięcie klawisza
3. Gęstość informacji zrobiona dobrze
Linear pokazuje dużo informacji bez poczucia zagracenia.
Jak równoważą gęstość:
ZAGRACONE (typowe korporacyjne):
┌────────────────────────────────────────────────────────────┐
│ [ ] * FE-123 | Fix bug | John | High | In Progress | 2d │
│ Tags: frontend, urgent, sprint-12, reviewed │
│ Created: Jan 1 | Updated: Jan 5 | Due: Jan 10 │
│ Comments: 5 | Attachments: 2 | Subtasks: 3/5 │
├────────────────────────────────────────────────────────────┤
│ [ ] * FE-124 | Another bug | Jane | Medium | Todo | 1d │
│ ... (powtarzanie wszystkich metadanych) │
└────────────────────────────────────────────────────────────┘
PODEJŚCIE LINEAR:
┌────────────────────────────────────────────────────────────┐
│ [x] FE-123 Fix navigation animation bug ^ John ** │
│ [ ] FE-124 Update user profile endpoint Jane * │
│ [x] FE-125 Add dark mode toggle ^ Alex ***│
└────────────────────────────────────────────────────────────┘
^ ^
Priorytet Przypisany Szacunek
(daszek) (imię) (kropki)
Zasady: - Pokaż tylko to, co potrzebne na każdym poziomie - Używaj ikon i symboli zamiast etykiet tekstowych - Ujawniaj szczegóły po najechaniu/zaznaczeniu - Stopniowe ujawnianie na żądanie
4. Spójny język wizualny
System projektowy Linear jest ścisły i spójny.
System kolorów:
/* Linear-inspired semantic colors */
:root {
/* Status colors - highly saturated, distinct */
--status-backlog: #6B7280; /* Gray - not started */
--status-todo: #3B82F6; /* Blue - ready */
--status-progress: #F59E0B; /* Amber - in work */
--status-done: #10B981; /* Green - complete */
--status-cancelled: #EF4444; /* Red - cancelled */
/* Priority - consistent hue shift */
--priority-urgent: #EF4444; /* Red */
--priority-high: #F97316; /* Orange */
--priority-medium: #EAB308; /* Yellow */
--priority-low: #6B7280; /* Gray */
--priority-none: #374151; /* Dark gray */
/* Surface hierarchy */
--bg-primary: #0D0D0D; /* Main background */
--bg-elevated: #141414; /* Cards, panels */
--bg-hover: #1F1F1F; /* Hover states */
--bg-active: #292929; /* Active/selected */
}
Typografia:
/* Linear uses Inter for everything */
:root {
--font-family: 'Inter', -apple-system, sans-serif;
/* Tight scale, high readability */
--text-xs: 11px; /* Metadata */
--text-sm: 12px; /* Secondary */
--text-base: 13px; /* Body (smaller than typical) */
--text-lg: 14px; /* Emphasis */
--text-xl: 16px; /* Headings */
--text-2xl: 20px; /* Page titles */
}
5. Tryb ciemny domyślnie
Linear wybrał tryb ciemny jako główne doświadczenie.
Dlaczego to działa: - Zmniejsza zmęczenie oczu zaawansowanych użytkowników (długie godziny) - Tworzy premium, skupioną estetykę - Sprawia, że kolory statusów wyróżniają się - Współgra z estetyką narzędzi deweloperskich
Implementacja:
/* Dark-first design */
:root {
color-scheme: dark;
--text-primary: rgba(255, 255, 255, 0.95);
--text-secondary: rgba(255, 255, 255, 0.65);
--text-tertiary: rgba(255, 255, 255, 0.45);
--border-default: rgba(255, 255, 255, 0.08);
--border-hover: rgba(255, 255, 255, 0.12);
}
/* Light mode as override */
[data-theme="light"] {
--text-primary: rgba(0, 0, 0, 0.90);
--text-secondary: rgba(0, 0, 0, 0.60);
/* ... */
}
6. Mikrointerakcje, które zachwycają
Każda interakcja w Linear została przemyślana.
Przykłady: - Karty zadań lekko się unoszą po najechaniu - Zmiany statusu mają subtelne przejścia kolorów - Przeciąganie i upuszczanie ma płynny, oparty na fizyce ruch - Checkboxy mają satysfakcjonujące sprzężenie zwrotne przy kliknięciu
Zasady animacji:
/* Linear's motion */
:root {
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
--duration-fast: 100ms; /* Micro feedback */
--duration-normal: 150ms; /* Standard transitions */
--duration-slow: 250ms; /* Page transitions */
}
.issue-card {
transition:
transform var(--duration-fast) var(--ease-out),
box-shadow var(--duration-normal) var(--ease-out);
}
.issue-card:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
Wzorce projektowe do nauki
Paleta poleceń
Cmd+K Linear jest teraz oczekiwanym wzorcem w nowoczesnym oprogramowaniu.
Przewodnik implementacji:
<!-- Command palette structure -->
<dialog class="command-palette" aria-label="Command menu">
<header>
<input
type="text"
placeholder="Search issues or commands..."
aria-describedby="command-hint"
/>
</header>
<nav aria-label="Command results">
<section aria-label="Recent">
<h3>Recent</h3>
<ul role="listbox">
<li role="option" tabindex="0">
<span class="issue-id">FE-123</span>
<span class="issue-title">Fix bug</span>
<kbd>Cmd+O</kbd>
</li>
</ul>
</section>
<section aria-label="Commands">
<h3>Commands</h3>
<!-- ... -->
</section>
</nav>
</dialog>
Menu kontekstowe
Menu po kliknięciu prawym przyciskiem, które pokazują dokładnie to, czego potrzebujesz.
Kliknięcie prawym przyciskiem na zadaniu:
┌────────────────────────────────┐
│ Open issue Cmd+O │
│ Open in new tab Cmd+Shft+O │
├────────────────────────────────┤
│ Set status S │
│ Set priority P │
│ Assign A │
├────────────────────────────────┤
│ Copy link Cmd+C │
│ Copy ID │
├────────────────────────────────┤
│ Delete Backspace│
└────────────────────────────────┘
Edycja inline
Edytuj bez okien modalnych.
PRZED (kliknij aby edytować):
┌────────────────────────────────────────┐
│ Fix navigation bug [Edit] │
└────────────────────────────────────────┘
PO (edycja inline po kliknięciu):
┌────────────────────────────────────────┐
│ Fix navigation bug| │ ← Kursor pojawia się
│ ────────────────── │ w miejscu
└────────────────────────────────────────┘
Co warto zapożyczyć od Linear
Dla każdego projektu oprogramowania
- Szybkość jest niezbywalna - Optymalizuj postrzeganą i rzeczywistą wydajność
- Skróty klawiaturowe wszędzie - Ale nie wymagaj ich
- Paleta poleceń - Uniwersalny punkt dostępu
- Tryb ciemny zrobiony dobrze - Nie jako dodatek
- Gęstość informacji - Pokaż więcej przy mniejszym nakładzie
- Spójny język projektowy - Każdy element wydaje się powiązany
Konkretne techniki
| Technika | Jak zastosować |
|---|---|
| Optymistyczny UI | Najpierw aktualizuj lokalnie, synchronizuj w tle |
| Wyszukiwanie rozmyte | Użyj Fuse.js lub podobnego dla palety poleceń |
| Mnemoniczne skróty | S dla Status, P dla Priority, A dla Assign |
| Subtelne unoszenie | 1-2px podniesienie przy najechaniu, nie dramatyczne cienie |
| Semantyczne kolory | Spójny system kolorów statusu/priorytetu |
| Zwarta typografia | 13px tekst główny, gęsty ale czytelny |
Kluczowe cytaty zespołu Linear
„Traktujemy szybkość jako funkcjonalność. Jeśli coś zajmuje 300ms, wydaje się zepsute."
„Każdy piksel powinien być celowy. Jeśli nie możesz wyjaśnić, dlaczego coś tam jest, usuń to."
„Klawiatura na pierwszym miejscu nie oznacza tylko klawiatury. Oznacza szacunek dla zaawansowanych użytkowników."
Najczęściej zadawane pytania
Co sprawia, że Linear jest szybszy od innych narzędzi do zarządzania projektami?
Linear używa optymistycznych aktualizacji UI, architektury local-first i agresywnego cache'owania. Gdy zmieniasz status zadania, UI aktualizuje się natychmiast, podczas gdy synchronizacja odbywa się w tle. Większość interakcji wydaje się natychmiastowa, ponieważ Linear zakłada sukces i pokazuje błędy tylko wtedy, gdy faktycznie wystąpią, zamiast blokować na żądaniach sieciowych.
Jak działa paleta poleceń (Cmd+K) w Linear?
Paleta poleceń to uniwersalny punkt wejścia, który używa wyszukiwania rozmytego w zadaniach, projektach i poleceniach. Obsługuje mnemoniczne skróty klawiaturowe (S dla Status, P dla Priority, A dla Assign), które użytkownicy mogą odkryć przez paletę, a następnie używać bezpośrednio bez jej otwierania. Tworzy to progresywną ścieżkę nauki od początkującego do zaawansowanego użytkownika.
Dlaczego Linear wybrał tryb ciemny jako domyślny?
Linear projektował dla zaawansowanych użytkowników, którzy spędzają długie godziny w aplikacji. Tryb ciemny zmniejsza zmęczenie oczu, tworzy premium estetykę wyróżniającą się od typowego oprogramowania korporacyjnego i sprawia, że kolory statusów są bardziej żywe. Tryb jasny istnieje jako nadpisanie, ale tryb ciemny jest głównym celem projektowym.
Jak Linear osiąga wysoką gęstość informacji bez poczucia zagracenia?
Linear używa symboli i ikon zamiast etykiet tekstowych, pokazuje tylko niezbędne metadane na poziomie listy i ujawnia szczegóły po najechaniu lub zaznaczeniu. Skala typografii jest bardziej zwarta niż typowa (13px tekst główny), a spójne odstępy tworzą wizualny rytm bez marnowania białej przestrzeni.
Jakie jest podejście Linear do skrótów klawiaturowych?
Każda akcja w Linear ma skrót klawiaturowy, a skróty są mnemoniczne (łatwe do zapamiętania). Paleta poleceń uczy skrótów, pokazując je obok każdej akcji. Oznacza to, że użytkownicy myszy mogą pracować doskonale, ale użytkownicy klawiatury mogą pracować znacznie szybciej. Filozofia projektowania to „klawiatura na pierwszym miejscu, mysz mile widziana".
Zasoby
- Strona: linear.app
- Changelog: Changelog Linear sam w sobie jest pięknie zaprojektowany
- Blog: Wpisy o inżynierii i projektowaniu od zespołu
- Twitter: @linear dla aktualizacji projektowych