WEBVTT

NOTE Sentence-level transcript of https://www.youtube.com/watch?v=L3RuP_q8Bwc

NOTE One cue per sentence. Cue ids are the line anchors on /transcripts/L3RuP_q8Bwc.html. A cue ends where the next begins, or 2 s after its last word.

s1
00:00:00.960 --> 00:00:01.720
Hi.

s2
00:00:01.720 --> 00:00:02.880
My name is Kat.

s3
00:00:02.880 --> 00:00:10.560
I'm a senior design and developer advocate at Progress Software, and I have spent most of my career focused on the front end.

s4
00:00:10.560 --> 00:00:19.040
After taking a somewhat meandering path through design and into development, I eventually found my niche in the space where those two worlds overlap.

s5
00:00:19.040 --> 00:00:28.400
My design background has given me a lot of insight into the UX side of software engineering, and the user research that I get to do as part of my work as developer advocate

s6
00:00:28.400 --> 00:00:31.000
is one of my favorite parts of the world.

s7
00:00:31.000 --> 00:00:39.000
I have spent a lot of my career teaching developers about design, about UX, and about how to build more user-friendly software.

s8
00:00:39.000 --> 00:00:45.800
Something that's always been valuable, but is more crucial than ever now that AI has entered the picture.

s9
00:00:45.800 --> 00:00:49.960
I don't need to tell you that AI is a pretty unique new technology.

s10
00:00:49.960 --> 00:00:59.760
It is rapidly developing and has so much potential to improve systems and software in ways that we couldn't have even dreamed of just a few years ago.

s11
00:00:59.760 --> 00:01:04.440
However, along with all of that potential is also quite a bit of risk.

s12
00:01:04.440 --> 00:01:14.880
AI's non-deterministic nature means that the output can wildly range in quality, format, style, and accuracy, even when we're trying our best to prevent that.

s13
00:01:14.880 --> 00:01:19.960
On top of that, it requires entirely new types of interaction patterns to use.

s14
00:01:19.960 --> 00:01:27.240
In fact, we've seen the emergence of new vocabulary, techniques, and sometimes entire roles meant to address that need.

s15
00:01:27.240 --> 00:01:39.680
For those of us that are living and breathing this technology every day, concepts like prompt engineers, hallucinations, retrieval augmented generation, and so much more have all become regular parts of our lives.

s16
00:01:39.680 --> 00:01:45.360
But for the vast majority of our users, that simply isn't the case yet.

s17
00:01:45.360 --> 00:01:53.520
In any kind of technology, there's a gap between the developer, who has by nature kind of become the subject matter expert, and the user.

s18
00:01:53.520 --> 00:02:00.520
The technical literacy of the average software engineer is always going to be higher than the average user of said software.

s19
00:02:00.520 --> 00:02:02.280
That's where UX comes in.

s20
00:02:02.280 --> 00:02:10.080
It's how we bridge the gap between what we intended when we built an application and what the user actually experiences.

s21
00:02:10.080 --> 00:02:18.840
After all, it doesn't actually matter what our software can do if our users hate using it so much that they will avoid it at all costs.

s22
00:02:18.840 --> 00:02:23.280
And right now, AI has a kind of serious UX problem.

s23
00:02:23.280 --> 00:02:34.160
Our users are seeing AI features get added to basically everything right now, from their work software to their social media apps, right down to their computer and phone operating systems.

s24
00:02:34.160 --> 00:02:43.520
But, as a wise technologist once said, "Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should."

s25
00:02:43.520 --> 00:02:51.240
We're really pushing our users to adopt these new tools and features, but we're not always making it easy to do so.

s26
00:02:51.240 --> 00:02:59.959
It's common to see situations where a user is presented with a poorly designed AI feature that they really only have the barest idea how to use.

s27
00:02:59.959 --> 00:03:09.519
Then, when they try it and it doesn't do what they wanted or expected it to do, they feel annoyed and off-put and kind of negative about AI generally.

s28
00:03:09.519 --> 00:03:17.000
The more times they try an AI feature and get sub-par results, the less likely they are to engage with it again in the future.

s29
00:03:17.000 --> 00:03:28.800
Which means that, as the creators of these features and software, we really only have so many chances to get this right before our users just disengage and stop trying at all.

s30
00:03:28.800 --> 00:03:37.840
In my personal opinion, this knowledge gap between developer and user when it comes to AI is one of the widest that I've seen with any technology.

s31
00:03:37.840 --> 00:03:46.800
That makes it extremely hard for us to build AI-powered features that our users are actually going to get the full benefit from.

s32
00:03:47.040 --> 00:03:56.480
When Macintosh introduced their graphical user interface, it was, like AI is now, something that was very different and unfamiliar to their users.

s33
00:03:56.480 --> 00:04:05.000
But a large part of their success and reputation was built on their ability to create a user experience that met users where they were.

s34
00:04:05.000 --> 00:04:08.840
They borrowed vocabulary and user flows from real life.

s35
00:04:08.840 --> 00:04:17.880
They included lots of icons and visual representations, and they really made sure to walk users through how to get the most out of their new personal computers.

s36
00:04:17.880 --> 00:04:26.160
And over time, as the average user became more comfortable and more literate in the space, the user experience of the Macintosh evolved with them.

s37
00:04:26.160 --> 00:04:30.320
We start to see more technical terms and fewer abstractions.

