Why UI design first is important
Like most developers, I work with other developers. Most are computer sciency and kick ass when it comes to class design and architecture. The problem with this is that this creates a UI design culture that is not always optimal.
There will always be bigger picture architectural design decisions that need to be made. So much of what we write code for doesn't even involve UI, especially since big systems are distributed and service-oriented. But when someone comes to you with something from a competitor site, and says, "I want to do this," starting somewhere deep in the application is the wrong place to go.
It's pretty easy to see the differences in the real world. Take OS X vs. Windows. I don't presume to know anything about how the development of these products really goes (except to say that Microsoft clearly sucks at it if it takes years of missed ship dates), but the end product makes it pretty obvious. Windows is driven by mountains of legacy and compatibility. OS X, on the other hand, starts with, "I want to do this, so what does the UI look like?" For example, say that you want to run a program. Windows makes you navigate a start menu that assumes too much about what you may or may not know. Try to find Excel on a friend's computer, when they try to keep their start menu "organized." Good luck with that. On OS X, I click the Spotlight icon, begin typing Excel, and there's the icon to click. The evolution of categorized portals like Yahoo to the single simple search box on Google demonstrates similar focus.
Don't get me wrong, you can get out of control. People who start building things in Photoshop or Visio are getting way too ahead of themselves. Scribble something on paper, because it's a lot faster and you won't get attached to it as easily. Start to flesh out what it is you're trying to accomplish for the user, and the fastest way to that point. Figuring out the object abstraction and data access then becomes a natural extension of delivering on that well thought out UI.
I'm going through this exercise right now at my day job (which by the way, I can't believe I've been at for a year, but that's another post). It was also the key, freeing moment for me when I started to rebuild my forum app instead of worrying about how to get my old data into it. It's amazing how much better your software can be when you focus on the task first, and the implementation later.