Farewell, application menus!

Application menus – or app menus, as they are often called – are the menu that you see in the GNOME 3 top bar, with the name and icon for the current app. These menus have been with us since the beginning of the GNOME 3.0 series, but we’re planning on retiring them for the next GNOME release (version 3.32). This post is intended to provide some background on this change, as well as information on how the transition will happen.

The development version of Web, whose app menu has been removed

Background

When app menus were first introduced, they were intended to play two main roles. First, they were supposed to contain application-level menu items, like Preferences, About and Quit. Secondly, they were supposed to indicate which app was focused.

Unfortunately, we’ve seen app menus not performing well over the years, despite efforts to improve them. People don’t always engage with them. Often, they haven’t realised that the menus are interactive, or they haven’t remembered that they’re there.

My feeling is that this hasn’t been helped by the fact that we’ve had a split between app menus and the menus in application windows. With two different locations for menu items, it becomes easy to look in the wrong place, particularly when one menu is more frequently visited than the other.

One of the other issues we’ve had with application menus is that adoption by third-party applications has been limited. This has meant that they’re often empty, other than the default quit item, and people have learned to ignore them.

As a result of these issues, there’s a consensus that they should be removed.

The plan

Software, which has moved its app menu into the window
Software, which has also removed its app menu

We are planning on removing application menus from GNOME in time for the next release, version 3.32. The application menu will no longer be shown in the top bar (neither the menu or the application name and icon will be shown). Each GNOME application will move the items from its app menu to a menu inside the application window (more detailed design guidelines are on the GNOME Gitlab instance).

If an application fails to remove its app menu by 3.32, it will be shown in the app’s header bar, using the fallback UI that is already provided by GTK. This means that there’s no danger of menu items not being accessible, if an app fails to migrate in time.

We are aiming to complete the entire migration away from app menus in time for GNOME 3.32, and to avoid being in an awkward in-between state for the next release. The new menu arrangement should feel natural to existing GNOME users, and they hopefully shouldn’t experience any difficulties.

The technical changes involved in removing app menus are quite simple, but there are a lot of apps to convert (so far we’ve
fixed 11 out of 63!) Therefore, help with this initiative would be most welcome, and it’s a great opportunity for new contributors to get involved.

App menus, it was nice knowing you…

Redesigning the lock screen

Last November we had a small hackfest in London, focused on GNOME Shell design. We explored various themes during the hackfest and came up with a bunch of initial designs, which we’ve subsequently been developing. The main area of recent work has been the login and unlock experience. The rest of this post gives an overview of the design that we’ve come up with.

Background

Unlocking and logging into a device is something that people do a lot. Since people do it a lot, it’s important that the experience is smooth and doesn’t get in the way. However, it’s also important for it to look and feel really good. Login/unlock is the gateway to the rest of the experience. It is the public face of the product. It therefore needs to make a good impression and reinforce a positive relationship with the user.

This is one of the reasons why we’ve spent a fair bit of time on the design for login and unlock, as well as why we’ve involved a larger design team than usual. The hackfest that we had last year allowed us to bring extra designers in – people like Robin Tafel (Endless) and Cassidy James (System76/elementary OS) – as well as to work more closely with new regular participants, like Tobias Bernard.

When we originally discussed login/unlock at the hackfest, we came up with a long list goals and objectives for the new design. Chief amongst these was the idea of making the lock screen frictionless, so that people can get to their session easily. We also wanted to add a little joy and delight to an experience that can sometimes feel a bit flat, and we wanted to improve the navigational aspects of the design, with a clear spatial model.

Finally, we wanted to improve how the login/unlock UI performs in different scenarios. the current design works reasonably well for a small number of users, but doesn’t perform great on single user machines, or on those with many users. We wanted to make sure that it scales.

The lock screen

Without further ado, mockups! Here’s what we currently have for the lock screen:

Key press or mouse click then reveals the password entry:

This motion mockup shows what the transitions would look like, going from the session, to a locked screen, and back to the session again:

As you can see, the existing “shield” concept has been retained – when you lock the device, a layer appears to slide down over the content. This slides up when the system is unlocked. We’ve tried to hold on to some of the character of the existing design, particularly with the centered time and date, so it is identifiably the same product as before.

