WEBVTT

1
00:00:03.825 --> 00:00:07.285
<00:00:03.825>My <00:00:03.980>name's <00:00:04.136>Anto <00:00:04.291>and <00:00:04.447>I'm <00:00:04.602>an <00:00:04.758>engineering <00:00:04.913>manager <00:00:05.069>at <00:00:05.225>Canva's

2
00:00:07.285 --> 00:00:10.725
<00:00:07.285>Ecosystem <00:00:07.518>Group <00:00:07.751>and <00:00:07.985>specifically <00:00:08.218>the <00:00:08.451>team <00:00:08.685>looking

3
00:00:10.725 --> 00:00:12.605
<00:00:10.725>after <00:00:11.191>our <00:00:11.658>developer <00:00:12.125>experience.

4
00:00:13.625 --> 00:00:15.645
<00:00:13.625>And <00:00:13.800>I <00:00:13.975>know <00:00:14.150>what <00:00:14.325>we're <00:00:14.500>all <00:00:14.675>thinking <00:00:14.850>the <00:00:15.025>last

5
00:00:15.645 --> 00:00:17.165
<00:00:15.645>session <00:00:15.987>on <00:00:16.329>the <00:00:16.671>last <00:00:17.012>day.

6
00:00:17.385 --> 00:00:18.685
<00:00:17.385>We <00:00:17.619>all <00:00:17.853>want <00:00:18.087>to <00:00:18.320>go <00:00:18.555>celebrate.

7
00:00:19.145 --> 00:00:21.645
<00:00:19.145>So <00:00:19.285>I'll <00:00:19.425>be <00:00:19.564>quick <00:00:19.705>and <00:00:19.845>I'll <00:00:19.985>get <00:00:20.125>straight <00:00:20.265>into <00:00:20.405>my <00:00:20.544>talk.

8
00:00:23.905 --> 00:00:27.525
<00:00:23.905>So <00:00:24.032>over <00:00:24.159>the <00:00:24.286>next <00:00:24.414>30 <00:00:24.541>minutes <00:00:24.668>or <00:00:24.795>so, <00:00:24.923>I'll <00:00:25.050>be <00:00:25.177>sharing <00:00:25.305>lessons

9
00:00:27.905 --> 00:00:31.165
<00:00:27.905>and <00:00:28.105>insights <00:00:28.305>learned <00:00:28.505>from <00:00:28.705>building <00:00:28.905>the <00:00:29.105>Canva <00:00:29.305>developers

10
00:00:31.525 --> 00:00:35.245
<00:00:31.525>platform <00:00:31.758>to <00:00:31.991>empower <00:00:32.225>over <00:00:32.458>185 <00:00:32.691>million <00:00:32.925>designers.

11
00:00:36.835 --> 00:00:39.685
<00:00:36.835>I'll <00:00:37.035>start <00:00:37.235>with <00:00:37.435>a <00:00:37.635>small <00:00:37.835>background <00:00:38.035>on <00:00:38.235>Canva

12
00:00:39.685 --> 00:00:41.045
<00:00:39.685>and <00:00:40.093>its <00:00:40.501>developer's <00:00:40.909>platform.

13
00:00:41.755 --> 00:00:45.125
<00:00:41.755>I'll <00:00:41.910>then <00:00:42.066>talk <00:00:42.221>about <00:00:42.377>our <00:00:42.532>unique <00:00:42.688>approaches <00:00:42.843>to <00:00:42.999>building <00:00:43.155>APIs

14
00:00:45.465 --> 00:00:48.205
<00:00:45.465>and <00:00:45.665>more <00:00:45.865>importantly, <00:00:46.065>the <00:00:46.265>principles <00:00:46.465>that <00:00:46.665>we <00:00:46.865>follow

15
00:00:48.585 --> 00:00:49.965
<00:00:48.585>to <00:00:48.895>ensure <00:00:49.206>that <00:00:49.516>they're <00:00:49.827>outstanding.

16
00:00:50.585 --> 00:00:53.365
<00:00:50.585>And <00:00:50.712>at <00:00:50.839>the <00:00:50.966>end, <00:00:51.094>I <00:00:51.221>will <00:00:51.348>recap <00:00:51.475>all <00:00:51.603>of <00:00:51.730>the <00:00:51.857>key <00:00:51.985>lessons

17
00:00:53.365 --> 00:00:54.685
<00:00:53.365>that <00:00:53.602>we've <00:00:53.840>learned <00:00:54.077>over <00:00:54.315>the <00:00:54.553>years.

18
00:01:00.345 --> 00:01:03.845
<00:01:00.345>So <00:01:00.578>what <00:01:00.811>is <00:01:01.045>the <00:01:01.278>Canva <00:01:01.511>developers <00:01:01.745>platform?

19
00:01:04.585 --> 00:01:07.605
<00:01:04.584>Why <00:01:04.724>don't <00:01:04.864>I <00:01:05.004>start <00:01:05.144>with <00:01:05.285>a <00:01:05.425>brief <00:01:05.565>history <00:01:05.705>of <00:01:05.845>Canva <00:01:05.985>itself?

20
00:01:08.455 --> 00:01:10.205
<00:01:08.455>Canva <00:01:08.804>is <00:01:09.155>an <00:01:09.505>online <00:01:09.855>design

21
00:01:10.385 --> 00:01:13.965
<00:01:10.385>and <00:01:10.560>visual <00:01:10.735>communication <00:01:10.910>platform <00:01:11.085>that <00:01:11.260>was <00:01:11.435>launched <00:01:11.610>in <00:01:11.785>2013

22
00:01:14.355 --> 00:01:17.725
<00:01:14.355>with <00:01:14.530>the <00:01:14.705>goal <00:01:14.880>to <00:01:15.055>integrate <00:01:15.230>the <00:01:15.405>entire <00:01:15.580>design <00:01:15.755>ecosystem

23
00:01:18.235 --> 00:01:20.365
<00:01:18.235>into <00:01:18.701>one <00:01:19.168>convenient <00:01:19.635>platform

24
00:01:20.695 --> 00:01:24.405
<00:01:20.695>where <00:01:20.869>users <00:01:21.044>could <00:01:21.220>do <00:01:21.395>anything <00:01:21.570>from <00:01:21.744>accessing <00:01:21.919>stock <00:01:22.095>assets

25
00:01:24.475 --> 00:01:25.685
<00:01:24.475>like <00:01:24.838>images <00:01:25.201>and <00:01:25.564>videos

26
00:01:26.185 --> 00:01:29.445
<00:01:26.185>to <00:01:26.385>leveraging <00:01:26.585>pre-existing <00:01:26.785>design <00:01:26.985>templates, <00:01:27.185>all <00:01:27.385>the <00:01:27.585>way

27
00:01:29.445 --> 00:01:31.045
<00:01:29.445>to <00:01:29.794>publishing <00:01:30.145>their <00:01:30.494>designs <00:01:30.845>anyway,

28
00:01:31.435 --> 00:01:33.445
<00:01:31.435>including <00:01:31.901>on <00:01:32.368>print <00:01:32.835>products.

29
00:01:33.665 --> 00:01:35.165
<00:01:33.664>And <00:01:34.002>obviously <00:01:34.339>much, <00:01:34.677>much <00:01:35.014>more.

30
00:01:37.715 --> 00:01:42.685
<00:01:37.715>Fast <00:01:37.855>forward <00:01:37.995>today, <00:01:38.135>and <00:01:38.275>we <00:01:38.415>have <00:01:38.555>got <00:01:38.695>over <00:01:38.835>185 <00:01:38.975>million <00:01:39.115>monthly

31
00:01:42.705 --> 00:01:45.965
<00:01:42.705>active <00:01:42.985>users <00:01:43.265>across <00:01:43.545>190 <00:01:43.825>different <00:01:44.105>countries.

32
00:01:47.935 --> 00:01:50.965
<00:01:47.935>These <00:01:48.285>users <00:01:48.635>have <00:01:48.985>collectively <00:01:49.335>created

33
00:01:51.555 --> 00:01:54.445
<00:01:51.555>over <00:01:52.021>25 <00:01:52.488>billion <00:01:52.955>designs.

34
00:01:55.105 --> 00:01:59.245
<00:01:55.104>And <00:01:55.232>yes, <00:01:55.359>you <00:01:55.486>heard <00:01:55.614>me <00:01:55.741>right, <00:01:55.868>that's <00:01:55.995>25 <00:01:56.123>billion <00:01:56.250>with <00:01:56.377>a <00:01:56.505>B.

35
00:01:59.945 --> 00:02:03.085
<00:01:59.945>In <00:02:00.119>fact, <00:02:00.294>these <00:02:00.470>designs <00:02:00.645>are <00:02:00.820>created <00:02:00.994>at <00:02:01.169>a <00:02:01.345>rate

36
00:02:03.085 --> 00:02:05.285
<00:02:03.085>of <00:02:03.434>over <00:02:03.785>280 <00:02:04.134>per <00:02:04.485>second.

37
00:02:05.705 --> 00:02:07.485
<00:02:05.705>So <00:02:05.938>since <00:02:06.171>I <00:02:06.405>got <00:02:06.638>up <00:02:06.871>here <00:02:07.105>alone

38
00:02:07.505 --> 00:02:10.765
<00:02:07.505>and <00:02:07.679>started <00:02:07.854>talking, <00:02:08.030>there's <00:02:08.204>been <00:02:08.380>over <00:02:08.555>30,000 <00:02:08.729>new <00:02:08.905>designs

39
00:02:10.765 --> 00:02:12.045
<00:02:10.764>created <00:02:11.340>and <00:02:11.916>counting.

40
00:02:13.945 --> 00:02:16.085
<00:02:13.945>In <00:02:14.178>fact, <00:02:14.411>here's <00:02:14.644>a <00:02:14.878>little <00:02:15.111>fun <00:02:15.345>fact.

41
00:02:16.715 --> 00:02:19.205
<00:02:16.715>When <00:02:16.870>this <00:02:17.026>talk <00:02:17.181>was <00:02:17.337>first <00:02:17.492>submitted <00:02:17.648>early <00:02:17.803>in <00:02:17.959>the <00:02:18.115>year,

42
00:02:19.585 --> 00:02:21.725
<00:02:19.585>we <00:02:19.865>were <00:02:20.145>only <00:02:20.425>at <00:02:20.705>165 <00:02:20.985>million.

43
00:02:22.265 --> 00:02:25.845
<00:02:22.265>So <00:02:22.392>I <00:02:22.519>had <00:02:22.646>to <00:02:22.774>email <00:02:22.901>the <00:02:23.028>organizers <00:02:23.155>and <00:02:23.283>have <00:02:23.410>the <00:02:23.537>title <00:02:23.665>changed.

44
00:02:26.185 --> 00:02:29.125
<00:02:26.185>So <00:02:26.385>if <00:02:26.585>you <00:02:26.785>see <00:02:26.985>any <00:02:27.185>stale <00:02:27.385>marketing <00:02:27.585>info

45
00:02:29.325 --> 00:02:30.645
<00:02:29.325>anywhere <00:02:29.622>now <00:02:29.919>you <00:02:30.216>know <00:02:30.513>why.

46
00:02:32.785 --> 00:02:35.405
<00:02:32.785>As <00:02:32.960>you <00:02:33.135>can <00:02:33.310>see, <00:02:33.484>our <00:02:33.660>user <00:02:33.835>base <00:02:34.010>is <00:02:34.185>growing

47
00:02:35.745 --> 00:02:37.485
<00:02:35.745>and <00:02:35.978>it's <00:02:36.211>growing <00:02:36.445>at <00:02:36.678>a <00:02:36.911>rapid <00:02:37.145>rate.

48
00:02:38.185 --> 00:02:42.245
<00:02:38.185>So <00:02:38.301>there <00:02:38.418>comes <00:02:38.535>a <00:02:38.651>point <00:02:38.768>where <00:02:38.885>we <00:02:39.001>alone <00:02:39.118>won't <00:02:39.235>be <00:02:39.351>able <00:02:39.468>to <00:02:39.585>cater

49
00:02:42.425 --> 00:02:44.765
<00:02:42.425>for <00:02:42.600>every <00:02:42.775>single <00:02:42.950>one <00:02:43.125>of <00:02:43.300>these <00:02:43.475>unique <00:02:43.650>design <00:02:43.825>needs.

50
00:02:46.625 --> 00:02:50.765
<00:02:46.625>And <00:02:46.825>so <00:02:47.025>we <00:02:47.225>decided <00:02:47.425>to <00:02:47.625>unleash <00:02:47.825>the <00:02:48.025>creativity

51
00:02:50.945 --> 00:02:53.845
<00:02:50.945>of <00:02:51.225>the <00:02:51.505>developer <00:02:51.785>community <00:02:52.065>by <00:02:52.345>building

52
00:02:53.985 --> 00:02:56.285
<00:02:53.985>and <00:02:54.265>launching <00:02:54.545>the <00:02:54.825>Canva <00:02:55.105>Apps <00:02:55.385>marketplace

53
00:02:56.745 --> 00:03:00.685
<00:02:56.745>and <00:02:56.900>building <00:02:57.056>a <00:02:57.211>community <00:02:57.367>of <00:02:57.522>app <00:02:57.678>developers <00:02:57.833>to <00:02:57.989>do <00:02:58.145>so.

54
00:03:01.065 --> 00:03:02.765
<00:03:01.065>And <00:03:01.240>I'm <00:03:01.415>gonna <00:03:01.590>need <00:03:01.765>a <00:03:01.940>little <00:03:02.115>drum <00:03:02.290>roll <00:03:02.465>here.

55
00:03:06.545 --> 00:03:08.925
<00:03:06.545>We <00:03:06.825>launched <00:03:07.105>the <00:03:07.385>Canva <00:03:07.665>apps, <00:03:07.945>SDK.

56
00:03:09.425 --> 00:03:12.965
<00:03:09.425>The <00:03:09.541>tools <00:03:09.658>in <00:03:09.775>the <00:03:09.891>SDK <00:03:10.008>allow <00:03:10.125>you <00:03:10.241>to <00:03:10.358>get <00:03:10.475>a <00:03:10.591>working <00:03:10.708>app <00:03:10.825>up

