Make the next step small enough to finish.
"Build search" is a direction, not a single iteration. A useful slice delivers one observable behavior with its own evidence. Choose a boundary that makes sense to a user or caller, then keep the implementation focused on that result.
- 01
Name one observable outcome
For search, a first slice might display a clear empty state when no records match. Describe the input and expected result without bundling ranking, saved searches, and filters. A reviewer should be able to determine whether this slice works independently of those later features.
- 02
Include what makes it complete
Small does not mean leaving required error handling or accessibility for later. Include the behavior, its relevant states, and the check that establishes success. Follow existing component and data patterns. If an underlying dependency blocks the slice, make that dependency explicit before implementation.
- 03
Park the next idea clearly
Capture adjacent work in a short follow-up note rather than expanding the current task midstream. Separate must-have behavior from a future improvement. After verification, choose the next slice based on what you learned. The sequence can change without weakening the current acceptance condition.
A useful finish
The change produces a complete, observable result and does not depend on an undefined future step to become useful.
A bounded task brief
Implement one behavior: [specific outcome] when [input or state]. Preserve [existing behavior]. Include relevant error and accessibility states. Inspect existing patterns first. Verify with [specific check]. Treat [adjacent feature] as a separate follow-up.