So what’s changed? Here are some of the main things:

  1. The grey background is gone – the password field appears with the same background as the rest of the lock screen. This reduces the amount of friction the user experiences when logging in, and makes the process a lot smoother.
  2. Notifications are more minimal, have been moved to the side of the screen, and continue to be shown while the user authenticates (they’re currently hidden once the password field is visible) – giving users more time to register what’s been happening while the device has been locked.
  3. We’re going straight to user login from boot. This is an obvious win for single-user systems, since it’s less work to start using the machine. However, it’s also usually the right thing to do for multi-user systems too, since there is often one person who uses the machine more than others.
  4. We’re using a blurred version of the regular desktop background for the lock screen wallpaper, rather than a separate user-defined lock screen wallpaper. This is suggestive of a semi-transparent film or sheet that’s been placed over the session, but it also ties in with the user selection screen (described below).

There are a number of other smaller changes too, which I won’t go into here, although I’m obviously happy to answer questions, and there’s also more information on the design page.

User selection

The other major part of the design is the user selection screen. This can be accessed from the lock screen as well as the session, and is used when switching user. The existing implementation uses a fairly simple list of users. We’ve given this a fairly thorough overhaul as part of the new design:

There’s also a motion mockup, which shows the transition from boot to login to user selection:

As you can see, the new design uses a grid of tiles, each of which features a blurred version of the user’s wallpaper. These are a key part of the spatial model for login. This allows users to orient themselves and contextualises navigation.

The user grid is designed to scale, so that it works well with large numbers of users. There’s also a simple username entry screen that can be used on deployments where a grid of user accounts might not be appropriate.

Next steps

We’re hoping that work on implementing the designs will start soon, and it would be great if anyone wants to help make them a reality. That said, the designs aren’t set in stone, and we expect them to continue to evolve as we get feedback and as implementation takes place. Hopefully we’ll get chance to do some user testing on them too, before they land in a stable version.

Questions and comments are welcome.

GNOME Shell UX Hackfest

GNOME Shell has made significant improvements over the years since GNOME 3.0 was first released. This has included overhauling notifications, introducing a unified system status area, and refining how window selection and application launching works. Additionally, a huge amount of work has gone into polishing the experience through many many small improvements.

At the same time, some of the core elements of the GNOME Shell experience haven’t significantly changed for some time, and I have started to feel that a round of improvements is due, both to address long-standing issues and to ensure that the shell continues to develop in ways that our users value.

GNOME is also in the fantastic position of having new partners who we are developing working relationships with, particularly around the shell. Nowadays there are a variety of derivatives who are using the shell, including Endless, Ubuntu and Pop!_OS, and there’s a real desire to collaborate over the future of the shell and share in any benefits that might result.

Last week, these twin desires coalesced as a user experience hackfest which aimed to improve the design of the shell.

The hackfest was deliberately small, in order to provide a conducive environment for design work. Participants included Robin Tafel, Cosimo Cecchi, Jakub Steiner, Tobias Bernard, Florian Müllner, Cassidy James Blaede, Mario Sanchez Prada and myself (Nick Richards also called in). These individuals had affiliations with Endless, Red Hat, System76 and elementary OS, and they included both experienced GNOME designers and fresh perspectives.

While there wasn’t anyone from Ubuntu at the hackfest, we are in contact and I’ll be working to ensure that they are included in the process that the hackfest has initiated.

Overall, I was extremely happy with the event, and we came away with some exciting plans, which we think will result in major improvements to the GNOME Shell user experience.

Turning the ideas we’ve generated into viable designs will be a lot of work, and I’ll provide more details once some of the details have been filled in. In the mean time, Cassidy has written up a detailed account of the hackfest, which includes some more specifics for those who are especially interested.

I’d like to thank the GNOME Foundation for sponsoring my attendance at the hackfest, as well as Endless and Red Hat for providing the space for the event. I’d also like to offer my heartfelt gratitude to all the attendees, every one of whom made valuable and talented contributions over the four days.

Photo courtesy of Jakub Steiner (CC-BY-SA 2.0).

Policy hacking

