User Experience Engineering in the Lifecycle of Scientific Software

User Experience Engineering (UXE) implements usable interfaces for scientific software products.

This is the third article in a series about User Experience (UX) in the scientific software lifecycle from members of the UX team in the Scientific Data Division at Lawrence Berkeley National Laboratory. The first piece introduced UX work and UX Research as a practice. The second explored UX Design and Writing. This piece focuses on the role of UX Engineering as part of scientific software lifecycles.

What is UX Engineering?

User Experience Engineering (UXE) is cross-disciplinary work that brings together UX and software engineering practices to implement and maintain usable frontend interfaces. UX Engineers, sometimes referred to as User Interface (UI) or Frontend Engineers, are integral members of scientific software teams who work to implement the designs from UX Designers (UXDs) and coordinate with backend developers or other full-stack software engineers. Importantly, a UX Engineer often makes design decisions and applies UX principles in the context of implementation work. They may even fulfill a UX Research or Design role and be responsible for running usability tests or other forms of feedback collection.

Many types of teams can benefit from having a UX Engineer, but they are most common in research environments for teams focused on early product development. A key skill of a UX Engineer is to be able to take concepts or early designs and create a workable prototype using code. This helps teams quickly go from an idea to an interactive tool that can be tested, iterated on, and evaluated before being made production-ready. While iterating on the design of a tool, a UX Engineer also plays a key role in turning that tool into a fully fleshed-out product. This includes coding interactions with live data, thinking through and handling edge case user interactions and states, and modularizing the codebase. An individual with these skills is an especially useful role on scientific software teams because they can reconcile technical constraints and complexities with UX considerations, such as the ways users interact with or filter data and how much data is displayed at a time, to optimizing how much is pulled from a backend as users explore. Many scientific software UIs require the display and visualization of complex data, which requires interactivity to fully understand and think through. These types of interfaces can be difficult to prototype thoroughly in static sketches or wireframe designs since a user may not be able to fully envision how they can manipulate the data via the display or visualization. A UX Engineer can help render complex data into usable interactive prototypes that help teams test their ideas with users.

What does UX Engineering add to the scientific software lifecycle?

UX Engineering is an important bridge between UX Design and full-stack software engineering. Individuals in these roles help ensure UIs are feasible, performant, and usable. They can help UX Designers consider technical limitations, and they can help other software engineers on a team consider UX at every interaction level. UX encompasses much more than the graphical elements that make up a page; it also encompasses the speed at which the page loads, how errors are handled, what types of shortcuts there are, and many others. Having a UX Engineer on the team ensures that a solid user experience is built at every level of the application.

In scientific environments, a UX Engineer is frequently a hybrid UX practitioner and Frontend Developer who requires skills that span both of these roles. On the UX side, this includes knowledge of UX heuristics and information architecture to aid in their development work. UX Engineers in scientific software teams often also require knowledge of UX Research methods like surveys, interviews, and usability tests, given staffing limitations. On the engineering side, this includes knowledge of UI development technologies such as, for web development, HTML, CSS, JavaScript, and ReactJS. These individuals may also require full-stack software engineering knowledge to enable work with HPC systems or cloud environments to deliver overall usable solutions.

Examples of UX Engineering work for scientific software

To further illustrate the role of the UX Engineer, let’s look at two real-life examples of how someone doing UX Engineering can function in a scientific software team. The first is for a Department of Energy project called Process Optimization and Modeling for Minerals Sustainability (PrOMMiS), which deals with process modeling for rare earth element (REE) extraction. The second is the Department of Energy Systems Biology Knowledgebase (KBase), a web-based bioinformatics platform.

Case: PrOMMiS

The PrOMMiS team was tasked with building a UI tool that allows chemical engineers to model superstructures — process designs that include choices of different technologies, each choice essentially creating a branch in a decision tree — of processes for extracting REEs from solid and liquid recycling streams. The backend runs a mathematical optimization to arrive at the most cost-effective combination of technologies (considering all input constraints). The project is resource-constrained, so it does not have the funds to assemble a large team of software engineers or UX staff. This project is also exploratory in nature and is meant to produce a proof-of-concept rather than a production-ready product.

To achieve its prototyping goals, the team consists of a Backend Engineer with a background in modeling, a UX Engineer, a team lead, and a subject matter expert. In PrOMMiS, the UX Engineer ultimately completed UX work spanning research, design, and engineering due to resource constraints, demonstrating flexibility. The UXE generated initial designs through sketches and the help of a design system (taking on common UX design work), then quickly began prototyping a web application. While prototyping, they had to make many decisions about the layout, flow, and interactions of the application. They generally did so through rapid coding rather than drafting static UI designs. After some initial prototyping, the UX Engineer also conducted usability feedback sessions with the subject matter experts and other project stakeholders to assess the prototype’s user experience.

Case: KBase

Another project that has utilized the work of a UX Engineer is KBase, a web-based bioinformatics platform. In this case, the engineer was tasked with building high-fidelity mockups of a genome explorer tool. They were also responsible for helping decide on the right web tools to craft the design mockups. In this project, the UXE relied more on their design skills to create the mockups and run usability tests on the static mockups. At the same time, they leveraged their web development experience to aid the team of frontend developers on their architectural decisions. These decisions were vital to the user experience of the application because they determined not just the look and feel but also some of the core interactions users would perform on the data.

Conclusion

A User Experience Engineer plays an important role in software development, bridging the gap between design and engineering to create tools that are interactive and intuitive. UX Engineering can be thought of as a spectrum from UX Design to Software Engineering. A UX Engineer can be more oriented toward design, more oriented toward engineering, or somewhere right in the middle. This makes UX Engineers ideal communicators on a software team, excellent prototypers, and thoughtful feature implementers.

Confused and want a clarification? Curious to learn more? Reach out or explore the further information links!

Further information

Author Bios

Cody O’Donnell is a UX Engineer in the Scientific Data Division at Lawrence Berkeley National Laboratory. He specializes in designing and building user interfaces for data-intensive web applications and has done so across the biology, materials science, Army, and retail domains. He has contributed to several large-scale open science initiatives such as the Materials Project, KBase, and the National Microbiome Data Collaborative. He holds an MS in Human-Computer Interaction from Georgia Tech and a BS in Information Management and Technology from Syracuse University.

Drew Paine is a User Experience Researcher in the Scientific Data Division at Lawrence Berkeley National Laboratory. He contributes to a range of UX projects (https://ux.lbl.gov), including STRUDEL and the DOE High Performance Data Facility (HPDF). Drew has over a decade of qualitative user research experience in scientific software and commercial cloud environments. He holds a PhD in Human Centered Design & Engineering from the University of Washington and a BS in Software Engineering from Rose-Hulman Institute of Technology.

More on User Experience Design and Software Process Improvement