{"id":647,"date":"2009-06-01T14:54:46","date_gmt":"2009-06-01T14:54:46","guid":{"rendered":"http:\/\/www.mjtnet.com\/blog\/?p=647"},"modified":"2009-06-01T14:55:40","modified_gmt":"2009-06-01T14:55:40","slug":"easy-to-use-is-easy-to-automate","status":"publish","type":"post","link":"https:\/\/www.mjtnet.com\/blog\/2009\/06\/01\/easy-to-use-is-easy-to-automate\/","title":{"rendered":"Easy to Use is Easy to Automate"},"content":{"rendered":"<p>I&#8217;ve just finished writing a routine for a customer that automates what I can only describe as a truly horrendous user interface. \u00a0I&#8217;m not sure who designed it or why they designed it the way they did but I feel sorry for people who have to use this software. \u00a0And apparently it is the industry leading software in its niche.<\/p>\n<p>The software is devoid of keyboard shortcuts and there are no menu items. The only way around the software is by clicking the mouse on icons which have no way at all of gaining keyboard focus &#8211; no keyboard short cuts and you cannot even Tab to them.<\/p>\n<p>The main data entry screen has a few accelerator keys (shown by an underlined character) dotted around but they are duplicated and don&#8217;t seem to work anyway! \u00a0So on one screen ALT-S would appear to focus three different fields, but in fact focuses none.<\/p>\n<p>Once logged into the system it would seem the only way back to the main menu is to exit the app and restart it.<\/p>\n<p>The only way to add a customer record is first to search for one.<\/p>\n<p>And this is just the start of it. \u00a0<\/p>\n<p>Luckily Macro Scheduler gives us <a href=\"http:\/\/www.mjtnet.com\/imagerecognition.htm\">image recognition<\/a> and <a href=\"http:\/\/www.mjtnet.com\/screen-scraping.htm\">screen scraping<\/a> abilities so even this dreadful user interface can be automated. \u00a0We did it. \u00a0But I had to spare a thought for the people who use this software every day. \u00a0Everything takes twice as long to do as it needs to. \u00a0It can&#8217;t be fun.  It also suggests that the UI wasn&#8217;t tested and no consideration was made to its accessibility.<\/p>\n<p>As I said in <a href=\"http:\/\/www.mjtnet.com\/blog\/2006\/01\/13\/why-its-good-to-automate\/\">Why it\u2019s Good to Automate<\/a>:<\/p>\n<blockquote><p>Build an application with good keyboard support and your application can be automated more easily. If it can be automated easily it will be easy to use!<\/p><\/blockquote>\n<p>Sure there are some types of software where only an image based approach makes sense. But this particular app is just a way to view and manage customer information.<\/p>\n<p>Sorry for the rant.  But it just helps to demonstrate how a decent UI can be more easily automated.  While we have tools such as image recognition and screen text capture that will help us automate cumbersome interfaces, a well designed UI can be automated more quickly and more efficiently.  It also shows how automation can help test an application and ensure it is accessible.  If a UI is well designed the UI can be tested, and looking at it the other way around, if the app can&#8217;t be automated easily then perhaps the UI is hard to use, especially for people who cannot use a mouse, or rely on screen readers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve just finished writing a routine for a customer that automates what I can only describe as a truly horrendous user interface. \u00a0I&#8217;m not sure who designed it or why they designed it the way they did but I feel sorry for people who have to use this software. \u00a0And apparently it is the industry [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/posts\/647"}],"collection":[{"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/comments?post=647"}],"version-history":[{"count":7,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/posts\/647\/revisions"}],"predecessor-version":[{"id":654,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/posts\/647\/revisions\/654"}],"wp:attachment":[{"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/media?parent=647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/categories?post=647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mjtnet.com\/blog\/wp-json\/wp\/v2\/tags?post=647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}