I try to keep early project planning aggressively simple.

My rough process

  1. Define one concrete problem.
  2. Decide what the first usable version must do.
  3. Cut everything else.
  4. Build fast enough to learn where the real complexity is.

This approach avoids spending a week designing features I will probably delete anyway.