User Tests - Build Better Shiny Apps with Effective User Testing
<ol><li><a href="#anchor-1" target="_blank" rel="noopener noreferrer">Why User Tests</a></li><li><a href="#anchor-2" target="_blank" rel="noopener noreferrer">useR! 2021 Presentation: How to Conduct Effective User Tests</a></li><li><a href="#anchor-3" target="_blank" rel="noopener noreferrer">Good Practices</a></li><li><a href="#anchor-4" target="_blank" rel="noopener noreferrer">Q&A From Maria’s Presentation at UseR! 2021</a></li><li><a href="#anchor-5" target="_blank" rel="noopener noreferrer">useR! 2021 Follow Up</a></li></ol> <h2 id="anchor-1">Why User Tests</h2> User tests are paramount for creating a smoother development process and ultimately, a user-friendly tool. It’s easy to lose track of the end-game, which is adoption by users. Remember, the success of the application depends on the user experience. This is where user tests are key - they help determine if the application is intuitive, fun to use and if users will continue to use it. User tests at Appsilon typically involve one-on-one meetings consisting of three parts: <ol><li style="font-weight: 400;" aria-level="1">Asking the user about their daily work</li><li style="font-weight: 400;" aria-level="1">Asking the user to perform actions in the application (If the meeting is remote, ask the user to share their screen)</li><li style="font-weight: 400;" aria-level="1">Gathering general feedback </li></ol> <blockquote>See how Marcin Dubel, <a href="https://appsilon.com/shiny-environmental-video-game-wins-grand-prize-at-rstudio-shiny-contest/" target="_blank" rel="noopener noreferrer">Shiny Contest Grand Prize Winner</a>, applied user testing to improve his award winning game, <a href="https://mdubel.shinyapps.io/shark-attack/" target="_blank" rel="noopener noreferrer">Shark Attack!</a></blockquote> <h2 id="anchor-2">useR! 2021 Presentation: How to Conduct Effective User Tests</h2> by <a href="https://appsilon.com/author/maria/" target="_blank" rel="noopener noreferrer">Maria Grycuk</a> Abstract: User tests are a crucial part of development, yet we frequently skip over them or conduct them too late in the process. Involving users early on allows us to verify if the tool we want to build will be used or will be forgotten in the next few months. Another risk that rises significantly when we don’t show the product to end-users before going live is that we will build something unintuitive and difficult to use. When you are working with a product for a few months and you know every button and feature by heart, it is hard to take a step back and think about usability. In this talk, I would like to share a few tips on how to perform a user interview, based on my experience working with Fortune 500 clients on Shiny dashboards. I will show why conducting effective user tests is so critical, and explain how to ask the right questions to gain the most from the interview. <iframe title="YouTube video player" src="https://www.youtube.com/embed/yPoxP5y_BS0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe> <h2 id="anchor-3">Good Practices</h2><ul><li style="font-weight: 400;" aria-level="1">Do not wait until the product is “good enough”<ul><li style="font-weight: 400;" aria-level="2">Let users explore the product as soon as they have something to interact with.</li><li style="font-weight: 400;" aria-level="2">Start with a small POC with mocked features, validate ideas, and then progress to a final product.</li></ul> </li> </ul> <ul><li style="font-weight: 400;" aria-level="1">Limit the explanation to the minimum, do not describe anything without being asked first<ul><li style="font-weight: 400;" aria-level="2">The goal here is to see how a typical user would interact without guidance from the developer.</li><li style="font-weight: 400;" aria-level="2">Take note if any part of the interaction is confusing.</li></ul> </li> </ul> <ul><li style="font-weight: 400;" aria-level="1">Ask users to perform business actions<ul><li style="font-weight: 400;" aria-level="2">Monitor flow efficiency when the user is given an indirect task (e.g., Display sales revenue from X Region).</li><li style="font-weight: 400;" aria-level="2">Pay attention to any errors and if the user was able to recover.</li></ul> </li> </ul> <ul><li style="font-weight: 400;" aria-level="1">Ask users to speak aloud about their thinking process and expectations<ul><li style="font-weight: 400;" aria-level="2">This helps provide a clear understanding of any disconnect between the developer and the user’s thought process.</li></ul> </li> </ul> <ul><li style="font-weight: 400;" aria-level="1">Focus on how they try to achieve the goal<ul><li style="font-weight: 400;" aria-level="2">Again, monitor flow efficiency.</li><li style="font-weight: 400;" aria-level="2">Are there any steps to add/remove that will improve the user flow?</li></ul> </li> </ul> <ul><li style="font-weight: 400;" aria-level="1">When asking about the general feedback, ask open, not leading questions<ul><li style="font-weight: 400;" aria-level="2">The goal here is to obtain honest, constructive feedback.</li></ul> </li> </ul> <blockquote>Discover the possibilities of <a href="https://appsilon.com/shiny/" target="_blank" rel="noopener noreferrer">R Shiny</a> with Appsilon - let's build something beautiful together!</blockquote> <h2 id="anchor-4">Q&A From Maria's Presentation at useR! 2021</h2> <b>Q:</b> How long do these one-on-ones usually take, per session? <b>A:</b> It depends on the app, but is usually <b>1.5-2h</b>. And if the application is more complex we are usually going only through a part of it. I always try to save time for an open discussion at the end. <b>Q:</b> You mentioned sharing POCs with mocked functionality - are there situations where users spend too much time stumbling over these mocks or spend too much time discussing desired functionality that is scheduled for "too far" in the future? <b>A:</b> Oh yes! This is quite common. I am open to all feedback but if I see the conversation is not going anywhere I ask the user to go to a different part of the app. Recently I had a problem with deprecated data in the application. Users were mostly focused on this for the first few minutes. But I took some time to explain to them that this is just temporary and I would like to focus on usability. <b>Q:</b> What motivated your switch from Shiny to Python+React between your POC and Final App? Or in other words, what were the limitations of Shiny or R? <b>A:</b> It was a complex decision. The application has some elements written in R, but the core application is written in React and Python. The main reason was the tech stack supported by the client and the number of users (it is in the thousands and will grow). Note: It was decided at the beginning so we knew we were going to develop the final application in React and Python. <h2 id="anchor-5">useR! 2021 Follow Up</h2> Thank you to the 1800+ members who joined the Appsilon channel and to those who participated in Maria’s presentation channel. This year's conference was filled with informative talks and impressive keynote speakers. Appsilon is proud of our team members that gave non-sponsored talks and we are honored to help support the global R community as a platinum sponsor of useR! 2021. We are excited to see what innovations grow from the R community’s experience at useR! 2021. <h2>We're Hiring!</h2> Interested in working with the leading experts in Shiny? Appsilon is looking for creative thinkers around the globe. We're a remote-first company, with team members in 7+ countries. Our team members are leaders in the R dev community and we take our core purpose seriously. <blockquote>Advance technology to preserve and improve human life #purpose</blockquote> We promote an inclusive work environment and strive to create a friendly team with a diverse set of skills and a commitment to excellence. <a href="https://appsilon.com/company/" target="_blank" rel="noopener noreferrer">Contact us</a> and see what it's like to work on groundbreaking projects with Fortune 500 companies, NGOs, and non-profit organizations. <img class="aligncenter size-full wp-image-7024" src="https://webflow-prod-assets.s3.amazonaws.com/6525256482c9e9a06c7a9d3c%2F65b020493e47f6a35730bb22_Be-a-part-of-our-team.webp" alt="Be a part of our team" width="1200" height="628" /> <p style="text-align: center;"><b>Appsilon is hiring for remote roles! See our </b><a href="https://appsilon.com/careers/" target="_blank" rel="noopener noreferrer"><b>Careers</b></a><b> page for all open positions, including a </b><a href="https://appsilon.com/careers/job-offer/?job=senior-react-developer-freelancer" target="_blank" rel="noopener noreferrer"><b>React Developer</b></a><b> and </b><a href="https://appsilon.com/careers/job-offer/?job=r-shiny-developer" target="_blank" rel="noopener noreferrer"><b>R Shiny Developers</b></a>.<b> Join Appsilon and work on groundbreaking projects with the world’s most influential Fortune 500 companies.</b></p>