Occasionally I'll overhear a conversation regarding software. This usually happens at work, but I sometimes overhear them at lunch when a gaggle of geeks at a nearby table discuss software. Being a geek, I sometimes participate in like discussions about software design. It's all well and good until someone's pet language or methodology gets bashed... then watch out! [:)]
I wasn't always a DBA. Being a recovering engineer ("Hi. I'm Andy and I'm an engineer..."), I find pragmatic dialectic (Socratic, not Hegelian) on such topics enlightening and/or frustrating.
It gets interesting when someone stakes out a position regarding the most-important-thing for successful software design. An example: "It's all about the interface." I use this example because I've said this in the past - and used to believe it.
Why does it get interesting? We all have opinions - supported by examples and sound logic - about the ingredients of successful software design. People much smarter than I have written more wisdom on the subject than I will here, and I will not disagree with them.
I no longer think it's all about the interface, I think it's all about everything.
But I want to discuss the interface, why I used to think it was so important, and why I no longer think that:
Interface is the layer the user sees and interacts with. My influence for interface design is Alan Cooper. Early in my professional software career, I read About Face. Cooper's passion influenced me dramatically and changed - ok, started - the way I approached interface design.
My logic at the time: Build a great middle and backend with a crappy interface, no one will want to use it; build a great interface with a crappy middle and/or backend, and it will sell. Mind you, I can provide market examples - even today - to back up this philosophy.
Why do I now think great software design's about everything and not just the interface? Good question. My best guess is I've seen good examples of all-of-the-above development efforts. I've even had the opportunity to participate on some good software design teams (I work with a great team now, in fact).
Another guess: Having more recent experience with the data layer, I get to see more of the performance and stability spectrum than was previously visible to me.
It's all important. Interface, business layers, service and object brokers, data layer. If it doesn't all work well, and work well together, the result is crappy software. And who wants to use crappy software?