{"id":15502,"date":"2018-07-02T10:59:25","date_gmt":"2018-07-02T09:59:25","guid":{"rendered":"https:\/\/marvel7077.wpengine.com\/?p=15502"},"modified":"2020-09-03T12:55:30","modified_gmt":"2020-09-03T11:55:30","slug":"design-ui-states-communicate-effectively-using-finite-state-machine-table","status":"publish","type":"post","link":"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/","title":{"rendered":"How to Design UI States and Communicate Effectively with Developers Using the Finite State Machine\u00a0Table"},"content":{"rendered":"<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Life can be tough sometimes for UI designers. While they get to create great designs, they also get to deal with pressure from clients or PMs. They\u2019re required to consider user experience and user flow. And they often struggle to find an effective way to communicate with developers.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">To relieve some of the pressure from my fellow designers, I want to help by introducing a better way of handling UI components with state variations. I believe this is one of the biggest challenges designers face.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Dealing with state variations of UI components is painful. At first, I thought it was so difficult because you need to create different views, which can be boring. But then I realized that design is not the terrifying part. Rather, missing states and telling developers exactly what you want are. So, this article will address these two issues.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">State and flowchart<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">To prevent the design team from failing to prepare necessary states, <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/medium.com\/@mikehlee\/designing-for-various-states-823816e49c8d\">these<\/a> <a class=\"link link--blue fontWeight-4\"href=\"http:\/\/scotthurff.com\/posts\/why-your-user-interface-is-awkward-youre-ignoring-the-ui-stack\">five<\/a> <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/uxdesign.cc\/a-cup-of-coffee-and-states-of-ui-screens-1873f522901e\">states<\/a> have been proposed as the norm for designers to follow. But for the sake of accuracy, I\u2019d like to point out the difference between a state and a matching view first.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">State is in fact the output of a UI component after receiving an input. One state might or might not need a matching view to interact with users.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Therefore, a UI component can only have <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/medium.com\/@mikehlee\/designing-for-various-states-823816e49c8d\">five states<\/a>, but each state can actually have various versions of the views. Confused? Let\u2019s take a look at an everyday example of a submit button, and I think you\u2019ll grasp it immediately.<\/p>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/14DGs1vIBVby45_64HYaU2w.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/14DGs1vIBVby45_64HYaU2w.png\" alt=\"\" width=\"1440\" height=\"540\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">A submit button usually includes state of default, loading, success and error, and each state could have various\u00a0views<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">But how do we know that there are three others states besides the initial one? And how do these states switch between each other? It\u2019s easier to understand this question by looking at a flowchart.<\/p>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1sE0tgdXksyeUVcRrPFucWQ.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1sE0tgdXksyeUVcRrPFucWQ.png\" alt=\"\" width=\"1440\" height=\"858\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">Flowchart is not enough to tell design\u00a0details<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">The method that helps us manage UI states is crucial. It should convey the message of what state the component should switch to after receiving certain input. But even though that flowchart is a powerful tool in most cases, it\u2019s not ideal for detailed state variations, because of these disadvantages:<\/p>\n<ol class=\"pageWrap pageWrap--s list list--ordered marginBottom-l lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">\n<li><strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Inconvenience<\/strong>. It requires the help of software or plugins (other than classic office or design software) to draw, modify, or maintain the chart. And it\u2019s huge.<\/li>\n<li><strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Complexity<\/strong>. It requires extra attention when choosing correct symbols and colors.<\/li>\n<li><strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Confusion<\/strong>. It\u2019s hard to tell which states require a view, and which inputs switch the states.<\/li>\n<\/ol>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">To sum up, it\u2019s inefficient and inaccurate to manage the states of UI components using a flowchart. I believe most designers would agree. So, I\u2019m now going to propose a better way here.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">Finite State Machine (FSM)\u00a0table<\/h2>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1L71agscum-DQ4a1GOrIJIg.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1L71agscum-DQ4a1GOrIJIg.png\" alt=\"\" width=\"1440\" height=\"858\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">FSM table inspired by <a class=\"link link--blue fontWeight-4\"href=\"http:\/\/krasimirtsonev.com\/blog\/article\/managing-state-in-javascript-with-state-machines-stent\">Krasimir\u2019s FSM introduction<\/a><\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Designers, don\u2019t get freaked out by the tech-sounding name! Let me break it down.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">What is the Finite State\u00a0Machine?<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Finite state machine (FSM) is an abstract machine that organizes all possible states and inputs. This methodology is commonly applied in programming and all kinds of devices. Take a look at the finite state machine example of a turnstile illustrated in <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/en.wikipedia.org\/wiki\/Finite-state_machine\">Wikipedia<\/a>, and you\u2019ll have a better idea right away.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Again, the FSM is just a collection of states and inputs. It\u2019s that simple. Let\u2019s take a deeper look at the usage of this table, and experience the power of it.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">How to use the FSM\u00a0table<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">There are three columns in the table: <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">From State<\/strong>, <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Input<\/strong>, and <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">To State<\/strong>.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">In the column <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">From State<\/strong>, each cell represents one possible state the component can have.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">The <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Input<\/strong> column contains the most important information in the table: what limited actions can be executed, or inputs received, in each state.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Finally, the <strong class=\"c-slate lineHeight-l fontSize-l fontWeight-5 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">To State<\/strong> column is in fact the output state according to the corresponding input.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">Why is this\u00a0better?<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">The table clearly lists three things:<\/p>\n<ul class=\"pageWrap pageWrap--s list list--unordered marginBottom-l lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">\n<li>all the possible states<\/li>\n<li>when each action can be completed<\/li>\n<li>the result of completing a certain action<\/li>\n<\/ul>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Comparing this to the flowchart, text notes, or interactive prototype, I believe most developers would be glad to receive this table. It covers almost all the information a developer needs!<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Besides lowering communication costs, the FSM table encourages a mindset as well. It helps build a clear connection between cause and effect, preventing you from making decisions without the support of sound logic.<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">Better Team Communication<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Now, after this brief introduction to the FSM table, let\u2019s consider a more practical and complicated example so we can really see the power of it. Let\u2019s look at a login page.<\/p>\n<div id=\"attachment_6580\" style=\"width: 2890px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1V503xSZPpno1eJDxo3aNmg.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1V503xSZPpno1eJDxo3aNmg.png\" alt=\"\" width=\"2880\" height=\"1150\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">Flowchart and wireframe of authentication page<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">The page contains a header, a main heading, a form group with two input fields, and a submit button. To get an overview of the authentication functions, we still need a clear flowchart. But it can\u2019t express the detailed variations of the components, because of the disadvantages mentioned above.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">For example, if a user clicks the submit button and the validation fails, we get an error message \u2014 and we get this information from the flowchart. But what about specific input validation messages when the user tries to focus, blur, or click against each input field? When should the input validation function init? Should the submit button be locked until the user\u2019s input in the form is validated?<\/p>\n<div id=\"attachment_6580\" style=\"width: 2890px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1QQlxBGGdC1Ina6ZiZhw45Q.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1QQlxBGGdC1Ina6ZiZhw45Q.png\" alt=\"\" width=\"2880\" height=\"2130\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">There\u2019re lots of conditions to\u00a0consider<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">These are all detailed decisions that might affect user experience, and they shouldn\u2019t be ignored. But how do you, as a designer, tell the developer exactly what you\u2019re thinking? Interactive prototypes, lists of notes, and face-to-face meeting can all be ineffective.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">But by preparing an FSM table, things instantly become crystal clear. You can even prepare numerous versions rapidly according to different user experience concerns.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">If you want the submit button to be disabled before all input fields are correctly completed, the table would look like this:<\/p>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/15s0pRGI3eceLTpgmfs9w3A.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/15s0pRGI3eceLTpgmfs9w3A.png\" alt=\"\" width=\"1440\" height=\"2117\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">Authenticate form FSM \u2014 version\u00a0disabled<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Or if you follow <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/material.io\/design\/components\/text-fields.html#usage\">Google\u2019s Material Design Guide<\/a>, the table then looks like this:<\/p>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1acPiRRSJPfCPyl1rGuP97Q.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1acPiRRSJPfCPyl1rGuP97Q.png\" alt=\"\" width=\"1440\" height=\"2117\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">Authenticate form FSM \u2014 version Material\u00a0Design<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Isn\u2019t that easy, fast, and clear? I think it\u2019s way better than other methods!<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">Furthermore, an FSM table can take care of components that aren\u2019t related to data processing as well. Say that the designer wants the header to behave like <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/legramme.com\/\">this beautiful site<\/a>. The FSM table can help provide thresholds and views of each state.<\/p>\n<div id=\"attachment_6580\" style=\"width: 1450px\" class=\"wp-caption aligncenter\"><a class=\"link link--blue fontWeight-4\"href=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1vFQbsYk1eKBt8ddSPdBxew.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6580\" class=\"wp-image-6580 size-full\" src=\"https:\/\/marvel7077.wpengine.com\/wp-content\/uploads\/2018\/07\/1vFQbsYk1eKBt8ddSPdBxew.png\" alt=\"\" width=\"1440\" height=\"705\" \/><\/a><p id=\"caption-attachment-6580\" class=\"wp-caption-text\">Header FSM\u00a0Table<\/p><\/div>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">That\u2019s it! Congratulations on completing a simple yet understandable document for your authentication page, by combining a wireframe, flowchart and FSM table!<\/p>\n<h2 class=\"pageWrap pageWrap--s marginTop-xl marginBottom-l c-black lineHeight-xl fontSize-xl fontWeight-5 breakPointM-lineHeight-xxl breakPointM-fontSize-xxl\" style=\"margin-left: auto; margin-right: auto;\">One final\u00a0note<\/h2>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">In a big company with specialized teams that collaborate intimately on one product, designers might not be required to think about state management problems. I\u2019ve just never been a part of this kind of team before. In general, I think most UI designers still need to communicate with developers, managers, or other designers about state transition in their careers.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\">I sincerely hope that the FSM table helps designers reduce precious time resources on dealing with communication obstacles, and even helps them discover a new way of thinking.<\/p>\n<p class=\"pageWrap pageWrap--s marginBottom-m paddingBottom-s c-slate lineHeight-l fontSize-l fontWeight-3 breakPointM-fontSize-xl breakPointM-lineHeight-xl\"><em>This article was originally published on <a class=\"link link--blue fontWeight-4\"href=\"https:\/\/medium.freecodecamp.org\/designing-ui-states-and-communicate-with-developers-effectively-by-fsm-fb420ca53215\">Vince's Medium page<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Life can be tough sometimes for UI designers. While they get to create great designs, they also get to deal with pressure from clients or PMs. They\u2019re required to consider user experience and user flow. And they often struggle to find an effective way to communicate with developers. To relieve some of the pressure from my fellow designers, I want&#8230; <a class=\"link link--blue fontWeight-4\" href=\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/\">Read More &#65515;<\/a><\/p>\n","protected":false},"author":216,"featured_media":15515,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[498],"tags":[],"class_list":["post-15502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ui"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"description\" content=\"I want to help by introducing a better way of handling UI components with state variations.I believe this is one of the biggest challenges designers face.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Design UI States and Communicate Effectively with Developers Using the Finite State Machine\u00a0Table | Marvel Blog\" \/>\n<meta property=\"og:description\" content=\"I want to help by introducing a better way of handling UI components with state variations.I believe this is one of the biggest challenges designers face.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/\" \/>\n<meta property=\"og:site_name\" content=\"Marvel Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/marvelapp\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-02T09:59:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-03T11:55:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marvelapp.com\/wp-content\/uploads\/2018\/07\/vince.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marvelapp\" \/>\n<meta name=\"twitter:site\" content=\"@marvelapp\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"5 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/marvelapp.com\/blog\/#organization\",\"name\":\"Marvel\",\"url\":\"https:\/\/marvelapp.com\/blog\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/marvelapp\",\"https:\/\/www.instagram.com\/marvelapp\/\",\"https:\/\/www.linkedin.com\/company\/marvel-app\/\",\"https:\/\/twitter.com\/marvelapp\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/marvelapp.com\/blog\/#logo\",\"inLanguage\":\"en-GB\",\"url\":\"https:\/\/marvelapp.com\/wp-content\/uploads\/2018\/06\/Logo-Light.png\",\"width\":1605,\"height\":1130,\"caption\":\"Marvel\"},\"image\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/marvelapp.com\/blog\/#website\",\"url\":\"https:\/\/marvelapp.com\/blog\/\",\"name\":\"Marvel Blog\",\"description\":\"Ideas and words on user experience, design, collaboration and more\",\"publisher\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/marvelapp.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#primaryimage\",\"inLanguage\":\"en-GB\",\"url\":\"https:\/\/marvelapp.com\/wp-content\/uploads\/2018\/07\/vince.png\",\"width\":\"1600\",\"height\":\"800\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#webpage\",\"url\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/\",\"name\":\"How to Design UI States and Communicate Effectively with Developers Using the Finite State Machine\\u00a0Table | Marvel Blog\",\"isPartOf\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#primaryimage\"},\"datePublished\":\"2018-07-02T09:59:25+00:00\",\"dateModified\":\"2020-09-03T11:55:30+00:00\",\"description\":\"I want to help by introducing a better way of handling UI components with state variations.I believe this is one of the biggest challenges designers face.\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/\"]}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#webpage\"},\"author\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/#\/schema\/person\/2ecb6897e4059ae34a86112293f499b2\"},\"headline\":\"How to Design UI States and Communicate Effectively with Developers Using the Finite State Machine\\u00a0Table\",\"datePublished\":\"2018-07-02T09:59:25+00:00\",\"dateModified\":\"2020-09-03T11:55:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#primaryimage\"},\"articleSection\":\"Visual Design\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/marvelapp.com\/blog\/design-ui-states-communicate-effectively-using-finite-state-machine-table\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/marvelapp.com\/blog\/#\/schema\/person\/2ecb6897e4059ae34a86112293f499b2\",\"name\":\"Vince MingPu Shao\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/marvelapp.com\/blog\/#personlogo\",\"inLanguage\":\"en-GB\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7a999075d05cfaae1f94f07c714a83d7ef71535e9b75062ae8126f5a1e5b5d51?s=96&d=mm&r=g\",\"caption\":\"Vince MingPu Shao\"},\"description\":\"Front-end Developer \/ Graphic Designer from Taiwan\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/posts\/15502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/users\/216"}],"replies":[{"embeddable":true,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/comments?post=15502"}],"version-history":[{"count":0,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/posts\/15502\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/media\/15515"}],"wp:attachment":[{"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/media?parent=15502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/categories?post=15502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marvelapp.com\/blog\/wp-json\/wp\/v2\/tags?post=15502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}