Good component boundaries follow stable responsibilities. They keep related behaviour together and make important differences explicit.
Avoid extracting a shared component only because two screens look similar today. First check whether their data, states, accessibility, and change reasons are also aligned.
Use a small, well-named public interface and keep implementation details local. Reuse is valuable when it reduces drift without hiding intent.