s38
00:04:30.320 --> 00:04:41.600
Look at the difference here between the control panels in Macintosh system 1 and system 6. If you had presented a system 1 user with the words rate of insertion point blinking or RAM cache,

s39
00:04:41.600 --> 00:04:44.520
it would have been pretty much meaningless to them.

s40
00:04:44.520 --> 00:04:52.720
Similarly, we see that those low and high volume icons are gone in system 6, along with the little turtle and rabbit speed icons, right?

s41
00:04:52.720 --> 00:04:57.240
That kind of more literal depiction wasn't needed anymore.

s42
00:04:57.240 --> 00:05:04.120
Right now, we are probably somewhere around system 3 in this metaphor of introducing AI to users.

s43
00:05:04.120 --> 00:05:13.280
We may not need the turtle and rabbit icons anymore, but we also can't yet assume that they will sit down with our AI software as experts.

s44
00:05:13.280 --> 00:05:19.880
The good news here is that, unlike the Macintosh UI, we're not totally starting from scratch here.

s45
00:05:19.880 --> 00:05:26.160
Our users have existing mental models about software usage that's going to carry over to what we're building.

s46
00:05:26.160 --> 00:05:30.320
They're just not always going to map over exactly one to one.

s47
00:05:30.320 --> 00:05:32.160
But that's where we come in.

s48
00:05:32.160 --> 00:05:42.120
As developers, it's our role to leverage these patterns that our users are already familiar with, start to combine them in new ways, and then introduce them to our users gradually

s49
00:05:42.120 --> 00:05:45.160
in a way that's not going to feel overwhelming.

s50
00:05:45.160 --> 00:05:52.520
A good user experience will not only provide a user with the tools, but also guide them how to use them.

s51
00:05:52.520 --> 00:05:56.040
For instance, let's look at an AI chat interface.

s52
00:05:56.040 --> 00:06:04.440
From a purely UI perspective, chatting with an LLM is almost, but not quite, like chatting with another user.

s53
00:06:04.440 --> 00:06:15.520
So, we'll be able to borrow some familiar patterns here, like having the user's chats show up on one side and the AI chats on the other, messages that appear above an input field with a send button,

s54
00:06:15.520 --> 00:06:18.400
a scrollable message history, and more.

s55
00:06:18.400 --> 00:06:26.400
That gives our users a really good jumping off point and a lot of visual clues about how to start interacting with an AI chat.

s56
00:06:26.400 --> 00:06:35.200
However, the experience isn't quite close enough that we can just lift an existing interface from direct messages and repurpose it wholesale.

s57
00:06:35.200 --> 00:06:46.680
A chat interface that was originally built for two people is not going to have the accommodations that we need for things like adding reference sources, pausing or stopping an in-progress reply from the LLM,

s58
00:06:46.680 --> 00:06:50.160
leveraging agentic tools and integrations, or more.

s59
00:06:50.160 --> 00:06:56.440
So, those are going to be the places where we have to adapt existing UX and UI patterns into something new.

s60
00:06:56.440 --> 00:07:03.040
We have to be the bridge and help our users transition into familiarity with these new AI experiences.

s61
00:07:03.040 --> 00:07:04.840
We can see the difference here, right?

s62
00:07:04.840 --> 00:07:09.760
Compared this Copilot research agent new chat with the new Teams chat.

s63
00:07:09.760 --> 00:07:11.800
Both of them have familiar aspects, right?

s64
00:07:11.800 --> 00:07:16.480
We see text boxes, we see the plus to attach files, and so on.

s65
00:07:16.480 --> 00:07:20.320
But, the Teams chat assumes a much higher level of familiarity.

s66
00:07:20.320 --> 00:07:31.600
It's not spelling out any of the iconography it uses, and we don't see some of the things intended to lower the barrier of entry, such as the examples, large text buttons, or voice interaction options

s67
00:07:31.600 --> 00:07:34.600
that show up on the agent chat.

s68
00:07:34.880 --> 00:07:42.320
Now, before we really dive into this, I do think we have to take a moment to address kind of the elephant in the room, right?

s69
00:07:42.320 --> 00:07:46.040
Why not just have AI create these solutions for us?

s70
00:07:46.040 --> 00:07:54.200
Why do we have to be the ones who design and build new AI patterns when we have technology that can generate interfaces for us now?

s71
00:07:54.200 --> 00:07:59.960
The problem with that is that AI can only really remix things that already exist.

s72
00:07:59.960 --> 00:08:10.120
It's fantastic for looking at those existing common patterns and replicating them, but the patterns for AI interfaces don't fully exist yet.

s73
00:08:10.120 --> 00:08:18.520
Or at the very least, they are still in the process of being rapidly developed, and they are changing all the time as that technology advances.

s74
00:08:18.520 --> 00:08:26.360
There's just not a long history of standardized and familiar AI-related interfaces that we can reference to solve this problem.

s75
00:08:26.360 --> 00:08:32.360
So, at least for now, we're kind of on our own here, and we can't yet defer it to AI.

s76
00:08:32.360 --> 00:08:38.800
Maybe that will change down the road, but for the time being, this is still a very human problem.

s77
00:08:38.800 --> 00:08:48.120
Additionally, as many folks have begun to notice, the design that an AI creates is going to be a lot like every other design out there.