Last week I attended the first ever GNOME Foundation hackfest in Berlin, Germany. The hackfest was part of an effort to redefine how the GNOME Foundation operates and is perceived. There are a number of aspects to this process:

  1. Giving the Board of Directors a higher-level strategic oversight role.
  2. Empowering our staff to take more executive action.
  3. Decentralising the Foundation, so that authority and power is pushed out to the community.
  4. Engaging in strategic initiatives that benefit the GNOME project.

Until now, the board has largely operated in an executive mode: each meeting we decide on funding requests, trademark questions and whatever other miscellaneous issues come our way. While some of this decision-making responsibility is to be expected, it is also fair to say that the board spends too much time on small questions and not enough on bigger ones.

One of the reasons for last week’s hackfest was to try and shift the board from its executive role to a more legislative one. To do this, we wrote and approved spending policies, so that expenditure decisions don’t have to be made on a case-by-case basis. We also approved a budget for the financial year and specified budget holders for some lines of expenditure.

With these in place the board is now in a position to relinquish control over trivial spending decisions and to take up a high-level budget oversight role. Going forward the board will have have its eye on the big budget picture and not on the detail. Smaller spending decisions will be pushed out to our staff, to individual budget holders from the community and to committees.

It is hoped that these changes will allow us to play a more strategic role in the future. This transition will probably take some time yet, and there are some other areas that still need to be addressed. However, with the Berlin hackfest we have made a major step forward.

Huge thanks to the good people at Kinvolk for providing the venue for the event, and to the GNOME Foundation for sponsoring me to attend.

Status Icons and GNOME

“Status icons” go by a few different names. A lot of people know them by the area where they appear, which gets described as the “system tray” or “notification area”. Whatever you call it, it’s the place where a string of little icons often gets shown, typically by applications that are running in the background.

GNOME 3 currently shows status icons in the bottom-left corner of the screen, in a tray that slides in and out. We know that this isn’t a good solution. The tray gets in the way and it generally feels quite awkward. There’s a general consensus that we don’t want to continue with this UI for the upcoming version of GNOME 3.

At the same time, the GNOME project has done a lot of work in recent years that reduces the importance of status icons. This includes integrating media controls and weather information into the shell’s calendar drop down, creating the Night Light, and working with third party application developers to reduce their reliance on status icons. In the next release, we will be introducing a new integration API for file synchronisation apps, which will be another positive step.

From GNOME 3.26, we are therefore planning not to show status icons in GNOME Shell by default. We feel that, long-term, this change will enable us to provide a better experience for our users (I’ll go into some detail about this in the rest of the post). We also feel that the consequences of the change won’t be as dramatic as they would have been in the past.

We do recognise that people are using status icons today and that some will continue to want to use them. That’s absolutely fine, and our decision to stop showing status icons by default is in no way a negative judgement on this. If you want or need to continue using status icons, you should feel free to use the TopIcons GNOME Shell extension. This will continue to work and the extension offers a better status icon experience than the current default anyway.

We will, of course, continue to monitor the situation, and will be listening to feedback. There is also a full set of information about the change on the GNOME wiki, including an FAQ and guidelines for application developers.

Advice for application developers

Having reviewed how applications are using status icons, we are confident that the majority of applications that use status icons will not be impacted by the decision not to display them by default. In many cases applications won’t have to make any changes, and if changes are required we have hopefully contacted you already.

It is also worth noting that many of the recommendations for how to provide a good experience without status icons are established guidelines anyway, and can be adopted whether an application is using a status icon or not (such as using existing APIs effectively and having a consistent behaviour when your application is launched). This is a great opportunity to improve applications more generally!

If you are an application developer and are uncertain about whether this change affects you, or how to adjust to it, check out the guidelines on the GNOME wiki and feel free to get in touch if you are still uncertain. We want to help you any way we can.

The rest of this post includes background information on our approach to status icons. It will hopefully help those who are interested to understand the decision a little better.

The why.

Still with me? OK, let’s continue!

As a starting point, it’s worth pointing out that status icons are pretty old. The first version of the spec is dated April 2002, which means that it predated GNOME 2.0. They had “balloon messages”. It perhaps goes without saying, but status icons are something that we inherited, rather than something that was designed as part of the overall experience.

