A huge portion of User Interface design is finding the right levels of abstractions. What I mean by this is that you have to decide what the information hierarchy is and how they map to mental models.
Example System : WordPress Blog (Good)
You have posts and pages. Those are objects within the system. Within those, you have tags, categories and other meta data. Plugins work in the context of posts and pages. Widgets work within that context as well. The abstractions of those objects let the user conceptualize what things mean. A tag is a piece of information on a post and you can tag a post with any number of tags. However, categories are single per post.
Example System: Trello (Great)
Trello is a neat To-Do board for light project management. I really like the system and you can’t beat the price. (Free!) The abstractions are boards, lists and cards. A board has lists, lists have cards and cards have details like description, due date and assignment. This clean abstraction makes the system clear and understandable.
Example System: JIRA (Ugly)
JIRA is a project management system too, but it is pretty complicated. You have fixed versions, which are like releases. You have issues, which can be many types. Within those types you can attach different workflows. Also, you can have sub-types, but not sub-sub-types. One level deep is it. You also have tags and other custom fields, but ultimately the abstractions are unclear and make a mess. It makes JIRA hard to use.
Finding the right abstractions is key to setting up a usable system. The best systems are powerful, yet keep the abstractions clean and simple to understand. You do not have to sacrifice power and flexibility to get usability. It just takes more work.
This is a complex topic and could probably fill a book with different examples and techniques. If you are a UX Designer and aren’t paying close attention to your abstractions, you are likely making life harder for yourself and your users.