PodSearch

Developing Perspective

#188: Thoughtful Accessibility

 

00:00:00 ◼   ► Hello and welcome to Developing Perspectives. Developing Perspective is a podcast discussing

00:00:04 ◼   ► news of note in iOS development, Apple and the like. I'm your host, David Smith. I'm

00:00:08 ◼   ► an independent iOS developer based in Herndon, Virginia. This is show number 188, and today

00:00:14 ◼   ► is Friday, June 20th. Developing Perspective is never longer than 15 minutes, so let's

00:00:18 ◼   ► get started. So first thing I was just going to mention is an update to a site that I found

00:00:25 ◼   ► quite useful and I figured I'd mention it here. As we're all kind of going through all

00:00:30 ◼   ► the content that came out of WWDC, try to get through all the videos, listen to them,

00:00:34 ◼   ► watch them, whatever we can to get through. I think it's 106 videos or something like

00:00:39 ◼   ► that. It's quite a lot of content to get through. But something that Matt Thompson has put together

00:00:46 ◼   ► that is a useful resource that I've run into many -- used many times and so I've mentioned

00:00:50 ◼   ► here, is a site called ASCII WWDC. There's a link in the show notes to it. Basically,

00:00:56 ◼   ► it's a way he took, he extracts the transcript tracks from the videos, I think, and then,

00:01:04 ◼   ► you know, provides them in a searchable interface. So it's just really useful, I find. If you're

00:01:08 ◼   ► curious what was said at WWDC about a specific technology, you can go in and search and say,

00:01:14 ◼   ► "Hey, show me all the WWDC videos that involved," whatever, "UI search controller," or something

00:01:19 ◼   ► like that. And so I just mentioned it here, I find it really helpful as I'm trying to

00:01:23 ◼   ► navigate what it is exactly I'm going to be doing over the next two months in my work

00:01:28 ◼   ► to be able to kind of make sure that I'm touching on all the places in the videos that that

00:01:33 ◼   ► particular topic was covered. All right, so the main topic I'm going to be diving into

00:01:38 ◼   ► today is talking a little bit about accessibility. This is coming out of a update that I did

00:01:44 ◼   ► for pedometer++ before W2C, I think, and it was a topic that I mentioned a little bit

00:01:50 ◼   ► at the time, but I didn't really have time to go into it in great detail. And so given

00:01:54 ◼   ► that this is a fairly slow week, I figured I'd dive into it now.

00:02:00 ◼   ► So accessibility, it's probably fair to start off talking about what I mean by that. And

00:02:06 ◼   ► specifically I'm going to be focused on the accessibility elements of things like voice

00:02:11 ◼   ► VoiceOver in iOS. Focus mostly on the visual impairments. Obviously there's a variety of

00:02:16 ◼   ► different accessibilities, aspects of your software you build. People with different

00:02:22 ◼   ► impairments would require software that would be built in a specific way. But the one that

00:02:26 ◼   ► I'm going to focus on mostly is on VoiceOver and otherwise in general focused on building

00:02:34 ◼   ► applications for the visually impaired. And accessibility is a tricky topic sometimes

00:02:40 ◼   ► in the sense that I think it's an important part of software development, not necessarily

00:02:45 ◼   ► in so much as it is strictly a way to further your business or the financial of your application.

00:02:55 ◼   ► I think sometimes that can be the case. The visually impaired community is very vocal

00:03:01 ◼   ► and is very good about rewarding good apps, in my experience. But moreover, there's just

00:03:08 ◼   ► a certain amount of it's just the right thing to do. And sometimes you do things just because

00:03:12 ◼   ► they're the right thing to do, not necessarily because you'll see a strict return on it.

00:03:18 ◼   ► But making an application that appeals to a broader audience, you know, certainly has

00:03:23 ◼   ► some return to it. So I would encourage everybody to do it. In my experience, it's relatively

00:03:28 ◼   ► easy. The amount of work it takes is certainly not overwhelming. And the impact that that

00:03:33 ◼   ► can have in someone's life is quite dramatic. There's, on a personal level, there's nothing

00:03:38 ◼   ► quite, you know, there are a few things in my experience when I get a help desk request

00:03:43 ◼   ► from somebody who talks about how my application has allowed them to do something that they

00:03:47 ◼   ► couldn't otherwise do. And as a result, you know, has enriched their life and made it

00:03:53 ◼   ► better. That's quite dramatic. That is something that will sit with you in a way that a lot