But why don’t we want them anymore? There are some specific issues with status icons, which I’ll get on to, but the main reasons relate to a) the existence of better APIs and b) how they align with GNOME’s wider design philosophy and goals. The following are some of these.

1. Purposeful API

In GNOME we have two closely related goals: to provide application developers with a clear vision of how apps should be built and to provide users with a simple, easy to understand and logical experience. One key ingredient to achieving this is to have a straightforward set of APIs for application integration.

We want to have clearly differentiated APIs, with each one having its own role. Primary examples include:

Status icons originated prior to all of these, and overlap with three of the four. This creates ambiguity for developers and makes it harder to know which APIs to use. Should you use notifications to notify users, or status icons? Is it best to use a status icon or MPRIS for media controls? While some of these questions can be answered by documentation and guidelines, there’s no avoiding the fact that they generate ambiguity and, inevitably, inconsistent application behaviour. Many applications today use status icons as a notifications system, despite the existence of the official notifications API, for example.

2. Application versus system

One of GNOME 3’s central design tenets is to clearly differentiate system and applications. This is intended to make the structure of the experience clear to users. It is one reason why we call the area in the top right the system status area.

Status icons and system status are both concerned with status and there is therefore a natural pull to merge the two (indeed, back in the GNOME 2 days, status icons were used for both application and system status). This is how status icons are typically presented on other platforms. However, we feel that this would dilute the experience as a whole, since it would introduce a lack of clarity over what belongs to what. The influence of this kind of distinction is a subtle but pervasive one.

3. User control

Another key design principle for GNOME is to put the user in control. We aim to ensure that how the system looks and behaves is determined by the user. The only person who should be able to change your wallpaper, your preferred wi-fi networks, your favourite applications or your default email client, is you. This is one reason why we are so keen on the concept of application sandboxing.

The design of status icons goes against this principle. We know from observation that people often only care about a small fraction of the status icons that they are exposed to, and the rest don’t reflect their interests or activities. This stems from the status icon API and the ethos behind it.

Users don’t opt into status icons. They don’t neatly stay out of the way when they’re not wanted (as with notifications). They don’t reflect a particular type of user activity (like MPRIS integration). In essence, they take control from the user.

4. Accessible click targets

Finally, throughout GNOME 3, we have attempted to ensure that click targets are always easy to target. Teeny tiny click targets pose a challenge in a whole host of situations, from those with poor quality pointing devices, to those who don’t have the same level of motor control as others. Look around and you won’t see many small click targets in GNOME 3, and this is why.

This goal was one of the motivations for the combined system status area that we introduced back in GNOME 3.10. It is why those standalone top bar items that we have retained have been made a little wider, with the addition of disclosure triangles.

Status icons are, in essence, a string of tiny little click targets. They are hard to click.

Scalability

Clearly differentiated API, a distinction between applications and system, ensuring user control and keeping our UI accessible are four design principles which inform our view on status icons.

Another reason for wanting to move away from status icons is more a criticism of the concept itself. Part of the difficulty with status icons is just how appealing they are to application authors. They are visually prominent, giving great advertising and brand presence. They also provide users with quick access to application controls. What’s not to like!?

Unfortunately the very attractiveness of status icons leads to problems. Most obviously, users often end up with too many of them.

Every platform that has embraced status icons has ended up having to wrestle with this problem, from the Windows notification area overflow, merging of application indicators on Ubuntu, and a raft of modifications on Mac. In my mind, all of these management solutions are indicative of an underlying issue.

There’s a contradiction at the heart of a system which on the one hand offers to present application UI in a persistent manner, but which can be used by any number of applications. In the end, you end up presenting more information than users can process. When this happens, some of the icons have to be hidden, which means going back on the central promise of persistent presence. The whole concept eventually collapses.

Conclusion

We recognise that this is a potentially contentious issue. At the same time, we hope that this post has helped to provide some better insight into why the decision has been made and shows how it is part of a more general effort to improve the platform.

My feeling is that we have actually been using status icons as a crutch for far too long – that they have been used to fill gaps in our APIs, gaps which are now thankfully getting filled – and that moving away from them will help us to extend application integration in some exciting directions.

Finally, when we say that we want to hear feedback we truly mean it: there are bound to be issues that need addressing and that we need to hear about. The more information we have, the better.