WEBVTT

1
00:00:01.400 --> 00:00:02.809
You built a store.

2
00:00:03.059 --> 00:00:06.122
On your machine, it loads in under half a second.

3
00:00:06.142 --> 00:00:08.324
The build is green, the tests pass,

4
00:00:08.344 --> 00:00:11.978
and every page looks exactly the way you designed it.

5
00:00:12.228 --> 00:00:13.787
It works. For you.

6
00:00:15.387 --> 00:00:19.463
Whenever someone opens a page, two stories run at the same time.

7
00:00:19.613 --> 00:00:26.163
Yours is a pipeline: DNS, connection, TLS, request, response, parse, render, respond.

8
00:00:26.313 --> 00:00:29.835
Theirs is a chain of questions they never ask out loud.

9
00:00:29.985 --> 00:00:31.139
Is it there?

10
00:00:31.159 --> 00:00:32.762
Did it arrive in time?

11
00:00:32.782 --> 00:00:34.790
Can I perceive it, and operate it?

12
00:00:34.810 --> 00:00:36.093
Can I read it?

13
00:00:36.113 --> 00:00:37.438
Can I use it?

14
00:00:37.458 --> 00:00:38.718
Do I want it?

15
00:00:39.118 --> 00:00:43.087
Each question only gets asked if the one before it got a yes.

16
00:00:43.237 --> 00:00:49.041
And the choices you make at every stage of your pipeline decide which of their questions get that yes.

17
00:00:50.941 --> 00:00:54.324
So let's watch eight people open your store in the same second,

18
00:00:54.344 --> 00:00:57.236
and see how far up the ladder each of them gets.

19
00:01:00.336 --> 00:01:04.092
Marcus is at work, and his office network blocks your scripts.

20
00:01:04.242 --> 00:01:06.772
The HTML still arrives, but it's empty.

21
00:01:06.792 --> 00:01:09.577
The whole store lives inside a script.

22
00:01:09.727 --> 00:01:15.040
And a trick that keeps the page hidden until the script finishes means he sees nothing at all.

23
00:01:15.190 --> 00:01:17.517
For Marcus, your store isn't there.

24
00:01:20.617 --> 00:01:22.986
Ana is on crowded hotel Wi-Fi.

25
00:01:23.136 --> 00:01:25.852
Before your store can show her a single word,

26
00:01:25.872 --> 00:01:29.516
her phone has to download four megabytes of JavaScript.

27
00:01:29.666 --> 00:01:33.891
She stares at a blank screen for thirty seconds, then closes the tab.

28
00:01:34.041 --> 00:01:37.392
Your server answered. For Ana, the page was down.

29
00:01:40.492 --> 00:01:41.415
Lucía is blind.

30
00:01:41.435 --> 00:01:44.118
Her screen reader doesn't read your pixels.

31
00:01:44.138 --> 00:01:49.027
It reads the accessibility tree that the browser builds from your markup.

32
00:01:49.227 --> 00:01:51.751
Someone put aria-hidden on the navigation.

33
00:01:51.771 --> 00:01:54.780
For Lucía's screen reader, the menu doesn't exist,

34
00:01:54.800 --> 00:01:57.463
and neither does the way to the fleece.

35
00:01:58.263 --> 00:02:02.168
Sam broke his wrist last week, so he's shopping with the keyboard.

36
00:02:02.368 --> 00:02:07.222
Your Add to cart button is a div with a click handler. Tab skips right past it.

37
00:02:07.242 --> 00:02:10.071
For Sam, the button doesn't exist either.

38
00:02:13.171 --> 00:02:17.511
Kenji, in Osaka, has his browser translate your page into Japanese.

39
00:02:17.531 --> 00:02:19.913
Almost everything comes through.

40
00:02:20.063 --> 00:02:25.377
But your shipping terms are text inside an image, and a translator can't read pixels.

41
00:02:25.527 --> 00:02:29.347
He can't tell whether the fleece ships to Japan, so he doesn't risk it.

42
00:02:32.447 --> 00:02:35.733
Dani has a toddler on one hip and one thumb free.

43
00:02:35.883 --> 00:02:41.410
Your checkout asks her to “Initiate procurement,” then to “Finalize fulfillment parameters.”

44
00:02:41.560 --> 00:02:44.076
She leaves out one digit of her ZIP code.

45
00:02:44.096 --> 00:02:48.601
The form says “Error in form,” and clears every field she filled in.

46
00:02:48.751 --> 00:02:51.728
No automated scanner would flag this checkout.

47
00:02:51.748 --> 00:02:53.942
Every control is real and labeled.

48
00:02:53.962 --> 00:02:56.347
Dani still can't buy the fleece.

49
00:02:59.447 --> 00:03:01.475
Omar makes it to the top rung.

