Przejdź do głównej zawartości

Głębokie rozumowanie dla projektowania funkcji

Twój PM właśnie zrzucił jednoliniową prośbę o funkcję na Slacku: “Potrzebujemy wsparcia dla multi-tenant.” Żadnego PRD. Żadnej specyfikacji technicznej. Żadnej dyskusji o tym, co “multi-tenant” oznacza w kontekście istniejącej architektury twojej aplikacji. Możesz spędzić tydzień zadając pytania wyjaśniające i pisząc dokumenty projektowe. Albo możesz użyć możliwości planowania Claude Code, aby zamienić ten jednolinijkowiec w szczegółowy plan implementacji w niecałą godzinę.

Programiści, którzy czerpią najwięcej wartości z Claude Code, nie przeskakują od razu do implementacji. Używają Plan Mode i extended thinking do eksploracji przestrzeni problemu, identyfikacji przypadków brzegowych i projektowania rozwiązań zanim jakikolwiek plik zostanie zmodyfikowany. Ta lekcja opisuje ten przepływ pracy planowania.

  • Przepływ pracy Plan Mode do projektowania funkcji bez modyfikowania kodu
  • Prompty używające extended thinking dla złożonych decyzji architektonicznych
  • Technika “interview”, gdzie Claude zadaje ci pytania, o które zapomniałeś zapytać samego siebie
  • Powtarzalny proces przejścia od niejasnego wymagania do szczegółowej specyfikacji implementacji

Plan Mode to najbardziej niedoceniana funkcja w Claude Code. Kiedy jest aktywny, Claude może czytać całą twoją bazę kodu, ale nie może modyfikować żadnych plików. To ograniczenie jest w rzeczywistości supermocą — zmusza Claude’a do skupienia się całkowicie na analizie i planowaniu.

Masz trzy opcje:

Okno terminala
# Rozpocznij nową sesję w Plan Mode
claude --permission-mode plan
# Przełączaj podczas sesji: naciśnij Shift+Tab dwa razy
# Pierwsze Shift+Tab = Auto-Accept Mode
# Drugie Shift+Tab = Plan Mode
# Uruchom jednorazowe zapytanie planistyczne w trybie headless
claude --permission-mode plan -p "Analyze our auth system and propose improvements"
  1. Zbadaj obecny stan

    Przed planowaniem jakichkolwiek zmian, pozwól Claude’owi zrozumieć, co istnieje. To jest miejsce, gdzie Plan Mode błyszczy — Claude czyta obszernie bez żadnego ryzyka.

    I need to add multi-tenant support to this application.
    Before we plan anything, analyze the current architecture:
    1. How is user data currently organized?
    2. What database tables would need tenant isolation?
    3. Where are the main data access patterns?
    4. What external services do we integrate with?
    5. Are there any existing concepts of "organization" or "team"?
  2. Pozwól Claude’owi przeprowadzić z tobą wywiad

    To jedna z najpotężniejszych technik w planowaniu funkcji. Zamiast próbować wymyślić każde wymaganie samodzielnie, poproś Claude’a, aby zadał ci trudne pytania.

    Claude zada pytania takie jak:

    • “Should tenants share a database with row-level isolation, or does each tenant need its own schema?”
    • “How should we handle users who belong to multiple tenants? Can they switch between tenants, or does each tenant have separate credentials?”
    • “What happens to existing data? Do all current users belong to a default tenant, or do we need a migration that assigns them based on some criteria?”

    To są pytania, które, jeśli pozostaną bez odpowiedzi, stają się bugami na produkcji.

  3. Wygeneruj plan implementacji

    Po wywiadzie poproś Claude’a, aby zsyntetyzował wszystko w ustrukturyzowany plan.

    Based on our discussion, create a detailed implementation plan.
    For each phase, include:
    - What changes are needed (specific files and modules)
    - Database migrations required
    - Tests that need to be written
    - Risks and mitigation strategies
    - Estimated complexity (small/medium/large)
    Order the phases so each one is independently deployable.
    I want to ship incrementally, not in one big bang.
  4. Przejrzyj plan w swoim edytorze

    Naciśnij Ctrl+G, aby otworzyć plan w swoim domyślnym edytorze tekstowym. Edytuj go bezpośrednio — dodaj notatki, zmień kolejność faz, usuń zakres, który chcesz odłożyć. Gdy zapiszesz i zamkniesz edytor, Claude przejmie twoje zmiany.

  5. Zapisz plan jako artefakt projektu

    Write this plan to docs/plans/multi-tenant.md with checkboxes
    for each task. I'll use this as a working checklist across sessions.

