Complex applications are those which support highly trained users’ unstructured goals, as well as nonlinear workflows.

While complex apps vary depending on the type of workflows and users they support, most of them share some similar features, such as:

  • supporting highly trained users with advanced knowledge
  • helping users navigate and managing large data sets and enabling data analysis
  • supporting problem solving or goals with either unknown or variable underlying tasks
  • requiring collaboration between multiple roles, tools, or platforms
  • reducing the risks of executing high-value tasks with a potential for high loss

Despite the numerous variations in complex apps, all of them share many of the same challenges, both for the developers creating the apps and for the end-users.

We’re going to look at 8 guidelines for designing complex applications, based on the shared challenges that designers and researchers face while building these apps.

1. Promote learning by doing

Research shows that users prefer to start using an application or system as soon as they are introduced to it, regardless of its complexity. They are more motivated to begin working on their tasks rather than spend time on tutorials or other types of documentation.

While you can’t force users to rely solely on trial and error in learning how to use your application, especially if it is aimed at mission-critical or safety-critical domains, learning by doing will always be required to some extent simply because a manual or training course can never cover absolutely all uses of that system.

You should cater to users’ preference to explore the interface as soon as they run the app by allowing them to learn through trial and error and without the risk of losing work or doing any damage.

An example of how you can do this is by limiting users’ ability to perform long sequences of actions without seeing their results as they are performing them. This way, users aren’t forced to go through all the required steps to complete a task before they can see if the results of their action match their intent.

2. Help users be efficient

Even users of complex apps tend to get stuck at mediocre performance and not transition to expert usage if they are left to their own devices. Many users will plateau and stick to satisfactory and often inefficient methods of accomplishing their tasks rather than put in the time and effort to seek faster ways of going through their workflows. This leads to a significant amount of wasted time and poor productivity as users can spend years working the same application and system in inefficient ways.

Your responsibility is to help users transition to using more efficient methods and breaking their behavioral partners by unobtrusively showing them better ways of accomplishing their tasks.

For example, instead of simply relying on manuals or tutorials, you can embed in-context learning cues or additional functions throughout your app. In-context learning cues only present themselves in the context of accomplishing a task, such as tooltips which pop-up when hovering over an element.

3. Give users flexible and fluid pathways

Users of complex apps or systems will sometimes perform broad and unstructured goals in nonlinear workflows. In such cases, they may not know exactly what their end goal is, and they may need to find answers by analyzing data. Even if there is a well-defined goal, users don’t always follow a known set of subtasks to reach it. However, the system needs to have structure, a physical interface that users interact with and a linear process which they complete over time.

Give your users flexibility by allowing them to find their own way of accomplishing tasks and not forcing them through a specific set of actions from start to finish.

For example, consider allowing users to skip ahead in a sequence of actions, as well as easily moving from one step to any other. An interactive sequence map within a setup wizard is a great example of allowing your users to return to previous steps if needed without losing any progress they’ve made so far.

4. Help users track their actions and thoughts

Users of complex apps and systems can often face long waiting periods and frequent work interruptions. Complex data analyses can take hours or days to complete, so interruptions can sometimes be inevitable. Even without interruptions, the complexity of the subtask a user sometimes needs to perform require them to remember a lot of information which can be easily forgotten along the way.

This can be avoided by simply providing users with the ability to keep track of their actions and thought processes as they work inside the application.

Giving users the option to add and store open-ended notes on charts, data sets, or other elements is one method of supporting this principle. For example, while a user is working on complex data modeling or analysis, the comments they enter along the way can later remind them why they created a certain model and what they were trying to answer when they created it.

5. Facilitate easy transitions between tools and workspaces

Users of complex applications will typically use multiple tools and workspaces for their work. Even if they rely mostly on one primary application for the majority of their work, they still often switch applications for various reasons, such as gathering information from online databases or making notes and comments in other apps when the primary one doesn’t support this feature. Even within their primary application, they may still transition between several workspaces by using software addons which provide various new functionalities within the app.

Your responsibility is to make these transitions easier to accomplish and reduce the burden of switching between environments, inside the application as well as outside.

One way to do this is by designing connection points between your app and other third-party software your audience uses together with yours. For example, a simple option to export data to an Excel spreadsheet can be a huge time-saver and will ensure your users don’t have to make efforts to manually copy or convert data from your app.