s78
00:08:48.120 --> 00:08:54.000
AI can reference and remix, but you're just not going to get brand new concepts from it.

s79
00:08:54.000 --> 00:08:58.520
An AI-generated UI tends to look pretty darn average.

s80
00:08:58.520 --> 00:09:04.360
And while that can be a really great starting point, it's not usually a great ending point.

s81
00:09:04.360 --> 00:09:07.880
If you just need a quick landing page, it's probably going to do the trick.

s82
00:09:07.880 --> 00:09:21.760
But since we're dealing with whole new interaction modes that need more attention paid to the UX rather than less, it's just not going to be enough to get us where we need to go right now at the quality level that our users need and deserve.

s83
00:09:21.760 --> 00:09:30.800
So, if we're going to build new patterns and new interfaces to help our users get the most value out of this technology, where do we start?

s84
00:09:30.800 --> 00:09:34.680
Well, like most things in design, it's best to start with the user.

s85
00:09:34.680 --> 00:09:37.760
Specifically, the user's problems.

s86
00:09:37.760 --> 00:09:49.600
That means that when we're thinking about building our AI features, we need to be thinking about what challenges our users have with AI and the user flows that will mitigate those issues as much as possible.

s87
00:09:49.600 --> 00:09:58.680
From the user research I've been doing and the users I've had the chance to speak to, I've started to group the main challenges here into five categories.

s88
00:09:58.680 --> 00:10:05.520
Trust, clarity, control, transparency, and meaningful benefit.

s89
00:10:05.520 --> 00:10:18.120
In this talk, we're going to discuss each of these in depth, understanding the problems our users have when they're using AI, and looking at some examples of new patterns and techniques we can employ to address them.

s90
00:10:18.120 --> 00:10:32.240
By making sure that we are addressing each of these, we can start to create AI experiences that support our users through the introduction of this new technology and ensure that they are in a place to use it to its fullest potential.

s91
00:10:32.240 --> 00:10:34.702
So, let's get going.

s92
00:10:34.702 --> 00:10:34.720
[snorts]

s93
00:10:34.720 --> 00:10:36.720
Trust.

s94
00:10:36.720 --> 00:10:46.560
The number one, by far, biggest hurdle that we need to overcome in order for our users to engage with the AI features we build is trust.

s95
00:10:46.560 --> 00:10:50.480
Right now, to the average user, AI is a black box.

s96
00:10:50.480 --> 00:10:55.280
Many simply do not understand from a technical perspective how it works.

s97
00:10:55.280 --> 00:11:02.200
And when you don't understand how something works, it makes it very, very hard to trust the output.

s98
00:11:02.200 --> 00:11:09.720
On top of this, just about everyone who has interacted with an LLM before has, at some point, seen them hallucinate.

s99
00:11:09.720 --> 00:11:18.600
Even as the models keep getting better, we're still not at the point where we can claim any tool will be 100% guaranteed hallucination-free.

s100
00:11:18.600 --> 00:11:24.600
There's always a chance, even if it's a small one, that the AI is going to provide an incorrect response.

s101
00:11:24.600 --> 00:11:30.040
So, how many times can a user see output that's wrong and still trust it?

s102
00:11:30.040 --> 00:11:37.760
It can be easy to think that the answer to this problem is to try and position the feature that we're launching as some kind of exception to this rule.

s103
00:11:37.760 --> 00:11:42.120
We say things like, "Other AI tools may not be trustworthy, but ours is different.

s104
00:11:42.120 --> 00:11:45.200
Ours is higher quality, it's safer, it's more reliable."

s105
00:11:45.200 --> 00:11:47.160
So on and so forth.

s106
00:11:47.160 --> 00:11:50.440
But not only is this questionably true, right?

s107
00:11:50.440 --> 00:11:54.520
I mean, after all, and not many of us are really training our own models here.

s108
00:11:54.520 --> 00:11:58.240
So a lot of this is going to be simply outside our control.

s109
00:11:58.240 --> 00:12:02.840
But it's also a very difficult thing to try and sell your users on.

s110
00:12:02.840 --> 00:12:09.040
In situations where we cannot promise the truth, we have to go above and beyond to earn it.

s111
00:12:09.040 --> 00:12:20.040
Our honesty about current capabilities and limitations of our AI tools will go a lot further with our users than the denial of any potential problems.

s112
00:12:20.520 --> 00:12:32.880
So rather than trying to convince users that our solution is inherently trustworthy, we can instead build in patterns that empower them to see when incorrect information is returned and give the tools to correct or mitigate it.

s113
00:12:32.880 --> 00:12:35.280
You know the saying, "Trust, but verify"?

s114
00:12:35.280 --> 00:12:37.080
That's kind of the goal here.

s115
00:12:37.080 --> 00:12:48.080
By citing the references in an AI-generated response and linking users back directly to the source material, we give users the information they need to validate AI output themselves.

s116
00:12:48.080 --> 00:12:58.560
The more a user is able to click through and see where an answer came from, the more they'll be able to trust the content, even if they don't choose to check every source every time.

s117
00:12:58.560 --> 00:13:04.640
In addition to allowing our users to vet the answers, citations also have a second important purpose.

s118
00:13:04.640 --> 00:13:10.600
They allow users to repurpose the material in their own work while maintaining a trail of accuracy.

