First, I research and define the real problem. What are your goals? Who are the users? What should the product do and what should it not do? Once clear, I explore directions, test what works, and design every screen, state, and interaction your developer needs to ship.