I come from an engineering background, so I'll often just start coding first, throwing random interesting features together, with UI buttons(etc.) in random places. Then after getting this mess sort-of functional, figure by using it which UI goes with which, and what stuff in unused and thus unneeded. Then go and design (or have designed) a nicer looking UI, prioritizing the UI that was actually used when testing the app.
Then I add more cruft, and repeat the above. Until after the first few iterations, no use centering buttons, etc. because I know I'm going to throw the first few designs away. In fact, I often purposely start out with an extra ugly non-design, so that I'm not tempted to ship the app just because it started actually working.