00:03:59 ◼   ► of the other work that I do doesn't. You know, when you're really having an impact on people's

00:04:03 ◼   ► lives, that feels awesome. And maybe that's just as selfish as wanting it to pay off financially,

00:04:11 ◼   ► but either way, it's something that I've found to be worthwhile doing. So I'm going to kind

00:04:16 ◼   ► of dive into that a little bit. And what I'm going to focus on more is not so much the

00:04:20 ◼   ► basics of accessibility. I'll mention them briefly. I'm going to focus more on what I

00:04:23 ◼   ► would call thoughtful accessibility. And this is coming out of my own experiences recently.

00:04:29 ◼   ► If you're curious about the general overviews of accessibility, there are tons of W3C videos

00:04:34 ◼   ► about it.

00:04:35 ◼   ► Apple really emphasizes it, but spends a lot of time on it.

00:04:38 ◼   ► And so there's a lot of places to go.

00:04:40 ◼   ► Just look for all W3C videos about accessibility for the actual technical details of it.

00:04:45 ◼   ► But at a high level, accessibility is about providing an alternative way to interact with

00:04:50 ◼   ► your application.

00:04:51 ◼   ► You want to make it so that if someone has trouble seeing the screen, they can still

00:04:56 ◼   ► get useful value out of it.

00:04:59 ◼   ► And there's obviously various degrees of that on the spectrum,

00:05:03 ◼   ► all the way from someone who is completely blind

00:05:05 ◼   ► and is interacting with your application entirely

00:05:08 ◼   ► by touch and sound, versus somebody

00:05:10 ◼   ► for whom it is just difficult to read small text,

00:05:14 ◼   ► or is colorblind, or those types of things.

00:05:17 ◼   ► And so there's different things that you'll do along the way.

00:05:20 ◼   ► But there's a lot of technical things

00:05:22 ◼   ► that you'll do to address that.

00:05:23 ◼   ► So there's a system inside of iOS called VoiceOver.

00:05:27 ◼   ► And this is probably the core part of what

00:05:29 ◼   ► you're going to be looking at.

00:05:30 ◼   ► And VoiceOver is a system extension

00:05:34 ◼   ► that will read elements on the screen to the user

00:05:37 ◼   ► based on certain gestures and things that they do.

00:05:40 ◼   ► If you've never experienced this,

00:05:42 ◼   ► I would highly recommend that you do.

00:05:44 ◼   ► You can't really understand how people

00:05:46 ◼   ► are interacting with your application

00:05:48 ◼   ► unless you've turned this on.

00:05:49 ◼   ► So you go to General, Accessibility,

00:05:51 ◼   ► and you can turn on VoiceOver.

00:05:53 ◼   ► Or really what I do, and I think a lot of developers that I know do this, is you can

00:05:57 ◼   ► set that as a shortcut if you triple tap your home button.

00:06:02 ◼   ► And so then you just triple tap your home button, you can turn it on and off, which

00:06:04 ◼   ► is excellent for development, excellent for making sure that it works without having to

00:06:08 ◼   ► fuss in the settings app.

00:06:11 ◼   ► And so you can -- when you're in voiceover mode, the interaction model is very different.

00:06:16 ◼   ► It has sort of a state to it where there's a selected element that is active, and when

00:06:21 ◼   ► it becomes selected, its name is read aloud, and if you double tap, it'll perform an action

00:06:27 ◼   ► on that. If you swipe left or right, it'll select the next control, and so on. And like

00:06:32 ◼   ► I said, it's a bit hard to describe, but hopefully if you sit down with it and try it, it'll

00:06:37 ◼   ► make a lot of sense. And so that's how a lot of people interact with your application.

00:06:43 ◼   ► And so you want to be thoughtful about how that interaction is going to go. And some

00:06:47 ◼   ► things just aren't going to work. Like, this is something that I've struggled with a little

00:06:50 ◼   ► bit with an app like my weather app, Check the Weather, which has a lot of gestures in

00:06:55 ◼   ► it. And so gestures are often very difficult to translate completely into something like

00:07:01 ◼   ► voiceover because the system is taking over swipe gestures. The system is taking over

00:07:07 ◼   ► a lot of things. And so you just have to be instead thoughtful, not necessarily about

00:07:11 ◼   ► trying to take the same interface and just narrate it to your user. What you're trying

00:07:17 ◼   ► to do is make sure that the information you're trying to present to that user is accessible

