Bob Liu Thoughts on UX Design & Strategy 2026-01-25T23:28:57Z https://liu.design/ Bob Liu bob@liu.design Fifty Services, One Voice 2025-12-22T00:00:00Z https://liu.design/projects/library-web-refresh/ <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/cover-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/cover-1440w.jpeg 1440w" sizes="100vw" /><img src="https://liu.design/projects/library-web-refresh/cover-1440w.jpeg" width="1440" height="957" alt="Illustration of a browser window with a photo of a library building surrounded by symbols indicating library use cases" loading="lazy" decoding="async" /> </figure> <p>From 2021-2025, as the designer and product owner of the University of Arizona Libraries website, I led the Web Refresh project that revamped the library’s online presence.</p> <h2>Problem: too many websites</h2> <p>As of 2021, The University of Arizona Libraries system directly operated four locations:</p> <ol> <li>Main Library</li> <li>Weaver Science-Engineering Library</li> <li>Special Collections</li> <li>Health Sciences Library</li> </ol> <p>These libraries lacked a single online presence. Among the various public-facing websites they operated, the first two libraries shared the same website, while the third and fourth each had a separate website. In addition, Data Cooperative, a data support services group within the library, also operates its own website.</p> <p>Each website lived on a different content management system and had inconsistent branding, design, and content strategy. This created a gap when the user searches for library resources, as they often had to switch between websites. Also, the site search on one site couldn’t index content everywhere, causing findability issues.</p> <div> <div class="gallery full-width" id="gallery-legacy-websites"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/legacy-main-jul2018-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/legacy-main-jul2018-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/legacy-main-jul2018-1440w.jpeg" data-pswp-width="1440" data-pswp-height="960" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/legacy-main-jul2018-1440w.jpeg" width="1440" height="960" alt="Browser window that shows the legacy Main Library website" loading="lazy" decoding="async" /> </a> <figcaption>Legacy Main Library website (2018)</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/legacy-hsl-aug2017-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/legacy-hsl-aug2017-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/legacy-hsl-aug2017-1440w.jpeg" data-pswp-width="1440" data-pswp-height="960" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/legacy-hsl-aug2017-1440w.jpeg" width="1440" height="960" alt="Browser window that shows the legacy Health Sciences Library website" loading="lazy" decoding="async" /> </a> <figcaption>Legacy Health Sciences Library website (2017)</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/legacy-sc-nov2018-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/legacy-sc-nov2018-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/legacy-sc-nov2018-1440w.jpeg" data-pswp-width="1440" data-pswp-height="960" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/legacy-sc-nov2018-1440w.jpeg" width="1440" height="960" alt="Browser window that shows the legacy Special Collections website" loading="lazy" decoding="async" /> </a> <figcaption>Legacy Special Collections website (2018)</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/legacy-data-sep2025-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/legacy-data-sep2025-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/legacy-data-sep2025-1440w.jpeg" data-pswp-width="1440" data-pswp-height="960" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/legacy-data-sep2025-1440w.jpeg" width="1440" height="960" alt="Browser window that shows the legacy Data Cooperative website" loading="lazy" decoding="async" /> </a> <figcaption>Legacy Data Cooperative website (2025)</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-legacy-websites', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>In 2021, the library leadership sponsored the Web Refresh project, one that aims to create a unified online presence for all libraries. As a core member of the project, I led a collaboration between the libraries’ User Experience (my team), Development, Project &amp; Portfolio Management, and Marketing &amp; Communications teams, along with stakeholders from other departments.</p> <h2>Begin with a design system</h2> <p>In 2021, a group of designers, developers, and project managers in the University of Arizona community collaborated on <a href="https://quickstart.arizona.edu/" target="_blank" rel="noopener noreferrer">Arizona Quickstart</a>, a centrally-maintained, Drupal-based content management system that seamlessly integrates the university’s brand and web component library.</p> <p>As part of the group, I contributed to the design of Arizona Quickstart’s component library, which is based on Bootstrap, and translated most elements into a design system in Figma.</p> <div> <div class="gallery undefined" id="gallery-quickstart-moodboard"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/quickstart-moodboard-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/quickstart-moodboard-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/quickstart-moodboard-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/quickstart-moodboard-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/quickstart-moodboard-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1610" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/quickstart-moodboard-1440w.jpeg" width="1440" height="966" alt="Web components in Arizona Quickstart's design system" loading="lazy" decoding="async" /> </a> <figcaption>Components in Arizona Quickstart's design system</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-quickstart-moodboard', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Before Web Refresh, due to the fragmentation, the Libraries independently maintained several custom-developed Drupal instances for the public-facing websites. The project team saw the potential of the new campus-wide content management system and decided to build a unified website on this new platform.</p> <h2>Engage stakeholders through interviews and workshops</h2> <div> <div class="gallery full-width" id="gallery-name"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/workshop-inperson-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/workshop-inperson-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/workshop-inperson-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/workshop-inperson-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/workshop-inperson-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/workshop-inperson-1440w.jpeg" width="1440" height="960" alt="Several people viewing sketches on whiteboards" loading="lazy" decoding="async" /> </a> <figcaption>In-person workshop for designing the library homepage, May 2024</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/workshop-remote-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/workshop-remote-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/workshop-remote-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/workshop-remote-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/workshop-remote-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/workshop-remote-1440w.jpeg" width="1440" height="960" alt="Screenshot of an online whiteboard tool that has photos of sketches and sticky notes" loading="lazy" decoding="async" /> </a> <figcaption>Online workshop for designing the library's technology lending service, April 2022</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-name', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Throughout the project, I designed, organized, and led or co-led:</p> <ul> <li>8 rounds/18 sessions of stakeholder interviews</li> <li>8 design workshops</li> <li>10 other UX workshops, including card sorting, journey mapping, and content planning</li> </ul> <p>In total, 47 stakeholders from all eight library departments participated in the stakeholder interviews and design workshops.</p> <p>The stakeholder interviews aim to understand the needs, requirements, and pain points of the departments involved in the project. They also serve as a channel to introduce the project’s background and communicate the timeline and proposed technical changes.</p> <p>The design workshops utilized various design thinking, prototyping, and content strategy methods to effectively create consensus between implementors and stakeholders.</p> <p>The next four sections will break down some of the methods used in these workshops.</p> <h2>Visualize the user journey</h2> <p>One of the project’s goals is to move multiple websites under one umbrella called the “multi-site.” To get there, the project team wanted to understand how users navigate within an individual element, a “sub-site,” and between these sub-sites. Some common website modules that are shared among sub-sites were also considered as part of the user journey—for example, the <a href="https://liu.design/projects/library-hours">library hours</a> and room reservation modules.</p> <p>For each product , the team identified a group of stakeholders who ran a service, managed a team, or interacted with patrons directly. I led a <strong>journey mapping activity</strong> with 3 stakeholder groups. Each activity was uniquely crafted for the service, while all of them shared some common prompts that include:</p> <ul> <li>how the user interacted with the service in the past</li> <li>how stakeholders want the service operated in the future</li> <li>how the user will find the service on the multi-site</li> <li>what the gaps are</li> </ul> <div> <div class="gallery full-width" id="gallery-journey-mapping"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/journey-map-hsl-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/journey-map-hsl-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/journey-map-hsl-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/journey-map-hsl-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/journey-map-hsl-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/journey-map-hsl-1440w.jpeg" width="1440" height="1920" alt="Steps of user interactions with a website connected by arrows as pictured in a sketch on a whiteboard" loading="lazy" decoding="async" /> </a> <figcaption>Journey map of the Health Sciences Library website, October 2022</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/journey-map-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/journey-map-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/journey-map-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/journey-map-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/journey-map-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/journey-map-sc-1440w.jpeg" width="1440" height="1920" alt="Steps of user interactions with a website connected by arrows as pictured in a sketch on a whiteboard" loading="lazy" decoding="async" /> </a> <figcaption>Journey map of the Special Collections website, April 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-journey-mapping', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>As an example, the Health Sciences Library website was chosen as the pilot for the sub-site on a multi-site structure, even though it had always existed as a standalone site on a separate domain. Therefore, the journey mapping activity with the Health Sciences Library’s stakeholder group focused on analyzing:</p> <ol> <li>who the main audiences of the website are</li> <li>how the online traffic moves from and to the other library websites</li> <li>which services or resources are unique to the Health Sciences library, and which are shared with other libraries</li> </ol> <p>In the activity, a consensus was reached that the sub-site requires a secondary navigation pattern to differentiate content that’s specific to the sub-site. This decision was subsequently implemented as an information architecture strategy for other sub-sites.</p> <h2>Create information architecture from the user’s angle</h2> <p>The library has a sea of resources and services—and as the product owner of the library website, my vision is for it to provide the user with <em>just the right amount</em> of information so they can quickly reach what they need. With the majority of website content woven into layers of menus, thoughtful information architecture design builds a solid foundation for the website.</p> <p>A common mistake when designing information architecture for a large organization is to create website menus that mirror the org chart, and we weren’t an exception. Each team owned a section on the website simply because it was easy to manage website content that way. However, this approach often confuses the user because they don’t know (and don’t need to know) which department owns a service or resource.</p> <p>To ensure easy discovery of information on the redesigned website, our team designed the website information architecture from the user’s angle.</p> <p>I partnered with the Content Strategist to create cards that include existing and future topics that are relevant to a specific service, then led <strong>card sorting workshops</strong> joined by individual groups of service and product owners. We invited the participants to represent their user, not their department, and organize content based on how the user interacts with their service.</p> <div> <div class="gallery full-width" id="gallery-card-sort"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/card-sort-hsl-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/card-sort-hsl-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/card-sort-hsl-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/card-sort-hsl-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/card-sort-hsl-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/card-sort-hsl-1440w.jpeg" width="1440" height="1080" alt="Three people organizing cards printed with webpage names" loading="lazy" decoding="async" /> </a> <figcaption>Card sort for the Health Sciences Library website, October 2022</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/card-sort-re-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/card-sort-re-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/card-sort-re-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/card-sort-re-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/card-sort-re-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/card-sort-re-1440w.jpeg" width="1440" height="1080" alt="Four people organizing small pieces of paper in front of a desk" loading="lazy" decoding="async" /> </a> <figcaption>Card sort for the library's research support content, October 2024</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-card-sort', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>For each service, we then analyzed the card sort results and created a draft menu in Optimal Workshop’s Treejack tool. Then, we invited the university’s students, faculty, and staff to participate in <strong>tree tests</strong> to validate our information architecture design.</p> <p>In each tree test, the participant was asked to complete tasks relevant to a service or product in a website menu. The menu they saw includes just the page titles and no other context. The Treejack tool recorded and visualized the path each participant took, time on task, and whether they reached the correct destination. We then iterated on the menu design based on the tree test results.</p> <div> <div class="gallery full-width" id="gallery-tree-test"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/tree-test-re-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/tree-test-re-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/tree-test-re-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/tree-test-re-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/tree-test-re-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1694" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/tree-test-re-1440w.jpeg" width="1440" height="1016" alt="Website information hierarchy indicating pages under the Support for researchers section" loading="lazy" decoding="async" /> </a> <figcaption>Part of the Research support menu visualized in Optimal Treejack, October 2024</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/tree-test-hsl-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/tree-test-hsl-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/tree-test-hsl-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/tree-test-hsl-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/tree-test-hsl-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1694" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/tree-test-hsl-1440w.jpeg" width="1440" height="1016" alt="Results from a website tree test with branches with different thickness indicating traffic on web pages" loading="lazy" decoding="async" /> </a> <figcaption>Results from a tree test for the Health Sciences Library sub-site menu, February 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-tree-test', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Design the user interface with stakeholders and developers</h2> <p>I like to mindfully include stakeholders and other contributors early in the design process. I often use an approach that I call <a href="https://liu.design/blog/design-studio/">design studio</a>, an interactive workshop where project stakeholders and implementors join the design process.</p> <p>Sketching is the core of each design studio session. Each participant is asked to use a Sharpie and no more than 3 index cards to sketch the feature they’d like to see in the future product. The goal is not to create pixel-perfect designs, which the setup intentionally discourages, but to convey the concept. All sketches are then taped to a whiteboard and reviewed by all participants. Everyone votes on their favorite design, then the group ends with a moderated design critique.</p> <div> <div class="gallery full-width" id="gallery-design-studio"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/design-studio-news-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/design-studio-news-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/design-studio-news-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/design-studio-news-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/design-studio-news-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/design-studio-news-1440w.jpeg" width="1440" height="960" alt="Three people sitting in front of a whiteboard with one women pointing at the whiteboard. Sketches on index cards are taped to the whiteboard." loading="lazy" decoding="async" /> </a> <figcaption>Design studio for library news & events pages, February 2023</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/design-studio-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/design-studio-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/design-studio-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/design-studio-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/design-studio-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/design-studio-sc-1440w.jpeg" width="1440" height="960" alt="Two people standing in front of two whiteboards. Sketches on index cards are taped to the whiteboards." loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the Special Collections website, April 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Throughout the Web Refresh project, the team ran 8 design studio sessions (7 in-person and 1 online via FigJam) for 7 products, including sub-sites and common modules. Service and product owners, subject matter experts, developers, and members of the leadership joined the workshops led by members of the UX team.</p> <p>For me as a designer, sketches created during the design studio sessions serve as a wishlist from each participant without being too limiting. With the analysis from the design critique, I can easily find the common ground and decide the priority.</p> <div> <div class="gallery undefined" id="gallery-prototyping"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/noodles-hsl-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/noodles-hsl-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/noodles-hsl-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/noodles-hsl-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/noodles-hsl-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/noodles-hsl-1440w.jpeg" width="1440" height="1080" alt="A Figma window showing wires connecting frames that include website prototypes" loading="lazy" decoding="async" /> </a> <figcaption>Prototype of the Health Sciences Library website, April 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-prototyping', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>For each product in Web Refresh, I first created low-fidelity prototypes based on sketches from the design studio, then assembled high-fidelity mockups using components and patterns within the design system. The team then used the mockups for stakeholder feedback and usability testing.</p> <p>When designing page templates for the content management system, such as a collection in the Special Collections catalog, I worked with the Content Strategist to pair the design prototypes with <strong>content docs</strong>, which are spreadsheets that map elements in a design prototype to the relevant data in the technical setup, such as a text field in the content management system. The content docs served as an accurate reference for developers when they customized the content management system.</p> <div> <div class="gallery full-width" id="gallery-ui"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/ui-prototype-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/ui-prototype-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/ui-prototype-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/ui-prototype-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/ui-prototype-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="2000" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/ui-prototype-sc-1440w.jpeg" width="1440" height="1200" alt="A webpage titled University of Arizona photograph collection with sections of text indicating the content in the collection" loading="lazy" decoding="async" /> </a> <figcaption>An individual collection page on the Special Collections website</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/ui-content-doc-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/ui-content-doc-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/ui-content-doc-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/ui-content-doc-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/ui-content-doc-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="2000" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/ui-content-doc-sc-1440w.jpeg" width="1440" height="1200" alt="A spreadsheet that maps website elements to details of their parameters and visual design" loading="lazy" decoding="async" /> </a> <figcaption>A content doc that specifies details of page elements, October 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-ui', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Strategize the content</h2> <div> <div class="gallery undefined" id="gallery-content-design"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/content-planning-sc-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/content-planning-sc-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/content-planning-sc-1440w.jpeg" data-pswp-width="1440" data-pswp-height="1716" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/content-planning-sc-1440w.jpeg" width="1440" height="1716" alt="Man bending down to write on a whiteboards full of sketches, writings, and sticky notes" loading="lazy" decoding="async" /> </a> <figcaption>Leading a content planning workshop for Special Collections, April 2023</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-content-design', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Consolidating 4 websites into one means a lot of content needs to be migrated, either redesigned or as-is. In partnership with the Content Strategist, I co-led several content planning workshops with relevant stakeholder groups where content was prepared for migration. We focused on reviewing content quality and identify where addition, editing, or removal is needed. Combing through the content also helped stakeholders and project implementors visualize the user journey on the website.</p> <p>Prior to the content migration, our team established a content inventory for all sub-sites. For each page in the content inventory, we document the following information:</p> <ol> <li>Page ID, title, and path</li> <li>Content ownership</li> <li>Platform or format</li> <li>Migration status</li> <li>Outstanding issues</li> </ol> <p>After the migration, we sustained the content inventory to ensure content on the refreshed website is always up-to-date. We also developed a search engine optimization (SEO) workflow that creates and records page meta descriptions with AI tools.</p> <div> <div class="gallery undefined" id="gallery-content-inventory"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/content-inventory-main-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/content-inventory-main-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/content-inventory-main-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/content-inventory-main-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/content-inventory-main-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1760" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/content-inventory-main-1440w.jpeg" width="1440" height="1056" alt="Spreadsheet with each row being a page on a website and its title, owner, and format" loading="lazy" decoding="async" /> </a> <figcaption>Content inventory for the Main Library, May 2023 (names hidden)</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-content-inventory', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Test, “a-ha!”, iterate</h2> <p>Throughout the Web Refresh project, I collaborated the UX Researcher, Content Strategist, and student assistants on my team to design and conduct more than 50 user research studies, including user interviews, usability testing, and <a href="https://liu.design/blog/talk-back-board">talk-back boards</a>. The user was part of the design process from the beginning to the end.</p> <p>During the project’s planning phase in April 2021, most libraries were still on a full shutdown due to the pandemic. To find research participants for the project, with the help from faculty members and librarians, I recruited students from several colleges on campus to join an online <a href="https://lib.arizona.edu/participant-pool" target="_blank" rel="noopener noreferrer">UX Participant Pool</a>, which is an email list that includes people who voluntarily signed up to receive invitations to UX studies.</p> <p>As of December 2025, my team still maintains the participant pool that includes 775 students, faculty, and staff affiliated with the University of Arizona. It continues to be an invaluable resource for improving the library’s physical and digital user experience.</p> <div> <div class="gallery full-width" id="gallery-tiny-cafe"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/tiny-cafe-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/tiny-cafe-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/tiny-cafe-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/tiny-cafe-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/tiny-cafe-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1799" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/tiny-cafe-1440w.jpeg" width="1440" height="1079" alt="In a bright public space, two people behind a table labeled University Libraries with baskets of snacks and laptops on top of the table" loading="lazy" decoding="async" /> </a> <figcaption>Usability testing session for the footer design, July 2024</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-hsl-mobile-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-hsl-mobile-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-hsl-mobile-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-hsl-mobile-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-hsl-mobile-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-hsl-mobile-1440w.jpeg" width="1440" height="1080" alt="Two screenshots of a Health Sciences Library page viewed on a mobile device showcasing the collapsible navigation" loading="lazy" decoding="async" /> </a> <figcaption>The Health Sciences Library sub-site's secondary navigation on mobile</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-tiny-cafe', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Gathering user feedback was often the “a-ha!” moment that made the team fail and iterate quickly. For example, the secondary navigation pattern on sub-sites, one that we envisioned during a journey mapping activity for the Health Sciences Library, turned out to be a significant source of confusion for test participants. Three iterations were created, each undergoing more usability testing, and the team ultimately implemented the design that met our success rate threshold (80% average on all tasks).</p> <h2>Launch checklist and communications</h2> <p>Immediately before launching each new product, the project team followed a consistent launch checklist. This checklist outlines the implementation and communication tasks that need to be completed, spanning from weeks leading up to the launch to weeks after the launch.</p> <p>Since many products were migrated from a previous version on a different domain, redirect planning is usually a high-priority task. The project team’s meticulous redirect mapping ensured that all previous URLs continue to work, even after content redesign and domain changes.</p> <div> <div class="gallery undefined" id="gallery-launch-checklist"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/launch-checklist-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/launch-checklist-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/launch-checklist-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/launch-checklist-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/launch-checklist-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="2000" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/launch-checklist-sc-1440w.jpeg" width="1440" height="1200" alt="A list of tasks highlighting steps to launch a website, with different teams such as UX and Dev tagged" loading="lazy" decoding="async" /> </a> <figcaption>Launch checklist for the Special Collections sub-site, March 2024</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-launch-checklist', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>In line with the Project Manager and Marketing &amp; Communications Director, who are both members of the project team, I used a strategy to over-communicate project updates to ensure our messages don’t get buried under a pile of emails. As part of my regular communications workflow, I:</p> <ul> <li>presented project updates at all-staff and department meetings</li> <li>sent agenda and handout before workshops and summary after</li> <li>shared timely design updates and UX research reports with stakeholders</li> <li>sent reminders to workshop and research participants before the event</li> <li>in addition to Figma comments, summarized design changes in the designer-developer Slack channel</li> </ul> <h2>Sustain the impact: answering “who’s in charge of what”</h2> <p>Before Web Refresh, ownership of products, services, or content was often not clear. Library staff wondered “who’s in charge,” and without a single place to find the answer, the result can be a series of questions bouncing between teams.</p> <p>Working with different library departments during Web Refresh was an opportunity for me to map the ownership of each online product to its owner. With this information, I worked with other website administrators to design a <strong>Web Support workflow</strong>, where requests related to website features, maintenance, and communications are gathered in one channel and then routed to the right place.</p> <div> <div class="gallery undefined" id="gallery-web-support"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/web-support-map-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/web-support-map-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/web-support-map-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/web-support-map-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/web-support-map-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1303" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/web-support-map-1440w.jpeg" width="1440" height="781" alt="A diagram named Web Support map that connects products to names of people and teams" loading="lazy" decoding="async" /> </a> <figcaption>Web Support map for the library website, December 2025 (names hidden)</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-web-support', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Since the implementation of Web Support in 2022, the new workflow has significantly reduced the turnaround time for website requests. Additionally, the cross-team issue tracker also helps website administrators collaborating from different departments to break silos.</p> <h2>Result</h2> <p>The Web Refresh project revamped the University of Arizona Libraries’ online presence with a new platform and toolkit. In the meantime, new workflows for design-development handoff, content strategy, and website maintenance were implemented and tested to facilitate a more efficient cross-departmental collaboration.</p> <h3>Multi-site</h3> <p>Four library websites were redesigned, built, migrated, and launched under the multi-site structure:</p> <ul> <li>Health Sciences Library (launched May 2023)</li> <li>Main Library (launched November 2023)</li> <li>Special Collections (launched April 2024)</li> <li>Data Cooperative (launched December 2025)</li> </ul> <div> <div class="gallery full-width" id="gallery-result-main"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-main-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-main-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-main-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-main-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-main-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-main-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the University of Arizona Libraries website homepage" loading="lazy" decoding="async" /> </a> <figcaption>University Libraries homepage</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-hsl-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-hsl-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-hsl-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-hsl-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-hsl-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-hsl-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the Health Sciences Library website homepage" loading="lazy" decoding="async" /> </a> <figcaption>Health Sciences Library sub-site</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-sc-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-sc-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-sc-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-sc-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-sc-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-sc-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the Special Collections website homepage" loading="lazy" decoding="async" /> </a> <figcaption>Special Collections sub-site</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-data-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-data-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-data-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-data-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-data-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-data-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the Data Cooperative section landing page" loading="lazy" decoding="async" /> </a> <figcaption>Data Cooperative site</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-result-main', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h3>Common modules</h3> <p>Each site’s content managers have access to a set of modules that present information in a more useful, accessible, and intuitive manner.</p> <div> <div class="gallery full-width" id="gallery-shared-modules"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-main-landing-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-main-landing-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-main-landing-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-main-landing-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-main-landing-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-main-landing-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the University of Arizona Libraries website's Teaching support page" loading="lazy" decoding="async" /> </a> <figcaption>Landing page of a menu section</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-main-rooms-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-main-rooms-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-main-rooms-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-main-rooms-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-main-rooms-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-main-rooms-1440w.jpeg" width="1440" height="1080" alt="Screenshot of the University of Arizona Libraries Rooms & spaces page" loading="lazy" decoding="async" /> </a> <figcaption>Rooms & spaces page</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-main-tech-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-main-tech-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-main-tech-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-main-tech-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-main-tech-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-main-tech-1440w.jpeg" width="1440" height="1080" alt="Screenshot of a technology item on the University of Arizona Libraries website" loading="lazy" decoding="async" /> </a> <figcaption>Item in the Borrow technology catalog</figcaption> </figure> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-web-refresh/result-alert-1440w.webp 1440w, https://liu.design/projects/library-web-refresh/result-alert-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-web-refresh/result-alert-1440w.jpeg 1440w, https://liu.design/projects/library-web-refresh/result-alert-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-web-refresh/result-alert-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-web-refresh/result-alert-1440w.jpeg" width="1440" height="1080" alt="Screenshot of a library webpage that includes a winter closure alert" loading="lazy" decoding="async" /> </a> <figcaption>Alert</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-shared-modules', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> Designing Future Signs for the Past 2025-12-01T00:00:00Z https://liu.design/projects/library-signage-system/ <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/stacks-after-0-1440w.webp 1440w, https://liu.design/projects/library-signage-system/stacks-after-0-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/stacks-after-0-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/stacks-after-0-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-signage-system/stacks-after-0-1440w.jpeg" width="1440" height="1920" alt="Redesigned signs on library stacks with a stepping stool placed nearby" loading="lazy" decoding="async" /> </figure> <p>In 2025, my team partnered with the Collection Services department at the University of Arizona Libraries to redesign the library’s collection signage system. We brought creative problem-solving to the interesting challenge of creating a design system for physical signs.</p> <h2>Library signs are unhelpful, if not confusing</h2> <p>As college students increasingly access information in digital formats, locating physical materials in the library has become an intimidating task. The University of Arizona Libraries, which are academic libraries at a public institution, need new signs to solve this problem.</p> <p>Before starting the project, our team interviewed undergraduate and graduate students, library staff, and student shelvers. Each shared their different perspective of using or working at the library.</p> <h3>Signs are outdated, complicated, and neglected</h3> <p>Wayfinding signs, door signs, and collection signs at the library are managed by different teams. Starting in the beginning of the project, the teams decided to focus on the collection signs.</p> <p>Many collection signs in the libraries are old, with some being suspected to have been printed shortly after the library first opened in the 1970s. Shelves and containers of different sizes are used for library materials, while there isn’t a consistent standard or workflow for producing the signs.</p> <div> <div class="gallery full-width" id="gallery-legacy-signs"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/legacy-signs-1-1440w.webp 1440w, https://liu.design/projects/library-signage-system/legacy-signs-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/legacy-signs-1-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/legacy-signs-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/legacy-signs-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/legacy-signs-1-1440w.jpeg" width="1440" height="1080" alt="Old signs of different sizes on a chest that says ASI in the library space" loading="lazy" decoding="async" /> </a> <figcaption>Legacy microfiche signs</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/legacy-signs-2-1440w.webp 1440w, https://liu.design/projects/library-signage-system/legacy-signs-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/legacy-signs-2-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/legacy-signs-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/legacy-signs-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/legacy-signs-2-1440w.jpeg" width="1440" height="1080" alt="Old signs of different sizes on a chest that says POSTERS in the library space" loading="lazy" decoding="async" /> </a> <figcaption>Legacy poster signs</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-legacy-signs', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Most books are placed on stacks that only had a sign that indicates call number ranges. This index card-sized sign is placed in a “flag” that sticks out on the top of either end of a stack, so we called it a “flag sign.” We realized the flag is too tall (about 6 ½ feet or 2m) to view from a wheelchair, making the flag sign inaccessible. Additionally, other than the call numbers, it doesn’t indicate what subject the stack holds.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/stacks-before-1440w.webp 1440w, https://liu.design/projects/library-signage-system/stacks-before-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/stacks-before-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/stacks-before-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-signage-system/stacks-before-1440w.jpeg" width="1440" height="1919" alt="Library stacks filled with books with a stepping stool placed nearby" loading="lazy" decoding="async" /><figcaption style="text-align: center;">Most library stacks only had a sign that indicates call numbers</figcaption> </figure> <h3>Not everyone knows how to use a library</h3> <p>Many participants the team interviewed don’t know how to use the library. Out of the ten undergraduate and graduate students we interviewed—not including student shelvers—only three have checked out a book from the library.</p> <p>The University of Arizona Libraries uses the Library of Congress Classification system. Only one participant knew the term “call numbers,” while many others think the numbers are simply dates. All participants think call numbers are confusing since they don’t explicitly say the subject.</p> <h3>Collections shift often</h3> <p>There are frequent changes in space and constructions in the University of Arizona Libraries that causes collections to shift. Each time the books are moved, signage on the stacks needs to be updated too. This adds burden to the library’s Print &amp; Collaborative Collection Initiatives Unit, the team that manages the stacks.</p> <h3>Cost awareness</h3> <p>In the planning phase of this project, I spoke with various stakeholders at the library including the leadership. Budget was a common theme for these conversations, especially when people picture any collection shifts in a bigger scope.</p> <h2>Goal</h2> <p>We want to design signs for regular stacks, which include the majority of books at the library, and the library’s curated collections.</p> <p>We want a signage system that:</p> <ol> <li>makes browsing more intuitive</li> <li>makes it easier to update collection signage</li> <li>is cost efficient</li> </ol> <p>To meet our budget limitations for the signage system, I also designed with the following restrictions:</p> <ol> <li>Use common office supplies.</li> <li>For installation, use easily accessible tools instead of specialized equipment.</li> </ol> <h2>The design</h2> <div> <div class="gallery full-width" id="gallery-design"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/breakdown-overview-1440w.webp 1440w, https://liu.design/projects/library-signage-system/breakdown-overview-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/breakdown-overview-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/breakdown-overview-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/breakdown-overview-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1350" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/breakdown-overview-1440w.jpeg" width="1440" height="810" alt="Four templates for the signage system: two index card-sized flag signs and two letter-sized eye-level signs" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/breakdown-flag-1440w.webp 1440w, https://liu.design/projects/library-signage-system/breakdown-flag-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/breakdown-flag-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/breakdown-flag-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/breakdown-flag-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1350" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/breakdown-flag-1440w.jpeg" width="1440" height="810" alt="Anatomy of two flag signs that include the call number range, curated collection name, and color-coded frames to distinguish regular stacks and curated collections" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/breakdown-regular-1440w.webp 1440w, https://liu.design/projects/library-signage-system/breakdown-regular-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/breakdown-regular-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/breakdown-regular-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/breakdown-regular-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1350" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/breakdown-regular-1440w.jpeg" width="1440" height="810" alt="Anatomy of the eye-level signs for regular stacks that include the call number parts, Library of Congress class, links to the library website, and a red frame" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/breakdown-collection-1440w.webp 1440w, https://liu.design/projects/library-signage-system/breakdown-collection-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/breakdown-collection-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/breakdown-collection-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/breakdown-collection-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1350" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/breakdown-collection-1440w.jpeg" width="1440" height="810" alt="Anatomy of the eye-level signs for curated collections that include the call number parts, curated collection name, links to the library website, and a blue frame" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>I created two types of signs. Both signs are installed on both ends of each stack (“stack-ends”):</p> <ol> <li><strong>Eye-level signs</strong>: printed on US letter-size papers (8.5 × 11 inch or 216 × 279mm) and installed at 48 inches or 1.2m for the lower edge.</li> <li><strong>Flag signs</strong>: printed on index card papers (3 × 5 inches or 76 × 127mm) and inserted in the card holders near the top of the stack-end.</li> </ol> <h2>Editing &amp; printing</h2> <p>The Print &amp; Collaborative Collection Initiatives Unit team that manages the stacks has been editing existing signs in Microsoft Word and printing them using a black &amp; white printer. To minimize disruptions to their day-to-day work and avoid introducing new tools, I created a new but familiar workflow for printing the signs.</p> <p>I created prototypes for the templates using Figma but finalized them in Google Docs. This allows Collection Services members to edit call numbers, subjects, and collection names in a tool they know well.</p> <div> <div class="gallery undefined" id="gallery-google-doc"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/google-doc-1440w.webp 1440w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/google-doc-1440w.jpeg 1440w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/google-doc-1440w.jpeg" data-pswp-width="1440" data-pswp-height="960" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/google-doc-1440w.jpeg" width="1440" height="960" alt="Sign template in a Google Docs editor" loading="lazy" decoding="async" /> </a> <figcaption>Editing the sign in Google Docs</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-google-doc', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>I created a two-step process for printing the signs. My team, the UX team at the library, have access to a color printer, so we batch-print the color frames. Then, we hand off to the Print &amp; Collaborative Collection Initiatives team so they can layer the actual content on top of the frame using a black and white printer. This reduced the stress of adopting a new setup, and printing less with a color printer helped save cost.</p> <div> <div class="gallery full-width" id="gallery-print"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/print-1-1440w.webp 1440w, https://liu.design/projects/library-signage-system/print-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/print-1-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/print-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/print-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/print-1-1440w.jpeg" width="1440" height="960" alt="Printed frame and frame with content for a language and literature stack's eye-level sign" loading="lazy" decoding="async" /> </a> <figcaption>Printed eye-level sign and frame for regular stacks</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/print-2-1440w.webp 1440w, https://liu.design/projects/library-signage-system/print-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/print-2-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/print-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/print-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/print-2-1440w.jpeg" width="1440" height="960" alt="Printed frame and frame with content for a Children's Literature collection eye-level sign" loading="lazy" decoding="async" /> </a> <figcaption>Printed eye-level sign and frame for curated collections</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/print-3-1440w.webp 1440w, https://liu.design/projects/library-signage-system/print-3-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/print-3-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/print-3-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/print-3-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/print-3-1440w.jpeg" width="1440" height="960" alt="Frame and frame with content printed on an index card template for a language and literature stack's flag sign" loading="lazy" decoding="async" /> </a> <figcaption>Printed flag signs and frames for regular stacks</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/print-4-1440w.webp 1440w, https://liu.design/projects/library-signage-system/print-4-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/print-4-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/print-4-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/print-4-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/print-4-1440w.jpeg" width="1440" height="960" alt="Frame and frame with content printed on an index card template for a Children's Literature collection flag sign" loading="lazy" decoding="async" /> </a> <figcaption>Printed flag signs and frames for curated collections</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-print', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>The flag signs are printed in groups of three using the Avery #5388 index card template. This template has perforated lines that makes separating easy.</p> <h2>Installing</h2> <p>I consulted with the university’s sign shop staff and learned about the accessibility requirements for the types of signs I designed. I learned that the eye-level sign needs to be installed at 48 inches or 1.2m for its lower edge. Also, to my surprise, the sign shop doesn’t have a fast and easy way to install the eye-level signs—they recommended using a measuring tape.</p> <p>Since we need to install hundreds of signs during a collection shift, we need to find a way to speed up the process. I worked with Arshia Amin, our student assistant, to design a cost-efficient tool that serves as mounting guide. We combined a mailing tube that measures 48 inches long with a 3D-printed piece that sits on one end of the tool.</p> <div> <div class="gallery full-width" id="gallery-mounting-guide"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/mounting-guide-1-1440w.webp 1440w, https://liu.design/projects/library-signage-system/mounting-guide-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/mounting-guide-1-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/mounting-guide-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/mounting-guide-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3199" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/mounting-guide-1-1440w.jpeg" width="1440" height="1919" alt="The mounting guide tool set near a library shelf" loading="lazy" decoding="async" /> </a> <figcaption>Custom-designed mounting guide tool</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/mounting-guide-2-1440w.webp 1440w, https://liu.design/projects/library-signage-system/mounting-guide-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/mounting-guide-2-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/mounting-guide-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/mounting-guide-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/mounting-guide-2-1440w.jpeg" width="1440" height="1920" alt="A man using the mounting guide tool to install a collection sign with books in the background" loading="lazy" decoding="async" /> </a> <figcaption>Lining up a sign using the guide tool</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-mounting-guide', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>To install an eye-level sign, first put double-sided on all four corners of a printed sign. Then, line up the mailing tube with the edge of a stack-end. Finally, line up the sign with the corner on the 3D-printed piece, and press firmly to attach the sign.</p> <h2>Result</h2> <figure class="full-width"> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/stacks-after-1-1440w.webp 1440w, https://liu.design/projects/library-signage-system/stacks-after-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/stacks-after-1-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/stacks-after-1-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-signage-system/stacks-after-1-2400w.jpeg" width="2400" height="1799" alt="Library stacks full of books with both new signs installed" loading="lazy" decoding="async" /><figcaption style="text-align: center;">Redesigned signs on the Education stacks</figcaption> </figure> <div> <div class="gallery full-width" id="gallery-stacks-after"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/stacks-after-2-1440w.webp 1440w, https://liu.design/projects/library-signage-system/stacks-after-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/stacks-after-2-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/stacks-after-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/stacks-after-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/stacks-after-2-1440w.jpeg" width="1440" height="1920" alt="Student walking by the Education stacks with the redesigned signs installed" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/stacks-after-3-1440w.webp 1440w, https://liu.design/projects/library-signage-system/stacks-after-3-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/stacks-after-3-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/stacks-after-3-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-signage-system/stacks-after-3-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-signage-system/stacks-after-3-1440w.jpeg" width="1440" height="1920" alt="Children's Literature collection stacks with the redesigned signs installed" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-stacks-after', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>My role</h2> <p>Throughout this project, I:</p> <ul> <li>designed the signage templates using Figma and Google Docs</li> <li>created the printing workflow and documentation</li> <li>partnered with library staff to interview library users and staff</li> <li>partnered with library staff to test prototypes through usability testing</li> <li>partnered with UX Student Assistants to create the mounting guide tool</li> <li>partnered with UX Student Assistants to install signs for the pilot project</li> </ul> <figure class="full-width"> <source type="image/webp" srcset="https://liu.design/projects/library-signage-system/printed-signs-1440w.webp 1440w, https://liu.design/projects/library-signage-system/printed-signs-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-signage-system/printed-signs-1440w.jpeg 1440w, https://liu.design/projects/library-signage-system/printed-signs-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-signage-system/printed-signs-2400w.jpeg" width="2400" height="1600" alt="Printed library collection signs placed on a large surface" loading="lazy" decoding="async" /> </figure> UX Manager’s 6 Tips to Make Your Portfolio Stand Out 2025-01-03T00:00:00Z https://liu.design/blog/portfolio-tips/ <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/portfolio-tips/portfolio-tips-1440w.webp 1440w, https://liu.design/blog/portfolio-tips/portfolio-tips-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/portfolio-tips/portfolio-tips-1440w.jpeg 1440w, https://liu.design/blog/portfolio-tips/portfolio-tips-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/blog/portfolio-tips/portfolio-tips-1440w.jpeg" width="1440" height="960" alt="Illustration of a browser window and arrows" loading="lazy" decoding="async" /> </figure> <p>Over the last five years, I mentored twelve students and early-career UX designers. As they prepared their professional portfolio for the job search, many of them asked the same questions:</p> <ul> <li>How many projects should I include in my portfolio?</li> <li>What if I only have class/side projects?</li> <li>What tool should I use to build my website?</li> </ul> <p>I had some answers as I reviewed candidates’ portfolios when hiring for positions on my team. Here are my six quick tips for your work-in-progress UX portfolio:</p> <h2>Tip #1: Engage your audience in 10 seconds</h2> <p>As UX practitioners, one of the first things we learned is to design with our target audience in mind. <strong>When creating a UX portfolio, our primary audience should be potential employers who only have ten seconds.</strong> That’s how much time they might spend on each candidate’s portfolio when reviewing hundreds of applications.</p> <p>However, don’t feel discouraged! The hiring team coming to your portfolio already means success. Now is a good time to use your UX wisdom to make sure your site visitors can find the <strong>who, what, and why</strong> in 10 seconds:</p> <ul> <li>Who you are</li> <li>What you’ve achieved in the past</li> <li>Why you’re a good fit for this job</li> </ul> <p>Your site should have simple and clear navigation that instantly takes the visitor to a page with all your projects and another page about yourself. Your hobbies, such as side projects, illustrations, and photographs, deserve a place on your website, but they shouldn’t play a leading role. They can wait until job hunting is no longer your priority.</p> <p>Next, take some time to name the case studies that you’re listing on the projects page. In most cases, your portfolio <em>is</em> a one-size-fits-all thing for all jobs you’re applying for, which means most potential employers come to your website with no context about the products you designed before. So, <strong>you should avoid naming your case study after the product</strong>. Instead, use the motivation, purpose, or outcome of the project.</p> <p>For example, imagine that I redesigned a library space management platform called CalendLib and the goal was to improve the visitor’s experience of reserving a library meeting room. It’d be a missed opportunity if I called the project “CalendLib,” because 9 out of 10 people reading my portfolio wouldn’t know what that is, so they wouldn’t even click on the project. Instead, I’d call it “Library room reservation system” or “Redesigning the library room reservation experience.”</p> <h2>Tip #2: You might not need a fancy setup</h2> <p>You may have heard this: your portfolio is the first project people will see. Yes, you should put some thought into designing your portfolio, but don’t overthink it.</p> <p>Before trying to throw something fancy on your website, ask yourself: does it answer the <strong>who, what, and why</strong>? Again, they are:</p> <ul> <li>Who you are</li> <li>What you’ve achieved in the past</li> <li>Why you’re a good fit for this job</li> </ul> <p>Let’s say you want to design a cool interaction on your portfolio website that hides and reveals some of its menu items. If you are applying for front-end engineer or animation designer positions, great! That shows some relevant skills. But if you’re applying for UX researcher positions, it probably won’t help much.</p> <div> <div class="gallery undefined" id="gallery-portfolio-gallery"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/portfolio-tips/notion-portfolio-1440w.webp 1440w, https://liu.design/blog/portfolio-tips/notion-portfolio-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/portfolio-tips/notion-portfolio-1440w.jpeg 1440w, https://liu.design/blog/portfolio-tips/notion-portfolio-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/portfolio-tips/notion-portfolio-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1675" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/portfolio-tips/notion-portfolio-1440w.jpeg" width="1440" height="1005" alt="Screenshot of a UX portfolio built on Notion" loading="lazy" decoding="async" /> </a> <figcaption>Portfolio built with Notion. Credit: Riley Zuckert</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-portfolio-gallery', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>For most UX jobs, a simple blog setup that lets you add images and text should work just fine. If you only have limited time, spend more of it crafting your case studies instead of building a website from scratch. Here are two platforms I recommended to my mentees:</p> <ol> <li><a href="https://www.notion.com/" target="_blank" rel="noopener noreferrer">Notion</a>: document sharing tool that lets you publish pages on the internet. You have the freedom to add images, videos, code, spreadsheets, and even embeds on any page. Free Plus plan for students.</li> <li><a href="https://cargo.site/" target="_blank" rel="noopener noreferrer">Cargo</a>: try this site builder if you want more customization options. It has a simple WYSIWYG (what you see is what you get) editor that has plenty of typesetting and styling options. You can also build your own site structure and add a custom domain. Subscribe to their <a href="https://blog.cargo.site/" target="_blank" rel="noopener noreferrer">weekly newsletter</a> to get inspirations.</li> </ol> <h2>Tip #3: Focus on quality, not quantity</h2> <p>How many projects should you include? It depends on what jobs you’re applying for, but definitely not the more, the merrier.</p> <p>Remember, your portfolio needs to answer why you’re a good fit for this job. <strong>If you’re applying for more than one type of job, consider including at least one project to represent each.</strong> For example, if you’re applying for both product designer and UX researcher positions, you may want to have one case study about applying a design system and another about conducting user interviews to understand pain points.</p> <p><strong>Class projects are OK to include in your portfolio.</strong> Some mentees didn’t feel confident doing so because class projects are often based on an imaginary scenario and not actually implemented. However, for those who just got started in UX, this might be the only option. Class projects aren’t necessarily weak ones, as they’re often good evidence of your collaboration skills and attention to detail. More on this next.</p> <h2>Tip #4: Tell a story of where things went wrong</h2> <p>When writing about a project, make sure you’re telling a good story — and it doesn’t always need a happy ending. Let’s admit it: UX work is messy. There’s always something going wrong, and less than one in ten projects comes out exactly as we expected. However, too often I’ve seen case studies where everything went like strawberry cotton candy from start to finish. In these case studies, the stakeholder never asked difficult questions, everyone did their job right, and the design had no issues whatsoever when tested with the user.</p> <p>That’s a shame because <strong>the skipped parts are often the most interesting ones</strong>. When reading case studies in candidates’ portfolios, I always find myself enjoying the part where designers tried to explain mysteries. Why was a project challenging, and how come no one else did it right? If a project failed, why did it fail, and how would the designer handle it differently? And if the designer weren’t part of it from start to finish, what previous mistakes did they correct, and what happened after they left?</p> <p>Have the courage to show your audience what’s under the rug — if the client or employer lets you.</p> <h2>Tip #5: Show your work as part of a team</h2> <p>UX work is never done alone. We’re always depending on someone: may it be the stakeholder, user, engineer, or someone in the leadership. Therefore, <strong>when hiring for a UX position, I always look for signs of collaboration in the candidates’ portfolios</strong>. These are good evidence that they could fit a UX position.</p> <p>I read some case studies in which one person appears to have done all the work. Granted that it’s possible to have UX teams of one, the person would still need to seek support or approval from someone who tasked them with the project, and in the meantime, validate the ideas with the users.</p> <p>Communications, negotiation, decision-making, and compromises are always happening, and you should document them in your case study. Also <strong>make sure to clearly indicate your roles for each project</strong>.</p> <p>So, what if you’re writing about a class project? Collaboration can still happen! If you assigned tasks to others, kept track of deadlines, or presented your deliverables, you can focus on your project management skills. If you wrote the code or partnered with someone who did it, focus on the design-development handoff and explain how you went back and forth to get the details right.</p> <h2>Tip #6: Zoom in on your wireframes</h2> <p>When writing a case study, it may be tempting to throw a giant Figma embed or screenshot that shows lots of components, frames, and prototype spaghetti. Some people think it’s a cool way to show off their design skills. On the other side, as the reader of the case studies, I often feel overwhelmed and don’t know where to look.</p> <p>As the storyteller, we can and should narrate our design by zooming in on where the reader should pay attention. Maybe it’s a button label that went through multiple iterations, an input field that checks all boxes for accessibility, a search bar that did well in usability testing, or a set of icons that blends into the design system. Try to extract small details from your big Figma file and tell the story behind them. No matter how big or small your design is, there’s always an opportunity to show your attention to detail.</p> <div> <div class="gallery full-width" id="gallery-wireframes"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/portfolio-tips/figma-spaghetti-1440w.webp 1440w, https://liu.design/blog/portfolio-tips/figma-spaghetti-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/portfolio-tips/figma-spaghetti-1440w.jpeg 1440w, https://liu.design/blog/portfolio-tips/figma-spaghetti-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/portfolio-tips/figma-spaghetti-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1613" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/portfolio-tips/figma-spaghetti-1440w.jpeg" width="1440" height="967" alt="Screenshot showing many lines connecting frames in a Figma file" loading="lazy" decoding="async" /> </a> <figcaption>Don’t do this: show your spider web Figma spaghetti (screenshot from my work)</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-1440w.webp 1440w, https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-1440w.jpeg 1440w, https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1613" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/portfolio-tips/zoomed-in-screenshots-1440w.jpeg" width="1440" height="967" alt="Screenshot of a UX portfolio with UI elements that are clear and relevant to the context" loading="lazy" decoding="async" /> </a> <figcaption>Do this: zoom into UI elements that are relevant to the context. Credit: Rachel Schmidt</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-wireframes', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Now that you have some good stories on your portfolio website, <strong>you should still create a slide deck when presenting at a job interview</strong>. A slide deck shows that you have presented to stakeholders in a professional setup and that you care about the job. It also helps you structure your presentation better than a portfolio article.</p> <h2>Wrapping up</h2> <p>Best of luck putting together your portfolio! If you need more specific advice, check out <a href="https://uxua.arizona.edu/mentors" target="_blank" rel="noopener noreferrer">UX@UA’s free mentorship program</a>.</p> Bring Teams Together With a Design Studio 2024-06-05T00:00:00Z https://liu.design/blog/design-studio/ <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/blog/design-studio/design-studio-1440w.jpeg" width="1440" height="960" alt="Illustration of two hands putting sticky dots on a wireframe" loading="lazy" decoding="async" /> </figure> <p>Imagine presenting a prototype you spent two weeks designing to your stakeholders. You tried to address as many pain points as possible based on your interview with 20 users. You drop your mic on the last screen and expect a standing ovation, only to hear comments like the margins are off, buttons are misplaced, and key features X and Y are missing. We’ve all been there.</p> <p>As UX professionals, we learn what our users want and reflect it in the design. But stakeholders, who may have different goals, are often looped in once a draft prototype is ready, which causes a gap in expectation and unpleasant surprises. The question is, how might we improve the design process — so user needs are aligned with organizational priorities, and stakeholders become your allies?</p> <p>In 2019, I started experimenting with a new workshop format that aims to include the stakeholders early in the design process. I named it “design studio.” Over the years, I used it with seven project teams at the University of Arizona Libraries, and it delivered the expectation every time.</p> <p>The workshop is so simple that anyone can run with their own teams. Here’s how.</p> <h2>What’s a design studio?</h2> <div> <div class="gallery full-width" id="gallery-design-studio-sc"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-sc-1-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-sc-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-sc-1-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-sc-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-sc-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-sc-1-1440w.jpeg" width="1440" height="960" alt="Four people standing in front of whiteboards that have sketches on them" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona Libraries Special Collections, April 2023</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-sc-2-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-sc-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-sc-2-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-sc-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-sc-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-sc-2-1440w.jpeg" width="1440" height="960" alt="Two people discussing about sketches on whiteboards" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio-sc', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Design studio is a lightweight workshop for understanding design goals and mindfully including stakeholders in the design process. The outcome is a list of goals that informs the project requirements and product design.</p> <p>At the core of the workshop is a fully analog sketching session. This structured activity encourages project contributors to share their vision and empathize with the users. The rest of the workshop has several interactive activities to help build trust between the implementors and stakeholders.</p> <h2>Who should participate?</h2> <p>A design studio is good for groups of all sizes and doesn’t require the participants to have any previous design experience. That said, I had better success running the workshop with groups that include:</p> <ul> <li>1-3 key stakeholders: those who make important decisions, such as product owners, sponsors, and department heads.</li> <li>2-12 collaborators: members of the project team, such as UX researchers, product designers, developers, and content providers. You might also want to invite customer service professionals who have direct experience working with your users, or even the power users themselves.</li> </ul> <p>Depending on your group size, plan on having 1-2 facilitators who are familiar with the steps of the workshop.</p> <h2>What do I need?</h2> <div> <div class="gallery undefined" id="gallery-supplies"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/supplies-1440w.webp 1440w, https://liu.design/blog/design-studio/supplies-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/supplies-1440w.jpeg 1440w, https://liu.design/blog/design-studio/supplies-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/supplies-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/supplies-1440w.jpeg" width="1440" height="960" alt="A roll of tape, a sharpie, a sheet of dot stickers, and two index cards" loading="lazy" decoding="async" /> </a> <figcaption>Supplies for a design studio</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-supplies', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>To run a design studio in person, all you need are basic office supplies, including:</p> <ul> <li>Index cards: the ideal size is 4x6 inch (about 10x15 cm). Prepare 2-3 per participant.</li> <li>Markers: Sharpies or thick pens. Prepare 1 per participant.</li> <li>A roll of tape</li> <li>Stickers (optional): small dot stickers are the best. Prepare 3-6 per participant.</li> </ul> <p>In addition, book a space with a whiteboard, wall, window, or another large vertical surface where you can put tape on.</p> <h2>Steps</h2> <p>The design studio is a 5-step process that takes about an hour. Everyone, including the facilitator, should participate in all steps. Participants should be seated around tables. Consider breaking bigger groups down into several small ones. If possible, provide refreshments.</p> <h3>Step 1: intro</h3> <p>The facilitator introduces the workshop and shares context of the project. Participants go around the table for intros as the facilitator hands out workshop supplies.</p> <h3>Step 2: sketch</h3> <div> <div class="gallery full-width" id="gallery-design-studio-sketch"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-news-1-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-news-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-news-1-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-news-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-news-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-news-1-1440w.jpeg" width="1440" height="960" alt="A woman sketching on index cards" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona Libraries News page, February 2023</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-homepage-1-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-homepage-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-homepage-1-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-homepage-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-homepage-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-homepage-1-1440w.jpeg" width="1440" height="960" alt="A group of people sitting around a table sketching on index cards" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona library homepage, May 2024</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio-sketch', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Each participant spends 5-7 minutes to sketch something they’d like to see in the final design. The scope doesn’t matter as long the idea fits on an index card. For example, they can draw something as small as a button and as big as the whole page. They can also choose to jot down their idea on the index card instead of sketching.</p> <p>Keep in mind — the index card is a rather small canvas for a Sharpie. This is intentional as it forces the participant to focus on the features that matter the most to them. Follow these guidelines:</p> <ul> <li>The key stakeholders can choose to have three index cards while others have two.</li> <li>Draw or write down only one idea per index card.</li> <li>Use only one side of the card.</li> <li>Do not tape two cards together to make a bigger card.</li> </ul> <p>Once done, ask the participants to tape their sketches to the whiteboard.</p> <h3>Step 3: gallery walk</h3> <div> <div class="gallery full-width" id="gallery-design-studio-gallery-walk"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-news-2-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-news-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-news-2-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-news-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-news-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-news-2-1440w.jpeg" width="1440" height="960" alt="Four people discussing sketches on whiteboards" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona Libraries News page, February 2023</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-homepage-2-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-homepage-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-homepage-2-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-homepage-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-homepage-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-homepage-2-1440w.jpeg" width="1440" height="960" alt="Several people viewing sketches on whiteboards" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona library homepage, May 2024</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio-gallery-walk', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Once everyone’s done sketching, participants walk closer to the whiteboard to review others’ work. They can put dot stickers on sketches they like, agree with, or are interested in.</p> <h3>Step 4: share</h3> <p>Participants take turns to share what they sketched with the group. Others can ask clarifying questions. The facilitator takes notes of features or patterns they noticed.</p> <p>As the participants continue to share their sketches, the facilitator should call out any repeated designs. This helps reinforce the shared goal and build consensus for the group.</p> <h3>Step 5: recap</h3> <div> <div class="gallery full-width" id="gallery-design-studio-hours"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-hours-1-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-hours-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-hours-1-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-hours-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-hours-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-hours-1-1440w.jpeg" width="1440" height="1080" alt="Five people talking in a room that has a monitor showing a library website and a whiteboard with sketches" loading="lazy" decoding="async" /> </a> <figcaption>Design studio for the University of Arizona library hours, July 2019</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/design-studio-hours-2-1440w.webp 1440w, https://liu.design/blog/design-studio/design-studio-hours-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/design-studio-hours-2-1440w.jpeg 1440w, https://liu.design/blog/design-studio/design-studio-hours-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/design-studio-hours-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/design-studio-hours-2-1440w.jpeg" width="1440" height="1080" alt="Sketches and notes on a whiteboard" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio-hours', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Once every participant has done sharing, the facilitator starts a recap. Describe designs that received many votes, had the most agreement, or led to an active discussion. At the end, put these features or patterns in a “wish list.”</p> <h2>Before and after the design studio</h2> <p>As the facilitator, it’s a good idea to come to the design studio prepared. The right amount of research will help you narrow down to the right scope for the workshop. Before the design studio, consider:</p> <ul> <li>Conducting user research. Interview the users to understand their journey, and run usability testing to probe what is and isn’t working.</li> <li>Talking to the stakeholders. Know their roles and have an initial understanding of their goals, needs, pain points, and capacity.</li> </ul> <p>Once you wrap up the design studio, make sure you share findings, including whiteboard snapshots and the final “wish list,” with the project team. Then use the “wish list” as a starting point for drafting project requirements and wireframes.</p> <h2>Can I do it online?</h2> <p>Yes! The design studio is flexible enough to be tweaked for fully-remote teams. All you need is an online whiteboard tool — I use <a href="https://www.figma.com/figjam/" target="_blank" rel="noopener noreferrer">Figjam</a> but other online whiteboards, such as <a href="https://miro.com/" target="_blank" rel="noopener noreferrer">Miro</a> and <a href="https://apps.apple.com/us/app/freeform/id6443742539" target="_blank" rel="noopener noreferrer">Freeform</a>, work equally well.</p> <div> <div class="gallery undefined" id="gallery-remote-workshop"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/design-studio/remote-workshop-1440w.webp 1440w, https://liu.design/blog/design-studio/remote-workshop-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/design-studio/remote-workshop-1440w.jpeg 1440w, https://liu.design/blog/design-studio/remote-workshop-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/design-studio/remote-workshop-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/design-studio/remote-workshop-1440w.jpeg" width="1440" height="960" alt="Screenshot of an online whiteboard tool that has photos of sketches and sticky notes" loading="lazy" decoding="async" /> </a> <figcaption>Online design studio for the University of Arizona Libraries' tech lending project, April 2022</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-remote-workshop', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>While the whiteboard is virtual, the sketching activity stays analog. As the facilitator, you would still ask the participants to sketch on physical index cards (or index card-sized paper). Once complete, each participant takes photos of their sketches and uploads them to the online whiteboard. All the other steps remain the same.</p> <h2>Your turn</h2> <p>I’d love to hear how your design studio goes! Feel free to get in touch via <a href="mailto:bob@liu.design">email</a> or on <a href="https://mastodon.design/@bobliu" target="_blank" rel="noopener noreferrer">Mastodon</a> and share your experience.</p> What the Board Said 2024-04-23T00:00:00Z https://liu.design/blog/talk-back-board/ <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/tin-can-whiteboards-1440w.webp 1440w, https://liu.design/blog/talk-back-board/tin-can-whiteboards-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/tin-can-whiteboards-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/tin-can-whiteboards-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/blog/talk-back-board/tin-can-whiteboards-1440w.jpeg" width="1440" height="960" alt="Illustration of two whiteboards connected by a tin can telephone" loading="lazy" decoding="async" /> </figure> <p>My team at the University of Arizona Libraries uses whiteboards to capture feedback from library users. We leave questions or prompts on the whiteboard and invite library visitors to respond with sticky notes. We call them “talk-back boards.”</p> <p>Talk-back boards are often displayed in museums or libraries to capture free-form feedback as a part of visitor study projects. Museums also use them for interactive programs where visitors can participate.</p> <p>We set up the first talk-back board at our library in 2018. Over the years, more than 40 boards were displayed with topics including website feedback, book recommendations, space evaluation, and creative projects. We captured responses for 37 boards in the library’s <a href="https://lib.arizona.edu/research-repo" target="_blank" rel="noopener noreferrer">UX Research Repo</a>.</p> <p>Here’s a recap of four of my favorite talk-back boards.</p> <h2>February 2024: “What brings you to the library today?”</h2> <div> <div class="gallery undefined" id="gallery-board-visit"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/board-visit-1440w.webp 1440w, https://liu.design/blog/talk-back-board/board-visit-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/board-visit-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/board-visit-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/board-visit-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/board-visit-1440w.jpeg" width="1440" height="1920" alt="A whiteboard in an open space covered by pink and red sticky notes" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-board-visit', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Our team want to know what motivates people to visit the library in person, so we often post the same question in different library locations. This board was set up during the week of Valentine’s Day in 2024, and we prepared pink, orange, and red sticky notes to celebrate.</p> <p>In the instructions on the board, we asked the participants to add new answer with a sticky note and vote on existing answers with a smaller sticker. The same instructions were included for most talk-back boards we set up.</p> <blockquote> <p>Answers that received more than 3 votes:</p> <ol> <li>“gaslight myself to think that I’m studious” (+6)</li> <li>“bc then I can get a silly little coffee :)” (+5)</li> <li>“To cry” (+5)</li> <li>“TO LOCK TF IN!” (+4)</li> <li>“To be Studious” (+3)</li> <li>“To take a piss” (+3)</li> <li>“coding HW :( WOMENINSTEM” (+3)</li> </ol> </blockquote> <p>327 sticky notes were captured in 8 days. We analyzed each answer and extracted the following themes:</p> <ol> <li>Studying/working (100 responses)</li> <li>Relationship (37 responses)</li> <li>Restroom (11 responses)</li> <li>Library technology (8 responses)</li> <li>Borrowing/returning books (7 responses)</li> <li>Buying coffee (7 responses)</li> <li>View/scenery (6 responses)</li> <li>Bad weather (4 responses)</li> <li>Reminiscence (4 responses)</li> </ol> <p>In addition to the common reasons of visiting the library such as studying or using the restroom, we were glad to see answers mentioning library technology as a result of the Libraries’ revamped and expanded <a href="https://lib.arizona.edu/borrow/tech" target="_blank" rel="noopener noreferrer">tech lending program</a>. Interestingly, the Valentine’s color scheme may have led the answers in a certain way, which is why “relationship” became the second most popular theme.</p> <p>Our student assistant, Linda Lopez, also asked ChatGPT to analyze the answers. When doing so, she found that it could not recognize terms like “lock in” and “grind” as Gen Z slang for studying. She then manually edited some of the data before running the analysis in ChatGPT again, and here are the themes she got:</p> <ol> <li>Study purposes</li> <li>Specific academic work</li> <li>Personal activities</li> <li>Specific tasks</li> <li>Humor</li> <li>Interpersonal connections</li> <li>Emotional state</li> <li>Physical needs</li> <li>Miscellaneous</li> </ol> <h2>August 2023: “Write a monsoon haiku!”</h2> <div> <div class="gallery undefined" id="gallery-board-haiku"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/board-haiku-1440w.webp 1440w, https://liu.design/blog/talk-back-board/board-haiku-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/board-haiku-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/board-haiku-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/board-haiku-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3199" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/board-haiku-1440w.jpeg" width="1440" height="1919" alt="A whiteboard in an open space covered by white and yellow sticky notes" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-board-haiku', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>In June and July, people in Tucson anxiously wait for the monsoon rains to bring the cure for the unbearable Arizona heat. That’s also the time of the year when we set up this recurring creative project where library visitors are invited to write a haiku, which are 3-line poems in the following format:</p> <ul> <li>First line: 5 syllables</li> <li>Second line: 7 syllables</li> <li>Third line: 5 syllables</li> </ul> <p>Here are four most popular haikus of the 2023 monsoon season:</p> <blockquote> <p><em>11 votes:</em><br /> I like to eat hail<br /> oh it is very yomy<br /> Thank you so much</p> </blockquote> <blockquote> <p><em>10 votes:</em><br /> Why so late Monsoon?<br /> Are you angry at humans<br /> Since we broke the earth?</p> </blockquote> <blockquote> <p><em>7 votes:</em><br /> Welcome monsoon, hi!<br /> We are so happy you’re here.<br /> Thanks for bringing life.</p> </blockquote> <blockquote> <p><em>7 votes:</em><br /> metamorphic rocks<br /> foliated and shiny<br /> with or without rain</p> </blockquote> <p>When capturing answers on this board, our friend Kevin O’Dea, Platforms Engineer at the Libraries, helped us develop a workflow to quickly transcribe text from photos. He created a Photoshop script that detects sticky notes, crops them out, and exports them to individual images. He then used OCR tools to extract text from the images.</p> <h2>December 2021: “What stories about social justice and anti-racism matter to you?”</h2> <div> <div class="gallery undefined" id="gallery-board-social-justice"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/board-social-justice-1440w.webp 1440w, https://liu.design/blog/talk-back-board/board-social-justice-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/board-social-justice-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/board-social-justice-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/board-social-justice-2400w.jpeg" data-pswp-width="2400" data-pswp-height="3200" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/board-social-justice-1440w.jpeg" width="1440" height="1920" alt="A whiteboard with a question: What stories about social justice and anti-racism matter to you? and answers on sticky notes" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-board-social-justice', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>In 2021, the Main Library unveiled the new <em>Books that Matter</em> collection that focuses on social justice and anti-racism. We set up this board to learn what books students think should be added to this collection.</p> <p>Here are seven answers with the most votes:</p> <ol> <li>“JUSTICE 4 PALESTINE” (+7)</li> <li>“gender pay gap” (+5)</li> <li>“criminal justice system” (+4)</li> <li>“how to identify &amp; disrupt white supremacy” (+3)</li> <li>“non-stereotypical immigrant stories” (+3)</li> <li>“Maternal health” (+3)</li> <li>“Anti-capitalist stories” (+3)</li> </ol> <h2>September 2021: “How much did you spend on textbooks &amp; homework access codes this semester?”</h2> <div> <div class="gallery full-width" id="gallery-interaction-textbook"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/interaction-textbook-1-1440w.webp 1440w, https://liu.design/blog/talk-back-board/interaction-textbook-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/interaction-textbook-1-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/interaction-textbook-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/interaction-textbook-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/interaction-textbook-1-1440w.jpeg" width="1440" height="1080" alt="A student handing a marker to another student to answer questions on a whiteboard" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/interaction-textbook-2-1440w.webp 1440w, https://liu.design/blog/talk-back-board/interaction-textbook-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/interaction-textbook-2-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/interaction-textbook-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/interaction-textbook-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1799" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/interaction-textbook-2-1440w.jpeg" width="1440" height="1079" alt="A student using writing on a whiteboard with a question: How much did you spend on textbooks this semester" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-interaction-textbook', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>In 2021, our library was ready to implement a flat-fee textbook program introduced by the university’s book store. Two librarians who led the project wanted to learn how much students spent on textbooks and homework access codes prior to this program.</p> <p>Our student assistant Riley Zuckert, who has a background in data science, designed a talk-back board that visualizes data. She set up the board with two questions:</p> <ul> <li>How much did you spend on textbooks this semester?</li> <li>How much did you spend on homework access codes this semester?</li> </ul> <p>Under each question, she included a vertical axis to represent cost ranges from $0 to $800+. She then invited students to mark their numbers on the axis.</p> <p>The board collected 308 answers over two weeks. We then calculated the percentages based on the answers:</p> <p><em>How much did you spend on textbooks this semester?</em> (Based on 170 answers)</p> <ul> <li>$0: 22.35%</li> <li>$1-$99: 21.18%</li> <li><strong>$100-$199: 27.06%</strong></li> <li>$200-$299: 15.29%</li> <li>$300-$399: 7.06%</li> <li>$400-$499: 2.35%</li> <li>$500-$599: 0.59%</li> <li>$600-$699: 0.59%</li> <li>$700-$799: 0%</li> <li>$800+: 3.53%</li> </ul> <p><em>How much did you spend on homework access codes this semester?</em> (Based on 138 answers)</p> <ul> <li><strong>$0: 36.23%</strong></li> <li>$1-$99: 30.43%</li> <li>$100-$199: 20.09%</li> <li>$200-$299: 4.35%</li> <li>$300-$399: 0.72%</li> <li>$400-$499: 2.17%</li> <li>$500-$599: 0%</li> <li>$600-$699: 0%</li> <li>$700-$799: 0%</li> <li>$800+: 0.72%</li> </ul> <p>In the meantime, Lauren Dunn, intern on our team, ran a survey with the same questions on Instagram and collected 20 more answers. Riley then combined the data from the talk-back board and Instagram to created the following histograms to visualize the answers:</p> <div> <div class="gallery full-width" id="gallery-cost-visualized"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/textbook-cost-visualized-1440w.webp 1440w, https://liu.design/blog/talk-back-board/textbook-cost-visualized-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/textbook-cost-visualized-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/textbook-cost-visualized-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/textbook-cost-visualized-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1282" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/textbook-cost-visualized-1440w.jpeg" width="1440" height="769" alt="Three histograms that visualize data for the question: How much did UArizona students spend on textbooks in Fall 2021?" loading="lazy" decoding="async" /> </a> <figcaption>Image credit: Riley Zuckert</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/access-code-cost-visualized-1440w.webp 1440w, https://liu.design/blog/talk-back-board/access-code-cost-visualized-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/access-code-cost-visualized-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/access-code-cost-visualized-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/access-code-cost-visualized-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1283" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/access-code-cost-visualized-1440w.jpeg" width="1440" height="769" alt="Three histograms that visualize data for the question: How much did UArizona students spend on homework access codes in Fall 2021?" loading="lazy" decoding="async" /> </a> <figcaption>Image credit: Riley Zuckert</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-cost-visualized', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Takeaways</h2> <div> <div class="gallery undefined" id="gallery-respond-to-board"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/talk-back-board/respond-to-board-1440w.webp 1440w, https://liu.design/blog/talk-back-board/respond-to-board-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/talk-back-board/respond-to-board-1440w.jpeg 1440w, https://liu.design/blog/talk-back-board/respond-to-board-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/talk-back-board/respond-to-board-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/talk-back-board/respond-to-board-1440w.jpeg" width="1440" height="1080" alt="Three students pointing at sticky notes on a whiteboard at the entrance to a public space" loading="lazy" decoding="async" /> </a> <figcaption>Talk-back board at the University of Arizona Main Library, March 2020</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-respond-to-board', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>The talk-back board has become an essential piece in our UX research toolkit for collecting unmoderated user feedback for websites, services, and spaces. It’s also perfect for engaging library visitors through creative projects that help them de-stress with fun distraction.</p> <p>As we experimented with a wide spectrum of topics, we developed handy workflows to transcribe written answers to text for analysis. We also learned how to use AI tools for the initial analysis such as identifying common themes.</p> <p>Since the boards were mostly left unattended in a public space, we inevitably saw inappropriate responses. Our team members as well as the Libraries’ desk staff regularly checked the board to remove those responses. We also refilled the supplies as needed.</p> <h2>Want to read more?</h2> <p>You can browse more of our talk-back boards in the Libraries’ <a href="https://ualibraries.notion.site/Research-Repo-186fb1c12a4b4481a7aee963ecf18437?pvs=4" target="_blank" rel="noopener noreferrer">UX Research Repo</a>.</p> Welcome to liu.design 2024-02-26T00:00:00Z https://liu.design/blog/welcome/ <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/welcome/new-site-1440w.webp 1440w, https://liu.design/blog/welcome/new-site-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/welcome/new-site-1440w.jpeg 1440w, https://liu.design/blog/welcome/new-site-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/blog/welcome/new-site-1440w.jpeg" width="1440" height="960" alt="Illustration of an index card with text: “new site hello again world”" loading="lazy" decoding="async" /> </figure> <p>Hi there, and welcome to liu.design! Building a new website was one of my New Year’s resolutions. I’m glad to have completed it by March when 2024 can still be called the “new year.”</p> <p>This post marks the end of my previous portfolio website: bobliu.<nolink>io, which went live exactly four years ago on March 1, 2020. Here are some changes I made on the new website and things I learned while building it.</nolink></p> <h2>New domain</h2> <p>I launched this website on <a href="https://liu.design/">liu.design</a>. I wanted to stop using bobliu.<nolink>io mainly because the .io domains became a part of the UK government’s modern-day colonialism<sup class="footnote-ref"><a href="https://liu.design/blog/welcome/#fn1" id="fnref1">[1]</a></sup>. I had been eyeing this domain for a while and was lucky no one grabbed it before I did.</nolink></p> <p>bobliu<nolink>.io now redirects to this site. I plan to keep the previous domain for a little longer and wait for the search engines to catch up.</nolink></p> <h2>Design more, write more</h2> <p>I rewrote about my past projects when moving them to this site. It’s always fun to look back at my almost-binary mindset and think about how differently I approach things now. I hope you’ll have fun reading them too.</p> <p>My previous design portfolio didn’t have a structure to capture my random thoughts that are yet to be full-blown projects. So, as you read this post, I have also committed myself to write a blog. I hope to write about design strategies I experimented with, whether they worked or didn’t, and occasionally share life updates.</p> <h2>Eleventy</h2> <p>If you’re a designer, you probably are no stranger to portfolios sites forever under construction. To me, this wasn’t the first time I went from writing about a new project to rebuilding the entire website.</p> <p>I like static site generators and have used several of them to build my portfolio since 2017. bobliu.<nolink>io was built with a Vue-based static site generator called Gridsome. I liked the framework a lot but had to move away from it because the project’s development quietly ended in 2020.</nolink></p> <div> <div class="gallery undefined" id="gallery-previous-site"> <figure class=""> <source type="image/webp" srcset="https://liu.design/blog/welcome/previous-site-1440w.webp 1440w, https://liu.design/blog/welcome/previous-site-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/blog/welcome/previous-site-1440w.jpeg 1440w, https://liu.design/blog/welcome/previous-site-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/blog/welcome/previous-site-2400w.jpeg" data-pswp-width="2400" data-pswp-height="2706" data-cropped="true" target="_blank"> <img src="https://liu.design/blog/welcome/previous-site-1440w.jpeg" width="1440" height="1623" alt="Screenshot of my previous site" loading="lazy" decoding="async" /> </a> <figcaption>Last screenshot of bobliu.io before it went offline</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-previous-site', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>This site was built from scratch with <a href="https://www.11ty.dev/" target="_blank" rel="noopener noreferrer">Eleventy</a>. I like that Eleventy:</p> <ul> <li>has an intuitive file structure</li> <li>supports any template language</li> <li>builds in no time for a site of this size</li> </ul> <p>My biggest pet peeve with static site generators is having to fiddle with file paths, and Eleventy was no exception to that. To customize the images displayed on this website, I had to create <em>shortcodes</em> and define where images live in the project folder. Figuring out the following line alone took my whole Saturday morning:</p> <pre class="language-js"><code class="language-js"><span class="token keyword">let</span> imageSrc <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>path<span class="token punctuation">.</span><span class="token function">dirname</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>page<span class="token punctuation">.</span>inputPath<span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">/</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>src<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span></code></pre> <p>(Looks like Eleventy is working on an “almost-zero-configuration” image plugin<sup class="footnote-ref"><a href="https://liu.design/blog/welcome/#fn2" id="fnref2">[2]</a></sup> with the upcoming 3.0 release.)</p> <p>Other than that, Eleventy mostly felt flexible and forgiving, and it didn’t get in the way too much. I do wish Eleventy’s documentation was more detailed and included examples, though I found answers to most of my questions from the amazing blog articles others wrote.</p> <h2>Get in touch</h2> <p>Together with the new domain, I also made myself a new email: <a href="mailto:bob@liu.design">bob@liu.design</a>. Drop me a line! You can also find me on social media linked from the bottom of this page. Thanks again for stopping by.</p> <hr class="footnotes-sep" /> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p><a href="https://www.wired.com/story/the-digital-colonialism-behind-tv-and-ly/" target="_blank" rel="noopener noreferrer">The Digital Colonialism Behind .tv and .ly</a> <a href="https://liu.design/blog/welcome/#fnref1" class="footnote-backref">↩︎</a></p> </li> <li id="fn2" class="footnote-item"><p><a href="https://fosstodon.org/@eleventy/111904085623744762" target="_blank" rel="noopener noreferrer">Eleventy on Mastodon</a> <a href="https://liu.design/blog/welcome/#fnref2" class="footnote-backref">↩︎</a></p> </li> </ol> </section> Spicing Up UX Documentation 2022-02-01T00:00:00Z https://liu.design/projects/the-ux-cookbook/ <p><a href="https://theuxcookbook.com/" target="_blank" rel="noopener noreferrer">The UX Cookbook</a> is a collection of guides for UX research, design, and strategy. The UX team at University of Arizona Libraries started the project in 2020 and made it open and free to anyone in the UX community.</p> <p>The project started as the Libraries’ UX team’s internal design and user research documentation. The loosely-organized documentation was used to train new team members and provide consultation for staff and faculty at the University of Arizona. In 2020, the Libraries’ UX team began restructuring the documentation and made it open to the public.</p> <p>I designed The UX Cookbook’s branding and structure. I also wrote and edited guides.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/full-page-ipad-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/full-page-ipad-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/full-page-ipad-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/full-page-ipad-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/the-ux-cookbook/full-page-ipad-1440w.jpeg" width="1440" height="1551" alt="The UX Cookbook webiste displayed on an iPad" loading="lazy" decoding="async" /> </figure> <h2>Goal</h2> <p>When members of the Libraries’ UX team collaborated and consulted with faculty and staff members at the University of Arizona, we realized common user research and design methods, such as usability testing, card sorting, and prototyping, sounded intimidating to those who weren’t familiar.</p> <p>The team hoped to create a set of UX documentation that simplifies UX jargon and helps people easily apply UX methods in their work. We developed content based on our existing internal documentation before making it public. We pictured the target audience being those who:</p> <ul> <li>Work in higher-ed, government, or non-profit organizations</li> <li>Want to apply UX methods in their work</li> <li>Usually don’t have dedicated UX team members</li> </ul> <p>Because of this, we wanted the documentation to be fun, approachable, and easy to get started with.</p> <h2>The “recipes”</h2> <p>I proposed calling the documentation a <em>cookbook</em> so its articles become <em>recipes</em>. To spice it up even more, each <em>recipe</em> can include all or some of the following sections:</p> <ul> <li><em>Nutrition profile</em>: a short description of the method</li> <li><em>Cooking time</em>: how long the method takes</li> <li><em>Perfect for</em>: what the method does</li> <li><em>Ingredients</em>: what tools are needed</li> <li><em>Prep work</em>: what to prepare before starting</li> <li><em>Directions</em>: step-by-step instructions</li> <li><em>Plating</em>: how to present research findings or design artifacts</li> <li><em>Gallery</em>: a showcase of finished work from the UX community</li> </ul> <p>To validate the feasibility of this structure, we started a crowdsourced recipe-drafting project. Members of the Libraries’ UX team, along with collaborators from other parts of the University of Arizona, contributed recipes about different UX methods in three categories: user research, design, and content strategy. After a few iterations, we agreed on a structure that covers the must-haves in a UX guide.</p> <div> <div class="gallery full-width" id="gallery-content"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/content-header-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/content-header-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/content-header-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/content-header-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/content-header-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/content-header-1440w.jpeg" width="1440" height="960" alt="Screenshot of a recipe’s header section" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/content-sections-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/content-sections-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/content-sections-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/content-sections-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/content-sections-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/content-sections-1440w.jpeg" width="1440" height="960" alt="Screenshot of a recipe’s content" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-content', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>I selected Notion as the content management system for The UX Cookbook. This was largely because contributors who did editorial work in Notion and liked its flexible structure that suits text-heavy content. The contributors also liked Notion’s ease of maintenance as a document-sharing platform.</p> <p>Notion natively supports publishing any document as a live webpage, but the page’s URL isn’t customizable. I used <a href="https://super.so/" target="_blank" rel="noopener noreferrer">Super</a> to publish the pages with friendly URLs and add the pages to our custom domain.</p> <h2>Brand</h2> <p>I designed the UX Cookbook’s brand two years after its launch. I was inspired by a Chinese snack called <em>tánghúlu</em> (糖葫芦, “sugar bottle gourd”), which are hawthorn berries covered in sugar and put on a stick. It’s a popular childhood snack in northern China and often consumed around Lunar New Year because its auspicious meaning.</p> <p>I created a monochrome color palette based on <em>tánghúlu</em>’s color, red. Then, based on the berries’ shape, I designed circular illustrations of a variety of UI elements, such as radio buttons, checkboxes, calendar days, and hearts for like. These shapes became building blocks of the logo and recipe covers’ design.</p> <div> <div class="gallery full-width" id="gallery-branding"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/branding-elements-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/branding-elements-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/branding-elements-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/branding-elements-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/branding-elements-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/branding-elements-1440w.jpeg" width="1440" height="960" alt="The UX Cookbook’s circular design elements" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/branding-ref-sheet-1440w.jpeg" width="1440" height="960" alt="The UX Cookbook’s design reference sheet, including logos, a color palette, and typography" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-branding', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Each recipe cover includes the recipe’s name on the left 2/3 of a rectangle. In the remaining space, I did a creative challenge by combining 2-3 circular UI elements to visualize what the UX method does.</p> <div> <div class="gallery full-width" id="gallery-recipe"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/recipe-competitive-analysis-1440w.jpeg" width="1440" height="960" alt="Cover of the Competitive analysis recipe" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/recipe-writing-web-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/recipe-writing-web-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/recipe-writing-web-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/recipe-writing-web-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/recipe-writing-web-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/recipe-writing-web-1440w.jpeg" width="1440" height="960" alt="Cover of the Writing for the Web recipe" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/recipe-journey-mapping-1440w.jpeg" width="1440" height="960" alt="Cover of the Surveys recipe" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-1440w.webp 1440w, https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-1440w.jpeg 1440w, https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/the-ux-cookbook/recipe-user-interviews-1440w.jpeg" width="1440" height="960" alt="Cover of the User Interviews recipe" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-recipe', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Result</h2> <p>Shortly after its launch, The UX Cookbook became a free UX reference loved and shared by many. Every day, the website records visitors from all continents of the world (except Antarctica).</p> <p>The UX team at the University of Arizona Libraries actively maintains the documentation and adds new recipes.</p> <p>Now, The UX Cookbook is a popular open educational resource that instructors use in classrooms. It is also frequently shared by folks in the government sector and higher education through mailing lists and intranets.</p> Locked In, Around the Clock 2020-03-01T00:00:00Z https://liu.design/projects/library-hours/ <p>The <a href="https://lib.arizona.edu/" target="_blank" rel="noopener noreferrer">University of Arizona Libraries</a> has six locations on campus that each operates during different hours. The hours change throughout the year, and can be different depending on the visitor’s affiliation to the university. In 2020, the Libraries launched a new library hours module to address the limitations with its previous library hours page.</p> <p>I led the project’s UX design and research work.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/door-sign-1440w.webp 1440w, https://liu.design/projects/library-hours/door-sign-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/door-sign-1440w.jpeg 1440w, https://liu.design/projects/library-hours/door-sign-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-hours/door-sign-1440w.jpeg" width="1440" height="960" alt="Library door sign that shows hours of operation" loading="lazy" decoding="async" /><figcaption style="text-align: center;">Main Library’s door sign</figcaption> </figure> <h2>Research with users</h2> <p>I designed exploratory user research to learn about pain points with the previous library hours page, then worked with other members of the Libraries’ UX team to conduct interviews with 21 students, faculty, and staff at the university.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/tiny-cafe-1440w.webp 1440w, https://liu.design/projects/library-hours/tiny-cafe-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/tiny-cafe-1440w.jpeg 1440w, https://liu.design/projects/library-hours/tiny-cafe-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-hours/tiny-cafe-1440w.jpeg" width="1440" height="1080" alt="Man standing next to a desk with two laptops and a sign that reads ‘Tiny Café’" loading="lazy" decoding="async" /><figcaption style="text-align: center;">Tiny Café, lightweight user research setup at the Main Library</figcaption> </figure> <h3>Pain point 1: complicated access</h3> <blockquote> <p>“The website is confusing … I’d rather walk to the library and try to get in. I can at least read the sign on the door.” — <em>Participant #4, undergraduate student</em></p> </blockquote> <p>Many library locations operate in two schedules because they provide after-hours access to university affiliates with a <em>CatCard</em> (campus ID). Among all locations, the Health Sciences Library has the most complicated access because only those considered <em>Health Sciences Affiliates</em> can access the building after hours, but not everyone with a <em>CatCard</em> is considered a <em>Health Sciences Affiliate</em>.</p> <h3>Pain point 2: confusing language</h3> <blockquote> <p>“On Sunday, the hours are ‘24 hours’ and ‘opens at 9.’ Aren’t they contradicting each other?” — <em>Participant #11, graduate student</em></p> </blockquote> <p>Almost all participants said hours on the library website were confusing, inaccurate, or misleading. For example, on any Sunday in the Fall 2019 semester, the Main Library is open to the public 9am-9pm. However, the building provides after-hours access from 9pm-9am everyday except Saturday, so <em>CatCard</em> holders can enter the building anytime starting 9pm on Sunday through 1am on the following Saturday.</p> <p>Because of this, the previous library hours page displayed Sunday hours as “24 hours, opens at 9:00am” which confused many participants.</p> <h3>Pain point 3: not mobile-friendly</h3> <p>Moreover, the previous library hours page dates back to 2009. It had an outdated look and was not designed for mobile, which became another barrier for those who check hours on the phone.</p> <h2>Design studio with stakeholders</h2> <p>Our team interviewed the stakeholders from the Libraries’ Access and Information Services team to gather project requirements and success criteria. While working on this project, I created a design activity called <em>Design Studio</em>, which was an effective way of getting stakeholder input from an early stage of the design process.</p> <div> <div class="gallery full-width" id="gallery-design-studio"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-studio-1-1440w.webp 1440w, https://liu.design/projects/library-hours/design-studio-1-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-studio-1-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-studio-1-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-studio-1-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-studio-1-1440w.jpeg" width="1440" height="1080" alt="Written notes and index cards with hand sketches on a whiteboard" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-studio-2-1440w.webp 1440w, https://liu.design/projects/library-hours/design-studio-2-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-studio-2-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-studio-2-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-studio-2-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1800" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-studio-2-1440w.jpeg" width="1440" height="1080" alt="Written notes and index cards with hand sketches on a whiteboard" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-studio', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Design Studio is a one- to two-hour freeform activity where stakeholders, designers, UX researchers, and developers gather in a room. Each contributor gets a sharpie and a couple of index cards then follows the same prompt: “In 3-5 minutes, sketch or jot down features you’d like to see in the new product or service.”</p> <p>During the Design Studio activity for the library hours project, project team members visualized the following features:</p> <ul> <li>A library hours page with weekly and monthly views</li> <li>An hours widget on the Libraries’ homepage</li> <li>Clear helper text that explains after-hour access for affiliates</li> </ul> <p>At the end of the activity, I captured, organized, and grouped the responses to summarize top features, then worked with the project manager to draft requirements to guide the design process.</p> <h2>Design &amp; validation</h2> <p>I created wireframes based on input received in the Design Studio. Many sketches contributed by stakeholders hinted at a similar layout, which includes seven squares arranged horizontally to represent a week. I constructed the desktop wireframes based on this layout.</p> <p>I led the Libraries’ transition to Figma as its primary design and handoff tool. As part of the transition, I built a component library for the Libraries’ Drupal 7-based content management system used at that time. I started this project’s design with the existing component library and added project-specific components and patterns along the way</p> <div> <div class="gallery full-width" id="gallery-design-1"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-wireframes-1440w.webp 1440w, https://liu.design/projects/library-hours/design-wireframes-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-wireframes-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-wireframes-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-wireframes-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-wireframes-1440w.jpeg" width="1440" height="960" alt="Library hours page wireframes" loading="lazy" decoding="async" /> </a> <figcaption>Wireframes</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-components-1440w.webp 1440w, https://liu.design/projects/library-hours/design-components-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-components-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-components-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-components-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-components-1440w.jpeg" width="1440" height="960" alt="Design components used on the library hours page" loading="lazy" decoding="async" /> </a> <figcaption>Component library</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-1', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>As I had learned from preliminary research, microcopy design was one of the most challenging parts of this project. Specifically:</p> <ul> <li>how to indicate that a location is open beyond midnight on a day, and</li> <li>how to indicate who is eligible for after-hours access</li> </ul> <p>Because of this, I made several versions of the prototype with different microcopy design with which our team conducted usability and preference testing. Our student assistant, America Curl, also discovered a handy roaming testing setup — she put sticky notes with different microcopy designs on a small whiteboard, then walked around in the library lobby and elsewhere on campus asking random students for feedback. In return, she gave them snacks and beverages.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/roaming-test-1440w.webp 1440w, https://liu.design/projects/library-hours/roaming-test-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/roaming-test-1440w.jpeg 1440w, https://liu.design/projects/library-hours/roaming-test-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/library-hours/roaming-test-1440w.jpeg" width="1440" height="1079" alt="A student holding a whiteboard that has different versions of language for a weekly calendar" loading="lazy" decoding="async" /><figcaption style="text-align: center;">America Curl with her roaming microcopy testing setup</figcaption> </figure> <p>After rounds of testing, we found “stays open” was the pattern most people understood. On a weekly calendar that starts on Sunday, the hours can be displayed as “Opens at 9am (stays open)” on Sunday, “24 hours” on Monday through Thursday, and “24 hours (closes at 1am)” on Friday.</p> <p>I also added an audience switcher in the UI to indicate different hours for different user groups. In a later iteration, our team also added helper text to the audience switcher to clarify eligibility. Usability testing showed 88% of participants understood who are eligible for after-hours access and what the extended hours are.</p> <div> <div class="gallery full-width" id="gallery-design-2"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-ui-copy-1440w.webp 1440w, https://liu.design/projects/library-hours/design-ui-copy-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-ui-copy-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-ui-copy-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-ui-copy-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-ui-copy-1440w.jpeg" width="1440" height="960" alt="Library hours page wireframes" loading="lazy" decoding="async" /> </a> <figcaption>Revised microcopy</figcaption> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/design-audience-switcher-1440w.webp 1440w, https://liu.design/projects/library-hours/design-audience-switcher-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/design-audience-switcher-1440w.jpeg 1440w, https://liu.design/projects/library-hours/design-audience-switcher-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/design-audience-switcher-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/design-audience-switcher-1440w.jpeg" width="1440" height="960" alt="Design components used on the library hours page" loading="lazy" decoding="async" /> </a> <figcaption>Audience switcher for indicating different hour for different user groups</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-design-2', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Result</h2> <p>The new library hours module was launched in Spring 2020. Shortly after the launch, most library buildings were closed due to the COVID-19 pandemic. However, the new library hours page received very positive feedback later in 2020 and 2021.</p> <p>Web analytics data in 2021 show the new library hours page had a 60% bounce rate, up from 48% in the previous version. While lower bounce rates are often desirable, the library hours pages are considered an exception — we want the user to come to the page, get the information they need, then leave. So, a higher bounce rate means less users had to navigate to other pages on the Libraries’ website to find the hours.</p> <div> <div class="gallery full-width" id="gallery-result"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/result-weekly-1440w.webp 1440w, https://liu.design/projects/library-hours/result-weekly-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/result-weekly-1440w.jpeg 1440w, https://liu.design/projects/library-hours/result-weekly-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/result-weekly-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/result-weekly-1440w.jpeg" width="1440" height="960" alt="Design components used on the library hours page" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/result-monthly-1440w.webp 1440w, https://liu.design/projects/library-hours/result-monthly-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/result-monthly-1440w.jpeg 1440w, https://liu.design/projects/library-hours/result-monthly-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/result-monthly-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/result-monthly-1440w.jpeg" width="1440" height="960" alt="Library hours page wireframes" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/result-widget-1440w.webp 1440w, https://liu.design/projects/library-hours/result-widget-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/result-widget-1440w.jpeg 1440w, https://liu.design/projects/library-hours/result-widget-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/result-widget-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/result-widget-1440w.jpeg" width="1440" height="960" alt="Library hours page wireframes" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-result', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>Our project team decided to open-source the project so more libraries can use our solution to improve their user experience. Below is the same design and source code implemented by the Indiana University Bloomington Libraries.</p> <div> <div class="gallery undefined" id="gallery-result-iub"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/library-hours/result-iub-1440w.webp 1440w, https://liu.design/projects/library-hours/result-iub-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/library-hours/result-iub-1440w.jpeg 1440w, https://liu.design/projects/library-hours/result-iub-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/library-hours/result-iub-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/library-hours/result-iub-1440w.jpeg" width="1440" height="960" alt="Screenshot of the Indiana University Bloomington’s libraries & hours page" loading="lazy" decoding="async" /> </a> <figcaption>Indiana University Bloomington’s Libraries & Hours page using the same design</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-result-iub', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> A Brand That Pops In-Person and Online 2019-10-01T00:00:00Z https://liu.design/projects/uxua-brand/ <p><a href="https://uxua.arizona.edu/" target="_blank" rel="noopener noreferrer">UX@UA</a> is the largest community for UX professionals and learners in Arizona. The community is based at the University of Arizona (UA) and hosts regular in-person events in Tucson, as well as virtual events and consultation services online. The community was founded in 2018, and as of 2023, over 1,400 members joined the community from all over the world through events and social media channels.</p> <p>In 2019, I became an organizer of UX@UA and was invited to design the community’s branding.</p> <div> <div class="gallery full-width" id="gallery-logo"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/logo-banner-1440w.webp 1440w, https://liu.design/projects/uxua-brand/logo-banner-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/logo-banner-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/logo-banner-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/logo-banner-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/logo-banner-1440w.jpeg" width="1440" height="960" alt="UX@UA standard logo" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/logo-social-media-1440w.webp 1440w, https://liu.design/projects/uxua-brand/logo-social-media-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/logo-social-media-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/logo-social-media-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/logo-social-media-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/logo-social-media-1440w.jpeg" width="1440" height="960" alt="UX@UA square logo" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-logo', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Goal</h2> <p>The community’s organizers hoped to see a versatile branding that fits various use cases such as event signage, social media posts, slide decks, and websites. The brand elements should be familiar to those affiliated with the University of Arizona, and instantly recognizable for event attendees and social media followers.</p> <p>In addition to the digital brand assets, the organizers also wanted to use the new branding to produce marketing swags to give away at in-person events.</p> <div> <div class="gallery full-width" id="gallery-posters"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/poster-2022-1440w.webp 1440w, https://liu.design/projects/uxua-brand/poster-2022-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/poster-2022-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/poster-2022-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/poster-2022-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/poster-2022-1440w.jpeg" width="1440" height="960" alt="Poster of UX@UA October 2022 event" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/poster-2023-1440w.webp 1440w, https://liu.design/projects/uxua-brand/poster-2023-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/poster-2023-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/poster-2023-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/poster-2023-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/poster-2023-1440w.jpeg" width="1440" height="960" alt="Poster of UX@UA December 2023 event" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-posters', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Brand research</h2> <p>I surveyed UX@UA members on Slack to research the identity of the community. Then I worked with the other organizers and outlined the community’s brand voice, which impacts not just the branding but also the way the organizers communicate with members:</p> <ul> <li>Cheerful, but not silly</li> <li>Organized, but not retro</li> <li>Experimental, but not rebellious</li> <li>Educational, but not scholarly</li> </ul> <p>We also gathered adjectives that describe and don’t describe UX@UA’s voice. People think the community is <em>welcoming</em>, <em>active</em>, <em>colorful</em>, <em>resourceful</em>, <em>collaborative</em>, and <em>clear</em>. They think words like <em>dense</em>, <em>wordy</em>, <em>scattered</em>, and <em>jumbled</em> don’t describe its voice.</p> <div> <div class="gallery full-width" id="gallery-usage"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/usage-linkedin-1440w.webp 1440w, https://liu.design/projects/uxua-brand/usage-linkedin-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/usage-linkedin-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/usage-linkedin-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/usage-linkedin-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/usage-linkedin-1440w.jpeg" width="1440" height="960" alt="Screenshot of UX@UA's LinkedIn page with the logo in view" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/usage-pin-1440w.webp 1440w, https://liu.design/projects/uxua-brand/usage-pin-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/usage-pin-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/usage-pin-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/usage-pin-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/usage-pin-1440w.jpeg" width="1440" height="960" alt="A white tote with a UX@UA pin" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/usage-sticker-1440w.webp 1440w, https://liu.design/projects/uxua-brand/usage-sticker-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/usage-sticker-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/usage-sticker-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/usage-sticker-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/usage-sticker-1440w.jpeg" width="1440" height="960" alt="Woman using a laptop with a UX@UA sticker" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/usage-tablesign-1440w.webp 1440w, https://liu.design/projects/uxua-brand/usage-tablesign-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/usage-tablesign-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/usage-tablesign-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/uxua-brand/usage-tablesign-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/uxua-brand/usage-tablesign-1440w.jpeg" width="1440" height="960" alt="Table sign at an event with UX@UA logo" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-usage', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Design</h2> <p>Because of UX@UA’s affiliation with the University of Arizona, I chose the two primary colors (Arizona Red and Arizona Blue) from the university’s brand, and paired them with an accent color (Sky).</p> <p>The subject of the logo are four letters in the community’s name. The @ sign was positioned in a playful way to break the alignment of the letters, leaving an impression that matches the community’s brand voice. All characters use UA’s brand typeface at that time, Milo.</p> <p>The characters in the logo can be arranged in two ways: wide and square. The wide logo are used in banners, slides, or large printed materials. The square logo fits social media profiles and can be adapted to create stickers, pins, or other small marketing swags.</p> <figure class="full-width"> <source type="image/webp" srcset="https://liu.design/projects/uxua-brand/event-1440w.webp 1440w, https://liu.design/projects/uxua-brand/event-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/uxua-brand/event-1440w.jpeg 1440w, https://liu.design/projects/uxua-brand/event-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/uxua-brand/event-2400w.jpeg" width="2400" height="1600" alt="People attending a UX@UA event with the logo visible at a distance" loading="lazy" decoding="async" /> </figure> Crafting a Government Design System 2018-04-01T00:00:00Z https://liu.design/projects/craft-design-system/ <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/craft-blocks-1440w.webp 1440w, https://liu.design/projects/craft-design-system/craft-blocks-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/craft-blocks-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/craft-blocks-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/craft-design-system/craft-blocks-1440w.jpeg" width="1440" height="960" alt="Illustration of some web components in the design system" loading="lazy" decoding="async" /> </figure> <p>Craft is a web design system created for the State of Minnesota Department of Human Services. As the state government’s first web design system, Craft’s name came from its five design principles: consistent, reusable, accessible, familiar and trustworthy.</p> <p>I performed visual design for the components, developed live prototypes using React, and conducted research with stakeholders and end users.</p> <h2>Goal</h2> <p>In 2017, the State of Minnesota Department of Human Services (DHS) started its Systems Modernization project, which aims to rebuild online public service platforms with newer web technology.</p> <p>Style governance became a challenge as the project teams set on a journey to build the new platforms. Developers chose from several front-end frameworks, and without a consistent design standard, the style, visual design, and accessibility differed from project to project.</p> <p>As a member of one of the project teams, I wanted to build a library of usable and accessible components that match the State’s brand, voice, and tone. In the meantime, I hoped that the component library is shared with the other modernization projects for a consistent user and developer experience. So, I teamed up with contributors from other projects, including designers, developers, and marketers, and started the collaborative project to build Craft.</p> <h2>Colors &amp; typography</h2> <p>I used the State of Minnesota’s 2017 brand guide for printed materials as my visual design reference. First off, I created a color palette in which most colors meet WCAG AA color contrast when paired with black or white foreground text.</p> <p>Following the marketing advisors’ guidance, I selected Source Sans Pro as Craft’s default typeface for headings and Open Sans for body copy. Both are open-source fonts served by Google Fonts.</p> <div> <div class="gallery full-width" id="gallery-brand"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/brand-colors-1440w.webp 1440w, https://liu.design/projects/craft-design-system/brand-colors-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/brand-colors-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/brand-colors-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/brand-colors-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/brand-colors-1440w.jpeg" width="1440" height="960" alt="Color palette that includes primary, secondary, tertiary, and neutral colors" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/brand-typography-1440w.webp 1440w, https://liu.design/projects/craft-design-system/brand-typography-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/brand-typography-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/brand-typography-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/brand-typography-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/brand-typography-1440w.jpeg" width="1440" height="960" alt="List of heading and body type styles" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-brand', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h2>Components &amp; patterns</h2> <p>Craft was designed to be a system that streamlines both design and development processes. From day one, each component was designed in Sketch and developed in a React framework.</p> <p>We hoped developers using other front-end frameworks to also have access to Craft components’ style, behavior, and interaction without building from scratch. So, the team created a fallback option using plain HTML/CSS and jQuery.</p> <p>Following the <a href="https://bradfrost.com/blog/post/atomic-web-design/" target="_blank" rel="noopener noreferrer">Atomic design</a> methodology, I first designed basic components, then used them to assemble common UI patterns in government web applications. Below are some examples.</p> <h3>Buttons</h3> <div> <div class="gallery undefined" id="gallery-pattern-buttons"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-button-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-button-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-button-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-button-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-button-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-button-1440w.jpeg" width="1440" height="960" alt="Primary buttons, secondary buttons, and inactive buttons on a webpage" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-pattern-buttons', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h4</span><span class="token punctuation">></span></span>Primary buttons<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h4</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span><span class="token punctuation">></span></span>Blue<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>green<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Green<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>red<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Red<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h4</span><span class="token punctuation">></span></span>Outline buttons<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h4</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>outline<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Blue<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>red outline<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Red<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>dark<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Dark<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>light<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bg-dark<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Light<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h4</span><span class="token punctuation">></span></span>Inactive button<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h4</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>inactive<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Inactive<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span></code></pre> <p>We used the <a href="https://styled-components.com/" target="_blank" rel="noopener noreferrer">styled-components</a> library to package style variations with the component. For example, the developer can easily apply styles for a <code>Button</code> component by adding classes such as <code>type=&quot;outline&quot;</code> and <code>type=&quot;dark&quot;</code>.</p> <p>I also adjusted the color of each button’s three states to ensure the color contrast meets or exceeds WCAG AA.</p> <div> <div class="gallery undefined" id="gallery-accessibility"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-button-contrast-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-button-contrast-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-button-contrast-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-button-contrast-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-button-contrast-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-button-contrast-1440w.jpeg" width="1440" height="960" alt="Primary buttons, secondary buttons, and inactive buttons on a webpage" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-accessibility', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <h3>Form validation</h3> <p>Government websites tend to leave an impression of being unusable and inaccesssible, and webforms often take the blame. The Craft Design System aims to improve the usability in government webforms starting with displaying helpful error messages.</p> <p>The Social Security number field was one of the common fields in the State’s webforms. It was also one of the trickiest when it comes to form validation, since formatting and error prompts were different by platform.</p> <p>Craft comes with webform patterns that include the Social Security number field. Using one line of code, the developer can insert the form field combined with its auto-formatting and validation features.</p> <div> <div class="gallery undefined" id="gallery-pattern-form-validation"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-form-validation-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-form-validation-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-form-validation-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-form-validation-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-form-validation-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-form-validation-1440w.jpeg" width="1440" height="960" alt="Form field for SSN input with an error message" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-pattern-form-validation', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>FormField</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ssn<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span></code></pre> <h3>Special patterns</h3> <p>Craft includes patterns unique to the State of Minnesota’s web platforms. For example, many webforms used by county and state workers include a question prompting eligible or impacted counties.</p> <p>Minnesota has 87 counties, and the question was usually accompanied by 87 checkboxes, which was overwhelming, inaccessible, and painful to use.</p> <p>I designed a special pattern called <em>label box</em> to solve this issue. It comes with a single field with the 87 counties’ names built in. Once the user starts typing the name of a county, matching results show up in a list that follows the curser. The user can then navigate with the mouse or keyboard or hit enter to select the first result in the list.</p> <div> <div class="gallery full-width" id="gallery-pattern-counties"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-counties-before-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-counties-before-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-counties-before-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-counties-before-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-counties-before-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-counties-before-1440w.jpeg" width="1440" height="960" alt="Question in a webform that includes 87 checkboxes for Minnesota’s counties" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-counties-after-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-counties-after-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-counties-after-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-counties-after-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-counties-after-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-counties-after-1440w.jpeg" width="1440" height="960" alt="Revised patterns that use labels and a select menu for inputting counties" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-pattern-counties', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>FormField</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>county<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span></code></pre> <p>Similarly, the pattern for selecting counties is a part of the <code>FormField</code> component and can be added to a webform with one line of code.</p> <p>The <em>label box</em> pattern may also be customized to support other input values.</p> <h3>Common webforms</h3> <p>In addition to individual form fields, Craft has a <code>FormModule</code> that includes common combinations of form fields.</p> <p>For example, the address form is one of the most frequently-used webform patterns while also laborious to implement. With plain HTML, just the state select menu alone has more than fifty lines of code. Users reported the form had inconsistent validation on different platforms.</p> <div> <div class="gallery undefined" id="gallery-pattern-address-form"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/craft-design-system/pattern-address-form-1440w.webp 1440w, https://liu.design/projects/craft-design-system/pattern-address-form-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/craft-design-system/pattern-address-form-1440w.jpeg 1440w, https://liu.design/projects/craft-design-system/pattern-address-form-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/craft-design-system/pattern-address-form-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/craft-design-system/pattern-address-form-1440w.jpeg" width="1440" height="960" alt="Webform with address, city, state, and ZIP code fields" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-pattern-address-form', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <pre class="language-html"><code class="language-html"><span class="token comment">&lt;!-- Address form: plain HTML --></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>form-address<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>add1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Address line 1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>add1<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>col-2x required<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>add2<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Address line 2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>add2<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>col-2x<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>city<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>City<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>city<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>required<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>state<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>State<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>state<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>AL<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Alabama<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>AK<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Alaska<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>AZ<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Arizona<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>AR<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Arkansas<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">></span></span> ... <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>select</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>zip<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>ZIP code<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>zip<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>required<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span></code></pre> <p>Craft addresses this issue by combining the address form fields and the recommended validation pattern in one component. This approach aims to save time for developers while also improving usability for the end users with a consistent data format and error messages.</p> <pre class="language-html"><code class="language-html"><span class="token comment">&lt;!-- Address form: Craft --></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>FormModule</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>address<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span></code></pre> Movie Posters as a Book 2017-07-01T00:00:00Z https://liu.design/projects/movielens/ <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/movielens/movie-cards-1440w.webp 1440w, https://liu.design/projects/movielens/movie-cards-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/movie-cards-1440w.jpeg 1440w, https://liu.design/projects/movielens/movie-cards-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/movielens/movie-cards-1440w.jpeg" width="1440" height="960" alt="Three MovieLens movie cards that display movie posters and star ratings" loading="lazy" decoding="async" /> </figure> <p><a href="https://movielens.org/" target="_blank" rel="noopener noreferrer">MovieLens</a> is a recommendation system for movies built and maintained by GroupLens Research at the University of Minnesota. The user builds a profile by rating movies they have watched, and MovieLens generates new movie recommendations based on their rating.</p> <p>I designed MovieLens’ movie card component that displays movie information and prompts rating, conducted user research, and developed a prototype in the website’s Angular-based framework.</p> <h2>Goal</h2> <p>Researchers at GroupLens Research use MovieLens to collect movie rating data and train the recommendation systems. They wanted to see a website that encourages the user to rate movies, and helps the user easily find movies they watched. The previous MovieLens interface was designed to meet these needs.</p> <div> <div class="gallery undefined" id="gallery-previous-homepage"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/movielens/previous-homepage-1440w.webp 1440w, https://liu.design/projects/movielens/previous-homepage-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/previous-homepage-1440w.jpeg 1440w, https://liu.design/projects/movielens/previous-homepage-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/movielens/previous-homepage-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/movielens/previous-homepage-1440w.jpeg" width="1440" height="960" alt="Screenshot of the previous MovieLens homepage" loading="lazy" decoding="async" /> </a> <figcaption>Search results in the previous MovieLens design</figcaption> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-previous-homepage', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <p>The previous design, however, was not favored by users. 12 out of 14 active MovieLens users I interviewed did not like the previous site design. They thought the movie cards, which was a blend of text, icons, stars, and a movie poster in a small space, made pages look cluttered and confusing.</p> <p>Another pain point was the previous design used differently-colored stars to indicate system predicted rating and the user’s actual rating, but users had a hard time figuring it out.</p> <p>In the 2017 redesign, I focused on addressing these two pain points and keeping the card-based rating experience.</p> <h2>Design</h2> <p>The size of a movie card is approximately 176 x 320 pixels. However, it displays a large amount of information, including the movie’s poster, name, release year, genres, predicted rating, user rating, rating widget, and additional actions.</p> <p>The challenge was to present dense information in a clean an intuitive way. I was inspired by belly bands (or <em>obi</em> in Japanese) often used in packaging of books or notebooks. The band moves up and down, covering or revealing information on the book cover.</p> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/movielens/obi-1440w.webp 1440w, https://liu.design/projects/movielens/obi-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/obi-1440w.jpeg 1440w, https://liu.design/projects/movielens/obi-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/movielens/obi-1440w.jpeg" width="1440" height="960" alt="Japanese book with a printed paper band" loading="lazy" decoding="async" /><figcaption style="text-align: center;">Belly band of a Japense book</figcaption> </figure> <p>In a similar structure, I created a moving information panel for the movie card. In its default state, the panel stays on the bottom of the movie poster and displays the movie name and predicted rating.</p> <p>When the user points the mouse at a movie card, the panel moves up to reveal more information, including release year, genres, predicted rating, average rating, and the rating widget. The user can then use the rating widget to add their rating.</p> <p>Once the mouse leaves the movie card, the panel moves back to its original state, and the rating changes to the user’s actual rating. The user can also click on the movie poster to go to the movie details page.</p> <div> <div class="gallery full-width" id="gallery-card"> <figure class=""> <source type="image/webp" srcset="https://liu.design/projects/movielens/card-symbols-1440w.webp 1440w, https://liu.design/projects/movielens/card-symbols-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/card-symbols-1440w.jpeg 1440w, https://liu.design/projects/movielens/card-symbols-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/movielens/card-symbols-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/movielens/card-symbols-1440w.jpeg" width="1440" height="960" alt="Three MovieLens movie cards that display movie names, years, genres, posters, and star ratings, and explanation of each element on the cards" loading="lazy" decoding="async" /> </a> </figure><figure class=""> <source type="image/webp" srcset="https://liu.design/projects/movielens/card-actions-1440w.webp 1440w, https://liu.design/projects/movielens/card-actions-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/card-actions-1440w.jpeg 1440w, https://liu.design/projects/movielens/card-actions-2400w.jpeg 2400w" sizes="100vw" /> <a href="https://liu.design/projects/movielens/card-actions-2400w.jpeg" data-pswp-width="2400" data-pswp-height="1600" data-cropped="true" target="_blank"> <img src="https://liu.design/projects/movielens/card-actions-1440w.jpeg" width="1440" height="960" alt="Three actions through MovieLens cards: rate a movie, search by genre, and see movie details" loading="lazy" decoding="async" /> </a> </figure> </div> <script type="module"> import PhotoSwipeLightbox from '/assets/js/photoswipe-lightbox.esm.min.js'; import PhotoSwipe from '/assets/js/photoswipe.esm.min.js'; const lightbox = new PhotoSwipeLightbox({ gallery: '#gallery-card', children: 'a', imageClickAction: 'close', tapAction: 'close', showHideAnimationType: 'fade', arrowPrev: false, arrowNext: false, zoom: false, close: false, counter: false, pswpModule: PhotoSwipe, preload: [1, 1] }); lightbox.init(); </script> </div> <div class="embed"> <div style="padding:59.2% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/397350764?h=1d0577416c&autoplay=1&loop=1&portrait=0" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen=""></iframe></div><script src="https://player.vimeo.com/api/player.js"></script> </div> <h2>Result</h2> <p>All 13 participants in a subsequent usability testing preferred the new MovieLens design over the previous one. Participants mentioned the new design “looks cleaner and faster,” “feels smooth,” and “is easy to understand.”</p> <figure class="full-width"> <source type="image/webp" srcset="https://liu.design/projects/movielens/new-homepage-1440w.webp 1440w, https://liu.design/projects/movielens/new-homepage-2400w.webp 2400w" sizes="100vw" /> <source type="image/jpeg" srcset="https://liu.design/projects/movielens/new-homepage-1440w.jpeg 1440w, https://liu.design/projects/movielens/new-homepage-2400w.jpeg 2400w" sizes="100vw" /><img src="https://liu.design/projects/movielens/new-homepage-2400w.jpeg" width="2400" height="1600" alt="Screenshot of the redesigned MovieLens homepage" loading="lazy" decoding="async" /> </figure> <h2>Limitations</h2> <p>During my time at GroupLens Research, I had only tested the movie card prototype above with desktop browsers. The design potentially had usability issues on mobile due to the animated information panel triggered by mouse hovering and UI elements with small click targets.</p> <p>Another planned next step was to test and optimize the movie card design for screen readers.</p>