I've always been a believer in designing the UI first and then moving in from there. Test Drive Development reinforces this idea; just replace the "UI" with an API. There are several reasons to do this, but I just realized today the last and perhaps the most important reason to nail the UI first, and then work on the rest of the product. The realization came when I remembered a quote from Malcolm Gladwell the author of The Tipping Point.
"If the first broken window in a building is not repaired, then people who like breaking windows will assume that no one cares about the building and more windows will be broken. Soon the building will have no windows. Likewise, when disorderly behavior is left unchallenged, the signal given is that no one cares. The disorder escalates, possibly to a serious crime."By building the exterior first and really showing that you care about the outside, this sends a message about expectations for the product and I think produces higher quality code inside. I think that for this reason alone, applications developed with Cocoa's AppKit have a remarkable advantage, not technically, but emotionally over tediously built UI in Carbon without NIBs. The very tedium of building the Carbon UI from scratch means doing the UI last and therefore negates the positive emotional influence it could have over the course of the project.