{"id":453,"date":"2018-07-13T04:18:40","date_gmt":"2018-07-13T04:18:40","guid":{"rendered":"https:\/\/blog.hassler.ec\/wp\/?p=453"},"modified":"2018-06-27T17:23:47","modified_gmt":"2018-06-27T17:23:47","slug":"an-interaction-design-framework-to-cover-all-your-bases","status":"publish","type":"post","link":"https:\/\/blog.hassler.ec\/wp\/2018\/07\/13\/an-interaction-design-framework-to-cover-all-your-bases\/","title":{"rendered":"An interaction design framework to cover all your\u00a0bases"},"content":{"rendered":"<section class=\"section section--body section--first\">\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h2 id=\"c30c\" class=\"graf graf--h4 graf-after--h3 graf--subtitle\">Pointers to keep in mind before delving deep in micro-interactions and pixel level\u00a0details.<\/h2>\n<p id=\"1242\" class=\"graf graf--p graf-after--h4\">My first few years as a designer involved a lot of learning that was mostly through trial and error. It usually followed the format of\u200a\u2014\u200aunderstand the problem, try a few ideas out, guess what process works best, and go ahead and do it. This way of designing definitely did teach me quite a bit and I learned about dead-ends as and when I approached them. In my naive years, there was not too much thought put into an organized way of doings things. As I grow as a designer, I have noticed myself building frameworks and process guidelines for myself. This has been necessary because of the impact the designs achieve, the stakes involved, and the scale of the projects.<\/p>\n<p id=\"f167\" class=\"graf graf--p graf-after--p\">With increasing stakes of the designs, it is important to iron-out details and get\u00a0<em class=\"markup--em markup--p-em\">as much\u00a0<\/em>right in the MVE (minimal viable experience; I don\u2019t believe in MVPs, and that\u2019s for a different discussion) that I am designing for.<\/p>\n<p id=\"2d0b\" class=\"graf graf--p graf-after--p\">Over the years, I found myself going back to the drawing board because I missed out some key elements of the design flow. On retrospective, I realized this was because I was not really following a format to iron out the designs before the hand-off.<\/p>\n<blockquote id=\"083a\" class=\"graf graf--pullquote graf-after--p\"><p>Engineers really love having complete designs that are well thought-through and are logically thorough.<\/p><\/blockquote>\n<h3 id=\"0bbb\" class=\"graf graf--h3 graf-after--pullquote\">Enter the Framework<\/h3>\n<p id=\"5cf4\" class=\"graf graf--p graf-after--h3\">To aid with thorough designs, I came up with a framework that tries to cover all bases of the flow that I am designing. Some instances, it has proven to be helpful in thinking about cases that were not thought through earlier in the process.<\/p>\n<p id=\"d12d\" class=\"graf graf--p graf-after--p\">The framework that I use is nothing that we designers already don\u2019t do, but it is a conglomeration of the important pointers that we sometimes tend to forget while designing.<\/p>\n<p id=\"e916\" class=\"graf graf--p graf-after--p\">The framework consists of four sections that I like to divide my designs into \u2013<\/p>\n<ol class=\"postList\">\n<li id=\"0f9c\" class=\"graf graf--li graf-after--p\">Happy Path<\/li>\n<li id=\"f0cb\" class=\"graf graf--li graf-after--li\">Edge Cases<\/li>\n<li id=\"eb77\" class=\"graf graf--li graf-after--li\">Transitions &amp; Animations<\/li>\n<li id=\"bb2f\" class=\"graf graf--li graf-after--li graf--trailing\">Content\/Messaging<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\" \/>\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h3 id=\"58ef\" class=\"graf graf--h3 graf--leading\">Happy Path<\/h3>\n<figure id=\"0e68\" class=\"graf graf--figure graf--layoutOutsetLeft graf-after--h3\" data-scroll=\"native\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*sjjyMURZjvPhEi4I4P4VJg.png\" data-width=\"1536\" data-height=\"2048\" data-action=\"zoom\" data-action-value=\"1*sjjyMURZjvPhEi4I4P4VJg.png\" data-scroll=\"native\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"56\" height=\"75\"><\/canvas><img decoding=\"async\" class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*sjjyMURZjvPhEi4I4P4VJg.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*sjjyMURZjvPhEi4I4P4VJg.png\" \/><\/div>\n<\/div>\n<\/figure>\n<p id=\"c869\" class=\"graf graf--p graf-after--figure\">This is something that almost all designers do with certainty. If we are designing a way for a person to book a flight ticket, what is the ideal journey going to look like? Starting from choosing dates of travel, to selecting a flight, and the checkout process. This ideal path is something that I lay out first without thinking about the what-ifs. I iron out the specific details of the ideal path without paying attention to any edge-cases. I call this the\u00a0<em class=\"markup--em markup--p-em\">user journey without any quirks.<\/em><\/p>\n<p id=\"1979\" class=\"graf graf--p graf-after--p\">This is a no-brainer but allowing yourself to think only about the ideal journey and not be bothered by the edge-cases helps in focusing on the flow and not get carried away. This conscious session helps me jot down questions that come to my mind about the what-ifs but not pay attention to the design of the what-ifs.<\/p>\n<h4 id=\"6b24\" class=\"graf graf--h4 graf-after--p\">The Scenarios of the Happy\u00a0Path<\/h4>\n<p id=\"651b\" class=\"graf graf--p graf-after--h4\">The next step to this phase is accounting for the different scenarios. Many would argue that accounting for different scenarios does not mean you are designing the ideal journey. In my view, scenarios are different from edge-cases.<\/p>\n<p id=\"400d\" class=\"graf graf--p graf-after--p\">For example, in Enterprise design, you usually have multiple scenarios of a particular flow. How does a particular flow seem when a setting is enabled or disabled. What does a tertiary state look like\u200a\u2014\u200athat is neither disabled nor enabled but a dormant state.<\/p>\n<p id=\"33df\" class=\"graf graf--p graf-after--p\">Accounting for scenarios does not apply to all design flows but definitely helps in being mindful.<\/p>\n<p id=\"61a9\" class=\"graf graf--p graf-after--p\">Another example of different scenarios\u200a\u2014\u200asay on Google Maps, what does the new experience you are designing look like when voice is disabled, or when the map theme is in night mode? Listing out the different possible scenarios early in your design process will allow you to identify sub-journeys that could have been easily missed.<\/p>\n<p id=\"4a30\" class=\"graf graf--p graf-after--p graf--trailing\">This is ideally just branching out the different possibilities of the ideal journey by creating sub-journeys if necessary of just the happy path.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\" \/>\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h3 id=\"8fc5\" class=\"graf graf--h3 graf--leading\">Edge Cases<\/h3>\n<figure id=\"e757\" class=\"graf graf--figure graf--layoutOutsetLeft graf-after--h3\" data-scroll=\"native\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*_l7Aps7C8jANp6yali5T9Q.png\" data-width=\"1536\" data-height=\"2048\" data-action=\"zoom\" data-action-value=\"1*_l7Aps7C8jANp6yali5T9Q.png\" data-scroll=\"native\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"56\" height=\"75\"><\/canvas><img decoding=\"async\" class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*_l7Aps7C8jANp6yali5T9Q.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*_l7Aps7C8jANp6yali5T9Q.png\" \/><\/div>\n<\/div>\n<\/figure>\n<p id=\"fbe6\" class=\"graf graf--p graf-after--figure\">You are in the good books of the engineers you work with the minute you start accounting for all the possible edge-cases. In my working experience, there are two types of edge-cases that occur on a regular basis \u2014<\/p>\n<ol class=\"postList\">\n<li id=\"773b\" class=\"graf graf--li graf-after--p\"><strong class=\"markup--strong markup--li-strong\">User initiated edge cases<\/strong><\/li>\n<li id=\"fcd8\" class=\"graf graf--li graf-after--li\"><strong class=\"markup--strong markup--li-strong\">System generated<\/strong><\/li>\n<\/ol>\n<p id=\"dab7\" class=\"graf graf--p graf-after--li\"><strong class=\"markup--strong markup--p-strong\">User Initiated edge cases<br \/>\n<\/strong>There are cases when a user erroneously performs an action that is not expected of them in an ideal flow.<\/p>\n<p id=\"555d\" class=\"graf graf--p graf-after--p\">Let\u2019s take some examples here &#8211;<\/p>\n<ul class=\"postList\">\n<li id=\"42e4\" class=\"graf graf--li graf-after--p\">A user is going through a wizard of 4 steps, and is on the third step. The user accidentally hits the close or cancel button. Should the wizard just close? Or should there be room for error and provide the user with a way to recover from the error?<\/li>\n<li id=\"ae39\" class=\"graf graf--li graf-after--li\">Another similar example, a user is filling up a tedious form and hits cmd+q and the browser just closes. Should there be a way for the user to recover from the loss or should they be filling the form again from the start?<\/li>\n<li id=\"29eb\" class=\"graf graf--li graf-after--li\">Another simple example is when users forget to enter into mandatory fields which throws a validation error. What do these screens look like? Thinking about them and having them handed over to engineering is important for a complete round design.<\/li>\n<\/ul>\n<p id=\"1a89\" class=\"graf graf--p graf-after--li\">Sometimes, for security reasons, the answer is the latter experience where they have to restart. Thinking about these scenarios helps in drafting all possible experiences for the actual flow of a user is not always just the ideal one.<\/p>\n<p id=\"2988\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">System Generated<br \/>\n<\/strong>There are cases when the technology fails. The internet stops working, or there is an error because of the system status, or the API endpoints are overloaded with requests.<\/p>\n<p id=\"41d0\" class=\"graf graf--p graf-after--p\">Should the user be notified of the error? Or should the system just rectify itself upon being active again? What if the auto-correction is not technologically feasible?<\/p>\n<p id=\"7768\" class=\"graf graf--p graf-after--p\">How does the interface handle such situations?<\/p>\n<p id=\"ad8e\" class=\"graf graf--p graf-after--p graf--trailing\"><strong class=\"markup--strong markup--p-strong\">The edge-case pitfall<br \/>\n<\/strong>Sometimes, I have found myself redesigning the ideal experience to account for edge-cases. This is a pitfall I am being wary of recently. Changing the ideal happy path experience just to accommodate edge-cases means some serious thinking needs to go behind system design\u200a\u2014\u200athis to me, highlights problems in how the system is engineered to work and handle the one-offs. This is where designers have the opportunity to challenge the status-quo of the system\u2019s architecture.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\" \/>\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h3 id=\"69b2\" class=\"graf graf--h3 graf--leading\">Screen Transitions<\/h3>\n<figure id=\"d0db\" class=\"graf graf--figure graf--layoutOutsetLeft graf-after--h3\" data-scroll=\"native\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*hh9vMuHyOtW7JYEi9snexw.png\" data-width=\"1536\" data-height=\"2048\" data-action=\"zoom\" data-action-value=\"1*hh9vMuHyOtW7JYEi9snexw.png\" data-scroll=\"native\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"56\" height=\"75\"><\/canvas><img decoding=\"async\" class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*hh9vMuHyOtW7JYEi9snexw.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*hh9vMuHyOtW7JYEi9snexw.png\" \/><\/div>\n<\/div>\n<\/figure>\n<p id=\"4880\" class=\"graf graf--p graf-after--figure\">When we design screens and the flow from one screen to another, sometimes we forget to account for the changes between the screens. The real built systems don\u2019t work the way it is designed on InVision prototypes.<\/p>\n<p id=\"948d\" class=\"graf graf--p graf-after--p\">There are multiple scenarios where we need to think about how the transitions between screens look like. A few examples \u2013<\/p>\n<p id=\"e965\" class=\"graf graf--p graf-after--p\"><span class=\"markup--quote markup--p-quote is-other\" data-creator-ids=\"anon\">There are delays between screens, fetching of data needs to happen, back-end validations to occur as users progress through screens, loading times due to slow connectivity are a few simple examples.<\/span><\/p>\n<p id=\"5faa\" class=\"graf graf--p graf-after--p graf--trailing\">Ignoring these transitional states leaves gaps and hence results in unpolished flows developed with no real feedback given to users on what the status of screens are.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\" \/>\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h3 id=\"d06e\" class=\"graf graf--h3 graf--leading\">Content &amp; Messaging<\/h3>\n<figure id=\"f43f\" class=\"graf graf--figure graf--layoutOutsetLeft graf-after--h3\" data-scroll=\"native\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*cczhHVG5bUzSpwrhWlt0_A.png\" data-width=\"1536\" data-height=\"2048\" data-action=\"zoom\" data-action-value=\"1*cczhHVG5bUzSpwrhWlt0_A.png\" data-scroll=\"native\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"56\" height=\"75\"><\/canvas><img decoding=\"async\" class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*cczhHVG5bUzSpwrhWlt0_A.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/600\/1*cczhHVG5bUzSpwrhWlt0_A.png\" \/><\/div>\n<\/div>\n<\/figure>\n<p id=\"d4c9\" class=\"graf graf--p graf-after--figure\"><strong class=\"markup--strong markup--p-strong\">Content<br \/>\n<\/strong>We oftentimes end up designing with placeholder text that is an intermittent temporary replacement to the actual copy. All designers do this to get ahead with designing the flows as they don\u2019t have access to the actual copy yet. While this is normal and necessary to progress, it can be quite a task to make changes to the layout if the copy does not really fit with the intended design.<\/p>\n<p id=\"4118\" class=\"graf graf--p graf-after--p\">A technique that has been helping me in such situations is not just placing placeholder Lorem Ipsum, but typing in a version of the possible copy. This will give you an idea of how much space is required, and the content strategist a head-start on how they should be progressing.<\/p>\n<p id=\"2789\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">Links to docs<br \/>\n<\/strong>It is also important to collect all the links to the docs wherever required and have it tied to the mocks in some manner. I do this by leaving comments on InVision with the links to docs wherever necessary.<\/p>\n<p id=\"5f2f\" class=\"graf graf--p graf-after--p graf--trailing\"><strong class=\"markup--strong markup--p-strong\">Messaging and alerts<br \/>\n<\/strong>When designing flows, there are occasions where there needs to be messages sent to the user. An email needs to be sent upon completion of an action, or data needs to be logged on a completely different part of the flow, or the user needs to be alerted after a point not exactly in the current flow. It is important to create necessary screens for these parts of the experience. How does the email look with the content needs to be a part of the email etc.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\" \/>\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h4 id=\"2f6e\" class=\"graf graf--h4 graf--leading\">Final Thoughts<\/h4>\n<p id=\"f85c\" class=\"graf graf--p graf-after--h4 graf--trailing\">This is, by no stretch, all the steps involved in day to day interaction design challenges, but a good strategy to develop by keeping these pointers in mind before delving deep in micro-interactions and pixel level details.<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p>SOURCE:\u00a0<a href=\"https:\/\/uxdesign.cc\/a-interaction-design-framework-to-cover-all-your-bases-1e616a954827\"><strong>https:\/\/uxdesign.cc\/a-interaction-design-framework-to-cover-all-your-bases-1e616a954827<\/strong><\/a><\/p>\n<h3><\/h3>\n<h3 class=\"u-lineHeightTightest\"><a class=\"ds-link ds-link--styleSubtle ui-captionStrong u-inlineBlock link link--darken link--darker\" dir=\"auto\" href=\"https:\/\/uxdesign.cc\/@adhithyarkumar?source=post_header_lockup\" data-action=\"show-user-card\" data-action-source=\"post_header_lockup\" data-action-value=\"1f1e9dacafcd\" data-action-type=\"hover\" data-user-id=\"1f1e9dacafcd\" data-collection-slug=\"user-experience-design-1\">Adhithya<\/a><\/h3>\n<div class=\"ui-caption ui-xs-clamp2 postMetaInline\">Designer at Google. HCI grad. Constantly annoyed and delighted interchangeably. www.adhithyakumar.com<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Pointers to keep in mind before delving deep in micro-interactions and pixel level\u00a0details. My first few years as a designer [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":455,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49,12,48,78,44,47,21,29],"tags":[],"class_list":["post-453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-back-end","category-bloghassler-ec","category-front-end","category-google","category-javascript","category-medium","category-productividad","category-programacion"],"_links":{"self":[{"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/posts\/453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/comments?post=453"}],"version-history":[{"count":3,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/posts\/453\/revisions"}],"predecessor-version":[{"id":536,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/posts\/453\/revisions\/536"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/media\/455"}],"wp:attachment":[{"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/media?parent=453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/categories?post=453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.hassler.ec\/wp\/wp-json\/wp\/v2\/tags?post=453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}