Niektóre zadania planistyczne wymagają głębszego rozumowania niż pozwala standardowy prompt. Extended thinking daje Claude’owi przestrzeń do przepracowania złożonych problemów krok po kroku przed odpowiedzią.

Extended thinking jest włączony domyślnie z Claude Opus 4.6, który używa adaptacyjnego rozumowania — model dynamicznie alokuje głębokość myślenia na podstawie ustawionego poziomu wysiłku.

  • Decyzje architektoniczne z wieloma poprawnymi podejściami i nieoczywistymi kompromisami
  • Planowanie migracji, gdzie kolejność operacji ma znaczenie, a błędy są kosztowne
  • Projektowanie wydajności, gdzie musisz rozumować o przepływie danych, cachowaniu i skalowaniu
  • Projektowanie bezpieczeństwa, gdzie pominięcie przypadku brzegowego oznacza lukę w zabezpieczeniach

Użyj menu /model, aby dostosować poziom wysiłku (low, medium, high). Wysoki wysiłek oznacza, że Claude alokuje więcej tokenów myślenia, aby przemyśleć twój problem przed odpowiedzią.

/model
# Select effort level: high

Następnie zadaj swoje pytanie:

We need to decide between three approaches for tenant isolation:
1. Shared database with tenant_id column on every table
2. Schema-per-tenant in a shared database
3. Database-per-tenant
Our constraints: 500 tenants expected in year one, growing to 5,000.
Average tenant has 10,000 rows in the largest table. Some tenants
are "enterprise" with 10M+ rows. We run on managed PostgreSQL.
Analyze each approach against: query performance, operational complexity,
cost, data isolation guarantees, and migration difficulty from our
current single-tenant schema. Recommend one.

Z wysokim wysiłkiem i extended thinking, Claude będzie systematycznie rozumował przez każde podejście przed daniem ci rekomendacji. Przełącz tryb verbose za pomocą Ctrl+O, aby obserwować proces rozumowania.

Dla złożonych funkcji, pozwól Claude’owi stworzyć formalną specyfikację, która stanie się źródłem prawdy dla implementacji.

Złożone funkcje często wymagają wielu sesji planistycznych. Zarządzanie sesjami Claude Code czyni to naturalnym.

Okno terminala
# Nazwij swoją sesję planistyczną
# (wewnątrz Claude Code, użyj /rename)
/rename multi-tenant-planning
# Później, wznów sesję
claude --resume multi-tenant-planning

Jeśli sesja stanie się zbyt ciężka przez kontekst z eksploracji, rozpocznij świeżą sesję i wskaż jej twoje zapisane artefakty:

Read docs/specs/multi-tenant-spec.md and docs/plans/multi-tenant.md.
These are the spec and implementation plan from our planning sessions.
I'm ready to start implementation. Which phase should we tackle first?

Kiedy planowanie wymaga zrozumienia wielu części bazy kodu, deleguj research do sub-agentów, aby twój główny kontekst planistyczny pozostał skupiony.

Before we finalize the plan, use sub-agents to research:
1. Check every database query in the codebase that would need
a tenant_id filter. List them by file and line number.
2. Find all API endpoints that return data which would need
tenant scoping. Group by router/controller.
3. Identify all background jobs and cron tasks that would need
tenant awareness.
Report the findings so we can update the implementation plan
with accurate scope.

Plan Claude’a jest zbyt ogólny, aby był wykonalny. Naciskaj na konkretność: “For each task in the plan, name the exact files that need to change and describe the change in one sentence.” Jeśli Claude nie może nazwać konkretnych plików, nie zbadał bazy kodu wystarczająco głęboko — wyślij go z powrotem do zbadania.

Wywiad chodzi w kółko. Claude czasami zadaje redundantne pytania. Jeśli to się dzieje, powiedz: “You’ve already asked about X. Move on to areas we haven’t covered: [list specific areas].”

Extended thinking produkuje przemyślane odpowiedzi. Dla prostszych zadań planistycznych, wysoki wysiłek jest przesadą. Obniż do średniego wysiłku dla prostych dodatków funkcji. Zarezerwuj wysoki wysiłek dla naprawdę złożonych decyzji architektonicznych.

Plan nie uwzględnia istniejących wzorców kodu. Wyraźnie powiedz Claude’owi: “This plan must follow the existing patterns in the codebase. Don’t introduce new frameworks or patterns. Look at how we implemented [similar feature] and follow that approach.”

Kontekst sesji wypełnia się podczas planowania. Uruchom /compact Focus on the implementation plan and key decisions, aby zwolnić kontekst zachowując ważne części. Lub zapisz plan do pliku i rozpocznij świeżą sesję.

Masz szczegółowy plan. Teraz czas zamienić go w działający kod.