s119
00:13:10.600 --> 00:13:14.480
This is really important for their own credibility and reputation.

s120
00:13:14.480 --> 00:13:23.600
After all, how often would you share content from an unverifiable source if you knew that any errors would ultimately be attached back to your own name?

s121
00:13:23.600 --> 00:13:30.000
Generating output for the user might be the last step in our process, but it's really just the beginning for them.

s122
00:13:30.000 --> 00:13:35.920
Users want to take that content and turn it into a report, an email, a campaign, a presentation.

s123
00:13:35.920 --> 00:13:41.720
And if the output can't be cited and trusted, then it's just not going to be used.

s124
00:13:41.720 --> 00:13:50.200
There are a handful of different ways we can implement this, and which one you pick is going to depend on what you're building and the context in which it's being used.

s125
00:13:50.200 --> 00:13:56.880
But a few popular approaches include things like tooltips, inline links, and side panel reference windows.

s126
00:13:56.880 --> 00:14:03.240
Tooltips allow you to provide a small snippet of a relevant quote, which can be really great for increasing credibility.

s127
00:14:03.240 --> 00:14:12.760
Links, of course, are ideal if the content is coming from an external source, like another webpage, as opposed to an internal source, like a document in a shared drive.

s128
00:14:12.760 --> 00:14:22.240
And if the feature you're building is meant to support more research-oriented work, then you might consider adding a side panel, where the user can explore the source material in more detail,

s129
00:14:22.240 --> 00:14:29.560
which kind of positions the AI assistant as more of a librarian than inherently a subject matter expert.

s130
00:14:29.800 --> 00:14:38.120
The other place where trust factors heavily into AI work is agentic workflows, where the AI is thinking and executing work on its own.

s131
00:14:38.120 --> 00:14:47.640
This, understandably, can be kind of concerning for users, depending on the stakes of the project and how easy or hard it would be to roll back any incorrect actions,

s132
00:14:47.640 --> 00:14:52.040
which is when keeping that human in the loop really becomes crucial.

s133
00:14:52.040 --> 00:15:02.080
One of the best ways to help users trust these systems enough to use them is to show an action plan to the user and allow them to approve it before the agent begins work.

s134
00:15:02.080 --> 00:15:05.480
This has become a pretty common flow in a lot of foundation models, right?

s135
00:15:05.480 --> 00:15:16.080
If you're using agentic features in Claude or ChatGPT, you will have seen it create a list of the steps it will take to accomplish a given task and then ask for your confirmation before beginning.

s136
00:15:16.080 --> 00:15:27.360
Of course, there are also settings you can add to toggle this off or always allow it, all of which is important if you're going to allow users to repeat a flow over and over and don't want them to have to baby sit it.

s137
00:15:27.360 --> 00:15:33.240
Spoiler alert, we will talk a little bit more about permissions in the transparency section later.

s138
00:15:33.240 --> 00:15:48.080
But if you're creating some kind of an agentic tool and no plan is ever shown to the user and an action happens without them understanding why or how, it can be very, very hard for them to trust both the result of that action

s139
00:15:48.080 --> 00:15:51.400
and the agentic tool itself.

s140
00:15:52.720 --> 00:16:02.680
There is also, undeniably and I would maybe even argue correctly, quite a bit of skepticism around whether or not content is AI-generated right now.

s141
00:16:02.680 --> 00:16:11.440
You've probably seen exchanges online where someone shares a photo or video and another person is immediately commenting to tell them that's not actually real.

s142
00:16:11.440 --> 00:16:21.960
When we spend so much of our time and energy second-guessing and investigating content that's shared with us, it doesn't exactly foster an environment of trust.

s143
00:16:21.960 --> 00:16:26.600
For now, AI-generated content is highly polarizing with users.

s144
00:16:26.600 --> 00:16:34.720
While some have heavily leaned into using it in their daily lives, others will react to it negatively and dismiss it as slop, right?

s145
00:16:34.720 --> 00:16:42.800
The ability for AI to generate text, images, and video that is nearly indistinguishable from human-created work is very new.

s146
00:16:42.800 --> 00:16:47.200
And for many users, that still feels uncanny and unsettling.

s147
00:16:47.200 --> 00:16:49.640
I don't say this to start any kind of debate, right?

s148
00:16:49.640 --> 00:16:57.960
I mean, seems harsh to say it, but our own personal opinions on AI-generated content don't really matter too much in this context.

s149
00:16:57.960 --> 00:17:08.400
What's more important is the awareness that our users will react to AI-generated content in a wide variety of ways and not all of those ways are going to be positive.

s150
00:17:08.400 --> 00:17:18.760
So, if we want to include AI-generated content in our applications and we're not exactly sure how our users will feel about it, what can we do to retain their trust?

s151
00:17:18.760 --> 00:17:25.240
One of the easiest things is to just mark any AI-generated content as AI-generated.

s152
00:17:25.240 --> 00:17:38.600
This could be as simple as a disclaimer in the App Store description, a watermark uh on a photo, whether that's digital or visible, or maybe even just an asterisk at the end of a sentence that denotes something as AI-created.

s153
00:17:38.600 --> 00:17:50.760
When we do this, we remove that potential user perception of them feeling like we tried to sneak AI-generated content into our apps or somehow like pull one over on them.