57
00:03:12.965 --> 00:03:14.045
<00:03:12.965>and <00:03:13.289>running <00:03:13.613>in <00:03:13.936>minutes,

58
00:03:14.465 --> 00:03:18.125
<00:03:14.465>at <00:03:14.620>which <00:03:14.776>point <00:03:14.931>you <00:03:15.087>could <00:03:15.242>use <00:03:15.398>the <00:03:15.553>SDK's, <00:03:15.709>many <00:03:15.865>APIs

59
00:03:18.185 --> 00:03:19.485
<00:03:18.185>to <00:03:18.575>build <00:03:18.965>powerful <00:03:19.355>apps.

60
00:03:20.665 --> 00:03:22.165
<00:03:20.665>So <00:03:21.002>let's <00:03:21.340>take <00:03:21.677>a <00:03:22.015>second

61
00:03:22.265 --> 00:03:24.125
<00:03:22.265>to <00:03:22.440>do <00:03:22.614>a <00:03:22.790>deep <00:03:22.964>dive <00:03:23.140>into <00:03:23.315>the <00:03:23.489>Canva <00:03:23.665>apps,

62
00:03:24.365 --> 00:03:27.565
<00:03:24.365>SDK <00:03:24.492>from <00:03:24.619>an <00:03:24.746>architecture <00:03:24.874>point <00:03:25.001>of <00:03:25.128>view <00:03:25.255>and <00:03:25.383>see <00:03:25.510>how <00:03:25.637>it <00:03:25.765>works.

63
00:03:29.305 --> 00:03:31.845
<00:03:29.305>So <00:03:29.480>at <00:03:29.655>the <00:03:29.830>highest <00:03:30.005>level, <00:03:30.180>you've <00:03:30.355>got <00:03:30.530>two <00:03:30.705>things.

64
00:03:32.225 --> 00:03:35.605
<00:03:32.225>You've <00:03:32.400>got <00:03:32.575>the <00:03:32.750>app <00:03:32.924>built <00:03:33.100>by <00:03:33.275>you, <00:03:33.450>the <00:03:33.625>developer,

65
00:03:36.385 --> 00:03:38.325
<00:03:36.385>and <00:03:36.665>you've <00:03:36.945>got <00:03:37.225>the <00:03:37.505>Canva <00:03:37.785>editor.

66
00:03:38.515 --> 00:03:43.365
<00:03:38.515>It's <00:03:38.670>built <00:03:38.826>by <00:03:38.981>us, <00:03:39.137>Canva, <00:03:39.292>that <00:03:39.448>contains <00:03:39.603>the <00:03:39.759>app <00:03:39.915>framework

67
00:03:43.505 --> 00:03:45.405
<00:03:43.505>and <00:03:43.738>all <00:03:43.971>of <00:03:44.204>the <00:03:44.438>core <00:03:44.671>product <00:03:44.905>functionality.

68
00:03:46.945 --> 00:03:48.045
<00:03:46.945>But <00:03:47.192>what <00:03:47.440>is <00:03:47.687>an <00:03:47.935>app?

69
00:03:48.755 --> 00:03:52.405
<00:03:48.755>Well <00:03:48.930>simply <00:03:49.105>put, <00:03:49.280>an <00:03:49.454>app <00:03:49.630>is <00:03:49.805>a <00:03:49.980>JavaScript <00:03:50.155>bundle

70
00:03:52.635 --> 00:03:55.405
<00:03:52.635>that <00:03:52.868>is <00:03:53.101>running <00:03:53.334>inside <00:03:53.568>a <00:03:53.801>sandbox <00:03:54.035>iframe.

71
00:03:56.145 --> 00:03:57.685
<00:03:56.145>And <00:03:56.376>why <00:03:56.607>do <00:03:56.838>we <00:03:57.069>need <00:03:57.300>a <00:03:57.531>sandbox?

72
00:03:57.755 --> 00:04:01.445
<00:03:57.755>Well, <00:03:57.930>the <00:03:58.105>sandbox <00:03:58.280>is <00:03:58.454>there <00:03:58.630>to <00:03:58.805>protect <00:03:58.980>both <00:03:59.155>Canva

73
00:04:01.505 --> 00:04:04.725
<00:04:01.505>and <00:04:01.704>more <00:04:01.905>importantly, <00:04:02.105>its <00:04:02.305>users <00:04:02.505>from <00:04:02.704>potentially <00:04:02.905>broken,

74
00:04:05.785 --> 00:04:07.925
<00:04:05.785>faulty <00:04:06.065>and <00:04:06.345>even <00:04:06.625>malicious <00:04:06.905>app <00:04:07.185>code.

75
00:04:09.575 --> 00:04:12.645
<00:04:09.575>These <00:04:09.855>apps <00:04:10.135>communicate <00:04:10.415>via <00:04:10.695>various <00:04:10.975>APIs

76
00:04:12.645 --> 00:04:14.725
<00:04:12.645>that <00:04:12.925>we <00:04:13.205>inject <00:04:13.485>into <00:04:13.765>the <00:04:14.045>sandbox.

77
00:04:15.625 --> 00:04:17.325
<00:04:15.625>And <00:04:15.905>diving <00:04:16.185>a <00:04:16.464>little <00:04:16.745>bit <00:04:17.024>deeper,

78
00:04:17.895 --> 00:04:20.445
<00:04:17.894>these <00:04:18.174>API <00:04:18.454>clients <00:04:18.734>send <00:04:19.015>messages <00:04:19.294>back

79
00:04:20.445 --> 00:04:23.405
<00:04:20.445>and <00:04:20.644>forth <00:04:20.844>through <00:04:21.045>Canva <00:04:21.245>via <00:04:21.445>a <00:04:21.644>message <00:04:21.844>bus.

80
00:04:24.315 --> 00:04:26.405
<00:04:24.315>Okay, <00:04:24.470>so <00:04:24.626>on <00:04:24.781>the <00:04:24.937>other <00:04:25.092>side <00:04:25.248>of <00:04:25.403>the <00:04:25.559>message <00:04:25.715>bus,

81
00:04:26.775 --> 00:04:28.445
<00:04:26.775>we've <00:04:27.125>got <00:04:27.474>an <00:04:27.825>API <00:04:28.174>controller

82
00:04:29.225 --> 00:04:32.925
<00:04:29.225>and <00:04:29.425>this <00:04:29.625>API <00:04:29.825>controller <00:04:30.025>wraps <00:04:30.225>core <00:04:30.425>product <00:04:30.625>functionality

83
00:04:33.475 --> 00:04:36.805
<00:04:33.475>such <00:04:33.630>as <00:04:33.786>adding <00:04:33.941>elements <00:04:34.097>to <00:04:34.252>a <00:04:34.408>design, <00:04:34.563>uploading <00:04:34.719>new <00:04:34.875>assets,

84
00:04:37.315 --> 00:04:39.765
<00:04:37.315>replacing <00:04:37.594>them, <00:04:37.875>and <00:04:38.155>much, <00:04:38.435>much <00:04:38.715>more.

85
00:04:41.745 --> 00:04:44.325
<00:04:41.745>So <00:04:41.945>time <00:04:42.145>to <00:04:42.345>do <00:04:42.545>a <00:04:42.745>little <00:04:42.945>case <00:04:43.145>study.

86
00:04:45.145 --> 00:04:47.125
<00:04:45.145>We <00:04:45.320>all <00:04:45.495>know <00:04:45.669>and <00:04:45.844>love <00:04:46.020>the <00:04:46.195>Hello <00:04:46.370>World <00:04:46.544>app.

87
00:04:47.305 --> 00:04:50.245
<00:04:47.305>So <00:04:47.432>let's <00:04:47.559>do <00:04:47.686>a <00:04:47.814>case <00:04:47.941>study <00:04:48.068>of <00:04:48.195>a <00:04:48.323>Canva <00:04:48.450>hello <00:04:48.577>world <00:04:48.705>app

88
00:04:50.465 --> 00:04:51.565
<00:04:50.465>and <00:04:50.795>follow <00:04:51.125>the <00:04:51.455>journey

89
00:04:51.585 --> 00:04:54.645
<00:04:51.585>of <00:04:51.712>the <00:04:51.839>request <00:04:51.966>from <00:04:52.094>the <00:04:52.221>sandbox <00:04:52.348>all <00:04:52.475>the <00:04:52.603>way <00:04:52.730>to <00:04:52.857>the <00:04:52.984>editor.

90
00:04:56.665 --> 00:05:01.085
<00:04:56.665>It <00:04:56.820>all <00:04:56.976>starts <00:04:57.131>in <00:04:57.287>the <00:04:57.442>app <00:04:57.598>iframe <00:04:57.753>with <00:04:57.909>your <00:04:58.065>code.

91
00:05:01.305 --> 00:05:04.125
<00:05:01.305>The <00:05:01.460>app <00:05:01.616>sends <00:05:01.771>a <00:05:01.927>request <00:05:02.082>to <00:05:02.238>add <00:05:02.393>a <00:05:02.549>text <00:05:02.705>element

92
00:05:05.195 --> 00:05:09.285
<00:05:05.195>that <00:05:05.350>is <00:05:05.506>first <00:05:05.661>serialized <00:05:05.817>and <00:05:05.972>sent <00:05:06.128>through <00:05:06.283>the <00:05:06.439>message <00:05:06.594>bus.

93
00:05:10.075 --> 00:05:12.445
<00:05:10.075>From <00:05:10.215>there, <00:05:10.354>it <00:05:10.495>goes <00:05:10.635>all <00:05:10.775>the <00:05:10.914>way <00:05:11.055>through <00:05:11.195>to <00:05:11.335>the <00:05:11.474>editor

94
00:05:12.785 --> 00:05:16.205
<00:05:12.785>and <00:05:12.960>more <00:05:13.135>specifically <00:05:13.310>the <00:05:13.485>API <00:05:13.660>controller <00:05:13.835>that <00:05:14.010>will <00:05:14.185>first

95
00:05:16.265 --> 00:05:18.205
<00:05:16.265>and <00:05:16.615>foremost <00:05:16.965>deserialize <00:05:17.315>the <00:05:17.664>message

96
00:05:18.585 --> 00:05:20.405
<00:05:18.585>to <00:05:18.784>convert <00:05:18.984>it <00:05:19.185>back <00:05:19.385>to <00:05:19.585>its <00:05:19.784>original <00:05:19.984>form.

97
00:05:21.595 --> 00:05:23.565
<00:05:21.595>From <00:05:21.795>there, <00:05:21.995>and <00:05:22.195>this <00:05:22.395>is <00:05:22.595>the <00:05:22.795>important <00:05:22.995>step,

98
00:05:24.275 --> 00:05:27.205
<00:05:24.275>this <00:05:24.508>request <00:05:24.741>is <00:05:24.974>mapped <00:05:25.208>into <00:05:25.441>the <00:05:25.674>internal

99
00:05:27.325 --> 00:05:29.725
<00:05:27.325>representation <00:05:27.675>of <00:05:28.025>a <00:05:28.375>text <00:05:28.724>element.

100
00:05:30.905 --> 00:05:35.165
<00:05:30.905>And <00:05:31.044>then <00:05:31.184>finally, <00:05:31.325>you <00:05:31.465>end <00:05:31.604>up <00:05:31.744>with <00:05:31.885>your <00:05:32.025>hello <00:05:32.164>world <00:05:32.304>element.

101
00:05:37.225 --> 00:05:40.325
<00:05:37.225>So <00:05:37.400>the <00:05:37.575>main <00:05:37.750>step <00:05:37.925>here <00:05:38.100>is <00:05:38.275>the <00:05:38.450>mapping <00:05:38.625>layer

102
00:05:40.325 --> 00:05:42.565
<00:05:40.325>between <00:05:40.525>the <00:05:40.724>API <00:05:40.925>controller <00:05:41.125>and <00:05:41.325>the <00:05:41.525>core <00:05:41.724>product.

103
00:05:43.425 --> 00:05:47.125
<00:05:43.425>The <00:05:43.580>API <00:05:43.736>controller <00:05:43.891>is <00:05:44.047>what <00:05:44.202>we <00:05:44.358>call <00:05:44.513>an <00:05:44.669>anti-corruption <00:05:44.825>layer

104
00:05:47.275 --> 00:05:49.325
<00:05:47.275>because <00:05:47.741>it <00:05:48.208>enables <00:05:48.674>us

105
00:05:49.465 --> 00:05:52.565
<00:05:49.465>to <00:05:49.745>completely <00:05:50.025>decouple <00:05:50.305>our <00:05:50.585>internal <00:05:50.865>representation

106
00:05:52.785 --> 00:05:55.285
<00:05:52.784>of <00:05:52.984>a <00:05:53.184>text <00:05:53.385>element <00:05:53.585>from <00:05:53.784>our <00:05:53.984>public <00:05:54.184>API.

107
00:05:55.825 --> 00:05:58.645
<00:05:55.825>And <00:05:55.980>this <00:05:56.136>means <00:05:56.291>that <00:05:56.447>our <00:05:56.602>internal <00:05:56.758>teams <00:05:56.913>can <00:05:57.069>move <00:05:57.224>fast

108
00:05:58.945 --> 00:06:02.205
<00:05:58.945>and <00:05:59.120>evolve <00:05:59.295>their <00:05:59.469>product <00:05:59.645>without <00:05:59.820>having <00:05:59.995>to <00:06:00.170>worry <00:06:00.344>about

109
00:06:02.845 --> 00:06:05.205
<00:06:02.845>breaking <00:06:03.195>apps <00:06:03.545>or <00:06:03.895>deprecating <00:06:04.245>APIs

110
00:06:05.305 --> 00:06:07.565
<00:06:05.305>or <00:06:05.655>affecting <00:06:06.005>users' <00:06:06.355>core <00:06:06.705>workflows.