00:07:22 ◼   ► in a reasonable and easy to navigate way. And there are really, I think there are probably

00:07:28 ◼   ► three ways, parts to this. And these are the things that I've more recently been able to

00:07:33 ◼   ► learn, especially honestly thanks to people in the visually impaired community who have

00:07:38 ◼   ► reached out to me saying, "I like your app. It has basic voiceover support, but it would

00:07:44 ◼   ► be much better if it did so and so. And they'll expand this and talk to me about this. And

00:07:49 ◼   ► if you're a developer for any amount of time, you're almost certainly going to reach out

00:07:52 ◼   ► to these people. And what I find, if you are, consider them tremendous resources, because

00:07:57 ◼   ► they're giving you insight into something that you can't really project yourself. You

00:08:03 ◼   ► know, as much as I try and think about what it would be like if I couldn't see my screen

00:08:06 ◼   ► or I'll use my application with my eyes closed, I don't know what it's like to actually be

00:08:11 ◼   ► blind or to be visually impaired and to know what that experience is like. So if you have

00:08:17 ◼   ► a user of your application who is available and interested in providing that input to

00:08:21 ◼   ► you, make sure you take advantage of it. I've learned so much every time I've done this.

00:08:26 ◼   ► And so recently, the two things that I learned from one of my users for Podometer++ that

00:08:31 ◼   ► who reached out to me is he was talking to me a lot about the way in which I was ordering

00:08:38 ◼   ► both the controls on the screen and the words in my descriptions.

00:08:45 ◼   ► So let's unpack those two.

00:08:47 ◼   ► So if Predometer++, if you're not familiar with it,

00:08:49 ◼   ► I mean, basically it's a pedometer using the M7 chip

00:08:52 ◼   ► and an iPhone 5S.

00:08:53 ◼   ► And it shows your daily step counts.

00:08:55 ◼   ► So it says how active you were.

00:08:57 ◼   ► And it has a horizontally scrolling bar graph

00:09:01 ◼   ► on the bottom and some stats for your current day at the top.

00:09:05 ◼   ► Fairly straightforward.

00:09:06 ◼   ► And when I'd originally shipped the app,

00:09:08 ◼   ► had just kind of done the basic version of VoiceOver, where all the controls said their

00:09:12 ◼   ► text out loud. So there's, you know, there's a thing that says how many miles you've walked,

00:09:17 ◼   ► there's a thing that says how many steps you've taken, and if you tapped on them, it would

00:09:21 ◼   ► just to say the name, which sort of works, but it didn't really address what the actual

00:09:29 ◼   ► user would want to do. And especially there were some issues I had where if you just take,

00:09:35 ◼   ► do that basic level of it. The way, the order in which those controls are going to be navigated

00:09:40 ◼   ► on this, when in voiceover mode, is somewhat arbitrary. I'm sure there's a basic rule

00:09:45 ◼   ► to it, but it's not something that is strictly predictable out of the box. And I was talking

00:09:51 ◼   ► to this user and he said, "What a lot of voiceover users do is they navigate an application

00:09:56 ◼   ► using the swipe gesture. So they'll swipe right to left and we'll move from control

00:09:59 ◼   ► to control to control. And so it's important the order in which those controls are displayed

00:10:06 ◼   ► to that user because they're going to, in order for them to find their place, they may

00:10:11 ◼   ► have to sit there swiping five or six times, and every time they do that they have to listen

00:10:16 ◼   ► to what is being said. And so in my initial implementation, you open the app, you turn

00:10:22 ◼   ► on VoiceOver, and I think it would start off with saying, giving you access to the settings

00:10:27 ◼   ► button and to the share button. And then your next one, if you swiped, it would swipe over

00:10:32 ◼   ► and it would start with a week ago's step count in the bottom chart essentially, which

00:10:40 ◼   ► is actually probably not really what the user is interested in, right? The user is probably

00:10:44 ◼   ► not most interested in knowing how many steps they took a week ago, but it just so happened

00:10:49 ◼   ► that because it was the left most control on the screen, it was being shown first. And

00:10:55 ◼   ► And so what I did is I had to, and this is relatively straightforward, you can set an

00:10:58 ◼   ► accessibility order for any control, is reorder that. And so when you swipe, you know, when

00:11:04 ◼   ► you use the first swipe now, it tells you your current day's data. And then it shows