s154
00:17:50.760 --> 00:18:01.400
If we're using AI and we think it's the right fit for our work, or we feel strongly that our users should be able to share AI-generated content, then there's really no shame at all in designating

s155
00:18:01.400 --> 00:18:03.240
where it's been used.

s156
00:18:03.240 --> 00:18:16.000
Depending on where that AI is used, it might also be helpful to clue our users into which aspects of output they might need to manually verify, rather than having to review everything as though it was AI-generated,

s157
00:18:16.000 --> 00:18:19.040
if that's not truly necessary.

s158
00:18:20.080 --> 00:18:23.280
Hand in hand with trust comes clarity.

s159
00:18:23.280 --> 00:18:32.960
Clarity is one of the most important aspects of creating a good user experience kind of generally, and the stakes only get higher when we start incorporating AI.

s160
00:18:32.960 --> 00:18:42.760
Because, as we said, so much of AI still feels like an unknown to our users, we need to be as descriptive and straightforward about what's happening at any given time.

s161
00:18:42.760 --> 00:18:52.280
The more insights we can give them about what our software is doing and what they can expect to happen next, the more comfortable they will feel engaging with AI.

s162
00:18:52.280 --> 00:18:58.200
I've noticed that there can be a kind of impulse to frame AI to our users as magic, right?

s163
00:18:58.200 --> 00:19:05.320
We don't even have to look further than the prevalence of the sparkle icon to designate AI as an example of that.

s164
00:19:05.320 --> 00:19:11.120
However, while that might feel kind of mysterious and cool, it's really not accurate, right?

s165
00:19:11.120 --> 00:19:16.560
AI is just another technology, and our users deserve clarity over dramatics.

s166
00:19:16.560 --> 00:19:26.440
They want to know what's going on, how a given output was created, and there's really no reason for us not to pull back that curtain whenever we can.

s167
00:19:26.800 --> 00:19:32.720
One of the most obvious ways for us to do this is with streaming text or similar live generation of content.

s168
00:19:32.720 --> 00:19:37.800
Not only is this a really great way to disguise the latency issue of AI generation, right?

s169
00:19:37.800 --> 00:19:45.280
Nobody likes to watch a loading spinner, but it's also a fantastic way to show the user what's happening in real time.

s170
00:19:45.280 --> 00:19:53.120
If we make the user wait until an entire response is generated, there's a non-zero chance that it won't actually be what they wanted.

s171
00:19:53.120 --> 00:20:00.560
However, if we start showing a partial response as it's being generated, we give users the chance to start assessing it immediately.

s172
00:20:00.560 --> 00:20:09.280
That means they can be coming up with follow-up questions or adjustments or maybe just stopping the process entirely if it's not returning what they expected.

s173
00:20:09.280 --> 00:20:19.680
This also keeps the user as an active participant in the process, preventing that like XKCD my code's compiling experience of pressing a button and walking away.

s174
00:20:19.680 --> 00:20:26.560
You've probably experienced yourself how much harder it is to complete a task if you are constantly disengaging from the workflow.

s175
00:20:26.560 --> 00:20:35.320
Even if you know a process will only take a minute, if there's not something to keep you there, you're going to start checking your emails or replying to Slack messages

s176
00:20:35.320 --> 00:20:45.560
or scrolling on your phone and just like that, a 1-minute wait has become a 5-to-10-minute side quest, making it much harder to pick up where you left off.

s177
00:20:45.560 --> 00:20:52.280
The more we can prevent this for our users, the more productive they can be when they're using our tools.

s178
00:20:52.520 --> 00:21:03.680
Another thing that can help remove the wall between the AI and the user is having it think out loud as much as possible as it processes a request, especially in chat-based interactions.

s179
00:21:03.680 --> 00:21:14.160
Similarly to live streaming, this improves the user's confidence level in the output cuz they can kind of follow the breadcrumbs and have a deeper understanding of how a given conclusion was reached.

s180
00:21:14.160 --> 00:21:18.280
After all, we do this all the time when we talk to other people, right?

s181
00:21:18.280 --> 00:21:26.800
If we're presenting an idea, we know it's going to be helpful for us to kind of talk through the rationale behind how we got there and why we think it's the right choice.

s182
00:21:26.800 --> 00:21:32.560
Explaining ourselves is such a natural part of human interaction that we've really come to inspect it.

s183
00:21:32.560 --> 00:21:37.040
And when we don't see it mirrored in the systems that we use, it can feel kind of frustrating.

s184
00:21:37.040 --> 00:21:41.400
Like something is being unintentionally kept from us.

s185
00:21:41.400 --> 00:21:48.800
Additionally, seeing that chain of thought process allows for better, more accurate revisions when the output wasn't what they expected.

s186
00:21:48.800 --> 00:21:56.720
If the user can understand all the steps that happened between point A and F, then they can really pinpoint where things went off the rails.

s187
00:21:56.720 --> 00:22:03.480
And that allows them to give more specific instructions or clarify ambiguous parts of their request.

s188
00:22:04.560 --> 00:22:11.120
Some existing patterns are a little bit easier to adjust from their previous non-AI usage into this context.

s189
00:22:11.120 --> 00:22:13.720
And highlighting new content is one of those.

s190
00:22:13.720 --> 00:22:26.560
It's not groundbreaking, but when it's combined with everything else, it can be immensely helpful in helping users keep track of AI actions, especially in situations where an agent is acting autonomously.

