As interface designers, we want our work to look good and also to make sense. Every element on the screen should please the eye, and at the same time interfaces aren’t merely art objects. They have work to do. Interfaces need to provide information and clearly indicate the possible courses of action. These two factors—sex appeal and function, prettiness and clarity, decoration and meaning—they often co-exist when the designer is skillful. But still there is a potential for conflicts between how we want a design to look and how that design is understood by our customers. I recently ran into one of these questions of decoration versus meaning on GitHub.
Global navigation on GitHub
After you log in to GitHub, the global navigation appears at the right-hand side of the header. The navigation block is wrapped and held together by a rounded rectangle.
Look at the rounded rectangle that holds this nav block together. There is a grey border around the outside and the whole block has a light blue background. The border and background are decorative. They stylize the block and add visual interest. To help you see that these elements are decorative, I made a quick comparison with the original on top and a new version below with no border or background:
Both versions are pleasing to the eye, and the functionality appears to be unchanged between them. You might say the difference between the two is merely aesthetic or personal and leave it at that. However there is more to the story. The decision to wrap the links with a containing element goes beyond style. The decorative container actually changes the meaning of the links and, as we will see, it causes a problem for GitHub. To see why, first we need to take a look at how containing elements affect the way customers interpret a design.
Containers affect the meaning of the elements they contain
When you place a link inside a container, you suggest a relationship between the container and the link. Technically speaking the container “scopes” the link. For a familiar example, think of the edit links you often see in web applications:
The two edit links above are scoped by their containers. The viewer expects the top edit link to edit Michael Bluth because the link appears in the same box as Michael’s name. The edit links are the same. It’s the containers that make the difference.
So how does this apply to GitHub’s navigation? The issue is with the “repositories: all” link. GitHub hosts thousands of public repositories that anyone can browse, and each user may also have their own repositories. That’s where we hit an ambiguity in the design of their navigation.
GitHub’s decoration implies a scope on the repositories link
When the global navigation block is wrapped in a border, the “all” link appears to be scoped by the current user. If you clicked the link, you would expect to see repositories that belong to that user only.
Compare that to the version without a border. Here it’s not so clear whether the “all” link would take you to Michael’s repositories or the master list of all users’ repositories.
Not just decoration: confusing behavior on GitHub
At first the border of GitHub’s navigation looked like it was only a question of decoration or style. Now we’ve seen that aesthetic decisions can also influence how viewers understand a design. In GitHub’s case, the expectation created by the scoped repositories link doesn’t match up with the behavior. When you click the “all” repositories link, you do not actually see the repositories for the current user. Instead you are taken to the master list of public repositories for all users. It turns out that if you want to see just the repos for the current user, you need to click the user’s name beside the avatar. Tricky!
Redesigns that take scope into account
How could we tweak GitHub’s design to remove the confusion? One option is to remove the container and reorder the elements so there is no implication at all that the repository links are scoped by the current user:
This redesign uses visual principles to make a meaningful difference in the way the block is interpreted. By moving the avatar to the right side and removing the border, there is no longer an urge to assume the repository links relate to the current user.
Another possibility is to keep the decorative container from the original and use copywriting to overpower the suggested scope:
The second redesign uses two links—”all” and “mine”—to differentiate between the master list of all repositories and the list of repositories belonging only to the current user. Whether visual principles or words are used, both redesigns remove the ambiguity around the “all” link and set clear expectations.
GitHub is a wonderful service and I know I’m picking hairs here. At the same time, UI is a game of subtlety. The eyes and brain are sensitive and incredible faculties. As designers we should be very aware that sometimes when we design for the eyes we can also forget to design for the brain. I hope these examples help you to become more sensitive to the fine line between decorative elements and elements that change the meaning of your interfaces.
GeeIWonder
on 14 Jan 09Interesting take.
I’m not sure I like the idea of ‘overpowering’ as a solution particularly, because it at least sets a precedent and at worst creates opportunity for a hierarchical nightmare.
Robby Russell
on 14 Jan 09Great post. To be fair… Github was designed by developers (as far as I can tell). ;-)
Jordan
on 14 Jan 09This could have been the worst article ever, but the fact that you based the teaching parts on an extended AD reference makes me love it far more than I should :)
(But the article was good, and I actually learned a bit, so double bonus :)
Judson Collier
on 14 Jan 09Excellent writeup. It’s easy to not take account on how a simple border can effect the UI, though you’ve clearly missed one underlying fact:
All of the repositories would have been Michael’s. :).
Perry McDowell
on 14 Jan 09Steve Holt!!
Daniel
on 14 Jan 09Excellent stuff as always – thanks, Ryan!
Paul Thrasher
on 14 Jan 09I’ve run into that exact confusion on GitHub. I tend to either click the wrong link or at least hesitate when trying to find my own repos. I think I’ve settled on clicking the thumbnail.
But when I want to check out global repos, I start clicking on the GitHub logo and go from there, trying to start over again from the homepage.
That little box definitely could use a cleanup. I’d even suggest keeping any global/site-wide links out of that area and more towards the GitHub logo where I’m confident that I’ll be dialing in to that side of the site.
Josh Ferguson
on 14 Jan 09I have also run into confusion using those links as well, I don’t know why I’d want a link to view all repositories next to my account information.
I just learned to click the big logo to start over if I need to go back. What’s funny is the first time I used github I expected the big logo to take me to see all repositories (since I considered it a site-level element) and the link next to my name to take me back to my own repositories (since I considered it an account level element). It took many times using it before I had trained myself in what to do.
Michael Zuschlag
on 14 Jan 09It doesn’t take a border to associate UI elements with each other. Proximity is enough for users to assume similarity or relations among items, as Ferguson seems to imply. Your second redesign also has potential for confusion because the majority of elements –those other than the couple “repository” ones –are all account-specific, which may still lead the user to assume that the repositories are also account-specific –that the upper right corner of the screen is the Account place. Solutions include (a) separate the repository links from the account-specific elements by space greater than that used to separate the account-specific elements from each other, or (b) use a container, but put it around the account-specific elements only.
RS
on 14 Jan 09Yes Michael, proximity is a big factor too. Thanks for mentioning that. I tried to follow the principle of ‘least effective difference’ in the article and show redesigns that are as close to the original as possible. Exploring more options or rethinking the navigation entirely would stray too far from my goal of sharing a few simple ideas to stir peoples’ thoughts.
Giles Bowkett
on 14 Jan 09Everybody loves GitHub. They’re awesome. However, you’re right. Also: they should do away with the “all” link entirely. Nobody in their right mind will look at a giant alphabetical list of repositories that are mostly irrelevant to their interests. Search is superior to directories. Ontology is overrated.
Also, they should change the JavaScript that makes it impossible to command-click and open your inbox in a new window. I hate to criticize because UI is an art and I don’t mean anything personal or disrespectful. But standards exist for a reason, and one reason is that standards provide a firm foundation. Browsers can add opening in new windows or tabs and you can make it part of your daily workflow because everything’s built on standards so you have consistent behavior you can depend on. That JavaScript frustrates normal expectations.
As a result I don’t even check my GitHub inbox, ever. It sucks, because people add cool features to my open source projects and fix bugs in my code, and I never see it because I don’t use that inbox, but I just can’t stand the usability error. If I used the GitHub inbox my code would be better, but I can’t do it. It makes me physically ill.
I’d buy a lot more stuff from the Pragmatic Bookshelf, too, if they didn’t do the same thing.
That being said I don’t think you’ve got a chance in hell of convincing GitHub to correct their UI with this blog post. If there’s one thing I’ve learned from the Internet a hundred times, it’s that public criticism is just a waste of energy. You might piss them off but you won’t change their minds.
Still, this blog post is awesome. It’s very very rare that developers pause to consider the possibility that there’s a whole universe of semantic specifics at work in good design. The analogy of variable scope is a great one.
What I wish were possible was easy re-skinning of incorrect web sites, or web sites with only a few minor consistent flaws. In theory this is something that semantic markup ought to make trivial, but the practice hasn’t delivered at all.
Brandon Walsh
on 14 Jan 09Odd coincidence that I’m halfway through the second season of AD on Hulu…
These types of posts are what got me interested in SvN a few years ago. I’m a CS undergrad at the moment, so I tend to do more coding than interface work. Whenever I do need to work on UI stuff, I try to keep in mind the tips you all have shared over the years. Such details really do affect users’ expectations of how an application will behave.
Anyway, this post and others like it are truly excellent. Please share more of these insights!
taine
on 14 Jan 09wonderful post!
have to say 31signals blog is one of my favorites.
btw, i have translated it into Chinese and put it on my blog. hope you don’t mind.
http://www.yummyux.com/?p=131
Tim Connor
on 14 Jan 09I’ve been confused by this recently, and I am certainly not a neophyte to either the web or github. Your solutions are not orthogonal, though, because the “mine” link would be useful to me, with or without a scoping container.
Ryan
on 14 Jan 09Now if they would replace the word “search” with a search box they’d be leaps ahead.
wizardofcrowds
on 14 Jan 09Yes, that has been confusing to me. What’s worse is that, as I use github, I have unconsciously been trying to ignore what their design parts imply (otherwise I would have to get lost). This great post has made me recognize the fact! From now on, instead of automatically ignoring design implications, I should verbalize the problem by myself when I feel something strange – like you have done in this post. Thank you very much indeed.
Thomas Balthazar
on 14 Jan 09I’ll go for a solution without the border, with the avatar at the right, and with the all | mine links. Great article, thanks.
Michael
on 14 Jan 09First! Great post, great look on details. Thanks for picking hairs!
André Wendt
on 14 Jan 09Definitely. What I find far worse on that navigation is the marginal wording of “account” and “profile”. I can never remember what is behind those links until I actually click them.
Dmitry
on 14 Jan 09Great post. That little interface element has been bothering me as well.
PJ Hyett
on 14 Jan 09Thanks for the feedback Ryan and the rest, we do appreciate it.
The user box originally was user specific, but became a poorly-used catchall. We’ll work on improving the navigation soon.
Giles: The inbox will be command-clickable shortly. Might I recommend using GitHub’s support site, the one your employer built, next time you come across an illness-inducing bug.
Cheers, PJ
Stefan Seiz
on 14 Jan 09Spot on Ryan. Nice writeup and food for some good thought here.
I would prefer the version without the unnecessary container. Your redesign is much cleaner and more accessible to my eyes. another great “37 better…”!
The only problem i still see, is the little Envelope Icon which is possibly showing your messages. Not knowing GitHub, i can not judge how important these messages are, but beind the avatar, it looks very out of context to me because the Messages icon is actionable like the account and profile links. The avatar is nothing actionable (only decorative and informative) and therefore currently unnecessarily devides two blocks of actionable items. I guess i’d move this ino the navbar too like: Messages (0) | account | profile…
Stefan Seiz
on 14 Jan 09Please someone enlighten a foreigner. What is “AD” (as in the comment from Brandon Walsh) referring to?
Ólafur Nielsen
on 14 Jan 09Great piece. I’d love to see more of your thoughts on these kind of matters – where you go deeper into design decisions and share insights.
I was also wondering… in your recent reader survey I saw that 84,2% read your blog through RSS readers. Why don’t you put the whole text of your blog posts in the feed?
Paul Thrasher
on 14 Jan 09@Stefan: On the internet AD stands for Arrested Development, a T.V. show, as opposed to real life in the U.S. where it stands for Anno Domini which means “Party Time” or “The Time at Which You Party”. Make sense?
Kyle
on 14 Jan 09I find this with Twitter, too; the ‘Everyone’ link disappears into a list of nav items relating to me: replies, DMs, favourites, then suddenly everyone! Always throws me.
Keith
on 14 Jan 09Great post. Even well designed sites have room to grow!
Steven Wagner
on 14 Jan 09Ryan – is there a way to do this using Google Website Optimizer? Running a test of two different versions within the application to see the change in behavior?
Ian
on 14 Jan 09ah, that’s so interesting! I’ve been using github for quite a while now and that’s annoyed me since day 1 but in a subconscious, not-quite-aware-enough-of-it way for me to ever actually put my finger on and articulate it. Thanks for doing such a good job explaining it.
Nathan
on 14 Jan 09I’ve always been thrown off by this as well. That box looks so nice, it seems like it should work so great. But you are right, it is confusing. I could never put my finger on it before.
I don’t think the proposed solutions are perfect, but they are good if you are trying to keep a very similar look.
MichalT
on 14 Jan 09Although I agree with the general premise of the article, those links should simply point to user’s repositories. No real point in linking to ‘All’ and ‘Search’ separately either—they should both be the same page.
MichalT
on 14 Jan 09BTW, I think it’s quite common to want to “nitpick” a good design. If a design sucks big time, I don’t even notice the more subtle mistakes.
Walter Kim
on 14 Jan 09Michael Zuschlag is correct, and I think it’s important to note that all the suggested improvements are still representative of a fundamentally flawed approach. The [explicit] container merely reinforces what the [implicit] grouping does anyway, so removing the container doesn’t solve the problem, nor does rearranging the order of elements.
In this situation, the most sensible thing to do is place the global navs next to the global signifier supreme: the GitHub logo. In their original place, put the following user-repo navs (or some subset): all | public | private | sources | forks.
Andrew Brown
on 14 Jan 09I wouldn’t have stopped at the box, I would redesign everything from the navigation and up. Not the best example, but I guess your point is to show how much thought someone needs to put into every design component of a website.
mark
on 14 Jan 09“UI is a game of subtlety…” Well said.
zephyr
on 14 Jan 09Glad to see someone else use Arrested Development personas in their designs ;-)
Alex
on 14 Jan 09Great post. Wondering about the term you used to describe grouping, “scope”. Is this a technical term? If so, where can I read more about it?
Thanks. A
PaulL
on 14 Jan 09Yep and someone should write a blog post about the top tabs. It’s always seemed odd that the top 2 tab strips are about the project which is listed below them. Visually there should be a clear project indicator above the tabs—finish out the heirachical concept.
I’m with Walter, the global navs should be seperated from the user navs.
But I’m hooked and happily send them money every month.
RS
on 14 Jan 09“Scope” is a word borrowed from programming. There isn’t a lot of established vocabulary for practical, everyday UI work. So I’ve found myself borrowing a lot of practical words from the programming world to express the concepts I need. Wikipedia has a nice overview of what “scope” means in a programming context: Scope (programming).
CJ Curtis
on 14 Jan 09Interesting how several commenters say something to the effect that this very thing “annoyed them in the subconscious.”
Really??
I agree it’s a design flaw, but it’s one of those things you would quickly get used to, and should move on from.
It’s like Network Solutions. For whatever reason, they move the “WHOIS” link every two months. Pisses me off. But I know it’s there, so I find it and get on with my day.
But bravo to Ryan…good insights.
Fabio
on 15 Jan 09Ryan, great post. Thanks very much.
Can you do a re-design of the comments section of the Bob Loblaw Law Blog next?
:D
Jason Pamental
on 15 Jan 09I know it’s been acknowledged by PJ from GitHub – and kudos for being so receptive! (That’s refreshing, especially when the analysis is meant in the best possible way)
I think that the proximity of links is key: the links in the top row have a specific context – relating to the individual logged-in user, and the ‘repositories’ links are effectively the global navigation (from a generic site-wide perspective). Two different contexts entirely – so I think that the separation notion suggested is really valid. Perhaps even something as simple as moving the ‘repositories’ links to the left of the avatar – allowing it to stand alone (aligned ‘top’ to line up with the profile-centric links and not be hanging in space), then the avatar and everything to the right of that avatar being user-specific: messages, account, profile, etc. Then the outline would actually become a valid and useful UI element – demonstrating that all contained within is specific to the user.
Great thread!
Jason
Ed Spencer
on 15 Jan 09I love the names in your example :) Shame there was no Tobias…
Tomas Sancio
on 15 Jan 09Thanks for the article. Interface design is so overlooked.
Gary Franceschini
on 16 Jan 09“I know I’m picking hairs here”
Wow. I disagree. I think you target a specific area of confusion caused by the interface. I would never see confusing users as “picking hairs.”
Alisey
on 18 Jan 09Nice expalation of how proximity matters: http://www.artlebedev.com/mandership/136/
Dave Johnson
on 19 Jan 09It is also annoying that the main navigation bar changes when you move from repository browsing to view a repository.
Tom Preston-Werner
on 21 Jan 09Ryan – I wanted to drop a note to say that I took your usability critique to heart, and we’ve just deployed a new header and userbox that addresses the scoping issues that have crept in over the past half year. Go check it out, I think you’ll like what we’ve done.
Everyone else – Thanks for your comments on this; we take our customers seriously and I hope you enjoy the new and improved usability!
This discussion is closed.