So I've been around a computer for most of my life and I've seen some pretty bad designs (cue www.timecube.com guy here), but one thing that has interest me is GUI design. I've spent 4 years in college and only had about 1 class where a GUI was required. Granted, computer science isn't about GUI programming but still, I was ill prepared to start designing programs that other people would be using.
When I started to program for android, I was a little taken aback by the XML approach to GUI programming that I had to use and searched for something that would give me a more Visual C++ type feel that I was use to in college. I found some (java warning) but I couldn't get it to do exactly what I wanted so I dug into the XML and got it under control -- but what to do with it? How should I design my app to be most usable? These are the questions I have to answer to make my app successful.
Looking back there have been some interesting Human Interface Guidelines (HIG) that have been used to try to steer people in the right direction in terms of how the look and feel of an application should be. One that comes to mind is one from the GNOME HIG. It suggested that Buttons shouldn't be labeled "OK" and "Cancel" but instead use verbs to clarify what the user is about to do.
Some people see this as putting a bounding box on their creativity and prefer to create their own way of doing things or making an app "skinnable" which I think is horrible. It breaks consistency with everything else and a lot of the time it leaves the default butt-ugly with the excuse "If they don't like it, they can change it".
I don't wanna take time to find and change a skin just because you wanted to make your app extendable. Pick intelligent defaults is all I'm saying.
Another thing you have to think about these days is making an interface that is usable on many different devices. between androidx86, Chinese tablets, and car makers, you can never be sure where your app will be deployed and how it will look. Luckily the android sdk makes the experience a bit more predictable by allowing multiple versions of resources to be uploaded and letting the device choose which one to display. Also, you specify text fonts and layout sizes in em instead of cm or px. You can still use those units but they don't scale in to different size devices. There are a lot more guidelines on how to design your app on android and they can be found Here.
Looking at it all, it can be a bit overwhelming to try to get it all right at first, that's why I'm focusing on functionally first then I can devote all my time into usability