s191
00:22:26.560 --> 00:22:35.760
The basic idea is that when new content appears or something gets changed or updated, it gets specially marked for the user in a way that draws their attention to it.

s192
00:22:35.760 --> 00:22:40.920
Sometimes that might mean literally moving the focus up or down the page to see what's changed, right?

s193
00:22:40.920 --> 00:22:47.200
Like when new messages appear in an ongoing chat and the message history scrolls down to display it.

s194
00:22:47.200 --> 00:22:53.360
Other times though, it could just mean drawing the user's eye back to a space they might not have been actively watching.

s195
00:22:53.360 --> 00:22:56.720
Even if that doesn't include literal movement on the page.

s196
00:22:56.720 --> 00:23:05.560
Things like changing the color of revised text or putting a box or highlight around new material or even marking lines of code that are different.

s197
00:23:06.280 --> 00:23:15.360
AI tools are often framed as being a kind of personal assistant for the user, an intelligent junior co-worker that they can delegate tasks to.

s198
00:23:15.360 --> 00:23:24.400
However, as anyone who's ever delegated a task can already tell you, sometimes that means that things don't get done in the way that you would have done them.

s199
00:23:24.400 --> 00:23:31.320
When users are working with our AI tools, they need to know that they are still ultimately the ones in the driver's seat.

s200
00:23:31.320 --> 00:23:41.320
After all, there's very little value in being able to assign the AI tasks if you can't then step in as you like to make adjustments, corrections, and fixes.

s201
00:23:41.840 --> 00:23:52.120
In that vein, it is also important for the user to be able to stop or override an AI action at any point, whether that's during content generation, partway through an agentic workflow,

s202
00:23:52.120 --> 00:23:56.000
when it's running code or scripts, or something else entirely.

s203
00:23:56.000 --> 00:24:04.120
If the user is unable to abort the process, then they're not actually the one in control, and frankly, that's not really acceptable.

s204
00:24:04.120 --> 00:24:13.960
One of the most reassuring things we can offer nervous users is a clear and prominent emergency brake that they can slam to bring everything to a halt for any reason.

s205
00:24:13.960 --> 00:24:21.920
That means it can't be tucked away in a menu somewhere or involving some specific command they have to remember, which they won't in a high-stress moment.

s206
00:24:21.920 --> 00:24:29.200
We want to give them the equivalent of a big red button they can slam to make everything stop whenever they need.

s207
00:24:29.560 --> 00:24:34.680
Of course, once a user has stopped a process, we can probably guess what they want to do next, right?

s208
00:24:34.680 --> 00:24:37.960
They want to undo the incorrect things that changed.

s209
00:24:37.960 --> 00:24:46.440
Even way before AI, Nielsen's heuristics list safe exploration as one of the core principles required for a good user experience.

s210
00:24:46.440 --> 00:24:56.840
That means that users should be able to navigate back and forth, click and unclick things, and generally just kind of mess around in a piece of software without getting stuck or unintentionally

s211
00:24:56.840 --> 00:24:59.480
making big permanent changes.

s212
00:24:59.480 --> 00:25:07.000
Sometimes a user will try something and then change their mind, decide they don't like it, or it didn't do what they thought it would.

s213
00:25:07.000 --> 00:25:13.720
In those cases, we want to make it as easy as possible for them to roll things back to an earlier state.

s214
00:25:13.720 --> 00:25:24.400
This kind of safety net was always valuable, but now that we're dealing with non-deterministic output, having some kind of a version history is going to be pretty much a non-negotiable.

s215
00:25:24.400 --> 00:25:29.560
Of course, the level of version history that's required will differ based on the task.

s216
00:25:29.560 --> 00:25:37.720
The Git style of version control that we are used to as developers is probably more than you will need in a user-facing application.

s217
00:25:37.720 --> 00:25:42.160
If this is a truly simple conversational interface, you may not need it at all.

s218
00:25:42.160 --> 00:25:47.520
The user could just rephrase their question and try again if they don't get the answer they wanted.

s219
00:25:47.520 --> 00:25:58.480
However, if your tool is doing something more complex, like creating and editing a document, simple undo and redo actions that allow users to move back and forth within the last

s220
00:25:58.480 --> 00:26:01.920
10 or so steps would be really helpful.

s221
00:26:01.920 --> 00:26:09.480
And if you're wanting them to do truly advanced work with your tools, then it's worth building in the mechanisms for checkpoints or save states.

s222
00:26:09.480 --> 00:26:21.040
Consider what kind of tasks your user is going to be working on with your AI features, and think about how significantly each step forward is likely to change the existing content.

s223
00:26:21.040 --> 00:26:26.600
Ideally, this will also allow users the specificity to make targeted targeted adjustments.

s224
00:26:26.600 --> 00:26:33.920
You don't necessarily want them to have to wipe out and replace everything that happened in a given step if they weren't happy with it.

s225
00:26:33.920 --> 00:26:38.520
It's common for AI-generated results to have a mix of quality in the output.

s226
00:26:38.520 --> 00:26:42.200
Users may want to keep some aspects while reverting others.

s227
00:26:42.200 --> 00:26:49.880
And the more control we can give them over that creative process, the more enjoyable it will be for them to collaborate with our AI tools.

