Use before implementing new modules, adding dependencies, or changing component interactions.
Make explicit design decisions before writing implementation code.
Define the interface first
Identify dependencies
Define failure modes
None to signal failure silentlyCheck for existing patterns
Flag decisions that need input
# Step 1: define the interface
class PriceProvider(Protocol):
async def get_price(self, ticker: str) -> float: ...
async def get_ohlcv(self, ticker: str, days: int) -> list[OHLCV]: ...
# Step 2: write the implementation
class FinnhubAdapter:
async def get_price(self, ticker: str) -> float:
...