111
00:06:10.185 --> 00:06:14.245
<00:06:10.185>So <00:06:10.360>we <00:06:10.535>now <00:06:10.710>have <00:06:10.885>a <00:06:11.060>platform <00:06:11.235>to <00:06:11.410>host <00:06:11.585>APIs,

112
00:06:14.745 --> 00:06:16.605
<00:06:14.745>but <00:06:14.945>how <00:06:15.145>do <00:06:15.345>we <00:06:15.545>go <00:06:15.745>about <00:06:15.945>building <00:06:16.145>them?

113
00:06:17.575 --> 00:06:20.645
<00:06:17.575>We'll <00:06:17.715>take <00:06:17.854>a <00:06:17.995>look <00:06:18.135>at <00:06:18.275>how <00:06:18.414>we <00:06:18.555>used <00:06:18.695>Canva's <00:06:18.835>unique <00:06:18.974>engineering

114
00:06:20.645 --> 00:06:23.325
<00:06:20.645>culture <00:06:20.878>and <00:06:21.111>values <00:06:21.344>to <00:06:21.578>fuel <00:06:21.811>our <00:06:22.044>approach.

115
00:06:25.385 --> 00:06:28.205
<00:06:25.385>At <00:06:25.664>Canva, <00:06:25.945>we <00:06:26.224>believe <00:06:26.505>in <00:06:26.784>refining

116
00:06:28.205 --> 00:06:29.725
<00:06:28.205>through <00:06:28.889>continuous <00:06:29.573>feedback.

117
00:06:30.625 --> 00:06:34.885
<00:06:30.625>And <00:06:30.780>so <00:06:30.936>we <00:06:31.091>will <00:06:31.247>always <00:06:31.402>start <00:06:31.558>with <00:06:31.713>the <00:06:31.869>user <00:06:32.025>research.

118
00:06:35.145 --> 00:06:36.685
<00:06:35.145>And <00:06:35.422>for <00:06:35.699>us <00:06:35.976>over <00:06:36.253>at <00:06:36.531>ecosystem,

119
00:06:36.995 --> 00:06:39.925
<00:06:36.995>this <00:06:37.275>means <00:06:37.555>developer <00:06:37.835>interviews, <00:06:38.115>developer <00:06:38.395>insights,

120
00:06:40.225 --> 00:06:43.405
<00:06:40.225>the <00:06:40.400>feedback <00:06:40.575>submitted <00:06:40.750>by <00:06:40.925>developers, <00:06:41.100>the <00:06:41.275>users <00:06:41.450>of <00:06:41.625>apps,

121
00:06:43.865 --> 00:06:45.765
<00:06:43.865>and <00:06:44.040>all <00:06:44.215>the <00:06:44.390>data <00:06:44.565>points <00:06:44.740>that <00:06:44.915>come <00:06:45.090>with <00:06:45.265>it.

122
00:06:46.875 --> 00:06:49.325
<00:06:46.875>From <00:06:47.075>there <00:06:47.275>we <00:06:47.475>go <00:06:47.675>and <00:06:47.875>build <00:06:48.075>a <00:06:48.275>product

123
00:06:49.425 --> 00:06:51.085
<00:06:49.425>and <00:06:49.658>API, <00:06:49.891>whatever <00:06:50.125>the <00:06:50.358>case <00:06:50.591>may <00:06:50.825>be,

124
00:06:51.345 --> 00:06:53.925
<00:06:51.345>and <00:06:51.545>we <00:06:51.745>will <00:06:51.945>first <00:06:52.145>do <00:06:52.345>an <00:06:52.545>internal <00:06:52.745>release.

125
00:06:54.895 --> 00:06:57.445
<00:06:54.895>These <00:06:55.174>internal <00:06:55.455>releases <00:06:55.734>are <00:06:56.015>often <00:06:56.294>accompanied

126
00:06:57.585 --> 00:06:59.445
<00:06:57.585>by <00:06:58.051>internal <00:06:58.518>company <00:06:58.984>hackathons.

127
00:07:00.465 --> 00:07:03.725
<00:07:00.465>And <00:07:00.640>then <00:07:00.815>once <00:07:00.989>we <00:07:01.164>are <00:07:01.340>satisfied, <00:07:01.515>we <00:07:01.690>go <00:07:01.864>ahead

128
00:07:03.945 --> 00:07:06.605
<00:07:03.945>and <00:07:04.120>put <00:07:04.295>out <00:07:04.469>a <00:07:04.645>preview <00:07:04.820>release <00:07:04.995>of <00:07:05.170>our <00:07:05.344>API,

129
00:07:07.025 --> 00:07:08.765
<00:07:07.025>at <00:07:07.375>which <00:07:07.724>point <00:07:08.075>our <00:07:08.424>alpha

130
00:07:08.765 --> 00:07:11.765
<00:07:08.765>and <00:07:09.044>beta <00:07:09.325>developers <00:07:09.604>provide <00:07:09.885>valuable <00:07:10.164>insights.

131
00:07:13.395 --> 00:07:17.765
<00:07:13.395>Then <00:07:13.550>and <00:07:13.706>only <00:07:13.861>then, <00:07:14.017>once <00:07:14.172>we've <00:07:14.328>fixed <00:07:14.483>all <00:07:14.639>the <00:07:14.794>bugs,

132
00:07:17.985 --> 00:07:19.725
<00:07:17.985>ironed <00:07:18.265>out <00:07:18.545>all <00:07:18.825>the <00:07:19.105>kinks <00:07:19.385>and

133
00:07:20.955 --> 00:07:24.455
<00:07:20.955>and <00:07:21.188>solved <00:07:21.421>any <00:07:21.655>usability <00:07:21.888>concerns, <00:07:22.121>we <00:07:22.354>proceed

134
00:07:24.455 --> 00:07:25.695
<00:07:24.455>with <00:07:24.827>a <00:07:25.199>public <00:07:25.570>release.

135
00:07:27.935 --> 00:07:30.655
<00:07:27.935>I <00:07:28.135>mention <00:07:28.335>how <00:07:28.535>we <00:07:28.735>often <00:07:28.935>have <00:07:29.135>internal <00:07:29.335>hackathons.

136
00:07:30.945 --> 00:07:33.415
<00:07:30.945>These <00:07:31.100>have <00:07:31.256>actually <00:07:31.411>been <00:07:31.567>a <00:07:31.722>complete <00:07:31.878>game <00:07:32.033>changer <00:07:32.189>for <00:07:32.344>us

137
00:07:33.525 --> 00:07:35.975
<00:07:33.525>because <00:07:33.724>not <00:07:33.924>only <00:07:34.125>are <00:07:34.325>they <00:07:34.525>heaps <00:07:34.724>of <00:07:34.924>fun

138
00:07:35.975 --> 00:07:37.215
<00:07:35.975>where <00:07:36.254>we <00:07:36.533>all <00:07:36.812>get <00:07:37.091>together

139
00:07:37.395 --> 00:07:40.375
<00:07:37.395>and <00:07:37.534>spend <00:07:37.674>the <00:07:37.815>day <00:07:37.955>using <00:07:38.094>our <00:07:38.234>new <00:07:38.375>APIs <00:07:38.515>to <00:07:38.655>build <00:07:38.794>apps,

140
00:07:41.195 --> 00:07:44.815
<00:07:41.195>but <00:07:41.335>by <00:07:41.474>doing <00:07:41.615>so, <00:07:41.755>we <00:07:41.895>are <00:07:42.034>putting <00:07:42.175>ourselves <00:07:42.315>in <00:07:42.455>your <00:07:42.594>shoes.

141
00:07:45.355 --> 00:07:47.495
<00:07:45.355>We <00:07:45.555>are <00:07:45.755>putting <00:07:45.955>ourselves <00:07:46.155>in <00:07:46.355>our <00:07:46.555>developer's <00:07:46.755>shoes,

142
00:07:47.875 --> 00:07:49.975
<00:07:47.875>and <00:07:48.108>we <00:07:48.341>are <00:07:48.575>using <00:07:48.808>our <00:07:49.041>products <00:07:49.275>the

143
00:07:49.975 --> 00:07:51.015
<00:07:49.975>way <00:07:50.162>you <00:07:50.349>would <00:07:50.536>be <00:07:50.723>using <00:07:50.911>them.

144
00:07:51.805 --> 00:07:54.535
<00:07:51.805>This <00:07:51.960>ensures <00:07:52.116>that <00:07:52.271>what <00:07:52.427>we <00:07:52.582>build <00:07:52.738>is <00:07:52.893>fit <00:07:53.049>for <00:07:53.205>purpose.

145
00:07:55.365 --> 00:07:57.375
<00:07:55.365>Over <00:07:55.598>the <00:07:55.831>years <00:07:56.065>we've <00:07:56.298>had <00:07:56.531>many <00:07:56.765>hackathons

146
00:07:57.555 --> 00:08:00.255
<00:07:57.555>and <00:07:57.835>these <00:07:58.115>have <00:07:58.395>uncovered <00:07:58.675>many <00:07:58.955>incompatibilities

147
00:08:00.255 --> 00:08:02.015
<00:08:00.255>between <00:08:00.955>APIs, <00:08:01.655>opportunities

148
00:08:02.115 --> 00:08:03.695
<00:08:02.115>for <00:08:02.581>developer <00:08:03.048>experience <00:08:03.515>improvements,

149
00:08:04.035 --> 00:08:05.935
<00:08:04.035>and <00:08:04.385>sometimes <00:08:04.735>large <00:08:05.085>scale <00:08:05.435>bugs,

150
00:08:06.225 --> 00:08:07.855
<00:08:06.225>which <00:08:06.575>we <00:08:06.925>obviously <00:08:07.275>always <00:08:07.625>fix

151
00:08:07.915 --> 00:08:09.695
<00:08:07.915>before <00:08:08.195>proceeding <00:08:08.475>to <00:08:08.755>the <00:08:09.035>next <00:08:09.315>stage.

152
00:08:11.515 --> 00:08:12.855
<00:08:11.515>Oh, <00:08:11.756>and <00:08:11.997>at <00:08:12.238>the <00:08:12.479>very <00:08:12.721>end

153
00:08:12.855 --> 00:08:15.815
<00:08:12.855>of <00:08:13.010>the <00:08:13.166>hackathons <00:08:13.321>we <00:08:13.477>get <00:08:13.632>together <00:08:13.788>once <00:08:13.943>again <00:08:14.099>whether <00:08:14.255>in

154
00:08:15.815 --> 00:08:18.535
<00:08:15.815>physically <00:08:16.048>in <00:08:16.281>the <00:08:16.515>room <00:08:16.748>together <00:08:16.981>or <00:08:17.215>virtually,

155
00:08:19.235 --> 00:08:21.855
<00:08:19.235>and <00:08:19.410>we <00:08:19.585>demonstrate <00:08:19.760>all <00:08:19.935>the <00:08:20.110>apps <00:08:20.285>that <00:08:20.460>we've <00:08:20.635>built

156
00:08:23.035 --> 00:08:26.135
<00:08:23.035>and <00:08:23.210>at <00:08:23.385>the <00:08:23.560>very <00:08:23.735>end <00:08:23.910>we <00:08:24.085>pick <00:08:24.260>our <00:08:24.435>favorites

157
00:08:26.155 --> 00:08:27.895
<00:08:26.155>and <00:08:26.388>hand <00:08:26.621>our <00:08:26.854>prizes <00:08:27.088>to <00:08:27.321>the <00:08:27.554>winners.

158
00:08:28.355 --> 00:08:30.055
<00:08:28.355>In <00:08:28.705>fact, <00:08:29.055>since <00:08:29.405>my <00:08:29.755>colleague

159
00:08:30.055 --> 00:08:32.735
<00:08:30.055>and <00:08:30.182>I <00:08:30.309>were <00:08:30.436>over <00:08:30.564>here <00:08:30.691>in <00:08:30.818>Berlin, <00:08:30.945>we <00:08:31.073>stopped <00:08:31.200>by <00:08:31.327>in <00:08:31.455>Prague

160
00:08:32.955 --> 00:08:35.135
<00:08:32.955>and <00:08:33.130>we <00:08:33.305>stopped <00:08:33.480>by <00:08:33.655>our <00:08:33.830>team <00:08:34.005>that <00:08:34.180>works <00:08:34.355>there

161
00:08:35.135 --> 00:08:36.375
<00:08:35.135>and <00:08:35.321>we <00:08:35.506>had <00:08:35.693>a <00:08:35.879>hackathon <00:08:36.065>with <00:08:36.251>them

162
00:08:36.795 --> 00:08:38.975
<00:08:36.794>and <00:08:36.950>we <00:08:37.106>had <00:08:37.261>a <00:08:37.417>number <00:08:37.572>of <00:08:37.728>really <00:08:37.883>cool <00:08:38.039>apps <00:08:38.194>built

163
00:08:39.155 --> 00:08:40.815
<00:08:39.155>and <00:08:39.434>tons <00:08:39.714>of <00:08:39.995>great <00:08:40.275>feedback <00:08:40.554>collected.

164
00:08:43.435 --> 00:08:47.415
<00:08:43.434>So <00:08:43.590>the <00:08:43.746>key <00:08:43.901>lesson <00:08:44.057>here <00:08:44.212>is <00:08:44.368>that <00:08:44.523>dogfooding <00:08:44.679>with <00:08:44.834>internal

165
00:08:47.555 --> 00:08:49.615
<00:08:47.555>and <00:08:47.905>preview <00:08:48.255>releases <00:08:48.604>as <00:08:48.954>early

166
00:08:49.635 --> 00:08:53.215
<00:08:49.635>and <00:08:49.810>often <00:08:49.985>as <00:08:50.160>possible <00:08:50.335>will <00:08:50.510>massively <00:08:50.685>influence <00:08:50.860>your <00:08:51.035>entire

167
00:08:53.215 --> 00:08:54.935
<00:08:53.215>product <00:08:53.565>direction <00:08:53.915>for <00:08:54.265>the <00:08:54.615>better.

168
00:08:55.425 --> 00:08:56.645
<00:08:55.425>And <00:08:55.581>for <00:08:55.738>those <00:08:55.895>of <00:08:56.052>you <00:08:56.209>who <00:08:56.366>don't <00:08:56.523>know