s228
00:26:49.880 --> 00:26:54.600
This is especially true now as the cost of tokens is starting to tick up.

s229
00:26:54.600 --> 00:27:04.320
Having granular control over what gets reworked allows for more specific and production productive iteration without them just having to say, "Try again."

s230
00:27:04.320 --> 00:27:08.160
and start over from scratch each time.

s231
00:27:08.720 --> 00:27:14.600
AI tools are strongest when they seamlessly integrate into the rest of a user's workflow.

s232
00:27:14.600 --> 00:27:22.360
Referencing internal documents, sending emails, making calendar appointments, drafting and sharing content, so on and so forth.

s233
00:27:22.360 --> 00:27:27.320
However, most users won't integrate what they can't see and don't understand.

s234
00:27:27.320 --> 00:27:40.280
If the AI applications we build are going to become part of their daily lives, then users need transparency into exactly what they do, what they have access to, and what it will cost them in both time and money.

s235
00:27:40.280 --> 00:27:47.320
The more transparent we can make these features, the less hesitation our users will have in adopting them.

s236
00:27:47.600 --> 00:27:58.480
The concept of asking for user permissions is certainly not AI specific, but the stakes can feel a lot higher when you're asking users for permission to allow AI to act on their behalf.

s237
00:27:58.480 --> 00:28:10.040
That means we need to make it easy for users to see which applications we've allowed our tool access to and in what ways, keeping in mind that permissions are often more than just a binary yes or no.

s238
00:28:10.040 --> 00:28:13.800
So, can your agent just reference data from this database?

s239
00:28:13.800 --> 00:28:16.200
Or is it also allowed to delete tables?

s240
00:28:16.200 --> 00:28:20.920
Can only read your user's emails, or can it send from their addresses well?

s241
00:28:20.920 --> 00:28:23.760
Can it run scripts, search their local files?

s242
00:28:23.760 --> 00:28:28.280
Each one of these actions requires direct user sign-off.

s243
00:28:28.280 --> 00:28:31.360
Permissions are also not a one-and-done situation.

s244
00:28:31.360 --> 00:28:39.640
A user might feel comfortable allowing an action to happen once under their direct supervision, but they might not want to allow it permanently.

s245
00:28:39.640 --> 00:28:43.320
They could give access to a specific folder, but not every folder.

s246
00:28:43.320 --> 00:28:47.640
They might approve an action, but then want to be notified every time it's taken.

s247
00:28:47.640 --> 00:28:56.360
Consider which of these gray zones might exist in your permission structure and try to accommodate as many different options as you can.

s248
00:28:56.600 --> 00:29:00.360
Another common sticking point with AI is data collection.

s249
00:29:00.360 --> 00:29:10.080
Often, it can be helpful to save information from past interactions, but storing this kind of data requires real attention to user permissions and data management.

s250
00:29:10.080 --> 00:29:18.480
If you want to create a system that can remember things, then you also need to make sure that it can forget and that the user can not only see,

s251
00:29:18.480 --> 00:29:22.520
but has the final say in what exactly gets remembered.

s252
00:29:22.520 --> 00:29:32.160
An ideal permissions flow will not only ask for a user's approval in the moment, but also create a space where they can see the history of what they've given access to and when,

s253
00:29:32.160 --> 00:29:37.560
as well as allowing them to revoke that access or permission at any time.

s254
00:29:38.200 --> 00:29:49.960
Now, this one's pretty simple, so we won't spend too much time on it, but another crucial aspect of transparency is making sure users know exactly what they are committing to when they approve an action request.

s255
00:29:49.960 --> 00:30:02.040
In addition to approving those actual steps and plan, as we already discussed in the trust section, they also need to know how much time something is going to take and what it's going to cost them in money or tokens or credits,

s256
00:30:02.040 --> 00:30:04.480
however you are counting this.

s257
00:30:04.480 --> 00:30:18.400
Even if we can't specify an exact amount, if we can provide a rough estimate, that's generally going to give users enough information to work with and to potentially revise their request if it's going to exceed what they're comfortable with.

s258
00:30:19.160 --> 00:30:31.360
Similarly to the marking that denotes which content was AI-generated, it's also a really good example uh of an chance to have a visual signal for when an AI tool is acting independently.

s259
00:30:31.400 --> 00:30:44.000
If, for example, you're going to allow an agent to take control of the user's browser, then there needs to be some kind of banner or sidebar or outline, an indication that the user is no longer driving that interaction.

s260
00:30:44.000 --> 00:30:53.320
Not only is this a good thing to do just for transparency, so the user understands the current state of the system, but it's also helpful to make sure they don't unintentionally

s261
00:30:53.320 --> 00:30:57.160
interrupt or confuse an ongoing process.

s262
00:30:57.160 --> 00:31:05.720
It's an especially important consideration for processes that you know are going to take an extended period of time where the user might have stepped away and then come back

s263
00:31:05.720 --> 00:31:10.840
without necessarily keeping track of everything going on while they were gone.

s264
00:31:11.920 --> 00:31:22.280
Finally, all of the interesting technology and cool functionality in the world is meaningless if what we build isn't solving the problems that our users need solved.

s265
00:31:22.280 --> 00:31:34.240
To do that, we need to create experiences that make it as simple as possible for our users to get the output they need from our AI features and start to leverage it in their work or daily lives.