6. Reduce clutter without sacrificing capability

Complex applications are often built to cater to a wide variety of use-cases. As such, while they can be very powerful tools, they also tend to be very cluttered. Additionally, such apps are also used by novice users who don’t often need the same advanced features that expert users do.

Your responsibility is to minimize the appearance of clutter within the app’s interface without limiting its capabilities.

One way to do this is through staged disclosure. This entails revealing options only when they are relevant to the user’s current task, such as displaying advanced settings only after they’ve ticked a particular checkbox to which those settings are related.

Some developers cater to novice users by simply allowing them a choice at startup between a simple interface and an advanced one, depending on how they intend to use the application. For example, think of some typical calculator apps which have an advanced setting that reveals a lot more features. As a regular user, you might never need those advanced features and there is no reason for them to clutter the app’s interface, which is why you can easily hide them to improve your experience with the app.

7. Facilitate easy transitions between primary and secondary information

Even if you reduce clutter in your app’s interface, not every element or piece of information can or should be displayed at the same time. There is some information which should be deferred to secondary levels while also making it easily accessible as it can still be required for contextualizing and better understanding the information on the primary level.

Easing the transition between both sets of information means users are easily able to access any extra information without leaving their current screen or environment. This is often implemented as tooltips which reveal more information when the user hovers over them.

8. Make important information obvious

Many of the tasks performed in complex applications will often require a lot of visual search, and the large amount of competing information and elements within such apps can make this a bit difficult. For example, users may need to find and distinguish relevant information across tabular views in large tables, and system alerts need to draw users’ attention to a relevant part of the UI so that they notice issues and correct them in a timely manner.

You can help your users easily find and use important information by making it more visually obvious to them. This doesn’t necessarily mean emphasizing it more with brighter colors or heavier font weights. You can also achieve this effect by removing nonessential and distracting elements.

For example, data can stand out more to users if you remove graphics or other visual elements which serve no real purpose. This removes users’ burden of visual search when they are trying to locate data in your app.

9. Know your users’ goals and design a user-centric UI

In order to design applications that users find useful and easy to use, you need to know what their goals are and see things from their perspective. If you lose sight of what matters to your users, you might end up designing a UI which prioritizes your own goals and priorities, which may make users have a difficult time using your application.

An example of a misstep is the November 2020 update to Instagram’s header and footer. Before November 2020, the header contained a camera icon on the left, the logo in the middle, and a messages icon on the right. After the update, they moved the logo to the left and on the right, they added:

  • the plus icon to add posts, stories, reels, and live videos
  • the heart icon to view activity

There’s nothing inherently wrong with that, but when you look at the redesign contextually, you start to understand that it wasn’t necessarily made with users in mind and there were likely no aesthetic or usability reasons behind the changes. To contextualize the changes in the header, we need to look at the footer.

The old footer used to have:

  • the home icon
  • the search icon
  • the plus icon
  • the heart icon
  • the profile icon

The new footer has:

  • the home icon
  • the search icon
  • the reels icon, which is a new feature implementing functionality similar to TikTok
  • a shopping icon, which is a new feature that allows users to purchase products from stores on Instagram
  • the profile icon

As you can see, the plus icon and the heart icon, probably the most frequently used icons, have been moved to the header and replaced with icons for new features that Instagram wants to push to users and which bring the company more money.

The new UI no longer focuses on encouraging users to curate content or make connections with other users, but instead prioritizes new aspects of the platform which favor brands and influencers that are spending money on Instagram.

As a result of these changes, the app’s usability has also been compromised, as the plus icon and the heart icon have been moved out of the thumb’s reach, requiring users to make more of an effort to get to two of the most frequently accessed features of the app.

Not only is the app more challenging to use now, but this new UI also draws attention to the business decisions behind the scenes and it is not shining a favorable light on the Instagram team.

Figure out what users want to do with your application and how they want to do it. Do not lose sight of this, because if your UI isn’t designed to accommodate users’ needs and their preferred journeys, you will likely reveal some of the complex reasonings and business considerations behind your design.

Final thoughts

Complex applications are very diverse and cater to a broad range of users and workflows. Despite this, however, there are certain challenges shared between all of them, and if you follow the steps we’ve outlined above, you should be well on your way to designing more efficient and accessible complex applications.