169
00:08:56.645 --> 00:08:59.005
<00:08:56.645>what <00:08:56.845>dogfooding <00:08:57.045>is, <00:08:57.245>it's <00:08:57.444>not <00:08:57.645>what <00:08:57.845>you <00:08:58.045>think.

170
00:08:59.355 --> 00:09:02.325
<00:08:59.355>It's <00:08:59.555>the <00:08:59.755>practice <00:08:59.955>of <00:09:00.155>using <00:09:00.355>your <00:09:00.555>product <00:09:00.755>internally

171
00:09:02.945 --> 00:09:05.485
<00:09:02.945>before <00:09:03.225>releasing <00:09:03.505>them <00:09:03.785>to <00:09:04.065>external <00:09:04.345>users.

172
00:09:07.795 --> 00:09:11.285
<00:09:07.795>Cool. <00:09:07.950>Let's <00:09:08.106>now <00:09:08.261>talk <00:09:08.417>a <00:09:08.572>little <00:09:08.728>bit <00:09:08.883>about <00:09:09.039>the <00:09:09.194>engineering

173
00:09:11.285 --> 00:09:13.885
<00:09:11.285>values <00:09:11.518>that <00:09:11.751>drive <00:09:11.985>this <00:09:12.218>process <00:09:12.451>for <00:09:12.685>us.

174
00:09:15.595 --> 00:09:18.645
<00:09:15.595>From <00:09:15.770>the <00:09:15.945>very <00:09:16.120>beginning, <00:09:16.295>we <00:09:16.470>decided <00:09:16.645>to <00:09:16.820>dream <00:09:16.995>big,

175
00:09:19.065 --> 00:09:22.005
<00:09:19.065>but <00:09:19.240>start <00:09:19.415>small <00:09:19.590>by <00:09:19.765>iterating <00:09:19.940>over <00:09:20.115>the <00:09:20.290>app <00:09:20.465>framework

176
00:09:22.385 --> 00:09:24.205
<00:09:22.385>and <00:09:22.735>incrementally <00:09:23.085>putting <00:09:23.435>out <00:09:23.785>more

177
00:09:24.205 --> 00:09:26.125
<00:09:24.205>and <00:09:24.438>more <00:09:24.671>APIs <00:09:24.905>in <00:09:25.138>our <00:09:25.371>users' <00:09:25.605>hands.

178
00:09:27.825 --> 00:09:30.845
<00:09:27.825>We <00:09:27.980>had <00:09:28.136>to <00:09:28.291>be <00:09:28.447>very <00:09:28.602>pragmatic <00:09:28.758>in <00:09:28.913>our <00:09:29.069>priorities <00:09:29.225>though

179
00:09:31.355 --> 00:09:33.765
<00:09:31.355>because <00:09:31.530>at <00:09:31.705>the <00:09:31.880>time <00:09:32.055>of <00:09:32.230>the <00:09:32.405>app <00:09:32.580>frameworks <00:09:32.755>inception,

180
00:09:34.345 --> 00:09:36.405
<00:09:34.345>its <00:09:34.811>unique <00:09:35.278>security <00:09:35.745>design

181
00:09:36.505 --> 00:09:39.805
<00:09:36.505>and <00:09:36.738>deployment <00:09:36.971>requirements <00:09:37.205>didn't <00:09:37.438>quite <00:09:37.671>fit <00:09:37.905>in

182
00:09:39.805 --> 00:09:42.205
<00:09:39.805>with <00:09:40.005>the <00:09:40.204>rest <00:09:40.405>of <00:09:40.604>canva's, <00:09:40.805>more <00:09:41.005>mature <00:09:41.204>infrastructure

183
00:09:42.465 --> 00:09:43.485
<00:09:42.465>and <00:09:43.383>architecture

184
00:09:43.595 --> 00:09:44.805
<00:09:43.595>because <00:09:43.867>this <00:09:44.139>was <00:09:44.411>the <00:09:44.684>first

185
00:09:44.805 --> 00:09:46.045
<00:09:44.805>time <00:09:44.964>we <00:09:45.123>were <00:09:45.283>doing <00:09:45.442>this <00:09:45.602>sort <00:09:45.761>of <00:09:45.920>thing.

186
00:09:47.345 --> 00:09:49.845
<00:09:47.345>But <00:09:47.520>instead <00:09:47.695>of <00:09:47.870>trying <00:09:48.045>to <00:09:48.220>tackle <00:09:48.395>this <00:09:48.570>mismatch <00:09:48.745>early,

187
00:09:50.985 --> 00:09:52.485
<00:09:50.985>we <00:09:51.255>decided <00:09:51.525>to <00:09:51.795>keep <00:09:52.065>things <00:09:52.335>simple.

188
00:09:53.185 --> 00:09:55.525
<00:09:53.185>In <00:09:53.418>fact, <00:09:53.651>we <00:09:53.885>kept <00:09:54.118>things <00:09:54.351>so <00:09:54.584>simple

189
00:09:55.595 --> 00:09:57.965
<00:09:55.595>that <00:09:55.795>the <00:09:55.995>very <00:09:56.195>first <00:09:56.395>iteration <00:09:56.595>of <00:09:56.795>the <00:09:56.995>SDK

190
00:09:58.685 --> 00:10:00.565
<00:09:58.685>involved <00:09:59.035>our <00:09:59.385>engineers <00:09:59.734>manually <00:10:00.084>building

191
00:10:00.745 --> 00:10:03.605
<00:10:00.745>and <00:10:01.025>manually <00:10:01.305>uploading <00:10:01.585>JavaScript <00:10:01.865>bundles <00:10:02.145>into

192
00:10:03.605 --> 00:10:04.765
<00:10:03.605>simple <00:10:04.127>S3 <00:10:04.649>buckets.

193
00:10:05.185 --> 00:10:08.205
<00:10:05.185>And <00:10:05.340>from <00:10:05.496>there, <00:10:05.651>the <00:10:05.807>types <00:10:05.962>for <00:10:06.118>these <00:10:06.273>APIs <00:10:06.429>were <00:10:06.584>shared

194
00:10:08.205 --> 00:10:10.725
<00:10:08.205>with <00:10:08.485>our <00:10:08.765>community <00:10:09.045>via <00:10:09.325>GitHub <00:10:09.605>repos.

195
00:10:12.435 --> 00:10:14.685
<00:10:12.435>This <00:10:12.609>process <00:10:12.785>did <00:10:12.959>mean <00:10:13.135>that <00:10:13.310>there <00:10:13.484>was <00:10:13.660>a <00:10:13.834>bit

196
00:10:14.685 --> 00:10:17.725
<00:10:14.685>of <00:10:14.840>manual <00:10:14.996>work <00:10:15.151>involved <00:10:15.307>whenever <00:10:15.462>we <00:10:15.618>were <00:10:15.773>doing <00:10:15.929>a <00:10:16.084>release,

197
00:10:18.225 --> 00:10:20.725
<00:10:18.225>but <00:10:18.380>it <00:10:18.536>meant <00:10:18.691>that <00:10:18.847>we <00:10:19.002>were <00:10:19.158>freeing <00:10:19.313>up <00:10:19.469>our <00:10:19.625>resources,

198
00:10:20.815 --> 00:10:24.805
<00:10:20.815>especially <00:10:20.970>the <00:10:21.126>early <00:10:21.281>days, <00:10:21.437>to <00:10:21.592>focus <00:10:21.748>on <00:10:21.903>what <00:10:22.059>really <00:10:22.215>matters.

199
00:10:25.065 --> 00:10:26.725
<00:10:25.065>And <00:10:25.265>that <00:10:25.465>the <00:10:25.665>early <00:10:25.865>days, <00:10:26.065>the <00:10:26.265>only <00:10:26.465>thing

200
00:10:26.725 --> 00:10:28.485
<00:10:26.725>that <00:10:27.075>mattered <00:10:27.425>was <00:10:27.775>building <00:10:28.125>more

201
00:10:28.485 --> 00:10:31.365
<00:10:28.485>and <00:10:28.685>more <00:10:28.885>APIs <00:10:29.085>to <00:10:29.285>build <00:10:29.485>progressively <00:10:29.685>more <00:10:29.885>powerful

202
00:10:31.365 --> 00:10:32.605
<00:10:31.365>apps <00:10:31.737>for <00:10:32.109>our <00:10:32.481>community.

203
00:10:35.075 --> 00:10:37.575
<00:10:35.075>Taking <00:10:35.541>this <00:10:36.008>somewhat <00:10:36.475>hacky

204
00:10:37.635 --> 00:10:40.375
<00:10:37.635>or <00:10:37.868>quick <00:10:38.101>solution <00:10:38.335>did <00:10:38.568>raise <00:10:38.801>some <00:10:39.035>concerns

205
00:10:40.375 --> 00:10:42.815
<00:10:40.375>and <00:10:40.575>even <00:10:40.775>some <00:10:40.975>eyebrows <00:10:41.175>from <00:10:41.375>other <00:10:41.575>engineers <00:10:41.775>outside

206
00:10:42.815 --> 00:10:46.415
<00:10:42.815>of <00:10:42.990>ecosystem, <00:10:43.165>outside <00:10:43.340>of <00:10:43.515>ecosystem, <00:10:43.690>which <00:10:43.865>is <00:10:44.040>the <00:10:44.215>group

207
00:10:46.415 --> 00:10:48.135
<00:10:46.415>that <00:10:46.694>works <00:10:46.974>on <00:10:47.255>building <00:10:47.535>these <00:10:47.814>APIs,

208
00:10:48.525 --> 00:10:51.415
<00:10:48.525>they <00:10:48.680>were <00:10:48.836>all <00:10:48.991>wondering <00:10:49.147>why <00:10:49.302>are <00:10:49.458>we <00:10:49.613>not <00:10:49.769>leveraging <00:10:49.925>the

209
00:10:51.695 --> 00:10:53.135
<00:10:51.695>existing <00:10:52.127>product, <00:10:52.559>the <00:10:52.991>infrastructure,

210
00:10:53.355 --> 00:10:54.775
<00:10:53.355>the <00:10:53.674>pipelines, <00:10:53.994>and <00:10:54.313>so <00:10:54.633>on.

211
00:10:55.685 --> 00:10:59.015
<00:10:55.685>However, <00:10:55.964>before <00:10:56.244>jumping <00:10:56.525>to <00:10:56.805>critiquing <00:10:57.084>us

212
00:10:59.235 --> 00:11:02.775
<00:10:59.235>or <00:10:59.435>even <00:10:59.635>rejecting <00:10:59.835>our <00:11:00.035>proposals, <00:11:00.235>they <00:11:00.435>first <00:11:00.635>sought

213
00:11:02.835 --> 00:11:06.055
<00:11:02.835>to <00:11:03.035>understand, <00:11:03.235>they <00:11:03.435>sought <00:11:03.635>to <00:11:03.835>understand <00:11:04.035>the <00:11:04.235>why

214
00:11:06.055 --> 00:11:07.255
<00:11:06.055>behind <00:11:06.595>our <00:11:07.135>decisions.

215
00:11:07.755 --> 00:11:09.815
<00:11:07.755>And <00:11:07.988>once <00:11:08.221>they <00:11:08.455>did, <00:11:08.688>this <00:11:08.921>enabled <00:11:09.155>us

216
00:11:09.815 --> 00:11:11.615
<00:11:09.815>to <00:11:10.281>overcome <00:11:10.748>critical <00:11:11.215>dependencies

217
00:11:12.435 --> 00:11:14.695
<00:11:12.435>and <00:11:12.635>hit <00:11:12.834>every <00:11:13.035>single <00:11:13.234>one <00:11:13.435>of <00:11:13.635>our <00:11:13.834>deadlines.

218
00:11:17.565 --> 00:11:18.695
<00:11:17.565>Fast <00:11:17.904>forward <00:11:18.243>today <00:11:18.582>though,

219
00:11:19.155 --> 00:11:21.815
<00:11:19.155>and <00:11:19.310>we've <00:11:19.466>paid <00:11:19.621>down <00:11:19.777>a <00:11:19.932>bunch <00:11:20.088>of <00:11:20.243>this <00:11:20.399>tech <00:11:20.555>debt,

220
00:11:22.435 --> 00:11:24.895
<00:11:22.435>we <00:11:22.668>now <00:11:22.901>have <00:11:23.135>a <00:11:23.368>dedicated <00:11:23.601>gateway <00:11:23.834>service

221
00:11:25.125 --> 00:11:28.255
<00:11:25.125>that <00:11:25.300>serves <00:11:25.475>our <00:11:25.650>APIs <00:11:25.825>from <00:11:26.000>within <00:11:26.175>the <00:11:26.350>Canva <00:11:26.525>infrastructure,

222
00:11:28.705 --> 00:11:32.055
<00:11:28.705>using <00:11:28.905>fully <00:11:29.105>automated <00:11:29.305>builds <00:11:29.505>that <00:11:29.705>allow <00:11:29.905>our <00:11:30.105>engineers,

223
00:11:32.275 --> 00:11:35.495
<00:11:32.275>our <00:11:32.475>growing <00:11:32.675>number <00:11:32.875>of <00:11:33.074>API <00:11:33.275>engineers <00:11:33.475>to <00:11:33.675>safely

224
00:11:35.835 --> 00:11:37.935
<00:11:35.835>and <00:11:36.185>efficiently <00:11:36.535>release <00:11:36.885>new <00:11:37.235>features

225
00:11:38.115 --> 00:11:39.655
<00:11:38.115>and <00:11:38.392>new <00:11:38.669>versions <00:11:38.946>to <00:11:39.223>our <00:11:39.501>users.

226
00:11:41.125 --> 00:11:44.815
<00:11:41.125>This <00:11:41.300>also <00:11:41.475>gave <00:11:41.650>us <00:11:41.825>access <00:11:42.000>to <00:11:42.175>tools <00:11:42.350>such <00:11:42.525>as

227
00:11:45.925 --> 00:11:47.015
<00:11:45.925>instant <00:11:46.906>rollbacks