s266
00:31:34.680 --> 00:31:41.640
One of the biggest mistakes we can make when developing AI features is assuming that our users know how to use them.

s267
00:31:41.640 --> 00:31:44.120
As mentioned at the beginning of this talk, right?

s268
00:31:44.120 --> 00:31:54.960
We know how to do things like provide context or specify formatting requirements or break large tasks into smaller ones and then iterate, but our users often don't.

s269
00:31:54.960 --> 00:32:06.160
So, when we place a blank text box in front of a user and just tell them to ask AI, we're actually kind of asking them to do a lot of work in figuring out how to really use it.

s270
00:32:06.160 --> 00:32:15.800
They need to understand what kinds of problems the tool can solve, how specific they need to be, what information the AI tool needs to succeed, if they need to add sources or references,

s271
00:32:15.800 --> 00:32:19.440
how to recognize when a response needs refinement.

s272
00:32:19.440 --> 00:32:32.960
Rather than expecting this level of AI literacy from our users on day one, we can help them by providing examples, templates, suggested prompts, and guided workflows that demonstrate what success looks like.

s273
00:32:33.840 --> 00:32:39.040
Now, what will your users be doing with the content that your AI feature generates?

s274
00:32:39.040 --> 00:32:43.960
If they're going to run a search or analyze a spreadsheet, what happens next?

s275
00:32:43.960 --> 00:32:45.920
What do they do with the results?

s276
00:32:45.920 --> 00:32:49.000
If they create an image, who are they showing it to?

s277
00:32:49.000 --> 00:32:50.440
How are they sharing it?

s278
00:32:50.440 --> 00:32:55.480
Is it getting printed or posted online or sent to a friend?

s279
00:32:55.480 --> 00:33:04.040
By introducing next step action buttons, we can make it as easy as possible for them to leverage the output of our tools in their own work.

s280
00:33:04.040 --> 00:33:10.880
If they're not able to action on the content that was created, it's never going to be more than a novelty to them.

s281
00:33:10.880 --> 00:33:13.640
It's not going to be of realistic use.

s282
00:33:13.640 --> 00:33:20.080
But we can help guide them to suggested next actions that will help them make the most of what they created.

s283
00:33:20.080 --> 00:33:26.000
If we want to take this one step further, we can start to build in direct integrations with their other most used tools.

s284
00:33:26.000 --> 00:33:32.440
Like, maybe they want to generate a new document with the content in their word processing software from a draft.

s285
00:33:32.440 --> 00:33:35.000
Maybe they want to push new code to a linked repo.

s286
00:33:35.000 --> 00:33:39.920
Maybe they want to open a new ticket in a tracking system with their findings from a test.

s287
00:33:39.920 --> 00:33:49.480
The simpler we make it for them to get the information from our tool into the rest of their workflow, the more useful it's going to be to them.

s288
00:33:50.160 --> 00:33:59.080
Now, AI can generate content, write code, analyze data, automate tasks, empower our users to do all kinds of amazing work.

s289
00:33:59.080 --> 00:34:05.120
But only if they're willing to try it, and only if we make it easy enough for them to do.

s290
00:34:05.120 --> 00:34:17.360
When everything our AI tools are doing is hidden behind a curtain, it makes users feel like things are happening without their input, which is hard, especially when many of them are already kind of feeling some level of AI skepticism

s291
00:34:17.360 --> 00:34:19.320
or hesitation.

s292
00:34:19.320 --> 00:34:32.560
If we unintentionally create AI experiences that take away our users' power, understanding, and autonomy, then they'll never be interested in using what we build, because they'll never feel truly comfortable engaging with it.

s293
00:34:32.560 --> 00:34:47.440
By focusing on patterns that reinforce those pillars of trust, clarity, control, transparency, and meaningful benefit, we can set guardrails around our AI features that will help make our users feel safe and confident.

s294
00:34:47.440 --> 00:34:50.399
Cuz the technology is here, right?

s295
00:34:50.399 --> 00:34:56.760
The models are already really good, and they just keep getting better and better, faster and more efficient.

s296
00:34:56.760 --> 00:35:02.840
That means that the differentiator for the AI-powered software we build isn't performance anymore.

s297
00:35:02.840 --> 00:35:07.440
It's the quality of the experiences that we can build around them.

s298
00:35:07.440 --> 00:35:12.040
The line between design and development is blurring a little bit more every day.

s299
00:35:12.040 --> 00:35:23.600
How users interact with the system, how much information they see, how much control they have, and how we earn their trust are now questions that developers have to consider when building AI-powered software,

s300
00:35:23.600 --> 00:35:27.160
whether your title includes designer or not.

s301
00:35:27.160 --> 00:35:36.800
The technology may be incredible, but for it to be truly successful, users still need to be at the center of everything we build.

s302
00:35:37.200 --> 00:35:40.080
Thank you guys very much for listening to this talk.

s303
00:35:40.080 --> 00:35:46.760
I really hope this is helpful to you as you start integrating AI features into your own applications and software.

s304
00:35:46.760 --> 00:35:51.440
You can find these slides, as well as a full transcript of this talk, at the following links.

s305
00:35:51.440 --> 00:35:55.760
And, of course, feel free to reach out to me online if you have any questions at all.

s306
00:35:55.760 --> 00:35:59.160
I'm always happy to chat.