00:11:08 ◼   ► you the other data after that. Because more often than not, what you're curious about

00:11:12 ◼   ► is what did I do today? And so it's just something you have, a thought exercise you need to go

00:11:17 ◼   ► through is what order would be most useful for displaying this information to my user?

00:11:22 ◼   ► Because keeping in mind, especially, whenever

00:11:25 ◼   ► they open the application, they're starting from scratch.

00:11:27 ◼   ► They don't necessarily keep their place

00:11:30 ◼   ► in terms of your application.

00:11:31 ◼   ► And so making it so they can quickly

00:11:33 ◼   ► get to the most important information first.

00:11:36 ◼   ► So that when you-- the first-- it's like in a podcast client,

00:11:38 ◼   ► for example, the primary control may be something

00:11:41 ◼   ► like the Play/Pause button after--

00:11:45 ◼   ► and then like the Skip Forward, then the Skip Back, maybe,

00:11:48 ◼   ► something like that.

00:11:49 ◼   ► You can keep that in mind, because that's

00:11:51 ◼   ► how they're going to be navigating. Secondly, being thoughtful about the order of words

00:11:57 ◼   ► and what you're actually going to be telling them. If they're interacting with your application

00:12:01 ◼   ► entirely from sound, the actually what you say and how you say it is kind of important

00:12:06 ◼   ► because if it's long-winded, overly verbose type of thing, it's going to be very frustrating

00:12:12 ◼   ► for them to hear. What they really want is to get the data out of your application. And

00:12:17 ◼   ► And so you want to be thoughtful and terse about how you do that. And the order is important.

00:12:22 ◼   ► So for example, I'm going to be telling somebody on a particular date, "They took so many

00:12:29 ◼   ► steps and walked so many miles." Those three bits of information. Now there's a variety

00:12:34 ◼   ► of ways I could tell someone that. I could say, "On Friday, June 20th, 2014, you took

00:12:41 ◼   ► look, 4,297 steps. This constituted walking 207 miles. Or, is that, obviously that was

00:12:49 ◼   ► wrong, 2.7 miles. Anyway, that's the point, right? That's a fairly long-winded way to

00:12:54 ◼   ► say it. Conversely, you could say 4,277 miles today. 4.6 miles. Right? That's the same information

00:13:05 ◼   ► but presented in a very concise way. And starting with the most important thing, in this case

00:13:11 ◼   ► I would say step counts, and then moving on to the less important information as you go.

00:13:17 ◼   ► And this is something that I found in my own experience makes a big difference. Having

00:13:21 ◼   ► these big, long-winded descriptions where you're describing the interface to the user

00:13:25 ◼   ► isn't really helpful. It's like labels showing current step count value to 4627 isn't actually

00:13:34 ◼   ► useful. The user doesn't care that it's a label. They just want to get that information.

00:13:39 ◼   ► And so being thoughtful about what your labels are is important, and being appropriately

00:13:42 ◼   ► terse. Now obviously you can take that to an extreme, but in my experience generally,

00:13:47 ◼   ► people who are interacting with your application are very good at parsing short bits of information

00:13:53 ◼   ► if you're thoughtful about them. And so take that approach.

00:13:57 ◼   ► One thing I'll also say is that if you put a comma between words, and it does a nice

00:14:01 ◼   ► little brief pause as it reads it, which makes it even clearer to hear. So often do something

00:14:06 ◼   ► like, you know, 4,622 steps to 4.2 miles, right? If you want to smush those two numbers

00:14:14 ◼   ► together, but if you just throw a comma in there, it'll actually say it pretty nicely.

00:14:18 ◼   ► And remember, you're trying to create an alternative experience for that user. You're trying to

00:14:25 ◼   ► do something that is a parallel experience. You're not narrating your interface. That's

00:14:31 ◼   ► the biggest thing I'd like for you to take away from this is hopefully when you're building

00:14:34 ◼   ► accessibility. You're not narrating your experience. You're trying to create an alternative experience.

00:14:40 ◼   ► And I think if you do, you'll create something that is valuable to a class of customers who

00:14:46 ◼   ► are some of the most fanatical, devoted people I've interacted with. And so I'd encourage

00:14:51 ◼   ► you to do that. All right, that's it for today's show. If you have questions, comments, concerns,

00:14:55 ◼   ► or complaints, I'm on Twitter, underscore David Smith, David at developing perspective

00:14:58 ◼   ► dot com. Thank you. Bye.