228
00:11:47.115 --> 00:11:50.335
<00:11:47.115>and <00:11:47.315>these <00:11:47.515>incident <00:11:47.715>mitigation <00:11:47.915>tools <00:11:48.115>become <00:11:48.315>very <00:11:48.515>important

229
00:11:50.515 --> 00:11:52.615
<00:11:50.515>now <00:11:50.689>that <00:11:50.865>we've <00:11:51.040>got <00:11:51.215>hundreds <00:11:51.390>of <00:11:51.564>apps <00:11:51.740>on <00:11:51.915>production

230
00:11:52.725 --> 00:11:55.485
<00:11:52.725>that <00:11:52.865>are <00:11:53.005>used <00:11:53.145>by <00:11:53.285>millions <00:11:53.425>of <00:11:53.565>users <00:11:53.705>on <00:11:53.845>a <00:11:53.985>daily <00:11:54.125>basis.

231
00:11:56.465 --> 00:12:01.205
<00:11:56.465>Oh, <00:11:56.640>and <00:11:56.815>we <00:11:56.990>also <00:11:57.165>leveraged <00:11:57.340>Canva's <00:11:57.515>Canvas <00:11:57.690>in-House <00:11:57.865>Library

232
00:12:01.665 --> 00:12:04.125
<00:12:01.665>for <00:12:02.015>backwards <00:12:02.365>compatible <00:12:02.714>message <00:12:03.064>serialization.

233
00:12:05.065 --> 00:12:06.405
<00:12:05.065>And <00:12:05.306>this <00:12:05.547>is <00:12:05.788>once <00:12:06.029>again <00:12:06.271>critical

234
00:12:06.435 --> 00:12:10.245
<00:12:06.435>because <00:12:06.574>even <00:12:06.714>though <00:12:06.854>we <00:12:06.994>don't <00:12:07.135>really <00:12:07.275>want <00:12:07.415>to <00:12:07.555>at <00:12:07.694>some <00:12:07.834>stage,

235
00:12:10.385 --> 00:12:11.765
<00:12:10.385>we <00:12:10.799>will <00:12:11.213>inevitably <00:12:11.627>have

236
00:12:11.765 --> 00:12:14.245
<00:12:11.765>to <00:12:11.998>deprecate <00:12:12.231>certain <00:12:12.465>parts <00:12:12.698>of <00:12:12.931>our <00:12:13.165>APIs.

237
00:12:16.905 --> 00:12:19.045
<00:12:16.905>We <00:12:17.255>chose <00:12:17.605>these <00:12:17.954>technical <00:12:18.305>improvements

238
00:12:19.115 --> 00:12:22.565
<00:12:19.115>because <00:12:19.290>we <00:12:19.465>believed <00:12:19.640>they <00:12:19.815>would <00:12:19.990>yield <00:12:20.165>the <00:12:20.340>largest <00:12:20.515>net

239
00:12:22.845 --> 00:12:24.245
<00:12:22.845>positive <00:12:23.160>impact <00:12:23.475>on <00:12:23.790>our <00:12:24.105>users.

240
00:12:25.025 --> 00:12:29.485
<00:12:25.025>And <00:12:25.180>by <00:12:25.336>doing <00:12:25.491>so, <00:12:25.647>we <00:12:25.802>were <00:12:25.958>allowing <00:12:26.113>our <00:12:26.269>API <00:12:26.425>engineers

241
00:12:29.625 --> 00:12:33.325
<00:12:29.625>to <00:12:29.825>more <00:12:30.025>safely <00:12:30.225>and <00:12:30.425>quickly <00:12:30.625>release <00:12:30.825>new <00:12:31.025>APIs

242
00:12:33.715 --> 00:12:36.925
<00:12:33.715>that <00:12:33.890>our <00:12:34.065>developer <00:12:34.240>community <00:12:34.415>will <00:12:34.590>then <00:12:34.765>convert <00:12:34.940>to <00:12:35.115>apps

243
00:12:36.955 --> 00:12:39.405
<00:12:36.955>that <00:12:37.155>are <00:12:37.355>used <00:12:37.555>and <00:12:37.755>loved <00:12:37.955>by <00:12:38.155>our <00:12:38.355>users.

244
00:12:42.265 --> 00:12:44.965
<00:12:42.265>So <00:12:42.498>although <00:12:42.731>it <00:12:42.965>was <00:12:43.198>not <00:12:43.431>always <00:12:43.665>easy,

245
00:12:45.705 --> 00:12:49.325
<00:12:45.705>we <00:12:45.905>loved <00:12:46.105>watching <00:12:46.305>our <00:12:46.505>teams <00:12:46.705>apply <00:12:46.905>pragmatic <00:12:47.105>excellence

246
00:12:49.705 --> 00:12:52.445
<00:12:49.705>to <00:12:49.938>prove <00:12:50.171>and <00:12:50.405>deliver <00:12:50.638>our <00:12:50.871>product <00:12:51.105>early.

247
00:12:54.745 --> 00:12:57.845
<00:12:54.745>So <00:12:54.945>we <00:12:55.145>now <00:12:55.345>know <00:12:55.545>how <00:12:55.745>we <00:12:55.945>build <00:12:56.145>APIs,

248
00:12:58.345 --> 00:13:00.965
<00:12:58.345>but <00:12:58.520>how <00:12:58.695>do <00:12:58.870>we <00:12:59.045>go <00:12:59.220>about <00:12:59.395>making <00:12:59.570>them <00:12:59.745>outstanding?

249
00:13:02.985 --> 00:13:04.685
<00:13:02.985>It <00:13:03.265>all <00:13:03.545>starts <00:13:03.825>with <00:13:04.105>the <00:13:04.385>priorities.

250
00:13:05.665 --> 00:13:07.965
<00:13:05.665>We <00:13:05.865>all <00:13:06.064>know <00:13:06.265>there's <00:13:06.464>so <00:13:06.665>many <00:13:06.865>different <00:13:07.064>projects,

251
00:13:07.965 --> 00:13:10.605
<00:13:07.965>opportunities <00:13:08.665>and <00:13:09.365>problems

252
00:13:10.605 --> 00:13:12.165
<00:13:10.605>that <00:13:10.805>we <00:13:11.005>can <00:13:11.205>tackle <00:13:11.405>at <00:13:11.605>any <00:13:11.805>given <00:13:12.005>time,

253
00:13:12.505 --> 00:13:13.885
<00:13:12.505>but <00:13:12.753>how <00:13:13.001>do <00:13:13.250>we <00:13:13.498>prioritize <00:13:13.747>them?

254
00:13:14.505 --> 00:13:16.685
<00:13:14.505>For <00:13:14.738>us <00:13:14.971>over <00:13:15.205>at <00:13:15.438>Ecosystem, <00:13:15.671>this <00:13:15.905>meant

255
00:13:16.945 --> 00:13:20.125
<00:13:16.945>how <00:13:17.100>do <00:13:17.256>we <00:13:17.411>prioritize <00:13:17.567>which <00:13:17.722>APIs <00:13:17.878>we're <00:13:18.033>working <00:13:18.189>on <00:13:18.345>next?

256
00:13:22.335 --> 00:13:24.585
<00:13:22.335>Well, <00:13:22.535>at <00:13:22.735>the <00:13:22.935>early <00:13:23.135>stages <00:13:23.335>of <00:13:23.535>our <00:13:23.735>releases,

257
00:13:25.285 --> 00:13:27.625
<00:13:25.285>our <00:13:25.635>developer <00:13:25.985>community <00:13:26.334>and <00:13:26.685>users

258
00:13:28.385 --> 00:13:30.505
<00:13:28.385>provided <00:13:28.665>valuable <00:13:28.944>insights <00:13:29.225>on <00:13:29.505>the <00:13:29.785>types

259
00:13:30.525 --> 00:13:31.705
<00:13:30.525>of <00:13:30.790>apps <00:13:31.056>that <00:13:31.321>they <00:13:31.587>wanted.

260
00:13:32.925 --> 00:13:34.145
<00:13:32.925>We <00:13:33.199>then <00:13:33.473>took <00:13:33.748>these <00:13:34.023>insights

261
00:13:34.565 --> 00:13:37.345
<00:13:34.565>and <00:13:34.845>identified <00:13:35.125>three <00:13:35.405>core <00:13:35.685>app <00:13:35.965>categories

262
00:13:37.495 --> 00:13:38.745
<00:13:37.495>that <00:13:37.776>we <00:13:38.057>wanted <00:13:38.338>to <00:13:38.620>enable.

263
00:13:39.605 --> 00:13:41.465
<00:13:39.605>We <00:13:39.955>call <00:13:40.305>these <00:13:40.655>app <00:13:41.005>archetypes.

264
00:13:42.725 --> 00:13:45.065
<00:13:42.725>The <00:13:43.005>first <00:13:43.285>archetype <00:13:43.565>is <00:13:43.845>creation <00:13:44.125>apps.

265
00:13:45.925 --> 00:13:48.985
<00:13:45.925>Our <00:13:46.125>users <00:13:46.324>wanted <00:13:46.525>new <00:13:46.724>elements <00:13:46.925>to <00:13:47.125>design <00:13:47.324>with.

266
00:13:50.135 --> 00:13:51.785
<00:13:50.135>Next <00:13:50.485>we <00:13:50.835>have <00:13:51.185>content <00:13:51.535>apps.

267
00:13:52.565 --> 00:13:55.065
<00:13:52.565>Our <00:13:52.740>users <00:13:52.915>wanted <00:13:53.090>to <00:13:53.265>bring <00:13:53.440>in <00:13:53.615>third <00:13:53.790>party <00:13:53.965>data

268
00:13:55.365 --> 00:13:58.625
<00:13:55.365>and <00:13:55.565>third <00:13:55.765>party <00:13:55.965>content <00:13:56.165>such <00:13:56.365>as <00:13:56.565>images, <00:13:56.765>audio,

269
00:13:58.965 --> 00:14:02.105
<00:13:58.965>and <00:13:59.198>videos <00:13:59.431>into <00:13:59.665>Canva <00:13:59.898>to <00:14:00.131>design <00:14:00.365>with.

270
00:14:03.325 --> 00:14:05.745
<00:14:03.325>And <00:14:03.675>finally, <00:14:04.025>AI <00:14:04.375>powered <00:14:04.725>apps.

271
00:14:06.465 --> 00:14:08.145
<00:14:06.465>I <00:14:06.620>think <00:14:06.776>we <00:14:06.931>can <00:14:07.087>all <00:14:07.242>tell <00:14:07.398>based <00:14:07.553>on <00:14:07.709>the <00:14:07.865>number

272
00:14:08.145 --> 00:14:10.465
<00:14:08.145>of <00:14:08.285>times <00:14:08.425>I've <00:14:08.564>heard <00:14:08.704>the <00:14:08.845>word <00:14:08.985>AI <00:14:09.125>the <00:14:09.265>last <00:14:09.405>two <00:14:09.545>days,

273
00:14:10.615 --> 00:14:12.145
<00:14:10.615>that <00:14:10.890>it's <00:14:11.165>all <00:14:11.441>the <00:14:11.716>hype <00:14:11.992>now,

274
00:14:12.525 --> 00:14:15.145
<00:14:12.525>and <00:14:12.699>our <00:14:12.875>users <00:14:13.050>wanted <00:14:13.225>the <00:14:13.400>latest <00:14:13.574>from <00:14:13.750>the <00:14:13.925>rapidly

275
00:14:15.565 --> 00:14:19.945
<00:14:15.565>and <00:14:15.740>quickly <00:14:15.915>evolving <00:14:16.090>design <00:14:16.265>tool, <00:14:16.440>AI <00:14:16.615>landscape <00:14:16.790>into <00:14:16.965>Canva,

276
00:14:20.505 --> 00:14:22.825
<00:14:20.505>a <00:14:20.680>product <00:14:20.855>and <00:14:21.030>a <00:14:21.205>platform <00:14:21.380>that <00:14:21.555>they <00:14:21.730>already <00:14:21.905>use

277
00:14:22.825 --> 00:14:23.865
<00:14:22.825>and <00:14:23.012>love <00:14:23.199>on <00:14:23.386>a <00:14:23.573>daily <00:14:23.761>basis.

278
00:14:24.605 --> 00:14:25.945
<00:14:24.605>In <00:14:25.007>fact, <00:14:25.409>a <00:14:25.811>number

279
00:14:25.965 --> 00:14:29.705
<00:14:25.965>of <00:14:26.105>our <00:14:26.245>AI <00:14:26.385>powered <00:14:26.525>apps <00:14:26.665>are <00:14:26.805>internally <00:14:26.945>built <00:14:27.085>by <00:14:27.225>Canva <00:14:27.365>such

280
00:14:29.705 --> 00:14:30.945
<00:14:29.705>as <00:14:29.984>the <00:14:30.263>Magic <00:14:30.542>Media <00:14:30.821>app.

281
00:14:34.005 --> 00:14:36.385
<00:14:34.005>App <00:14:34.205>archetypes <00:14:34.405>were <00:14:34.605>a <00:14:34.805>massive <00:14:35.005>breakthrough <00:14:35.205>for <00:14:35.405>us

282
00:14:36.385 --> 00:14:40.305
<00:14:36.385>because, <00:14:36.585>well, <00:14:36.785>they <00:14:36.985>enabled <00:14:37.185>us <00:14:37.385>to <00:14:37.585>ruthlessly <00:14:37.785>prioritize

283
00:14:40.305 --> 00:14:41.425
<00:14:40.305>what <00:14:40.556>we're <00:14:40.809>working <00:14:41.060>on <00:14:41.313>next

284
00:14:41.965 --> 00:14:45.185
<00:14:41.965>and <00:14:42.105>identify <00:14:42.245>the <00:14:42.385>APIs <00:14:42.525>that <00:14:42.665>we <00:14:42.805>need <00:14:42.945>to <00:14:43.085>enable <00:14:43.225>these <00:14:43.365>apps.

