I would start with some functionality, ugly as it may be and then switch over to work on the code for a while. I would then look for common code areas and try to come up with functions or classes that were as general as possible. Some might say I'm too picky about leaving things to generalized, but even though my codebase is 90% procedural, I and others have little problems, debugging and/or adding functionality.
I also took great care to generalize as much of the UI as possible. Even though there aren't too many objects in play, sweeping presentation changes in both layout and style are fairly easy.
I guess, to answer your question, an intuitive user interface takes time, as does clean reusable code. A programmer who is disciplined to see the value in both would most likely be able to start a new project with both in place. Unless you have done it before, it will take time and you will mostly likely fall towards one side.
I have done most of my coding solo, but I suspect that in a team, the most important keys to success, aside from technical excellence, would be clear communication and a well-defined goal.
Really short answer, you can have both, but you need relevant experience, good communication, a clear goal, and the ever elusive time.