50
00:03:01.625 --> 00:03:05.413
A countdown says the deal ends in 4 minutes, 59 seconds.

51
00:03:05.433 --> 00:03:09.541
A protection plan he never asked for is already checked.

52
00:03:09.691 --> 00:03:11.464
He buys the fleece anyway.

53
00:03:11.484 --> 00:03:16.541
A week later, the same deal is still ending in 4 minutes, 59 seconds.

54
00:03:16.691 --> 00:03:17.646
He won't be back.

55
00:03:17.666 --> 00:03:20.319
Your analytics recorded him as a success.

56
00:03:22.819 --> 00:03:25.956
One visitor climbed all the way up without a problem.

57
00:03:26.156 --> 00:03:31.016
Fast connection. New laptop. Perfect eyesight. Steady hands. Reads English.

58
00:03:31.036 --> 00:03:32.963
Doesn't mind a countdown.

59
00:03:33.163 --> 00:03:34.295
They look familiar.

60
00:03:34.315 --> 00:03:36.556
Almost nobody else is that user.

61
00:03:38.656 --> 00:03:41.972
Now check your dashboard. Zero JavaScript errors.

62
00:03:41.992 --> 00:03:45.015
Pages load in under a second. Two sales.

63
00:03:45.215 --> 00:03:48.992
Marcus and Ana never ran the scripts that would have counted them.

64
00:03:49.192 --> 00:03:53.973
Lucía, Sam, Kenji, and Dani show up as exits, with no reason attached.

65
00:03:53.993 --> 00:03:57.471
A hidden menu, a clickable div, a picture of words,

66
00:03:57.491 --> 00:04:00.671
and a confusing form never throw an error.

67
00:04:00.871 --> 00:04:03.126
The ladder fails silently, and upward.

68
00:04:03.146 --> 00:04:08.595
The people who fell are missing from the very numbers you'd use to decide what to fix.

69
00:04:11.095 --> 00:04:15.664
That gap, between how your site works for you and how it works for everyone else,

70
00:04:15.684 --> 00:04:16.664
is a canyon.

71
00:04:16.864 --> 00:04:19.748
An empty HTML shell, a four-megabyte bundle,

72
00:04:19.768 --> 00:04:24.961
a button built from a div: each one is a choice made for the builder's comfort,

73
00:04:24.981 --> 00:04:29.175
and each one fails people on rungs the builder never tests.

74
00:04:32.875 --> 00:04:33.535
Now rewind.

75
00:04:33.555 --> 00:04:35.391
Same store, same eight people,

76
00:04:35.411 --> 00:04:39.361
built with the grain of the platform instead of against it.

77
00:04:39.961 --> 00:04:44.208
The content is in the HTML, and the script only enhances it.

78
00:04:44.608 --> 00:04:47.340
The page weighs kilobytes, not megabytes.

79
00:04:47.740 --> 00:04:51.496
The navigation isn't hidden anymore. The button is a button.

80
00:04:51.896 --> 00:04:55.993
The shipping terms are real text, so the translator can reach them.

81
00:04:56.393 --> 00:05:00.981
The labels say what they do, and a typo costs one field, not all of them.

82
00:05:01.381 --> 00:05:05.180
The sale has a real end date, and the extras start unchecked.

83
00:05:05.880 --> 00:05:07.709
None of this cost more to build.

84
00:05:07.729 --> 00:05:12.537
Most of it is what the platform does by default, as long as we don't break it.

85
00:05:13.137 --> 00:05:17.545
Lucía reached your store, heard it, read it in Spanish, and bought the fleece.

86
00:05:17.565 --> 00:05:20.477
She has one question left. Will she come back?

87
00:05:22.577 --> 00:05:25.672
Even when you build it right, you don't own the whole trip.

88
00:05:25.872 --> 00:05:30.762
Registrars, certificate authorities, CDNs, networks, browsers, extensions,

89
00:05:30.782 --> 00:05:34.543
and translators all touch your page before a person does.

90
00:05:34.563 --> 00:05:38.844
Somewhere, for someone, today, one of your rungs is failing.

91
00:05:39.044 --> 00:05:44.269
So wrap the ladder in measurement: uptime probes, field performance from real visits,

92
00:05:44.289 --> 00:05:49.093
testing with assistive technology, funnels, and whether people come back.

93
00:05:49.293 --> 00:05:54.847
The difference between a professional and a hobbyist isn't that the professional's pages never break.

94
00:05:54.867 --> 00:05:57.209
It's that the professional finds out.

95
00:05:59.309 --> 00:06:02.511
Every technical choice you make lands on a person.

96
00:06:02.811 --> 00:06:06.001
In this series, we'll climb the ladder one rung at a time,

97
00:06:06.021 --> 00:06:08.977
and see which of your choices hold each rung up.