285
00:14:46.605 --> 00:14:50.185
<00:14:46.605>But <00:14:46.732>it <00:14:46.859>also <00:14:46.986>meant <00:14:47.114>that <00:14:47.241>we <00:14:47.368>did <00:14:47.495>have <00:14:47.623>to <00:14:47.750>deprioritize <00:14:47.877>some <00:14:48.005>APIs

286
00:14:50.185 --> 00:14:52.805
<00:14:50.185>that <00:14:50.359>we <00:14:50.535>loved <00:14:50.709>for <00:14:50.885>US <00:14:51.060>engineers <00:14:51.234>in <00:14:51.410>the <00:14:51.584>room.

287
00:14:53.325 --> 00:14:55.125
<00:14:53.325>I <00:14:53.525>think <00:14:53.725>we've <00:14:53.925>all <00:14:54.125>been <00:14:54.325>in <00:14:54.525>a <00:14:54.725>situation

288
00:14:55.125 --> 00:14:56.285
<00:14:55.125>where <00:14:55.473>a <00:14:55.821>product <00:14:56.169>manager

289
00:14:56.425 --> 00:15:01.205
<00:14:56.425>or <00:14:56.564>a <00:14:56.704>product <00:14:56.844>owner <00:14:56.984>has <00:14:57.125>disci <00:14:57.265>decided <00:14:57.405>to <00:14:57.545>discontinue <00:14:57.685>an <00:14:57.824>API

290
00:15:01.205 --> 00:15:02.285
<00:15:01.205>or <00:15:01.399>a <00:15:01.593>feature <00:15:01.788>that <00:15:01.982>we <00:15:02.177>love.

291
00:15:03.155 --> 00:15:06.445
<00:15:03.155>It's <00:15:03.310>the <00:15:03.466>worst <00:15:03.621>feeling, <00:15:03.777>well, <00:15:03.932>maybe <00:15:04.088>not <00:15:04.243>the <00:15:04.399>worst <00:15:04.555>feeling,

292
00:15:06.505 --> 00:15:08.005
<00:15:06.505>but <00:15:06.842>it's <00:15:07.180>definitely <00:15:07.517>no <00:15:07.855>picnic.

293
00:15:08.785 --> 00:15:10.965
<00:15:08.785>But <00:15:09.135>we <00:15:09.485>found <00:15:09.834>that <00:15:10.185>releasing

294
00:15:11.065 --> 00:15:14.005
<00:15:11.065>and <00:15:11.240>widely <00:15:11.415>circulating <00:15:11.590>these <00:15:11.765>app <00:15:11.940>archetypes <00:15:12.115>with <00:15:12.290>our <00:15:12.465>users,

295
00:15:14.495 --> 00:15:15.725
<00:15:14.495>sorry, <00:15:14.864>with <00:15:15.233>our <00:15:15.602>developers

296
00:15:15.825 --> 00:15:18.965
<00:15:15.825>and <00:15:16.105>our <00:15:16.385>internal <00:15:16.665>community <00:15:16.945>of <00:15:17.225>engineers,

297
00:15:19.465 --> 00:15:22.525
<00:15:19.465>we <00:15:19.665>were <00:15:19.865>communicating <00:15:20.065>the <00:15:20.265>why <00:15:20.465>behind <00:15:20.665>the <00:15:20.865>decisions.

298
00:15:22.585 --> 00:15:24.525
<00:15:22.585>And <00:15:22.785>this <00:15:22.985>enabled <00:15:23.185>us <00:15:23.385>to <00:15:23.585>all <00:15:23.785>be <00:15:23.985>aligned

299
00:15:25.025 --> 00:15:27.485
<00:15:25.025>and <00:15:25.375>understand <00:15:25.725>where <00:15:26.074>we're <00:15:26.425>heading.

300
00:15:31.785 --> 00:15:36.205
<00:15:31.785>So <00:15:31.940>we <00:15:32.096>now <00:15:32.251>know <00:15:32.407>which <00:15:32.562>APIs <00:15:32.718>to <00:15:32.873>prioritize <00:15:33.029>and <00:15:33.185>build.

301
00:15:37.345 --> 00:15:38.845
<00:15:37.345>How <00:15:37.570>do <00:15:37.795>we <00:15:38.020>make <00:15:38.245>sure <00:15:38.470>they're <00:15:38.695>outstanding?

302
00:15:41.305 --> 00:15:43.875
<00:15:41.305>Outstanding <00:15:41.655>APIs <00:15:42.005>are <00:15:42.354>very <00:15:42.704>difficult

303
00:15:44.055 --> 00:15:48.835
<00:15:44.055>and <00:15:44.288>expensive <00:15:44.521>to <00:15:44.755>design, <00:15:44.988>implement, <00:15:45.221>and <00:15:45.454>evolve

304
00:15:49.145 --> 00:15:52.635
<00:15:49.145>because <00:15:49.345>simply <00:15:49.545>put, <00:15:49.745>once <00:15:49.944>an <00:15:50.145>API <00:15:50.345>is <00:15:50.545>published

305
00:15:52.655 --> 00:15:55.715
<00:15:52.655>and <00:15:52.855>released, <00:15:53.055>it <00:15:53.255>could <00:15:53.454>be <00:15:53.655>used <00:15:53.855>by <00:15:54.055>dozens

306
00:15:55.715 --> 00:15:59.355
<00:15:55.715>of <00:15:55.855>developers <00:15:55.995>in <00:15:56.135>hundreds <00:15:56.275>of <00:15:56.415>apps <00:15:56.555>used <00:15:56.695>by <00:15:56.835>millions <00:15:56.975>of <00:15:57.115>users.

307
00:15:59.975 --> 00:16:02.355
<00:15:59.975>So <00:16:00.208>simply <00:16:00.441>put, <00:16:00.675>these <00:16:00.908>APIs <00:16:01.141>become <00:16:01.375>very,

308
00:16:02.385 --> 00:16:03.955
<00:16:02.385>very <00:16:02.851>challenging <00:16:03.318>to <00:16:03.785>deprecate.

309
00:16:05.195 --> 00:16:09.665
<00:16:05.195>On <00:16:05.350>the <00:16:05.506>flip <00:16:05.661>side, <00:16:05.817>poorly <00:16:05.972>designed <00:16:06.128>APIs <00:16:06.283>not <00:16:06.439>only <00:16:06.595>lead

310
00:16:09.665 --> 00:16:11.465
<00:16:09.665>to <00:16:10.015>a <00:16:10.365>bad <00:16:10.714>user <00:16:11.064>experience

311
00:16:11.525 --> 00:16:15.585
<00:16:11.525>and <00:16:11.699>developer <00:16:11.875>experience, <00:16:12.050>they <00:16:12.225>can <00:16:12.400>even <00:16:12.574>slow <00:16:12.750>down <00:16:12.925>core

312
00:16:16.705 --> 00:16:18.265
<00:16:16.705>internal <00:16:17.055>core <00:16:17.405>Canva <00:16:17.755>product <00:16:18.105>teams.

313
00:16:18.515 --> 00:16:20.185
<00:16:18.515>These <00:16:18.865>are <00:16:19.215>internal <00:16:19.564>Canva <00:16:19.915>engineers

314
00:16:20.185 --> 00:16:21.705
<00:16:20.185>that <00:16:20.413>are <00:16:20.641>working <00:16:20.869>on <00:16:21.097>the <00:16:21.325>Canva <00:16:21.553>product.

315
00:16:22.535 --> 00:16:25.025
<00:16:22.535>This <00:16:22.814>can <00:16:23.094>happen <00:16:23.375>despite <00:16:23.655>the <00:16:23.935>measures

316
00:16:25.025 --> 00:16:27.905
<00:16:25.025>that <00:16:25.165>we've <00:16:25.305>put <00:16:25.444>in <00:16:25.584>place <00:16:25.725>such <00:16:25.865>as <00:16:26.005>the <00:16:26.145>API <00:16:26.285>controller <00:16:26.425>layer

317
00:16:27.935 --> 00:16:29.065
<00:16:27.935>that <00:16:28.189>I <00:16:28.443>spoke <00:16:28.697>about <00:16:28.952>earlier.

318
00:16:32.535 --> 00:16:33.675
<00:16:32.535>So <00:16:33.048>the <00:16:33.560>key

319
00:16:33.775 --> 00:16:37.515
<00:16:33.775>to <00:16:33.975>building <00:16:34.175>outstanding <00:16:34.375>APIs <00:16:34.574>is <00:16:34.775>understanding <00:16:34.975>one <00:16:35.175>thing.

320
00:16:38.145 --> 00:16:39.915
<00:16:38.145>It's <00:16:38.425>understanding <00:16:38.704>that <00:16:38.985>they <00:16:39.265>represent <00:16:39.545>a

321
00:16:39.915 --> 00:16:41.315
<00:16:39.915>commitment <00:16:40.335>to <00:16:40.755>our <00:16:41.175>developers.

322
00:16:42.015 --> 00:16:44.755
<00:16:42.015>Not <00:16:42.189>only <00:16:42.365>that, <00:16:42.540>but <00:16:42.715>they <00:16:42.890>represent <00:16:43.064>a <00:16:43.240>long-term <00:16:43.415>commitment.

323
00:16:45.295 --> 00:16:47.555
<00:16:45.295>So <00:16:45.469>long <00:16:45.645>as <00:16:45.819>we <00:16:45.995>honor <00:16:46.170>and <00:16:46.344>uphold <00:16:46.520>this <00:16:46.694>commitment,

324
00:16:48.015 --> 00:16:50.115
<00:16:48.015>our <00:16:48.295>developer <00:16:48.574>community <00:16:48.855>will <00:16:49.135>be <00:16:49.415>empowered

325
00:16:50.115 --> 00:16:52.595
<00:16:50.115>to <00:16:50.315>build <00:16:50.515>long-lived <00:16:50.715>apps <00:16:50.915>that <00:16:51.115>our <00:16:51.315>users <00:16:51.515>love.

326
00:16:54.055 --> 00:16:55.675
<00:16:54.055>But <00:16:54.255>again, <00:16:54.454>how <00:16:54.655>do <00:16:54.854>we <00:16:55.055>actually <00:16:55.255>do <00:16:55.454>that?

327
00:16:55.865 --> 00:16:57.235
<00:16:55.865>It's <00:16:56.070>a <00:16:56.276>lot <00:16:56.481>easier <00:16:56.687>said <00:16:56.892>than <00:16:57.098>done.

328
00:16:58.025 --> 00:17:02.315
<00:16:58.025>Well, <00:16:58.180>to <00:16:58.336>start <00:16:58.491>off <00:16:58.647>with, <00:16:58.802>we <00:16:58.958>identified <00:16:59.113>four <00:16:59.269>key <00:16:59.425>principles

329
00:17:02.985 --> 00:17:04.755
<00:17:02.985>that <00:17:03.218>we <00:17:03.451>wanted <00:17:03.685>our <00:17:03.918>APIs <00:17:04.151>to <00:17:04.385>follow,

330
00:17:05.015 --> 00:17:09.075
<00:17:05.015>and <00:17:05.295>the <00:17:05.575>adhere <00:17:05.855>two <00:17:06.135>First <00:17:06.415>principle

331
00:17:09.415 --> 00:17:10.515
<00:17:09.415>is <00:17:10.405>simplicity.

332
00:17:11.415 --> 00:17:13.155
<00:17:11.415>We <00:17:11.615>want <00:17:11.815>our <00:17:12.014>APIs <00:17:12.214>to <00:17:12.415>be <00:17:12.615>as <00:17:12.815>simple

333
00:17:13.215 --> 00:17:15.795
<00:17:13.214>as <00:17:13.494>possible <00:17:13.774>without <00:17:14.054>compromising <00:17:14.334>their <00:17:14.615>power.

334
00:17:16.745 --> 00:17:21.395
<00:17:16.744>Next <00:17:16.978>is <00:17:17.211>safety <00:17:17.444>With <00:17:17.678>over <00:17:17.911>185 <00:17:18.145>million

335
00:17:21.485 --> 00:17:24.115
<00:17:21.484>users <00:17:21.718>who <00:17:21.951>trust <00:17:22.185>Canva <00:17:22.418>with <00:17:22.651>their <00:17:22.885>data

336
00:17:24.455 --> 00:17:27.035
<00:17:24.454>and <00:17:24.610>trust <00:17:24.766>Canva <00:17:24.921>to <00:17:25.077>provide <00:17:25.232>them <00:17:25.388>with <00:17:25.543>a <00:17:25.699>good <00:17:25.855>experience.

337
00:17:28.105 --> 00:17:30.795
<00:17:28.105>Just <00:17:28.245>because <00:17:28.385>we <00:17:28.525>now <00:17:28.665>have <00:17:28.805>APIs <00:17:28.945>doesn't <00:17:29.085>mean <00:17:29.225>that <00:17:29.365>we <00:17:29.505>have

338
00:17:30.795 --> 00:17:32.515
<00:17:30.795>to <00:17:31.261>compromise <00:17:31.728>this <00:17:32.195>promise.

339
00:17:33.825 --> 00:17:37.755
<00:17:33.825>Also, <00:17:34.000>these <00:17:34.175>users <00:17:34.350>have <00:17:34.525>created <00:17:34.700>over <00:17:34.875>25 <00:17:35.050>billion <00:17:35.225>designs,

340
00:17:38.325 --> 00:17:40.195
<00:17:38.325>every <00:17:38.605>single <00:17:38.885>one <00:17:39.165>of <00:17:39.445>which <00:17:39.725>down

341
00:17:40.195 --> 00:17:42.795
<00:17:40.195>to <00:17:40.395>the <00:17:40.595>very <00:17:40.794>first <00:17:40.995>one <00:17:41.195>is <00:17:41.395>still <00:17:41.595>supported

342
00:17:42.895 --> 00:17:44.755
<00:17:42.895>and <00:17:43.095>he's <00:17:43.295>still <00:17:43.495>rendered <00:17:43.695>in <00:17:43.895>the <00:17:44.095>Canva <00:17:44.295>editor.

343
00:17:45.545 --> 00:17:49.125
<00:17:45.545>Just <00:17:45.685>because <00:17:45.825>we <00:17:45.965>now <00:17:46.105>have <00:17:46.245>an <00:17:46.385>ecosystem <00:17:46.525>of <00:17:46.665>apps <00:17:46.805>doesn't <00:17:46.945>mean

344
00:17:49.125 --> 00:17:50.925
<00:17:49.125>that <00:17:49.358>we <00:17:49.591>have <00:17:49.825>to <00:17:50.058>compromise <00:17:50.291>this <00:17:50.525>guarantee.

345
00:17:52.265 --> 00:17:54.885
<00:17:52.265>The <00:17:52.615>third <00:17:52.965>principle <00:17:53.315>is <00:17:53.665>evolvability

346
00:17:56.095 --> 00:17:59.605
<00:17:56.095>wrong <00:17:56.270>decisions <00:17:56.445>are <00:17:56.620>time <00:17:56.795>consuming <00:17:56.970>and <00:17:57.145>expensive <00:17:57.320>to <00:17:57.495>undo.

347
00:18:00.025 --> 00:18:03.045
<00:18:00.025>And <00:18:00.152>so <00:18:00.279>we <00:18:00.406>have <00:18:00.534>to <00:18:00.661>build <00:18:00.788>our <00:18:00.915>APIs <00:18:01.043>in <00:18:01.170>such <00:18:01.297>a <00:18:01.425>way

348
00:18:03.045 --> 00:18:04.725
<00:18:03.045>that <00:18:03.325>we <00:18:03.605>can <00:18:03.885>incrementally <00:18:04.165>add <00:18:04.445>more

349
00:18:04.725 --> 00:18:08.125
<00:18:04.725>and <00:18:04.958>more <00:18:05.191>features <00:18:05.425>without <00:18:05.658>deprecating <00:18:05.891>existing <00:18:06.125>ones.

350
00:18:09.035 --> 00:18:11.405
<00:18:09.035>This <00:18:09.210>goes <00:18:09.385>hand <00:18:09.560>in <00:18:09.735>hand <00:18:09.910>with <00:18:10.085>our <00:18:10.260>incremental <00:18:10.435>approach

351
00:18:11.665 --> 00:18:12.765
<00:18:11.665>to <00:18:12.160>building <00:18:12.655>APIs.

352
00:18:14.995 --> 00:18:17.325
<00:18:14.995>Last <00:18:15.344>but <00:18:15.695>not <00:18:16.044>least, <00:18:16.395>consistency.

353
00:18:18.665 --> 00:18:21.565
<00:18:18.665>Our <00:18:18.820>APIs <00:18:18.976>have <00:18:19.131>to <00:18:19.287>be <00:18:19.442>consistent <00:18:19.598>in <00:18:19.753>order <00:18:19.909>to <00:18:20.065>ensure

354
00:18:21.565 --> 00:18:24.085
<00:18:21.565>that <00:18:21.845>our <00:18:22.125>developer <00:18:22.405>community <00:18:22.685>is <00:18:22.965>delighted

355
00:18:24.085 --> 00:18:25.405
<00:18:24.085>throughout <00:18:24.679>their <00:18:25.273>journey.

356
00:18:26.995 --> 00:18:30.255
<00:18:26.995>But <00:18:27.150>consistency <00:18:27.306>means <00:18:27.461>that <00:18:27.617>our <00:18:27.772>APIs <00:18:27.928>have <00:18:28.083>to <00:18:28.239>be <00:18:28.395>predictable.

357
00:18:30.635 --> 00:18:32.015
<00:18:30.635>So <00:18:30.945>learnings <00:18:31.256>from <00:18:31.566>one <00:18:31.877>part

358
00:18:32.015 --> 00:18:34.975
<00:18:32.015>of <00:18:32.170>the <00:18:32.326>product <00:18:32.481>can <00:18:32.637>be <00:18:32.792>easily <00:18:32.948>applied <00:18:33.103>to <00:18:33.259>all <00:18:33.415>others.

359
00:18:38.435 --> 00:18:41.295
<00:18:38.435>So <00:18:38.610>while <00:18:38.784>having <00:18:38.960>said <00:18:39.135>all <00:18:39.310>this, <00:18:39.485>we <00:18:39.659>do <00:18:39.835>realize

360
00:18:41.595 --> 00:18:43.775
<00:18:41.595>and <00:18:41.795>acknowledge <00:18:41.995>that <00:18:42.195>there <00:18:42.395>is <00:18:42.595>no <00:18:42.795>such <00:18:42.995>thing

361
00:18:43.775 --> 00:18:47.215
<00:18:43.775>as <00:18:43.930>a <00:18:44.086>perfect <00:18:44.241>design, <00:18:44.397>and <00:18:44.552>sometimes <00:18:44.708>it <00:18:44.863>can <00:18:45.019>be <00:18:45.175>difficult

362
00:18:47.275 --> 00:18:49.135
<00:18:47.275>and <00:18:47.625>even <00:18:47.975>impossible <00:18:48.325>to <00:18:48.675>adhere

363
00:18:49.135 --> 00:18:50.815
<00:18:49.135>to <00:18:49.368>every <00:18:49.601>single <00:18:49.835>one <00:18:50.068>of <00:18:50.301>these <00:18:50.535>principles.

364
00:18:51.395 --> 00:18:55.735
<00:18:51.395>And <00:18:51.522>so <00:18:51.649>as <00:18:51.776>a <00:18:51.904>general <00:18:52.031>rule <00:18:52.158>of <00:18:52.285>thumb, <00:18:52.413>we <00:18:52.540>would <00:18:52.667>rather <00:18:52.795>delay.

365
00:18:55.875 --> 00:18:59.295
<00:18:55.875>We <00:18:56.015>would <00:18:56.155>rather <00:18:56.295>delay <00:18:56.435>a <00:18:56.575>feature <00:18:56.715>to <00:18:56.855>the <00:18:56.995>next <00:18:57.135>release <00:18:57.275>instead

366
00:18:59.295 --> 00:19:00.935
<00:18:59.295>of <00:18:59.575>putting <00:18:59.855>out <00:19:00.135>a <00:19:00.415>problematic <00:19:00.695>API.

367
00:19:04.075 --> 00:19:06.895
<00:19:04.075>The <00:19:04.230>last <00:19:04.386>thing <00:19:04.541>I <00:19:04.697>wanna <00:19:04.852>touch <00:19:05.008>upon <00:19:05.163>today <00:19:05.319>is <00:19:05.475>alignment.

368
00:19:07.715 --> 00:19:11.495
<00:19:07.715>How <00:19:07.889>do <00:19:08.064>we <00:19:08.240>ensure <00:19:08.415>that <00:19:08.590>we <00:19:08.764>achieve <00:19:08.939>internal <00:19:09.115>alignment

369
00:19:12.085 --> 00:19:14.375
<00:19:12.085>without <00:19:12.318>which <00:19:12.551>we <00:19:12.785>all <00:19:13.018>know <00:19:13.251>it's <00:19:13.485>impossible

370
00:19:14.375 --> 00:19:15.975
<00:19:14.375>to <00:19:14.841>get <00:19:15.308>external <00:19:15.775>consistency?

371
00:19:17.635 --> 00:19:21.295
<00:19:17.635>At <00:19:17.835>Canva, <00:19:18.035>we <00:19:18.235>work <00:19:18.435>in <00:19:18.635>small, <00:19:18.835>loosely <00:19:19.035>coupled,

372
00:19:21.435 --> 00:19:24.535
<00:19:21.435>but <00:19:21.715>highly <00:19:21.995>cohesive <00:19:22.274>teams, <00:19:22.554>each <00:19:22.835>empowered

373
00:19:24.555 --> 00:19:26.255
<00:19:24.555>to <00:19:24.835>deliver <00:19:25.115>their <00:19:25.395>crazy <00:19:25.675>big <00:19:25.955>goal.

374
00:19:26.945 --> 00:19:31.255
<00:19:26.945>While <00:19:27.100>this <00:19:27.256>approach <00:19:27.411>does <00:19:27.567>optimize <00:19:27.722>for <00:19:27.878>speed, <00:19:28.033>it <00:19:28.189>can <00:19:28.345>lead

375
00:19:31.255 --> 00:19:33.695
<00:19:31.255>to <00:19:31.430>teams <00:19:31.605>getting <00:19:31.780>carried <00:19:31.955>away <00:19:32.130>with <00:19:32.305>their <00:19:32.480>individual <00:19:32.655>goals

376
00:19:34.235 --> 00:19:37.415
<00:19:34.235>and <00:19:34.409>risk <00:19:34.584>losing <00:19:34.760>sight <00:19:34.935>of <00:19:35.110>a <00:19:35.284>unified <00:19:35.459>company <00:19:35.635>vision.

377
00:19:38.715 --> 00:19:41.295
<00:19:38.715>We <00:19:38.889>are <00:19:39.064>very <00:19:39.240>conscious <00:19:39.415>of <00:19:39.590>Conway's <00:19:39.764>Law <00:19:39.939>at <00:19:40.115>Canva,

378
00:19:41.515 --> 00:19:44.295
<00:19:41.515>and <00:19:41.655>we <00:19:41.795>don't <00:19:41.935>want <00:19:42.075>that <00:19:42.215>to <00:19:42.355>manifest <00:19:42.495>in <00:19:42.635>our <00:19:42.775>public <00:19:42.915>APIs.

379
00:19:44.835 --> 00:19:47.655
<00:19:44.835>And <00:19:44.962>what <00:19:45.089>that <00:19:45.216>means <00:19:45.344>is <00:19:45.471>that <00:19:45.598>we <00:19:45.725>don't <00:19:45.853>want <00:19:45.980>our <00:19:46.107>public <00:19:46.235>API

380
00:19:48.155 --> 00:19:50.695
<00:19:48.155>to <00:19:48.435>reflect <00:19:48.715>our <00:19:48.995>internal <00:19:49.274>org <00:19:49.555>structure.

381
00:19:52.315 --> 00:19:56.095
<00:19:52.315>So <00:19:52.548>to <00:19:52.781>strike <00:19:53.015>a <00:19:53.248>balance <00:19:53.481>between <00:19:53.715>enablement

382
00:19:56.395 --> 00:20:00.935
<00:19:56.395>and <00:19:56.570>alignment, <00:19:56.745>we <00:19:56.920>established <00:19:57.095>an <00:19:57.270>API <00:19:57.445>Design <00:19:57.620>working <00:19:57.795>group.

383
00:20:01.605 --> 00:20:05.575
<00:20:01.605>This <00:20:01.745>group <00:20:01.885>is <00:20:02.025>made <00:20:02.165>up <00:20:02.305>of <00:20:02.445>engineers <00:20:02.585>from <00:20:02.725>every <00:20:02.865>single <00:20:03.005>one

384
00:20:05.575 --> 00:20:09.455
<00:20:05.575>of <00:20:05.730>our <00:20:05.886>API <00:20:06.041>teams, <00:20:06.197>and <00:20:06.352>they <00:20:06.508>are <00:20:06.663>tasked <00:20:06.819>with <00:20:06.975>ensuring

385
00:20:09.485 --> 00:20:12.175
<00:20:09.485>that <00:20:09.718>our <00:20:09.951>public <00:20:10.185>API <00:20:10.418>surface <00:20:10.651>is <00:20:10.885>consistent

386
00:20:12.475 --> 00:20:13.575
<00:20:12.475>and <00:20:12.722>up <00:20:12.970>to <00:20:13.217>our <00:20:13.465>standards.

387
00:20:14.575 --> 00:20:15.775
<00:20:14.575>I <00:20:14.755>know <00:20:14.935>what <00:20:15.115>you <00:20:15.295>might <00:20:15.475>be <00:20:15.655>thinking.

388
00:20:16.275 --> 00:20:17.455
<00:20:16.275>Is <00:20:16.487>this <00:20:16.699>some <00:20:16.912>sort <00:20:17.124>of <00:20:17.337>group

389
00:20:17.485 --> 00:20:19.375
<00:20:17.485>that <00:20:17.718>just <00:20:17.951>sits <00:20:18.185>in <00:20:18.418>some <00:20:18.651>ivory <00:20:18.885>tower

390
00:20:19.675 --> 00:20:23.055
<00:20:19.675>and <00:20:19.875>judges <00:20:20.075>designs <00:20:20.274>by <00:20:20.475>approving <00:20:20.675>or <00:20:20.875>rejecting <00:20:21.075>them?

391
00:20:23.765 --> 00:20:26.135
<00:20:23.765>Well, <00:20:23.998>no, <00:20:24.231>it's <00:20:24.465>actually <00:20:24.698>quite <00:20:24.931>the <00:20:25.165>opposite.

392
00:20:26.565 --> 00:20:29.655
<00:20:26.565>This <00:20:26.765>group <00:20:26.965>works <00:20:27.165>with <00:20:27.365>our <00:20:27.565>engineers <00:20:27.765>to <00:20:27.965>enable

393
00:20:29.755 --> 00:20:32.775
<00:20:29.755>and <00:20:29.910>empower <00:20:30.066>them <00:20:30.221>to <00:20:30.377>build <00:20:30.532>great <00:20:30.688>APIs <00:20:30.843>that <00:20:30.999>are <00:20:31.155>up

394
00:20:32.775 --> 00:20:35.615
<00:20:32.775>to <00:20:33.008>our <00:20:33.241>standard <00:20:33.475>and <00:20:33.708>more <00:20:33.941>importantly <00:20:34.175>contribute

395
00:20:35.875 --> 00:20:37.215
<00:20:35.875>to <00:20:36.277>our <00:20:36.678>overall <00:20:37.081>vision.

396
00:20:40.075 --> 00:20:42.655
<00:20:40.075>One <00:20:40.308>particular <00:20:40.541>artifact <00:20:40.775>that <00:20:41.008>this <00:20:41.241>group <00:20:41.475>maintains

397
00:20:42.675 --> 00:20:45.215
<00:20:42.675>and <00:20:42.908>introduced <00:20:43.141>is <00:20:43.375>an <00:20:43.608>API <00:20:43.841>Run <00:20:44.075>sheet.

398
00:20:45.605 --> 00:20:47.925
<00:20:45.605>This <00:20:45.955>API <00:20:46.305>run <00:20:46.655>sheet <00:20:47.005>outlines

399
00:20:48.225 --> 00:20:50.685
<00:20:48.225>and <00:20:48.574>explains <00:20:48.925>every <00:20:49.274>single <00:20:49.625>one

400
00:20:50.685 --> 00:20:52.245
<00:20:50.685>of <00:20:51.034>the <00:20:51.385>critically <00:20:51.735>important <00:20:52.085>stages

401
00:20:52.385 --> 00:20:55.045
<00:20:52.385>of <00:20:52.665>an <00:20:52.945>API's <00:20:53.225>lifecycle <00:20:53.504>for <00:20:53.785>us.

402
00:20:55.065 --> 00:20:57.605
<00:20:55.065>The <00:20:55.205>value <00:20:55.345>in <00:20:55.485>this <00:20:55.625>has <00:20:55.765>been <00:20:55.905>that <00:20:56.045>it <00:20:56.185>puts <00:20:56.325>the <00:20:56.465>power

403
00:20:57.745 --> 00:21:01.245
<00:20:57.745>and <00:20:57.885>responsibility <00:20:58.024>and <00:20:58.165>takes <00:20:58.304>it <00:20:58.445>and <00:20:58.584>shifts <00:20:58.725>it <00:20:58.864>to <00:20:59.004>the <00:20:59.145>left,

404
00:21:01.345 --> 00:21:03.965
<00:21:01.345>and <00:21:01.520>it <00:21:01.695>puts <00:21:01.870>it <00:21:02.045>in <00:21:02.220>our <00:21:02.395>API <00:21:02.570>teams <00:21:02.745>hands.

405
00:21:04.545 --> 00:21:07.325
<00:21:04.545>And <00:21:04.745>this <00:21:04.945>enables <00:21:05.145>them <00:21:05.345>to <00:21:05.545>self <00:21:05.745>govern <00:21:05.945>all

406
00:21:07.325 --> 00:21:09.525
<00:21:07.325>of <00:21:07.605>these <00:21:07.885>critically <00:21:08.165>important <00:21:08.445>stages <00:21:08.725>such

407
00:21:09.525 --> 00:21:12.525
<00:21:09.525>as <00:21:09.758>security <00:21:09.991>assessments, <00:21:10.225>engaging <00:21:10.458>core <00:21:10.691>product <00:21:10.925>themes,

408
00:21:12.975 --> 00:21:16.045
<00:21:12.975>validating <00:21:13.208>and <00:21:13.441>testing, <00:21:13.675>and <00:21:13.908>much, <00:21:14.141>much <00:21:14.375>more.

409
00:21:18.175 --> 00:21:20.305
<00:21:18.175>Another <00:21:18.524>artifact <00:21:18.875>that <00:21:19.225>this <00:21:19.575>group

410
00:21:20.865 --> 00:21:25.265
<00:21:20.865>maintains <00:21:21.098>is <00:21:21.331>a <00:21:21.565>public <00:21:21.798>API <00:21:22.031>handbook, <00:21:22.265>um,

411
00:21:25.365 --> 00:21:28.345
<00:21:25.365>and <00:21:25.598>public <00:21:25.831>API <00:21:26.065>volume <00:21:26.298>that <00:21:26.531>is <00:21:26.765>part

412
00:21:28.345 --> 00:21:31.065
<00:21:28.345>of <00:21:28.625>our <00:21:28.905>internal <00:21:29.185>Canva <00:21:29.465>Engineering <00:21:29.745>handbook.

413
00:21:31.455 --> 00:21:34.905
<00:21:31.455>This <00:21:31.655>engineering <00:21:31.855>handbook <00:21:32.054>contains <00:21:32.254>over <00:21:32.455>200 <00:21:32.655>peer <00:21:32.855>written

414
00:21:35.125 --> 00:21:36.545
<00:21:35.125>and <00:21:35.551>peer <00:21:35.977>reviewed <00:21:36.403>articles

415
00:21:36.695 --> 00:21:39.465
<00:21:36.695>that <00:21:36.975>codify <00:21:37.254>our <00:21:37.534>engineering <00:21:37.814>best <00:21:38.095>practices.

416
00:21:39.985 --> 00:21:43.025
<00:21:39.985>I <00:21:40.125>personally <00:21:40.264>visit <00:21:40.405>this <00:21:40.544>website <00:21:40.685>at <00:21:40.824>least <00:21:40.965>10 <00:21:41.104>times <00:21:41.245>a <00:21:41.385>day.

417
00:21:43.725 --> 00:21:46.865
<00:21:43.725>And <00:21:43.958>the <00:21:44.191>public <00:21:44.425>API <00:21:44.658>volume <00:21:44.891>contains <00:21:45.125>everything

418
00:21:46.865 --> 00:21:49.705
<00:21:46.865>that <00:21:47.005>we've <00:21:47.145>learned <00:21:47.285>so <00:21:47.425>far <00:21:47.565>on <00:21:47.705>the <00:21:47.845>topic <00:21:47.985>of <00:21:48.125>API <00:21:48.265>design.

419
00:21:50.645 --> 00:21:53.425
<00:21:50.645>And <00:21:50.800>it's <00:21:50.956>something <00:21:51.111>that <00:21:51.267>we <00:21:51.422>constantly <00:21:51.578>update <00:21:51.733>based <00:21:51.889>on <00:21:52.045>every

420
00:21:53.485 --> 00:21:55.225
<00:21:53.485>FE <00:21:53.685>single <00:21:53.885>piece <00:21:54.084>of <00:21:54.284>feedback <00:21:54.485>that <00:21:54.685>we <00:21:54.885>get

421
00:21:55.405 --> 00:21:56.665
<00:21:55.405>and <00:21:55.594>all <00:21:55.783>the <00:21:55.972>lessons <00:21:56.161>that <00:21:56.350>we <00:21:56.539>learn.

422
00:21:58.115 --> 00:22:02.135
<00:21:58.115>So <00:21:58.255>the <00:21:58.395>key <00:21:58.535>lesson <00:21:58.675>here <00:21:58.815>is <00:21:58.955>that <00:21:59.095>we <00:21:59.235>should <00:21:59.375>gain <00:21:59.515>clarity

423
00:22:02.515 --> 00:22:03.695
<00:22:02.515>by <00:22:02.869>writing <00:22:03.223>things <00:22:03.577>down

424
00:22:04.635 --> 00:22:06.855
<00:22:04.635>and <00:22:04.868>sharing <00:22:05.101>that <00:22:05.335>knowledge <00:22:05.568>with <00:22:05.801>everyone <00:22:06.035>else.

425
00:22:08.955 --> 00:22:11.535
<00:22:08.955>So <00:22:09.188>time <00:22:09.421>to <00:22:09.655>summarize <00:22:09.888>the <00:22:10.121>key <00:22:10.355>lessons.

426
00:22:13.385 --> 00:22:16.245
<00:22:13.385>We <00:22:13.618>first <00:22:13.851>saw <00:22:14.085>how <00:22:14.318>dogfooding <00:22:14.551>with <00:22:14.785>internal

427
00:22:16.265 --> 00:22:19.685
<00:22:16.265>and <00:22:16.465>preview <00:22:16.665>releases <00:22:16.865>can <00:22:17.065>massively <00:22:17.265>influence <00:22:17.465>your <00:22:17.665>entire

428
00:22:19.685 --> 00:22:21.565
<00:22:19.685>product <00:22:20.034>direction <00:22:20.385>for <00:22:20.735>the <00:22:21.085>better.

429
00:22:22.505 --> 00:22:26.565
<00:22:22.505>We <00:22:22.680>then <00:22:22.855>saw <00:22:23.030>how <00:22:23.205>pursuing <00:22:23.380>pragmatic <00:22:23.555>excellence <00:22:23.730>while <00:22:23.905>focusing

430
00:22:26.565 --> 00:22:29.005
<00:22:26.565>on <00:22:26.765>your <00:22:26.965>core <00:22:27.165>product <00:22:27.365>is <00:22:27.565>a <00:22:27.765>great <00:22:27.965>way

431
00:22:29.705 --> 00:22:33.965
<00:22:29.705>to <00:22:29.879>deliver <00:22:30.054>your <00:22:30.230>product <00:22:30.405>early <00:22:30.580>while <00:22:30.754>minimizing <00:22:30.929>tech <00:22:31.105>debt.

432
00:22:34.945 --> 00:22:37.405
<00:22:34.945>The <00:22:35.145>third <00:22:35.345>lesson <00:22:35.544>is <00:22:35.745>on <00:22:35.945>my <00:22:36.145>personal <00:22:36.345>favorites,

433
00:22:37.955 --> 00:22:40.925
<00:22:37.955>that <00:22:38.129>we <00:22:38.304>should <00:22:38.480>avoid <00:22:38.655>poor <00:22:38.830>APIs <00:22:39.004>at <00:22:39.179>all <00:22:39.355>costs.

434
00:22:41.305 --> 00:22:44.725
<00:22:41.305>And <00:22:41.460>as <00:22:41.616>a <00:22:41.771>general <00:22:41.927>rule <00:22:42.082>of <00:22:42.238>thumb, <00:22:42.393>delaying <00:22:42.549>a <00:22:42.705>release

435
00:22:44.785 --> 00:22:47.885
<00:22:44.785>to <00:22:44.925>the <00:22:45.065>next <00:22:45.205>cycle <00:22:45.345>is <00:22:45.485>much <00:22:45.625>better <00:22:45.765>than <00:22:45.905>putting <00:22:46.045>out <00:22:46.185>a

436
00:22:47.885 --> 00:22:50.445
<00:22:47.885>problematic <00:22:48.118>API <00:22:48.351>and <00:22:48.585>dealing <00:22:48.818>with <00:22:49.051>the <00:22:49.285>consequences.

437
00:22:52.485 --> 00:22:55.585
<00:22:52.485>And <00:22:52.659>finally, <00:22:52.834>we <00:22:53.010>should <00:22:53.185>always <00:22:53.360>try <00:22:53.534>to <00:22:53.709>gain <00:22:53.885>clarity

438
00:22:56.015 --> 00:22:57.305
<00:22:56.015>through <00:22:56.402>writing <00:22:56.789>things <00:22:57.176>down

439
00:22:57.885 --> 00:23:00.145
<00:22:57.885>or <00:22:58.118>typing <00:22:58.351>things <00:22:58.585>down, <00:22:58.818>whichever <00:22:59.051>you <00:22:59.285>prefer.

440
00:23:02.125 --> 00:23:06.105
<00:23:02.125>We <00:23:02.280>saw <00:23:02.436>today <00:23:02.591>how <00:23:02.747>strong <00:23:02.902>engineering <00:23:03.058>values <00:23:03.213>can <00:23:03.369>be <00:23:03.525>massively

441
00:23:06.105 --> 00:23:11.075
<00:23:06.105>effective <00:23:06.338>at <00:23:06.571>scale <00:23:06.805>and <00:23:07.038>a <00:23:07.271>particular <00:23:07.505>value

442
00:23:11.305 --> 00:23:12.995
<00:23:11.305>that <00:23:11.585>I <00:23:11.865>personally <00:23:12.145>love <00:23:12.425>the <00:23:12.705>most,

443
00:23:13.585 --> 00:23:15.515
<00:23:13.585>that <00:23:13.865>we <00:23:14.145>should <00:23:14.425>always <00:23:14.705>remind <00:23:14.985>ourselves.

444
00:23:16.415 --> 00:23:17.915
<00:23:16.415>How <00:23:16.685>does <00:23:16.955>this <00:23:17.225>help <00:23:17.495>our <00:23:17.764>users?

445
00:23:19.335 --> 00:23:22.235
<00:23:19.335>We <00:23:19.490>hope <00:23:19.646>that <00:23:19.801>this <00:23:19.957>particular <00:23:20.112>value <00:23:20.268>shines <00:23:20.423>through <00:23:20.579>the <00:23:20.735>care

446
00:23:22.235 --> 00:23:26.155
<00:23:22.235>and <00:23:22.362>effort <00:23:22.489>we've <00:23:22.616>put <00:23:22.744>into <00:23:22.871>our <00:23:22.998>APIs, <00:23:23.125>not <00:23:23.253>just <00:23:23.380>the <00:23:23.507>SDK <00:23:23.635>itself,

447
00:23:26.255 --> 00:23:27.435
<00:23:26.255>but <00:23:26.609>rather <00:23:26.963>the <00:23:27.317>tooling

448
00:23:27.495 --> 00:23:29.195
<00:23:27.495>and <00:23:27.695>the <00:23:27.895>docs <00:23:28.094>that <00:23:28.294>we've <00:23:28.495>surrounded <00:23:28.695>it <00:23:28.895>with.

449
00:23:31.315 --> 00:23:34.295
<00:23:31.315>And <00:23:31.442>we <00:23:31.569>hope <00:23:31.696>that <00:23:31.824>this <00:23:31.951>also <00:23:32.078>serves <00:23:32.205>as <00:23:32.333>an <00:23:32.460>invitation <00:23:32.587>for <00:23:32.715>you

450
00:23:34.295 --> 00:23:38.095
<00:23:34.295>to <00:23:34.470>join <00:23:34.645>us <00:23:34.820>and <00:23:34.995>helping <00:23:35.170>our <00:23:35.345>185 <00:23:35.520>million <00:23:35.695>users

451
00:23:38.835 --> 00:23:40.815
<00:23:38.835>in <00:23:39.035>ways <00:23:39.235>that <00:23:39.435>we <00:23:39.635>haven't <00:23:39.835>even <00:23:40.035>imagined <00:23:40.235>yet.

452
00:23:42.405 --> 00:23:44.775
<00:23:42.405>That <00:23:42.532>is <00:23:42.659>all <00:23:42.786>for <00:23:42.914>me. <00:23:43.041>Thank <00:23:43.168>you <00:23:43.295>very <00:23:43.423>much <00:23:43.550>for <00:23:43.677>your <00:23:43.805>attention.