1
00:00:00,136 --> 00:00:03,826
And like from the get go, we knew
that we just like, the way for us

2
00:00:03,836 --> 00:00:08,506
to win was to build Something that
was excellent, like build a product

3
00:00:08,846 --> 00:00:13,466
that would just feel so good that you
wouldn't want to use anything else.

4
00:00:13,936 --> 00:00:17,759
You have to build something much better in
order to to be able to gain market share.

5
00:00:18,014 --> 00:00:20,588
And convince users to switch over.

6
00:00:20,788 --> 00:00:24,538
And because our mission is to  help
companies be better at building software,

7
00:00:25,128 --> 00:00:29,028
like, We should make a product that
is an inspiration to them as well.

8
00:00:29,274 --> 00:00:31,564
So we should make sure that, know, when
they use the product, they're like,

9
00:00:31,564 --> 00:00:34,104
oh, man, like, ooh, this feels good.

10
00:00:34,184 --> 00:00:40,364
Like, I want to make my product as good as
this freaking project management solution.

11
00:00:41,034 --> 00:00:45,644
Because if you can make an issue tracker
that is, that is aspired to, then like,

12
00:00:45,754 --> 00:00:50,404
then you can make any, any application
as, as, as nicely, like an issue tracker

13
00:00:50,404 --> 00:00:56,271
is hard to pull off as being a very nice
and cool looking and, intuitive app.

14
00:00:56,985 --> 00:00:59,165
Welcome to the Local First FM podcast.

15
00:00:59,475 --> 00:01:02,325
I'm your host, Johannes Schickling,
and I'm a web developer, a

16
00:01:02,325 --> 00:01:05,335
startup founder, and love the
craft of software engineering.

17
00:01:05,735 --> 00:01:09,415
For the past few years, I've been on a
journey to build a modern, high quality

18
00:01:09,415 --> 00:01:11,175
music app using web technologies.

19
00:01:11,495 --> 00:01:15,445
And in doing so, I've been following down
the rabbit hole of local first software.

20
00:01:15,865 --> 00:01:18,895
This podcast is your invitation
to join me on that journey.

21
00:01:19,675 --> 00:01:24,665
In this episode, I'm speaking to Tuomas
Artman, co founder and CTO of Linear.

22
00:01:25,070 --> 00:01:29,410
Prior to Linear, Tuomas had already
built Sync engines for over a decade at

23
00:01:29,420 --> 00:01:31,640
companies, including Groupon and Uber.

24
00:01:32,200 --> 00:01:36,260
In this conversation, we explore
how local first and the focus on

25
00:01:36,260 --> 00:01:40,760
software quality was crucial for
Linear's success and how the concept

26
00:01:40,790 --> 00:01:42,980
of a startup MVP should be rethought.

27
00:01:43,610 --> 00:01:47,990
Before getting started, also a big
thank you to Rosicorp and PowerSync

28
00:01:48,270 --> 00:01:49,450
for supporting this podcast.

29
00:01:50,100 --> 00:01:51,490
And now my interview with

30
00:01:51,520 --> 00:01:51,740
Tuomas.

31
00:01:52,980 --> 00:01:53,820
Welcome Tuomas.

32
00:01:54,100 --> 00:01:55,680
So nice to have you on the show.

33
00:01:56,040 --> 00:01:59,600
It was such a pleasure to also have you
in Berlin for the Local-First Conference

34
00:01:59,610 --> 00:02:04,380
a couple of months ago, and super
excited now to dig in even deeper into

35
00:02:04,380 --> 00:02:06,190
so many things local-first with you.

36
00:02:06,550 --> 00:02:08,410
Would you mind introducing yourself?

37
00:02:09,050 --> 00:02:09,890
Yeah, of course.

38
00:02:09,940 --> 00:02:14,765
Um, and thanks for having me and having me
at the local first conference, which was I

39
00:02:14,775 --> 00:02:18,015
guess the first conference that, you know,
was about local first, which was awesome.

40
00:02:18,975 --> 00:02:19,965
I thoroughly enjoyed it.

41
00:02:20,635 --> 00:02:21,675
I'm Tuomas.

42
00:02:21,875 --> 00:02:23,705
I've been engineering my whole life.

43
00:02:23,725 --> 00:02:28,459
Like I started way back in, in 96,
doing CD ROM multimedia presentations.

44
00:02:28,632 --> 00:02:32,015
if you can imagine, when the
internet was sort of not there yet,

45
00:02:32,015 --> 00:02:35,910
if you ever had a Nokia phone that
usually came with the CD ROM, with

46
00:02:35,910 --> 00:02:37,420
instructions on how to use that phone.

47
00:02:37,450 --> 00:02:39,400
Chances are that, that was
made by the company that it

48
00:02:39,400 --> 00:02:40,760
was working for, or even by me.

49
00:02:41,120 --> 00:02:42,380
I did a few of those as well.

50
00:02:42,824 --> 00:02:45,554
but you know, ever since then,
obviously the intern came around

51
00:02:45,564 --> 00:02:46,964
much, much more interesting.

52
00:02:46,964 --> 00:02:50,774
I, started the consultancy for
nine years until I realized that,

53
00:02:50,824 --> 00:02:51,874
that's not what I want to do.

54
00:02:52,330 --> 00:02:56,170
Did startups a few in Finland, went to
China for a year, doing a startup there.

55
00:02:56,487 --> 00:02:59,590
until I got the opportunity
to move to, Silicon Valley,

56
00:02:59,630 --> 00:03:01,310
joint Groupon, and later Uber.

57
00:03:02,020 --> 00:03:05,030
and, finally, I found myself
as the co founder of Linear,

58
00:03:05,377 --> 00:03:06,767
you know, six years ago.

59
00:03:07,087 --> 00:03:10,720
and, I've been, working on essentially
the harder technical problems.

60
00:03:10,980 --> 00:03:14,250
I do enjoy working on products,
More, but, somebody needs to

61
00:03:14,250 --> 00:03:15,460
take care of all the tech stuff.

62
00:03:16,157 --> 00:03:20,030
so I found myself, like, working on the
sync engine in the early beginnings,

63
00:03:20,030 --> 00:03:22,160
and, that's what I'm still, working on.

64
00:03:22,160 --> 00:03:27,850
So I've, done anything from CD ROMs back
in the day to sort of, you know, early web

65
00:03:27,850 --> 00:03:30,140
HTML applications, then going into mobile.

66
00:03:30,670 --> 00:03:33,150
and now I'm doing sort of,
sync engine and infrastructure.

67
00:03:33,150 --> 00:03:37,640
So I'm, I'm literally have gone, full
round and I'll end up with, probably

68
00:03:37,640 --> 00:03:38,990
doing CD ROMs in the future as well.

69
00:03:39,367 --> 00:03:42,497
That is super impressive
and very inspiring.

70
00:03:42,517 --> 00:03:46,111
When you've been building
software got shipped on CD ROMs,

71
00:03:46,141 --> 00:03:48,211
I was four years old in 96.

72
00:03:48,434 --> 00:03:48,814
But.

73
00:03:49,034 --> 00:03:54,724
It seems like a theme throughout at
least the later years of your engineering

74
00:03:54,924 --> 00:04:00,724
career and path has been sort of like
gravitating towards syncing engines.

75
00:04:00,974 --> 00:04:05,694
So when was the first time you
thought about the concept of

76
00:04:05,694 --> 00:04:07,374
syncing engines and used the term?

77
00:04:07,839 --> 00:04:11,546
Um, that was in the consultancy back
in, Finland, like we had a consultancy

78
00:04:11,546 --> 00:04:14,016
doing all kinds of, you know,
campaign stuff and internet things.

79
00:04:14,103 --> 00:04:19,209
Um, Flash was pop then, um, and, you know,
we did a lot of Flash campaigns and Metro

80
00:04:19,209 --> 00:04:21,236
Media had this, plugin called Shockwave.

81
00:04:21,376 --> 00:04:22,306
I don't know if you remember.

82
00:04:22,731 --> 00:04:26,794
and it had a 3D component, so you were
able to do, 3D accelerated games on it.

83
00:04:27,444 --> 00:04:30,464
and we did one of these games, and
it was a sort of multiplayer shoot

84
00:04:30,464 --> 00:04:33,821
'em up game, which was amazing
back then, and I loved it, and it

85
00:04:33,851 --> 00:04:35,241
looked, you know, super awesome.

86
00:04:35,838 --> 00:04:37,568
and it, it was multiplayer.

87
00:04:37,568 --> 00:04:39,468
It was like four people
against four people.

88
00:04:39,954 --> 00:04:44,194
so it, it needed What I would call a
sync engine, like you needed to sort

89
00:04:44,194 --> 00:04:47,378
of, you know, send over the coordinates
of, you know, all of these ships.

90
00:04:47,514 --> 00:04:50,424
it was, you know, fully real
time, 3D rendered, stuff, so it

91
00:04:50,424 --> 00:04:51,684
needed to be really, really fast.

92
00:04:51,684 --> 00:04:55,131
And that was, you know, the first time
I wrote, could be described as sync

93
00:04:55,131 --> 00:04:58,631
engine, where you would annotate some
properties saying, like, these need to

94
00:04:58,631 --> 00:05:01,531
be transferred to all the players in that
room, and it would automatically pick up

95
00:05:01,531 --> 00:05:04,871
on those and then send them over whenever
they changed, which happened, like,

96
00:05:04,921 --> 00:05:09,656
effectively, locally, then,  the Client
code would just change those properties.

97
00:05:10,006 --> 00:05:14,226
So that still looks very similar to
what we have today, where, like, you

98
00:05:14,326 --> 00:05:18,463
annotate your properties, and then they
automatically get picked up and sent

99
00:05:18,473 --> 00:05:21,333
over to the server to do something.

100
00:05:21,613 --> 00:05:24,676
So that was the first time
I built a very simple sync

101
00:05:24,676 --> 00:05:26,659
engine, a bit more complicated.

102
00:05:27,339 --> 00:05:30,276
One, I built one in China for this,
you know, I was working at a gaming

103
00:05:30,276 --> 00:05:35,009
company or a gaming startup that had
a lot of smaller teams building games

104
00:05:35,009 --> 00:05:37,046
for, one of their portals that they had.

105
00:05:37,343 --> 00:05:41,583
And I was, one of the CTOs there,
like we had two CTOs, weirdly,

106
00:05:41,623 --> 00:05:43,433
like a Chinese CTO and then me.

107
00:05:43,856 --> 00:05:47,306
And I was responsible for sort of
the, trying to build out a common

108
00:05:47,306 --> 00:05:49,466
stack for, their real time games.

109
00:05:49,769 --> 00:05:53,043
So I built another sync engine, and
this time with Yeah, I don't remember

110
00:05:53,053 --> 00:05:56,503
what the first one was built on,
even, but the second, like, my second

111
00:05:56,503 --> 00:05:57,833
sync engine was built with Node.

112
00:05:58,496 --> 00:06:02,146
And it had a Flash client
and a Unity 3D client.

113
00:06:02,766 --> 00:06:07,359
And it would essentially do the same thing
as, know, the first one that I built.

114
00:06:07,389 --> 00:06:09,974
Like, it would pick up properties
and send them across the room.

115
00:06:09,974 --> 00:06:11,669
It was a bit more intelligent.

116
00:06:11,699 --> 00:06:12,729
Like, it did more stuff.

117
00:06:12,966 --> 00:06:14,086
And it became, better.

118
00:06:14,394 --> 00:06:18,844
And then my third sync engine was
built for Groupon when I joined, um,

119
00:06:18,844 --> 00:06:22,594
in San Francisco in 2000, probably 12.

120
00:06:23,174 --> 00:06:26,934
and I was working on a point of sale
application, for high end restaurants.

121
00:06:26,954 --> 00:06:29,954
Like you would have an iPad in
the, or multiple iPads in the menu.

122
00:06:30,041 --> 00:06:32,541
and you could take orders, you
could swipe credit cards, you could

123
00:06:32,541 --> 00:06:36,211
sort of, print out tokens to the
kitchen for them to prepare the food.

124
00:06:36,731 --> 00:06:38,541
and all of these iPads need to be in sync.

125
00:06:38,551 --> 00:06:38,841
Cause.

126
00:06:39,126 --> 00:06:41,506
Otherwise, you could take sort
of the order twice, or you

127
00:06:41,506 --> 00:06:43,546
could charge the customer twice.

128
00:06:43,803 --> 00:06:46,603
So, I was like, hell, I
know how this stuff works.

129
00:06:47,213 --> 00:06:51,439
They had a very complicated thing
built that just didn't work very

130
00:06:51,439 --> 00:06:52,649
well, and they wanted to pull it out.

131
00:06:52,649 --> 00:06:54,359
And I was like, I can try something.

132
00:06:54,609 --> 00:06:59,239
I can sort of, you I tried to reinvent
how this should look like, so I built

133
00:06:59,289 --> 00:07:04,439
in a sync engine, this time with
Objective C, and a Node backend, because,

134
00:07:04,769 --> 00:07:06,859
I was pretty good at that already.

135
00:07:07,223 --> 00:07:11,803
And, yeah, it shipped into production,
it would synchronize all the iPads

136
00:07:11,803 --> 00:07:16,593
at the menu, and just make sure
that everything was nice and tidy.

137
00:07:16,709 --> 00:07:18,139
And it had offline support, even.

138
00:07:18,344 --> 00:07:21,028
Even back in the day, because,
um, we realized that, many of the

139
00:07:21,028 --> 00:07:23,128
customers had, pretty, flaky Wi Fi.

140
00:07:23,208 --> 00:07:26,158
And so you would, constantly lose,
your connectivity to the backend.

141
00:07:26,621 --> 00:07:27,821
and we want to do something about it.

142
00:07:27,821 --> 00:07:31,121
So it would, you know, buffer
all these requests on the iPad.

143
00:07:31,471 --> 00:07:34,441
And I think it tried to even talk
to the other iPads to synchronize

144
00:07:34,471 --> 00:07:36,131
between them before sending it out.

145
00:07:36,569 --> 00:07:40,393
to the internet, and that sort of
worked, but, you know, obviously

146
00:07:40,403 --> 00:07:43,223
immediately somebody, somebody
took it, to the next level.

147
00:07:43,313 --> 00:07:45,229
And, we never said that
there was offline support.

148
00:07:45,229 --> 00:07:49,333
We've just said, like, you can turn
your, you know, Wi Fi off for a second.

149
00:07:49,673 --> 00:07:52,693
And we had built in these precautions
of like, what happens if you

150
00:07:52,963 --> 00:07:55,873
don't have connectivity and you,
you take a credit card charge?

151
00:07:56,383 --> 00:07:59,026
we would store, that credit card securely.

152
00:07:59,296 --> 00:08:02,916
On device, like encrypted, and make sure
that, you couldn't get at it, you know,

153
00:08:02,916 --> 00:08:07,813
otherwise, and then when you got back,
you would replay those, those orders and,

154
00:08:07,863 --> 00:08:10,876
hopefully they would go through, obviously
it wasn't no guarantee because we couldn't

155
00:08:10,876 --> 00:08:15,466
check with the payment provider, whether
that been true, that went through, so

156
00:08:15,536 --> 00:08:19,776
we never anticipated for anybody to
sort of be offline for a long time.

157
00:08:20,306 --> 00:08:24,106
And then there was this company that
operated the train across the Rocky

158
00:08:24,106 --> 00:08:26,716
Mountains, and they had a restaurant car.

159
00:08:27,163 --> 00:08:31,303
And what they immediately did, they bought
the software, which was called Breckrum,

160
00:08:31,986 --> 00:08:34,506
and they started just charging everybody.

161
00:08:34,916 --> 00:08:36,586
in that restaurant car for two days.

162
00:08:36,636 --> 00:08:40,046
Like, two days they didn't have
any Wi Fi connectivity and took all

163
00:08:40,046 --> 00:08:43,646
these charges and then, regained
connectivity once the trip was over

164
00:08:43,646 --> 00:08:45,606
and, luckily it all worked out.

165
00:08:45,906 --> 00:08:49,216
yeah, it could have gone really wrong
and would have been very, very expensive.

166
00:08:49,653 --> 00:08:51,043
but, I don't know what happened to that.

167
00:08:51,083 --> 00:08:53,263
We probably told them
to never do that again.

168
00:08:53,306 --> 00:08:55,426
and, it wasn't really meant
for, meant for that, but.

169
00:08:55,871 --> 00:08:58,391
Yeah, so that was the third sync
engine that I, that I wrote.

170
00:08:58,968 --> 00:09:00,671
and the fourth one was for Uber.

171
00:09:00,881 --> 00:09:03,291
I mean, I joined like literally
every single company I've done in,

172
00:09:03,381 --> 00:09:05,521
in, in the past, five companies.

173
00:09:05,601 --> 00:09:07,321
I've built a sync engine, engine for them.

174
00:09:07,954 --> 00:09:12,144
Um, At Uber, I joined at a time
when hyper growth was just going on.

175
00:09:12,254 --> 00:09:14,784
I think we were 300
engineers when I joined.

176
00:09:15,344 --> 00:09:16,919
Later we will be like 4, 000.

177
00:09:17,546 --> 00:09:22,913
And I tried to build a sync, or I
actually did build a sync engine with a Go

178
00:09:22,923 --> 00:09:26,733
backend together with a former colleague
of mine who was a Groupon as well.

179
00:09:27,223 --> 00:09:31,393
And we shipped a sort of,
small beta product out on it.

180
00:09:31,523 --> 00:09:35,273
Like, I think if I remember correctly,
it was sort of a courier service in New

181
00:09:35,273 --> 00:09:39,839
York where you could Just order a car
and the car would come and pick up your

182
00:09:40,009 --> 00:09:45,063
stuff and then you could sort of, see him
deliver those things in your city and we

183
00:09:45,083 --> 00:09:46,953
built that thing in effectively a week.

184
00:09:46,963 --> 00:09:50,513
Like the sync engine obviously took
quite a bit of time to put together.

185
00:09:50,838 --> 00:09:55,948
But after that, building the application
was a week and with that in mind, I, went

186
00:09:55,948 --> 00:10:00,338
to, my managers and, tried to explain to
them how, how freaking awesome it is that

187
00:10:00,348 --> 00:10:04,458
you can build an application that does,
sort of, all of this out of the box in

188
00:10:04,458 --> 00:10:08,678
a week and we should sort of just, put
the whole Uber application onto this.

189
00:10:09,326 --> 00:10:16,116
And I sort of got the green light to
try to do it but I just wasn't able to,

190
00:10:16,316 --> 00:10:20,496
like, the company was moving so quickly
and everything was just, on fire all

191
00:10:20,496 --> 00:10:24,686
the time around me that nobody really
cared about, like, my nice initiative

192
00:10:24,686 --> 00:10:26,136
to sort of put a sync engine in.

193
00:10:26,201 --> 00:10:33,281
And it sort of bothered me very much
because, like, even a year later,

194
00:10:33,281 --> 00:10:39,091
like, the way that Uber client
did sync was what we call ping.

195
00:10:39,611 --> 00:10:45,546
It would, every three seconds, call the
server and receive everything, everything

196
00:10:45,546 --> 00:10:49,796
that it knew in this one huge packet,
every three seconds it would go in and

197
00:10:49,796 --> 00:10:52,076
fetch the entire state of the world.

198
00:10:52,406 --> 00:10:56,476
And then like including, user accounts and
credit card, credit card that you had in

199
00:10:56,476 --> 00:10:58,456
the application, all the cars around you.

200
00:10:58,816 --> 00:11:00,459
you know, Literally, literally everything.

201
00:11:00,579 --> 00:11:02,049
And it was like, pretty big packet.

202
00:11:02,186 --> 00:11:04,196
So it, it, it felt so inefficient.

203
00:11:04,376 --> 00:11:07,849
And, then we started optimizing
it a bit and effectively build.

204
00:11:08,403 --> 00:11:11,176
some small, you know, sync
like functionality into it,

205
00:11:11,176 --> 00:11:12,236
but it was never the same.

206
00:11:12,246 --> 00:11:14,876
Like, I think that Uber would have
been so much better off if they

207
00:11:14,876 --> 00:11:19,496
had, just gone with a sync engine,
put it in and build it effectively

208
00:11:19,496 --> 00:11:21,006
like a local-first application out.

209
00:11:21,706 --> 00:11:24,216
It would have saved so many, so
many engineering, engineering

210
00:11:24,256 --> 00:11:27,006
hours, and the product would just
be much better because of that.

211
00:11:27,646 --> 00:11:28,556
Yeah, it didn't happen.

212
00:11:28,556 --> 00:11:30,669
So, that actually was open sourced.

213
00:11:30,793 --> 00:11:31,853
It's called JetStream.

214
00:11:31,863 --> 00:11:34,973
Like, I think it's somewhere still on
GitHub, if you want to check it out.

215
00:11:34,993 --> 00:11:39,339
We had a Swift client and a
JavaScript client, and even an

216
00:11:39,349 --> 00:11:41,003
Android client and a Go backend.

217
00:11:41,139 --> 00:11:44,023
It was, it was interesting, but,
unfortunately, never, never worked out.

218
00:11:44,873 --> 00:11:45,763
And then came Linear.

219
00:11:45,876 --> 00:11:47,119
And um, yeah.

220
00:11:47,604 --> 00:11:51,171
What do you start, that product with,
like, you just come out of Uber and

221
00:11:51,181 --> 00:11:54,908
you're sort of super excited about
local-first and think that, that's the

222
00:11:54,918 --> 00:11:57,938
model of the future of how you should
be building any kind of application

223
00:11:57,938 --> 00:12:00,368
that has a limited set of data.

224
00:12:00,888 --> 00:12:04,878
And I, I was excited just, trying
out things and, getting back to

225
00:12:04,888 --> 00:12:08,708
web, like I hadn't worked on, on,
on web technologies in, in ages.

226
00:12:09,208 --> 00:12:12,648
It probably was like six years that I
had spent on mobile, mobile engineering.

227
00:12:13,068 --> 00:12:16,418
So when I got back, like I was like, holy
crap, like what is all this React stuff?

228
00:12:16,418 --> 00:12:17,698
Like this, this looks awesome.

229
00:12:17,718 --> 00:12:21,744
And the technology has just, progressed
so much that I you know, had to learn a

230
00:12:21,744 --> 00:12:23,474
lot of stuff, which was super exciting.

231
00:12:23,934 --> 00:12:27,088
And the first thing that I, that I
did, like, , Jory and I got together

232
00:12:27,088 --> 00:12:31,178
on hacking on, on just some issue
tracking, because, we were excited about

233
00:12:31,748 --> 00:12:35,558
or we weren't excited about this space,
but we thought that somebody should,

234
00:12:35,598 --> 00:12:38,994
do something about it should figure
out like, to do a project management

235
00:12:38,994 --> 00:12:40,364
system that actually worked nicely.

236
00:12:40,784 --> 00:12:45,074
Because we had heard all these stories
at our respective companies of like,

237
00:12:45,074 --> 00:12:48,951
how, how people just disliked whatever
they were using back in the day.

238
00:12:49,581 --> 00:12:52,631
And we were like, oh, it sounds
like an interesting challenge.

239
00:12:52,631 --> 00:12:54,181
And so we started, effectively just.

240
00:12:54,341 --> 00:12:56,111
hacking on it.

241
00:12:56,581 --> 00:13:00,884
And through just making a few prototypes
with a local-first architecture, we were

242
00:13:00,884 --> 00:13:02,834
like, holy shit, this is pretty good.

243
00:13:03,194 --> 00:13:06,744
You can, rather really quickly
build something that is

244
00:13:06,754 --> 00:13:08,904
immensely fast and is real time.

245
00:13:08,934 --> 00:13:11,894
And it just feels like a modern
application that, isn't really a

246
00:13:11,894 --> 00:13:15,904
web app anymore, but just a desktop
app that just runs in your browser.

247
00:13:16,458 --> 00:13:17,408
That is fascinating.

248
00:13:17,408 --> 00:13:21,568
So through those technical prototype
explorations, you build for

249
00:13:21,568 --> 00:13:24,892
yourself the conviction, Oh, we
can build something much better.

250
00:13:25,202 --> 00:13:29,582
And that has then led to the building,
the conviction to start out Linear.

251
00:13:29,702 --> 00:13:32,932
Do I summarize the starting
point there correctly?

252
00:13:33,352 --> 00:13:34,372
I think so.

253
00:13:34,412 --> 00:13:38,822
Like, so we were struggling with the, with
starting the company or not struggling.

254
00:13:38,832 --> 00:13:42,302
Like we, we didn't want to spend
10 years of our time doing project

255
00:13:42,302 --> 00:13:46,382
management because it felt such
a boring space to be initially.

256
00:13:46,382 --> 00:13:49,892
Like when you think about like, we were
always like, very often we we're just

257
00:13:49,942 --> 00:13:52,412
having a drink first with only Jory.

258
00:13:52,412 --> 00:13:54,442
And then we tried to,
recruit Kari as well.

259
00:13:54,672 --> 00:13:58,052
But he was even less interested in, in
this space, like project management,

260
00:13:58,062 --> 00:14:03,468
what the hell and We always had the,
the weird, idea of like, it seems such

261
00:14:03,468 --> 00:14:08,095
a simple thing to do, like, it seems
like such an opportunity to build, start

262
00:14:08,095 --> 00:14:11,635
with an issue tracker, because like,
you don't need much more than that in

263
00:14:11,635 --> 00:14:13,345
order to sort of cater to startups.

264
00:14:13,895 --> 00:14:16,725
And it felt like such a market
opportunity to build something

265
00:14:16,735 --> 00:14:18,055
really good in that space.

266
00:14:18,075 --> 00:14:20,255
And it really shouldn't
take too much time.

267
00:14:20,325 --> 00:14:23,285
Like, it was a relatively simple
application and we immediately knew that.

268
00:14:23,885 --> 00:14:25,035
We would be able to build it.

269
00:14:25,228 --> 00:14:28,958
But we always came back to the idea, like,
why hasn't anybody else done this before?

270
00:14:29,312 --> 00:14:32,955
And thinking about that problem so
many times, we were like, the only the

271
00:14:32,955 --> 00:14:37,825
only reason we could come up with was
that nobody who sort of was able to

272
00:14:37,835 --> 00:14:41,315
create beautiful applications wanted to
spend their time on project management.

273
00:14:42,005 --> 00:14:43,515
And thus, nobody had done it before.

274
00:14:43,515 --> 00:14:46,505
And we were sort of struggling
with the same thing as well.

275
00:14:46,525 --> 00:14:49,510
Like, We didn't want to spend
our time with project management.

276
00:14:49,550 --> 00:14:53,457
Like, it felt like an industry that
was kind of boring until later.

277
00:14:53,497 --> 00:14:56,677
And, my co founders might have a very
different, view on, on how this happens.

278
00:14:56,677 --> 00:14:57,647
This is how I felt.

279
00:14:57,667 --> 00:15:02,517
Like at some point at least I understood
like that it's, it's not about

280
00:15:02,557 --> 00:15:04,127
building a project management solution.

281
00:15:04,187 --> 00:15:06,917
Like it's, it's about helping companies
be better at building software.

282
00:15:07,275 --> 00:15:10,745
And that sort of became our
mission statement in, in the

283
00:15:10,745 --> 00:15:13,045
early days, like helping companies
be better at building software.

284
00:15:13,465 --> 00:15:15,795
And that was sort of a
selfish mission as well.

285
00:15:15,805 --> 00:15:20,045
Like I enjoy using software, like I, I
love using, great applications and, when

286
00:15:20,095 --> 00:15:24,585
the iPhone came around like that, that
mechanism of using, your mobile phone

287
00:15:24,585 --> 00:15:27,975
in a, in a very different manner in a
much more intuitive manner was, awesome.

288
00:15:27,985 --> 00:15:29,705
And I wanted to enable people.

289
00:15:30,145 --> 00:15:32,665
To just build better software
so that I can use it myself.

290
00:15:33,238 --> 00:15:37,388
And I think we did these sort of,
technical trials at the same time as well.

291
00:15:37,388 --> 00:15:41,958
Like we did some prototyping and I was,
I was just hacking with Couchbase or some

292
00:15:41,958 --> 00:15:46,275
other tech to sort of, put together a
few, few demos just to, catch up with.

293
00:15:46,600 --> 00:15:50,350
With the rest of the web stack
that I hadn't used in ages.

294
00:15:51,070 --> 00:15:53,630
but yeah, that's, that's sort
of how we, how we got started.

295
00:15:53,650 --> 00:15:57,340
And like from the get go, we knew
that we just like, the way for us

296
00:15:57,350 --> 00:16:02,020
to win was to build Something that
was excellent, like build a product

297
00:16:02,360 --> 00:16:06,980
that would just feel so good that you
wouldn't want to use anything else.

298
00:16:07,480 --> 00:16:10,270
Because, like, again, the incumbent
solutions have been around for,

299
00:16:10,290 --> 00:16:14,010
for ages and they're so ingrained
in all the software companies.

300
00:16:14,410 --> 00:16:18,233
You have to build something much better in
order to to be able to gain market share.

301
00:16:18,488 --> 00:16:21,062
And convince users to switch over.

302
00:16:21,262 --> 00:16:25,012
And because our mission is to  help
companies be better at building software,

303
00:16:25,602 --> 00:16:29,502
like, We should make a product that
is an inspiration to them as well.

304
00:16:29,748 --> 00:16:32,038
So we should make sure that, know, when
they use the product, they're like,

305
00:16:32,038 --> 00:16:34,578
oh, man, like, ooh, this feels good.

306
00:16:34,658 --> 00:16:40,838
Like, I want to make my product as good as
this freaking project management solution.

307
00:16:41,508 --> 00:16:46,118
Because if you can make an issue tracker
that is, that is aspired to, then like,

308
00:16:46,228 --> 00:16:50,878
then you can make any, any application
as, as, as nicely, like an issue tracker

309
00:16:50,878 --> 00:16:56,768
is hard to pull off as being a very nice
and cool looking and, intuitive app.

310
00:16:57,478 --> 00:16:58,038
Totally.

311
00:16:58,088 --> 00:17:01,718
I'm friends with some of the folks
who built Wunderlist back in the days.

312
00:17:01,778 --> 00:17:05,368
And I mean, I think that there's
a lot of similarities there

313
00:17:05,368 --> 00:17:10,398
where I don't think there's like
anything sexy about a to do list.

314
00:17:10,828 --> 00:17:15,748
But yeah, Wunderlist was so well
built and felt so great to use.

315
00:17:15,778 --> 00:17:17,918
I think there's a lot
of similarities there.

316
00:17:18,338 --> 00:17:21,988
And yeah, if you think about it,
like a issue tracker is sort of

317
00:17:21,988 --> 00:17:24,918
like a more evolved to do list.

318
00:17:25,318 --> 00:17:30,249
And this was like over a decade ago, and
I think you've now just set the new bar

319
00:17:30,499 --> 00:17:32,619
of what a high quality app looks like.

320
00:17:33,099 --> 00:17:37,349
Where did you put your focus on
when you said, okay, we want to,

321
00:17:37,499 --> 00:17:39,659
to build an app that feels great.

322
00:17:40,019 --> 00:17:45,639
And so the early technical explorations
were also like an ingredient was snappy

323
00:17:45,639 --> 00:17:51,061
data with that sync engine, but which
other parts did you feel like this

324
00:17:51,061 --> 00:17:54,621
is what we have to really get right
that otherwise it won't feel good?

325
00:17:55,339 --> 00:17:55,669
Yeah.

326
00:17:55,809 --> 00:17:59,049
So we have three points three
things that we want to achieve, like

327
00:17:59,859 --> 00:18:01,269
Superhuman was around back then.

328
00:18:01,269 --> 00:18:03,339
So Superhuman was an inspiration to us.

329
00:18:03,459 --> 00:18:06,026
Like their command menu
was, an inspiration.

330
00:18:06,293 --> 00:18:09,653
So the, the first, like we
started using Linear, the, the

331
00:18:09,653 --> 00:18:11,003
week we started building it.

332
00:18:11,003 --> 00:18:13,913
So we have all the old tickets
in, in there, you know, still.

333
00:18:13,913 --> 00:18:17,283
And the first ticket that
is in Linear LIN1 is about

334
00:18:17,843 --> 00:18:19,353
implementing the command menu.

335
00:18:19,553 --> 00:18:22,033
The first thing that you start
with when building a product is

336
00:18:22,053 --> 00:18:23,463
implement a command menu like that.

337
00:18:23,503 --> 00:18:25,203
That tells you something
about sort of the.

338
00:18:25,548 --> 00:18:29,248
Yeah, the interest that we had, like,
we wanted to play around with, with

339
00:18:29,608 --> 00:18:34,948
sort of new ways of building UI and
new ways of, keeping or making our

340
00:18:34,948 --> 00:18:39,434
users sort of, be super users without
having anything else in the app yet.

341
00:18:39,684 --> 00:18:43,154
So that was the first thing
that Jori started implementing.

342
00:18:43,154 --> 00:18:47,264
And I, I started implementing the
sync engine cause like we like, yeah.

343
00:18:47,274 --> 00:18:50,644
So the first thing was like, we need
keyboard shortcuts and command menu.

344
00:18:51,044 --> 00:18:55,991
Like we need to enable the application
to be super fast for, for super users.

345
00:18:56,781 --> 00:18:59,581
So if you're a, you know, high end
engineer that just wants to get,

346
00:18:59,621 --> 00:19:02,781
things done very quickly in their issue
tracking software, we should enable

347
00:19:02,781 --> 00:19:07,141
you to just, use keyboard shortcuts and
the command menu to get things done.

348
00:19:07,671 --> 00:19:10,394
The second one was that, the
application should feel like an

349
00:19:10,394 --> 00:19:11,984
application, like a native application.

350
00:19:12,359 --> 00:19:16,939
We, like, we knew that we couldn't build
a native app because then we would have

351
00:19:16,939 --> 00:19:20,916
to do a Windows version and Linux version
and it would just, and a web version as

352
00:19:20,916 --> 00:19:24,216
well, because, like, often you, you, don't
have your computer with you or you have

353
00:19:24,226 --> 00:19:29,763
your iPad and you just need to sort of go
onto the internet and see your tickets.

354
00:19:29,888 --> 00:19:32,868
So we were like, well, we need to cut
corners there, but let's try to make

355
00:19:32,868 --> 00:19:36,774
an application with web technologies
that feels like a native application.

356
00:19:37,334 --> 00:19:38,354
So that was the second thing.

357
00:19:38,464 --> 00:19:41,304
And then the third thing was sort
of the real time aspect of it.

358
00:19:41,374 --> 00:19:43,364
Like, we wanted it to feel real time.

359
00:19:43,544 --> 00:19:49,264
Again, coming from these other solutions
that we had used ourselves like, it

360
00:19:49,264 --> 00:19:52,944
was a thing back in the day when, you
had to refresh the page in order to

361
00:19:52,944 --> 00:19:55,224
see if anybody else has updated it.

362
00:19:56,484 --> 00:19:58,718
It's kind of strange
that that was the case.

363
00:19:58,948 --> 00:20:01,828
There was no background push,
for most of these, these tools

364
00:20:02,268 --> 00:20:03,648
and everything was a page load.

365
00:20:03,878 --> 00:20:06,491
And you know, maybe a fourth
one was the speed as well.

366
00:20:06,501 --> 00:20:09,021
You could couple that with the
sort of native application.

367
00:20:09,131 --> 00:20:12,981
Like, speed of the app, like, I
mean, native application is fast.

368
00:20:13,276 --> 00:20:15,756
So, our web application
needed to be fast as well.

369
00:20:16,646 --> 00:20:20,146
And one concerning thing that,
happened, or not concerning, but a

370
00:20:20,226 --> 00:20:25,576
weird thing, was which relates to sort
of not trusting everybody's feedback.

371
00:20:25,876 --> 00:20:29,766
I, when we had an early prototype of
the application with the command menu

372
00:20:29,886 --> 00:20:33,256
and keyboard shortcuts, and it was
super fast and all that I showed it to

373
00:20:33,256 --> 00:20:38,031
a friend of mine in Finland when I was
here, here on vacation and you know,

374
00:20:38,031 --> 00:20:40,831
showed him all the, all the cool things
that I thought were super exciting.

375
00:20:40,841 --> 00:20:43,841
Like the, the, the quickness of
it and the real time aspect of it.

376
00:20:43,841 --> 00:20:45,811
I had two windows open
and then I changed here.

377
00:20:45,811 --> 00:20:46,651
It changed here.

378
00:20:47,141 --> 00:20:49,801
and, he was like, well,
I don't really get it.

379
00:20:49,841 --> 00:20:53,211
Like I, my current thing
is, is fast enough.

380
00:20:53,211 --> 00:20:54,751
Like I really don't need the speed.

381
00:20:54,781 --> 00:20:56,271
I don't really use keyboard shortcuts.

382
00:20:56,931 --> 00:20:58,191
Who needs that real time stuff?

383
00:20:58,641 --> 00:21:00,401
And I was devastated by that feedback.

384
00:21:00,401 --> 00:21:01,901
I was like, what the hell?

385
00:21:02,171 --> 00:21:04,611
Am I wrong or is my friend just wrong?

386
00:21:05,281 --> 00:21:06,571
It turns out my friend was wrong.

387
00:21:07,421 --> 00:21:10,931
And those three things are the
things that we're known for today.

388
00:21:11,661 --> 00:21:13,161
And that people appreciated the product.

389
00:21:13,191 --> 00:21:13,911
The quickness of it.

390
00:21:14,986 --> 00:21:19,046
The ability of using keyboard shortcuts to
do many, like, all operations effectively.

391
00:21:19,736 --> 00:21:22,446
Maybe not so the real time aspect,
like, nobody calls out the real time

392
00:21:22,446 --> 00:21:26,316
aspect of it, but I think that comes
as a given, like, in a modern time,

393
00:21:26,316 --> 00:21:30,306
you'd expect your application to be up
to date without you having to refresh.

394
00:21:30,586 --> 00:21:34,556
The page, it would have all kinds
of problems if it didn't do that.

395
00:21:35,106 --> 00:21:37,866
So, so yeah that's why, why I
started with the sync engine.

396
00:21:37,866 --> 00:21:43,186
Like, I'm thinking about a regular
sort of, startup story or a journey

397
00:21:43,186 --> 00:21:46,866
of a startup, like those are the
last things that you should do.

398
00:21:46,916 --> 00:21:50,846
Like, the common knowledge
is always, build a, quick and

399
00:21:50,846 --> 00:21:52,486
early MVP to try out your ideas.

400
00:21:52,971 --> 00:21:54,161
Get in front of users.

401
00:21:54,511 --> 00:21:58,641
And we spent like half a year building
out, the sync stack and the command

402
00:21:58,711 --> 00:22:00,711
menu and all this, all this stuff.

403
00:22:01,131 --> 00:22:03,901
And I think that was,
that was a great success.

404
00:22:03,901 --> 00:22:08,201
Like, it could have had a very different
outcome if you had just built an issue

405
00:22:08,201 --> 00:22:13,151
tracker before and then in the end, try
to sort of hinge in a sync engine or

406
00:22:13,456 --> 00:22:19,506
replace whatever we had built, as a REST
API, and put it into a Sync Engine stack.

407
00:22:19,846 --> 00:22:23,016
So I think we we totally did the
right thing, at least in hindsight

408
00:22:23,016 --> 00:22:27,616
of, focusing on, on sort of the tech
first and obviously the design as well.

409
00:22:27,616 --> 00:22:32,006
Like Kari jumped in and started doing,
designs and it took us some time to,

410
00:22:32,066 --> 00:22:34,076
get it right and, and make it work.

411
00:22:34,566 --> 00:22:37,216
But the first version that we
launched was already looking very

412
00:22:37,216 --> 00:22:38,796
much, of, of what we have today.

413
00:22:39,379 --> 00:22:45,469
I see so many parallels to also how
I intuitively tried to build Overtone

414
00:22:45,839 --> 00:22:50,919
the, the music app where I think
it was probably after I implemented

415
00:22:50,919 --> 00:22:55,549
like initial list of tracks and some
playlists where you could switch

416
00:22:55,569 --> 00:22:57,019
between those lists of tracks.

417
00:22:57,289 --> 00:23:01,139
I remembered, okay, I'm not going
to just click on those playlists.

418
00:23:01,669 --> 00:23:03,639
I have to use a command menu for that.

419
00:23:03,639 --> 00:23:08,673
So, I think also at some point  where I
just needed a break from, like, many of

420
00:23:08,673 --> 00:23:11,203
the more low level  harder SQLite things.

421
00:23:11,533 --> 00:23:16,103
I treated myself to implementing
that command menu and I haven't now

422
00:23:16,103 --> 00:23:20,893
attached it for two years and it just
works and makes the app feel so nice.

423
00:23:20,933 --> 00:23:24,693
And that's always like, it's one of
those features where someone sits

424
00:23:24,693 --> 00:23:27,873
next to you and he sees you using
that and it's like, Oh, what is that?

425
00:23:28,383 --> 00:23:31,843
And I think by now  it's
just shout's power tool.

426
00:23:32,388 --> 00:23:37,251
And also the other aspects that
you've mentioned that  qualify that

427
00:23:37,381 --> 00:23:42,051
high quality goal that you set for
software is like that native feel.

428
00:23:42,061 --> 00:23:46,961
Since I was also on a, on a similar fork
in the road, like how should I build this?

429
00:23:47,011 --> 00:23:51,291
And I think one very interesting path
could have been to say like, I'm,

430
00:23:51,361 --> 00:23:54,241
I'm a Mac OS user, I'm a iPhone user.

431
00:23:54,241 --> 00:23:54,721
So.

432
00:23:55,021 --> 00:23:59,001
Like being also led by building
things for myself, I could have

433
00:23:59,001 --> 00:24:03,581
selfishly just said, okay, I'm just
going to build this in Swift for

434
00:24:03,591 --> 00:24:06,781
Mac OS and for iOS and that's it.

435
00:24:07,351 --> 00:24:12,459
But then also with my web background,
I knew that was going to be extra

436
00:24:12,459 --> 00:24:18,679
hard to do it for the web, but the
distribution of the web is so powerful

437
00:24:18,719 --> 00:24:23,269
that it's probably going to worth that
effort, but that has like, what drew

438
00:24:23,269 --> 00:24:30,169
me to, Native macOS, native iOS, is
that like that notion of it's native

439
00:24:30,219 --> 00:24:31,979
and people ask like, Oh, is it native?

440
00:24:32,019 --> 00:24:34,769
And when you ask them, well,
what, what does it mean for you?

441
00:24:34,769 --> 00:24:38,529
It's kind of gets fuzzy very
quickly, but I think it's even more

442
00:24:38,879 --> 00:24:41,349
important that it should feel native.

443
00:24:41,789 --> 00:24:47,069
And building a web app that feels
native was always like a intuitive

444
00:24:47,089 --> 00:24:48,919
north star for me that I had to.

445
00:24:49,309 --> 00:24:50,769
Like pin down more and more.

446
00:24:50,769 --> 00:24:53,159
What does that actually mean for Overtone?

447
00:24:53,159 --> 00:24:58,579
For example, for Overtone, I have
decided that the cursor is actually not

448
00:24:58,579 --> 00:25:03,729
becoming a pointer on when you click on a
button, but it stays like a default one.

449
00:25:03,729 --> 00:25:07,489
I think this is one where I think
the internet is deeply divided

450
00:25:07,499 --> 00:25:08,719
whether they know it or not.

451
00:25:09,099 --> 00:25:13,919
But that, but I, I've like, I was
led a lot by Mac OS Finder as an

452
00:25:14,069 --> 00:25:16,979
inspiration for how an app should feel.

453
00:25:17,489 --> 00:25:21,239
And so this is where I spend a lot
of time just thinking about that

454
00:25:21,239 --> 00:25:23,119
and tweaking the little details.

455
00:25:23,699 --> 00:25:27,539
So this, this is a story about
the, the only time that we've, you

456
00:25:27,539 --> 00:25:29,906
know faltered,   in our judgment.

457
00:25:30,036 --> 00:25:35,151
We had, The pointer cursor in there
for every button that you had, like,

458
00:25:35,891 --> 00:25:39,641
your pointer would turn into a finger
and then we removed it because we're

459
00:25:39,641 --> 00:25:41,581
like, no native application uses that.

460
00:25:41,611 --> 00:25:42,671
It's the right thing to do.

461
00:25:43,491 --> 00:25:46,851
Our application, should feel native
as well, so it remains a pointer.

462
00:25:46,931 --> 00:25:48,311
We just highlight things underneath.

463
00:25:48,971 --> 00:25:52,501
And we shipped it, and, we had, we
didn't have too many users back then.

464
00:25:52,551 --> 00:25:54,701
So every feedback was important to us.

465
00:25:55,261 --> 00:26:00,581
And I remember this one user mailing
us in, like, literally, Maybe an hour

466
00:26:00,581 --> 00:26:05,451
later, after we shipped it, and his thing
was like, Linear has went from the best

467
00:26:05,451 --> 00:26:07,411
application in the world to the worst.

468
00:26:07,991 --> 00:26:12,611
Like, he was so unhappy with
us removing the finger pointer

469
00:26:13,081 --> 00:26:14,661
from there that we got scared.

470
00:26:14,661 --> 00:26:18,131
We were like, oh shit, like, did
we really do something that is

471
00:26:18,151 --> 00:26:20,091
ingrained in people's minds?.

472
00:26:20,091 --> 00:26:22,826
And there were a few other feedbacks
that we got from that as well.

473
00:26:23,106 --> 00:26:26,446
So we put in a preference where,
they could turn it, turn it on again.

474
00:26:27,146 --> 00:26:27,866
And it's still there.

475
00:26:27,886 --> 00:26:30,766
Like, if you search for your personal
preference, you can turn on the finger.

476
00:26:31,206 --> 00:26:34,026
And after that, you haven't
heard anybody do anything.

477
00:26:34,026 --> 00:26:37,106
It's just when you change things that
then people notice, but otherwise you

478
00:26:37,106 --> 00:26:41,326
come in and you don't really realize that,
something's off because it, it, from the

479
00:26:41,326 --> 00:26:43,646
get go feels like a like an application.

480
00:26:43,926 --> 00:26:45,776
And that's, that's totally the way to go.

481
00:26:45,836 --> 00:26:46,606
I love that.

482
00:26:47,236 --> 00:26:51,896
That, that is such a meta thing
to like pull out the, oh, let's

483
00:26:51,896 --> 00:26:54,796
make it a preference last resort.

484
00:26:55,146 --> 00:26:57,696
yeah, we should not have done that.

485
00:26:57,733 --> 00:27:00,373
we should have just stuck with
it and be like, no preference.

486
00:27:00,923 --> 00:27:01,753
It is what it is.

487
00:27:02,296 --> 00:27:10,176
So you've been talking before about sort
of like that the typical startup MVP and

488
00:27:10,226 --> 00:27:14,606
best example by the project management
where there's many project management

489
00:27:14,606 --> 00:27:17,166
tools is no longer really cutting it.

490
00:27:17,166 --> 00:27:21,146
And you've written a great blog post
about that, which will be put in the

491
00:27:21,156 --> 00:27:26,586
show notes called Rethinking the Startup
MVP, Building a Competitive Product.

492
00:27:26,966 --> 00:27:29,496
So in this article, you.

493
00:27:29,766 --> 00:27:35,236
outline that, yeah, the traditional way
of thinking about an MVP, where you just

494
00:27:35,266 --> 00:27:40,666
build something quickly, ship it quickly
is maybe no longer cutting it today.

495
00:27:41,046 --> 00:27:43,376
Can you dig in a little bit more?

496
00:27:44,126 --> 00:27:45,046
Yeah, sure.

497
00:27:45,106 --> 00:27:50,956
Cause it, it sort of was Was what we did
with Linear effectively like, yeah, so

498
00:27:51,266 --> 00:27:56,868
Eric Ries invented the MVP you know, ages
ago um, in a world where the internet

499
00:27:56,878 --> 00:28:00,458
has just came around and people were,
you know, didn't know really what would

500
00:28:00,678 --> 00:28:07,123
work and what didn't like, I, it's hard
to imagine that Airbnb was controversial

501
00:28:07,223 --> 00:28:11,359
back in the day, like when they went to
YC you know, they, they barely got in

502
00:28:11,409 --> 00:28:16,429
because, people were like, who, who wants
to invite strangers to your home and who

503
00:28:16,429 --> 00:28:18,349
would want to sleep at a stranger's home?

504
00:28:18,359 --> 00:28:19,849
Like, that's, that's a crazy idea.

505
00:28:20,191 --> 00:28:23,401
And in those cases, obviously, like
if you're, building out something that

506
00:28:23,401 --> 00:28:28,291
is, that is, completely new, where you
even don't know if the idea works, an

507
00:28:28,291 --> 00:28:30,381
MVP is a great, thing to test it out.

508
00:28:30,638 --> 00:28:35,248
But unfortunately, we don't find ourselves
in that situation anymore very often.

509
00:28:35,598 --> 00:28:40,378
Now, maybe with AI we might have a bit
more leeway in there, like there might

510
00:28:40,378 --> 00:28:44,321
be new things that come up that we
need to try out because we just don't

511
00:28:44,331 --> 00:28:45,531
know if people are comfortable with.

512
00:28:46,171 --> 00:28:48,551
Doing some of the, things
that will, will happen.

513
00:28:49,111 --> 00:28:52,151
But other than that, like it, most
of the time you find yourself in a

514
00:28:52,151 --> 00:28:56,001
space where you're already competing
with, with other people, like you're

515
00:28:56,381 --> 00:29:01,818
entering a space has already, you know,
incumbent applications or services

516
00:29:02,488 --> 00:29:04,308
and, and you need to somehow be better.

517
00:29:04,308 --> 00:29:07,328
Like, why would anybody use your product?

518
00:29:07,388 --> 00:29:08,598
if you enter that, then.

519
00:29:08,953 --> 00:29:13,083
Build something that is not as good,
which is effectively what an MVP is.

520
00:29:13,103 --> 00:29:15,563
It's a, it's a quick and
dirty hack to try things out.

521
00:29:15,593 --> 00:29:17,483
Like why would anybody jump over to you?

522
00:29:17,873 --> 00:29:19,633
if it's not better in any fashion.

523
00:29:19,693 --> 00:29:24,549
So there is an aspect of quality
that you need to have in order to be

524
00:29:24,549 --> 00:29:28,889
better at, at, doing an application or
service than the incumbent solutions.

525
00:29:29,509 --> 00:29:33,369
So you need to rethink, you know, what,
what it means to, to build out in that

526
00:29:33,369 --> 00:29:37,309
way and to build something, that can
compete with the rest of the world.

527
00:29:37,879 --> 00:29:41,179
And that is like how, I
think MVPs have changed.

528
00:29:41,699 --> 00:29:46,579
So if you think about a final
product after it has maybe seen

529
00:29:46,579 --> 00:29:50,709
10 years of investment, I think
there's sort of two axis, at least.

530
00:29:50,989 --> 00:29:57,249
One is the breadth of the functionality,
whether you have that many features, if

531
00:29:57,259 --> 00:30:02,099
you're thinking about like a product like
Linear, for example you've like added

532
00:30:02,099 --> 00:30:04,439
more and more features over the time.

533
00:30:04,799 --> 00:30:11,449
And another one is the depth and
the quality aspect to each of those.

534
00:30:11,799 --> 00:30:17,936
And so what you're inviting people to
think about and do is certainly increase

535
00:30:17,946 --> 00:30:20,576
more the effort on the qualitative side.

536
00:30:21,016 --> 00:30:26,196
But that also begs the question,
like, do you Just go for 10 years

537
00:30:26,196 --> 00:30:29,316
right away and like build up all
the features and then launch.

538
00:30:29,686 --> 00:30:33,686
Or if you can't do that to be
competitive with alternative existing

539
00:30:33,686 --> 00:30:39,276
products, then you kind of need to cut
down the scope significantly on the

540
00:30:39,286 --> 00:30:43,696
features that you and the functionality
that you initially launch with.

541
00:30:43,986 --> 00:30:47,426
So, and I think that's a really
interesting and challenging

542
00:30:47,426 --> 00:30:52,516
exercise so how did you wrestle
with like which features you pick?

543
00:30:52,816 --> 00:30:55,156
So ultimately you need to do both.

544
00:30:55,166 --> 00:30:58,696
Like you need to have the depth and
the breadth of features if you want

545
00:30:58,696 --> 00:31:00,886
to compete like at the large scale.

546
00:31:01,296 --> 00:31:03,786
But you know, then you run into the
problem, like you can't build it.

547
00:31:03,916 --> 00:31:07,576
You don't have 10 years to build
out a thing before you try it out.

548
00:31:08,026 --> 00:31:11,196
Well, Figma was a good example
that you have some leeway there.

549
00:31:11,216 --> 00:31:15,086
Like you can work on the technology
for four years and then ship it.

550
00:31:15,086 --> 00:31:17,286
And then actually, very quickly
find product market fit.

551
00:31:17,286 --> 00:31:18,336
So it is possible.

552
00:31:18,881 --> 00:31:19,811
to do it.

553
00:31:19,851 --> 00:31:22,971
And even like, they were
probably quite niche as well.

554
00:31:22,981 --> 00:31:25,691
Like it's just a design tool, right?

555
00:31:26,151 --> 00:31:27,031
How hard can it be?

556
00:31:27,031 --> 00:31:29,651
Like there's not many features
that you, that you need.

557
00:31:30,101 --> 00:31:33,361
But, but for us, it was like
obvious that we can't go after sort

558
00:31:33,361 --> 00:31:34,931
of, larger customers immediately.

559
00:31:34,961 --> 00:31:38,541
Like we needed to scope down
our set of functionalities

560
00:31:38,811 --> 00:31:40,381
and still find a consumer..

561
00:31:40,881 --> 00:31:43,551
Or a target customer that
would be happy with that.

562
00:31:43,931 --> 00:31:44,931
And for us, it was easy.

563
00:31:45,011 --> 00:31:47,391
And then, there might be
cases where it's harder.

564
00:31:47,681 --> 00:31:51,508
Like if you're trying to run, you
know, create a banking application,

565
00:31:51,748 --> 00:31:54,738
like, yeah, you need to build up
quite a bit of stuff in order.

566
00:31:55,203 --> 00:31:58,853
To be able to service even your first
customer, like you need a bank, and

567
00:31:58,853 --> 00:32:00,893
that is a pretty hefty undertaking.

568
00:32:01,443 --> 00:32:03,673
But for us, like, we found
this target customer, which

569
00:32:03,673 --> 00:32:05,433
is very, very small startups.

570
00:32:05,693 --> 00:32:10,043
Startups that have just been incubated,
that are maybe, 2, 3, 4 people

571
00:32:10,093 --> 00:32:12,263
large that go through YC maybe.

572
00:32:12,673 --> 00:32:13,683
What do they need?

573
00:32:13,773 --> 00:32:15,833
Like, they don't need
any project management.

574
00:32:15,933 --> 00:32:19,493
They, they don't need a lot of
functionality around labels.

575
00:32:19,503 --> 00:32:21,633
Like, they will have not too many tickets.

576
00:32:21,633 --> 00:32:25,143
Like, literally what they need is an issue
tracker, a way of just tracking a few

577
00:32:25,183 --> 00:32:26,953
things and then marking them as complete.

578
00:32:27,359 --> 00:32:28,759
And that is the first thing that we built.

579
00:32:29,089 --> 00:32:32,729
We built an issue tracker, and even on
our website said that, the issue tracker

580
00:32:32,759 --> 00:32:34,559
that you'll enjoy, you'll enjoy using.

581
00:32:34,979 --> 00:32:36,809
And I always hated that website.

582
00:32:37,049 --> 00:32:40,769
Like, I, whenever I went there, I was
like, no, this is not what we're building.

583
00:32:40,839 --> 00:32:44,229
We just have to lie to everybody
that we're doing it now, because you

584
00:32:44,229 --> 00:32:45,919
want to focus on the target segment.

585
00:32:45,973 --> 00:32:49,943
And the, the idea always was to sort
of, go and do project management.

586
00:32:50,393 --> 00:32:53,423
And even, even beyond project
management, because, we wanted

587
00:32:53,423 --> 00:32:55,853
to help companies be better at
building software, which encompasses

588
00:32:55,933 --> 00:32:57,813
literally everything in that space.

589
00:32:58,413 --> 00:33:00,683
But we had to start with
sort of the small customers.

590
00:33:00,683 --> 00:33:03,168
So that's what we focused on for
the, for the first few years.

591
00:33:03,858 --> 00:33:05,708
Just make an issue
tracker that works nicely.

592
00:33:05,798 --> 00:33:09,578
Start with small companies that were
super excited to give you feedback.

593
00:33:09,688 --> 00:33:12,738
Like startups are great because
like they, they know how it is,

594
00:33:12,798 --> 00:33:14,208
how hard it is to build a product.

595
00:33:14,208 --> 00:33:17,068
So they'll be happy to help,
help you build your product as

596
00:33:17,068 --> 00:33:18,458
well while they're using you.

597
00:33:19,058 --> 00:33:22,508
And so we had a lot of customers
that, gave us a lot of feedback,

598
00:33:22,748 --> 00:33:26,478
which we could always invite for a
Zoom call and just learn stuff from.

599
00:33:27,083 --> 00:33:29,733
then like the idea was to
gradually grow with them.

600
00:33:29,903 --> 00:33:33,306
Like we knew that, once we got those
customers, like it would probably

601
00:33:33,306 --> 00:33:36,946
stick around if we were able to, to,
to grow our feature set as they grew.

602
00:33:37,046 --> 00:33:40,796
And we knew they were growing, they
would raise seed round then, eventually

603
00:33:40,796 --> 00:33:43,946
a series A, like 50 people series B.

604
00:33:44,176 --> 00:33:47,036
So we, we said like, I think we
can build out the functionality

605
00:33:47,036 --> 00:33:50,536
of features that, that our initial
customers need as they grow.

606
00:33:51,069 --> 00:33:52,109
. And it's sort of a wrap.

607
00:33:52,109 --> 00:33:55,979
Like, we were able to have a few customers
that started very early with us that now

608
00:33:55,979 --> 00:33:59,329
are sort of pretty huge companies and
they've been sticking around with us for,

609
00:33:59,379 --> 00:34:02,469
for, for the entire duration and we've
been just building more stuff for them.

610
00:34:02,909 --> 00:34:05,929
And that enabled us to just
grow into larger customers.

611
00:34:06,429 --> 00:34:10,789
Starting to go into sort of, series
A companies and growth companies

612
00:34:10,789 --> 00:34:15,129
and now sort of eyeing not, not
yet the enterprise, I'll take, take

613
00:34:15,129 --> 00:34:18,469
some time more, but, established
companies and IPO companies.

614
00:34:18,879 --> 00:34:22,399
And that was sort of our strategy
to, build something of the highest

615
00:34:22,419 --> 00:34:26,903
quality but just reduce the scope
in the beginning so much because we

616
00:34:26,903 --> 00:34:30,143
were able to identify those target
customers that didn't need much.

617
00:34:30,873 --> 00:34:36,133
I think that's fantastic advice and a
great strategy how to go about picking

618
00:34:36,443 --> 00:34:41,913
the right narrow initial scope is not
to primarily think about like, Oh, which

619
00:34:41,923 --> 00:34:46,293
features should we build first, but
really starting out from like, okay.

620
00:34:46,598 --> 00:34:50,878
We are set on that we want
to have that rethought MVP.

621
00:34:50,888 --> 00:34:53,668
We want to aim really high
in terms of the quality.

622
00:34:53,698 --> 00:34:58,118
Otherwise, like, why do we even get
started in the competitive landscape?

623
00:34:58,118 --> 00:35:00,608
So that is, that is a fixed assumption.

624
00:35:00,898 --> 00:35:06,018
But then instead of thinking about which
feature do  we start first, is like, who

625
00:35:06,078 --> 00:35:08,738
as a customer segment do we start with?

626
00:35:09,088 --> 00:35:13,318
And that then implies the, the
kind of features that are most

627
00:35:13,318 --> 00:35:14,658
important to start out with.

628
00:35:15,198 --> 00:35:19,433
And I think that also aligns
Hopefully nicely with the way how

629
00:35:19,433 --> 00:35:24,399
you can also charge for the product
and build not just like a product

630
00:35:24,429 --> 00:35:26,659
that people use, but also pay for.

631
00:35:27,139 --> 00:35:30,409
And I'm not sure whether you got
lucky there, but it seems like

632
00:35:30,419 --> 00:35:34,619
things certainly lined up very
nicely for, for yourself there.

633
00:35:35,199 --> 00:35:41,149
And I think  One aspect as well to maybe
highlight there is that  you've been

634
00:35:41,149 --> 00:35:46,599
seen as the company that other companies
also aspire to as sort of a role model.

635
00:35:46,599 --> 00:35:52,173
And I think that fit nicely with also
your initial target customer segment.

636
00:35:52,813 --> 00:35:57,349
Yeah, I, know, obviously it's, it's
been mostly luck as with any startup.

637
00:35:57,599 --> 00:36:02,029
Like, we sort of stumbled into this way
of working cause we enjoyed ourselves.

638
00:36:02,039 --> 00:36:03,779
Like we want to build nice things.

639
00:36:04,319 --> 00:36:09,189
And we had the, the, the lack of
sort of, wanting to inspire people

640
00:36:09,209 --> 00:36:10,659
with, with our own products.

641
00:36:11,059 --> 00:36:13,629
That meant that we had to build
the company in a certain way.

642
00:36:13,689 --> 00:36:16,349
That meant that we had to.

643
00:36:16,366 --> 00:36:20,986
Sort of hire people that we could trust
to, not have to sort of look after them.

644
00:36:21,476 --> 00:36:23,766
Because again, we were a
remote company from the get go.

645
00:36:24,606 --> 00:36:29,086
And we wanted to make sure that, anybody
we hired was just so good that, we knew

646
00:36:29,086 --> 00:36:33,776
that they could do whatever without
literally, even talking to us if we

647
00:36:33,776 --> 00:36:37,843
went that way and just, you know, ship
something, something awesome which

648
00:36:37,873 --> 00:36:42,523
again meant that, we hired effectively
senior people not only that reason,

649
00:36:42,523 --> 00:36:46,763
but, the second reason was, was that
we didn't know how to mentor junior

650
00:36:46,763 --> 00:36:48,103
people in a remote environment.

651
00:36:48,203 --> 00:36:52,283
Like we were afraid that we
would be doing them a disservice.

652
00:36:52,553 --> 00:36:58,193
Like, hiring somebody who needs to learn
and hire them into a remote setting.

653
00:36:58,716 --> 00:37:03,156
We wouldn't know how to mentor them or
how to grow them, so therefore we didn't.

654
00:37:03,543 --> 00:37:06,813
And later on we sort of find out that,
it's actually pretty nice to having a

655
00:37:07,093 --> 00:37:13,222
very  senior team around you that you
just trust with building out the vision

656
00:37:13,222 --> 00:37:17,292
or even them having the same vision as
you do, being able to drive the product

657
00:37:17,292 --> 00:37:18,632
forward because they're good engineers.

658
00:37:18,632 --> 00:37:21,622
They know what they want from a,
a, initially issue tracker and

659
00:37:21,622 --> 00:37:22,762
then project management tool.

660
00:37:23,312 --> 00:37:27,922
And that also meant that, you know, we
were, it was hard for us to, to grow.

661
00:37:27,992 --> 00:37:33,032
Like, we wanted these, Overly qualified
people which were super hard to find.

662
00:37:33,032 --> 00:37:37,842
So we grew slowly and in the end, like,
we became profitable very quickly.

663
00:37:37,902 --> 00:37:41,853
I think two years in, we were
profitable not because we wanted to

664
00:37:41,853 --> 00:37:44,863
or because we needed to or because
that was the grandmaster plan.

665
00:37:44,943 --> 00:37:47,043
No, it was just, effectively luck.

666
00:37:47,353 --> 00:37:50,883
Because we did these things, we
grew so slowly and then the sort of

667
00:37:50,883 --> 00:37:52,673
revenue just overtook our expenses.

668
00:37:53,113 --> 00:37:57,463
And then like the downturn came and now
everybody was sort of wanting to be the

669
00:37:57,463 --> 00:37:59,193
Linear, like wanting to do the same thing.

670
00:37:59,203 --> 00:38:01,833
Everybody's looking at like,
where can we get profitable?

671
00:38:02,190 --> 00:38:05,000
We don't want to raise another
round or ineffectively do a

672
00:38:05,000 --> 00:38:06,630
down round in that scenario.

673
00:38:06,630 --> 00:38:06,940
So.

674
00:38:07,620 --> 00:38:10,850
Everybody started looking at
building things in a similar fashion.

675
00:38:10,850 --> 00:38:16,940
So I think there's there's a lot of luck
involved but also sort of, our passion

676
00:38:16,940 --> 00:38:20,680
and our backgrounds sort of directed
us to build out this company this way.

677
00:38:21,120 --> 00:38:22,610
And we're still on that route.

678
00:38:22,670 --> 00:38:26,780
Like we, we still go down the same
way, like we don't want to go through

679
00:38:26,780 --> 00:38:30,940
hyper growth and we will never,
yeah, we will never hyper grow.

680
00:38:31,020 --> 00:38:35,040
Like I've seen that at, at, at Uber,
Kari saw that in Airbnb Jori in

681
00:38:35,170 --> 00:38:39,890
Coinbase, I don't think anybody of
us, really, Enjoyed that experience.

682
00:38:39,890 --> 00:38:43,473
It was nice to see once but, we
don't want to go through that again.

683
00:38:43,533 --> 00:38:46,963
Like, we want a product team that
is excited to building something

684
00:38:46,963 --> 00:38:50,833
great and not just sort of a, cog in
the big wheel of, working on some,

685
00:38:51,053 --> 00:38:55,013
remote infrastructure piece that
maybe gets open sourced one day.

686
00:38:56,173 --> 00:38:59,843
We want to make sure that, know, people
who build Linear are sort of, they're,

687
00:38:59,873 --> 00:39:05,020
they're craftsmen that, enjoy building
something beautiful and, want to see

688
00:39:05,020 --> 00:39:09,840
their work out there, and hopefully,
are and can be proud of what they ship.

689
00:39:10,408 --> 00:39:14,388
So even though that's very humble
of you saying most of it has

690
00:39:14,388 --> 00:39:18,605
been luck there is this this nice
quote, which I think goes along the

691
00:39:18,605 --> 00:39:20,865
lines of luck favors the prepared.

692
00:39:21,251 --> 00:39:24,331
and I think there's a lot
of intentionality also that

693
00:39:24,351 --> 00:39:26,021
went into building Linear.

694
00:39:26,241 --> 00:39:30,907
I think it's always like this dance
between open ended experimentations,

695
00:39:30,917 --> 00:39:33,337
like seeing, Oh, this is actually great.

696
00:39:33,587 --> 00:39:36,707
And then that becoming like a
strong intention of like, Oh,

697
00:39:36,707 --> 00:39:38,447
this is, this is who we are.

698
00:39:38,727 --> 00:39:43,607
So, and I think you've probably maybe
got lucky and like, like found a few

699
00:39:43,607 --> 00:39:46,527
things that you think, Oh, this is
actually, we should really do that.

700
00:39:46,577 --> 00:39:49,907
But then you also embrace that
and some companies call those

701
00:39:49,917 --> 00:39:51,727
like values or principles.

702
00:39:51,990 --> 00:39:56,660
I think quality is certainly like
a strong aspect there, but have you

703
00:39:56,660 --> 00:39:59,760
ever like formalized this in some way?

704
00:39:59,760 --> 00:40:03,220
Or if you bring on someone new to
the company who hasn't been around

705
00:40:03,530 --> 00:40:07,877
over the years, how do you tell them
like, Hey, this is who we are, how

706
00:40:07,877 --> 00:40:12,027
we do things, particularly given that
you give people so much autonomy?

707
00:40:12,608 --> 00:40:12,948
Yeah.

708
00:40:12,948 --> 00:40:17,545
Um, We, like, we just had our offsite in,
in Mexico where we, flew the whole team

709
00:40:17,545 --> 00:40:23,525
in, and Kari was preparing some slides
and, we've been talking about having,

710
00:40:23,575 --> 00:40:26,525
some sort of, value statement or values
of the company and a vision statement.

711
00:40:26,778 --> 00:40:29,648
And we never did it because we
always felt that like all the values

712
00:40:29,648 --> 00:40:31,808
of companies are somewhat fake.

713
00:40:31,918 --> 00:40:32,628
Like they.

714
00:40:33,157 --> 00:40:35,537
just tell what they want the
company to be, but not really

715
00:40:35,547 --> 00:40:36,670
what the company is, right?

716
00:40:36,783 --> 00:40:38,743
Which never felt good to us as Finns.

717
00:40:38,753 --> 00:40:40,433
Like we don't want to
lie about things like.

718
00:40:40,903 --> 00:40:41,933
We're honest people.

719
00:40:42,043 --> 00:40:46,303
So, again, we didn't go down the
vision or, the values route and we said

720
00:40:46,313 --> 00:40:47,713
like, ah, let's not have any values.

721
00:40:48,003 --> 00:40:51,993
So Kari started working on slides to
sort of, show everybody how we got here

722
00:40:52,033 --> 00:40:56,813
and what we've done, over the past five
years in order to, get to this place.

723
00:40:57,628 --> 00:41:01,158
And he had like, five things that
he pointed out that, that, that

724
00:41:01,158 --> 00:41:04,728
we had done and showed that slide
deck to, to, to somebody on the

725
00:41:04,728 --> 00:41:08,758
team and that team member was like,
huh, these look like values to me.

726
00:41:09,762 --> 00:41:13,268
um, so we were like, yeah, I'm,
I, I guess they are values now.

727
00:41:13,358 --> 00:41:16,658
And our values are literally based
on, on, What we've done in the past

728
00:41:16,818 --> 00:41:18,398
and what we want to continue doing.

729
00:41:18,988 --> 00:41:20,908
And yeah, there's a small, small set.

730
00:41:20,908 --> 00:41:22,168
Like the first one is trust.

731
00:41:22,178 --> 00:41:24,758
Like we, we've always
trusted our engineers.

732
00:41:25,208 --> 00:41:28,468
We've made sure that we hire
people that, can work on their own,

733
00:41:28,518 --> 00:41:31,558
that can sort of bring something,
something into, into the company.

734
00:41:32,108 --> 00:41:36,798
And we want to be open in, in, in our
doings and we are open in our doings.

735
00:41:36,848 --> 00:41:39,618
And secondly, we've always built sort
of with the customer in mind with

736
00:41:39,658 --> 00:41:43,495
hiring or, building our functionality
by asking customers what they need.

737
00:41:43,895 --> 00:41:48,865
So customer focus is one of the things
that we've been doing, which is now

738
00:41:48,895 --> 00:41:52,762
a value of ours, not building things
in isolation and making sure that

739
00:41:52,892 --> 00:41:55,642
we built something for our customers
and that we built something that,

740
00:41:55,922 --> 00:41:58,062
people, people value and people need.

741
00:41:58,562 --> 00:42:02,758
Um, And it gets more, important as, as,
you grow higher and you start working

742
00:42:02,758 --> 00:42:06,888
for functionality that, you wouldn't
necessarily use yourself like for PMs

743
00:42:06,908 --> 00:42:09,538
or CEOs and CTOs at larger companies.

744
00:42:10,048 --> 00:42:15,025
The third thing that sort of came out of
how we, built the tool, like, we were sort

745
00:42:15,025 --> 00:42:17,705
of opinionated about, what we want to do.

746
00:42:18,185 --> 00:42:21,855
We didn't want to have that,
like, we, it wasn't really a great

747
00:42:21,855 --> 00:42:23,225
value to have to be opinionated.

748
00:42:23,225 --> 00:42:24,775
That sort of sounds a bit negative.

749
00:42:25,238 --> 00:42:28,583
But what we, what we've turned it into
is like, we built purpose built tools.

750
00:42:28,843 --> 00:42:32,693
tools, like we built for a
specific purpose, for a specific

751
00:42:32,693 --> 00:42:33,883
target customer in mind.

752
00:42:34,443 --> 00:42:37,043
We want to, build software
for software companies.

753
00:42:37,483 --> 00:42:40,283
And if you stick with that, then
we can build an excellent user

754
00:42:40,283 --> 00:42:41,973
experience and excellent functionality.

755
00:42:42,353 --> 00:42:45,563
If you start diverging and building
everything for everybody, then, you sort

756
00:42:45,563 --> 00:42:49,870
of diluting, the aspects of the core of
your application and it usually becomes.

757
00:42:50,230 --> 00:42:52,120
Less usable or less great.

758
00:42:52,620 --> 00:42:54,530
And then, the fourth one being quality.

759
00:42:54,590 --> 00:42:59,780
We've always, wanted to build a high
quality product and, put so much effort

760
00:42:59,780 --> 00:43:04,640
into making sure that, everything is
It's great and working and works fast and

761
00:43:05,060 --> 00:43:06,680
all the small details are taken care of.

762
00:43:06,690 --> 00:43:10,620
And if you do all of these things
well, then you inspire people.

763
00:43:10,680 --> 00:43:12,890
And that's sort of the last
thing that we wanted to do.

764
00:43:12,930 --> 00:43:15,410
Like, we wanted to, be a
company that helps companies

765
00:43:15,410 --> 00:43:16,500
be better at building software.

766
00:43:17,060 --> 00:43:19,670
And we think that
inspiration is part of it.

767
00:43:19,710 --> 00:43:22,870
Like, inspire people with the
quality product that you've built

768
00:43:22,870 --> 00:43:27,180
for them and make them want to
build an equally great experience.

769
00:43:27,740 --> 00:43:33,260
From what I can tell from the outside
that all rings true and sounds very

770
00:43:33,280 --> 00:43:38,363
authentic that's more of an assessment
of how I perceive Linear then.

771
00:43:38,373 --> 00:43:41,603
So I, I think you've met
your, you've reached your bar

772
00:43:41,613 --> 00:43:43,043
of like that not being fake.

773
00:43:43,508 --> 00:43:44,928
But very authentic.

774
00:43:45,248 --> 00:43:50,238
And I love how that is like also in
terms of the yeah, that the craft

775
00:43:50,258 --> 00:43:53,778
of everything you're doing, how
that's also rooted in the quality.

776
00:43:54,098 --> 00:43:58,638
And I think becomes like a core
pillar of how the next generational

777
00:43:58,638 --> 00:43:59,828
product should be built.

778
00:43:59,828 --> 00:44:04,278
So maybe taking one quick step back
to the blog post you've written

779
00:44:04,278 --> 00:44:07,378
about the rethinking the startup MVP.

780
00:44:07,378 --> 00:44:12,148
Do you have a take on what
is the rethought startup MVP?

781
00:44:12,148 --> 00:44:16,158
Is there like a new three letter acronym
that people should use in the future?

782
00:44:16,872 --> 00:44:20,580
No, I, I, you know, I, I don't
think there should be a three

783
00:44:20,580 --> 00:44:22,030
letter word for any of this.

784
00:44:22,050 --> 00:44:24,686
Like it'll really depend
on what you're building.

785
00:44:24,766 --> 00:44:28,346
But you know, it is about
competing in an existing market.

786
00:44:28,951 --> 00:44:30,641
Like, and being better at something.

787
00:44:31,461 --> 00:44:34,291
What that something is, it
might be literally anything.

788
00:44:34,451 --> 00:44:36,341
But yeah, you need to
be better at something.

789
00:44:36,421 --> 00:44:39,041
Like, you can't just throw things
at the ball and see what sticks

790
00:44:39,691 --> 00:44:43,371
because, the ball is already covered
with, with all kinds of things.

791
00:44:43,451 --> 00:44:46,661
And people will just not, notice
you or do anything about it.

792
00:44:47,451 --> 00:44:52,071
So what sort of advice would you
have for builders and founders,

793
00:44:52,101 --> 00:44:56,461
people who want to build those next
generational high quality products?

794
00:44:56,741 --> 00:45:01,971
What of the traditional wisdom,
startup wisdom still applies?

795
00:45:02,281 --> 00:45:07,701
So you mentioning sort of the, the
hyperscaling maybe is no longer an

796
00:45:07,701 --> 00:45:10,941
attractive ingredient to, to get there.

797
00:45:11,211 --> 00:45:16,381
what would you recommend as like, what
to focus on and what to be careful with?

798
00:45:17,075 --> 00:45:21,835
in, in order at least to get started,
like, I think the most important thing

799
00:45:21,895 --> 00:45:26,365
to do is to, scope down and find,
find a target segment that you can

800
00:45:27,010 --> 00:45:28,870
deliver something competitive for.

801
00:45:29,380 --> 00:45:32,640
Again, like we've talked about not being
able to build everything for everybody.

802
00:45:32,640 --> 00:45:38,000
So it's important if you can find
a way to sculpt a new product and

803
00:45:38,000 --> 00:45:39,480
then, put something that people need.

804
00:45:39,860 --> 00:45:43,580
If you find something that, is
a pain point for those users you

805
00:45:43,700 --> 00:45:44,810
immediately have a following.

806
00:45:44,860 --> 00:45:47,895
You can You know, sort of,
build out a nice waitlist.

807
00:45:47,915 --> 00:45:50,545
And then with that waitlist,
you can, you can iterate on

808
00:45:50,545 --> 00:45:51,935
your product and make it better.

809
00:45:51,935 --> 00:45:55,065
Like you're, you have a waitlist
and you have five users selected

810
00:45:55,065 --> 00:45:57,825
probably for that waitlist or
maybe from your friends and you're

811
00:45:57,825 --> 00:45:59,655
iterating with them to make it better.

812
00:45:59,715 --> 00:46:02,135
And then you're happy when
they have no feedback anymore.

813
00:46:02,715 --> 00:46:06,005
Then you go to your waitlist, you
invite a few others to see if, they

814
00:46:06,005 --> 00:46:08,975
have new ideas of what you could
build and how you could do things.

815
00:46:09,405 --> 00:46:12,765
So building things with, your
customers is , it has been done

816
00:46:12,785 --> 00:46:14,505
obviously already, with startups.

817
00:46:14,505 --> 00:46:17,425
Like that has been the wisdom
so far and that hasn't changed.

818
00:46:17,955 --> 00:46:21,535
Like use your customers and use your,
waitlist users to, iterate on the

819
00:46:21,535 --> 00:46:24,845
product to make it better until you're
sort of ready to sort of go public

820
00:46:24,845 --> 00:46:26,765
and have everybody have a go at it.

821
00:46:29,585 --> 00:46:32,635
Hyperscaling, like, obviously comes
to mind when you're competing against

822
00:46:32,635 --> 00:46:38,805
somebody, like, Uber, it was, like obvious
that, and the story of Uber is sort of

823
00:46:38,805 --> 00:46:43,385
sad as well, like, how it all went down,
but obviously, like, in the end, it turned

824
00:46:43,385 --> 00:46:49,515
out good, but, being, being in Uber during
that hyperscale time was pretty harsh.

825
00:46:49,755 --> 00:46:53,725
Like you have, you, you started
off with building out a, prototype.

826
00:46:54,215 --> 00:46:57,435
Like there was an iOS application
that was a shitty backend that,

827
00:46:57,455 --> 00:47:00,165
I don't even know what it was
written in, but it wasn't great.

828
00:47:00,785 --> 00:47:04,265
And then it started taking off a few
users in San Francisco started using

829
00:47:04,275 --> 00:47:05,865
it, more black cars came available.

830
00:47:06,555 --> 00:47:10,145
And the, the thing where, when Uber
took off was like when effectively

831
00:47:10,475 --> 00:47:13,715
sort of Lyft invented the model
of, okay, let's have normal.

832
00:47:14,750 --> 00:47:17,150
People drive their own
cars and be the driver.

833
00:47:18,050 --> 00:47:20,470
And suddenly you realize
that's the way to go.

834
00:47:20,870 --> 00:47:22,670
And now immediately
they're in a competition.

835
00:47:22,680 --> 00:47:26,030
So now they have to get some
money in and start scaling and

836
00:47:26,240 --> 00:47:27,810
start conquering some areas.

837
00:47:28,203 --> 00:47:29,813
And your infrastructure is still horrible.

838
00:47:30,233 --> 00:47:31,743
You haven't built out any of the stuff.

839
00:47:31,913 --> 00:47:34,703
You were just trying things out and
your application looks horrible.

840
00:47:34,953 --> 00:47:36,573
And now you're suddenly having to run.

841
00:47:37,218 --> 00:47:38,978
And it takes off.

842
00:47:39,048 --> 00:47:42,078
And suddenly you've got tons
of users coming in and you have

843
00:47:42,078 --> 00:47:43,108
to scale your infrastructure.

844
00:47:43,108 --> 00:47:46,078
So you have to hire people as quickly
as you can in order to just keep the

845
00:47:46,078 --> 00:47:48,208
flames, not reach the outer walls.

846
00:47:48,598 --> 00:47:53,288
And, two years later, when, when you've
grown rapidly you, you end up with sort

847
00:47:53,288 --> 00:47:55,098
of having an infrastructure that is just.

848
00:47:55,488 --> 00:47:57,360
Coals and ash.

849
00:47:57,360 --> 00:48:01,834
Your team is burned out because they
had to fight fires the entire time.

850
00:48:01,834 --> 00:48:05,598
And then you have to sort of replace
that whole thing while you're

851
00:48:05,598 --> 00:48:07,208
still serving all the customers.

852
00:48:07,708 --> 00:48:13,613
And, the weird thing was, and I, When
I left Uber, they had started already

853
00:48:13,693 --> 00:48:17,553
sort of redoing much of that, that core
infrastructure, and they were still at

854
00:48:17,553 --> 00:48:21,223
it like four years later, like we're
still replacing the core bits of it.

855
00:48:21,603 --> 00:48:26,276
So it's, it's, it's horribly time
consuming to scale something up

856
00:48:26,276 --> 00:48:27,706
quickly if you're not prepared to it.

857
00:48:28,146 --> 00:48:31,616
if you cannot do that, then I think
you're in a much better, better place.

858
00:48:32,166 --> 00:48:36,876
So that's what we've done, and that, is
what I would suggest people, if they're,

859
00:48:36,976 --> 00:48:41,316
able, like, obviously,  you need some
money, and you need to have a bit of

860
00:48:41,316 --> 00:48:46,546
luck as well in order to, sort of, get
initial customer interest and maybe a

861
00:48:46,546 --> 00:48:49,956
VC invest in you so that you can sort
of build it out a bit more slowly.

862
00:48:50,346 --> 00:48:54,536
But our take on infrastructure and
the backend always has been to sort

863
00:48:54,536 --> 00:48:58,096
of preemptively build everything so
that, we're prepared for the growth.

864
00:48:58,546 --> 00:49:00,156
We know where the next bottlenecks are.

865
00:49:00,486 --> 00:49:03,336
We might know that, a year from now,
like, this thing won't scale anymore.

866
00:49:03,456 --> 00:49:07,436
So we started working on it early on so
that we can sort of put implementations

867
00:49:07,466 --> 00:49:13,296
in place that, Just work and it will sort
of, , work nicely and are architected well

868
00:49:13,686 --> 00:49:15,706
so that no surprises come, come along.

869
00:49:16,421 --> 00:49:17,861
I think that's a nice segue.

870
00:49:17,861 --> 00:49:21,901
And we've been mostly covering sort
of like the, the more cultural aspects

871
00:49:21,911 --> 00:49:27,081
of Linear so far, given this is the
local-first podcast where we haven't

872
00:49:27,081 --> 00:49:31,491
yet talked too much except for the
beginning about syncing, et cetera.

873
00:49:31,491 --> 00:49:35,111
And I don't think we need to spend
another hour and hour going all

874
00:49:35,121 --> 00:49:38,891
the way there, but maybe just
briefly connecting the dots there.

875
00:49:38,951 --> 00:49:40,181
I think the reason.

876
00:49:40,364 --> 00:49:44,444
that what gives you this competitive
advantage allows you to build that high

877
00:49:44,444 --> 00:49:51,294
quality product is that you have laid that
foundation with the, the sync engine that

878
00:49:51,384 --> 00:49:57,866
takes out of like the, the picture, the
entire complexity nightmare that, moving

879
00:49:57,876 --> 00:50:00,636
data from A to B and back to A can be.

880
00:50:00,956 --> 00:50:05,556
And so you've solved that and like
on your shoulders of Giant, now

881
00:50:05,556 --> 00:50:09,786
the, the the, the product can be
built by people who don't have all

882
00:50:09,786 --> 00:50:12,036
of that knowledge of data syncing.

883
00:50:12,076 --> 00:50:16,366
And I think that is like a superpower
that enables new products like Linear.

884
00:50:17,071 --> 00:50:17,401
Yeah.

885
00:50:17,811 --> 00:50:20,971
I mean, I do have a talk
on, your conference on that.

886
00:50:20,991 --> 00:50:23,131
It's, it's probably
available on YouTube as well.

887
00:50:23,501 --> 00:50:26,951
If you want to, if you want to check it
out and put it into the, I don't know,

888
00:50:26,951 --> 00:50:28,741
notes for this, this, this podcast.

889
00:50:28,771 --> 00:50:32,276
But yeah, in short, like, The
initial idea of the sync engine was

890
00:50:32,276 --> 00:50:34,226
not to make it developer friendly.

891
00:50:34,256 --> 00:50:36,256
That sort of happened as an afterthought.

892
00:50:36,256 --> 00:50:40,933
And that was, in my mind, maybe the
more more important aspect in the end.

893
00:50:41,043 --> 00:50:45,203
Like, we wanted it to be fast and support
offline mode and enable, the application

894
00:50:45,203 --> 00:50:49,673
to be quick and that is important, but
what we found out what, what we like even

895
00:50:49,673 --> 00:50:54,683
more was that engineers would be able
to just ship features much, much faster

896
00:50:55,233 --> 00:51:00,143
without having to think about a vast,
area of, of A functionality that usually

897
00:51:00,143 --> 00:51:03,943
takes quite a bit of time, which is sort
of error handling or networking, waiting

898
00:51:03,943 --> 00:51:07,973
for things to come back, supporting
two different code paths for like when

899
00:51:07,973 --> 00:51:12,273
you make your local changes versus when
somebody else makes those edits for you.

900
00:51:12,783 --> 00:51:16,373
It's all abstracted away so that you
don't need to think about these things.

901
00:51:16,636 --> 00:51:19,416
And it works for certain
kinds of applications.

902
00:51:19,966 --> 00:51:23,996
Definitely not all like if you're
building, something that has, a lot of

903
00:51:23,996 --> 00:51:26,996
information or building a search engine
and obviously not, like, you need to be

904
00:51:26,996 --> 00:51:31,236
able to have that data locally or pretty
close to your, to your clients and be able

905
00:51:31,236 --> 00:51:34,636
to sort of fetch the pieces that you see
on screens and then keep them up to date.

906
00:51:35,186 --> 00:51:37,056
But for anything that
resembles an application.

907
00:51:37,496 --> 00:51:41,526
That has sort of a limited set of data,
and that data piece can, like, the

908
00:51:41,526 --> 00:51:44,206
amount of data that you have in the
whole application can be large, but it

909
00:51:44,246 --> 00:51:48,036
still needs to be limited to, what you
can browse at a , given point in time.

910
00:51:48,466 --> 00:51:51,296
And then this model just
works absolutely beautifully.

911
00:51:51,446 --> 00:51:51,806
And.

912
00:51:52,405 --> 00:51:55,535
I sort of had this inkling at Uber
already, like, I don't want to

913
00:51:55,535 --> 00:51:59,235
build anything in the traditional
sort of networking model anymore.

914
00:51:59,235 --> 00:52:03,785
Like, I think sort of sync is such a
better user or developer experience.

915
00:52:04,205 --> 00:52:09,325
And, and the Linear, like, it's, it's
clear that, I, I, I, well, I won't ever

916
00:52:09,335 --> 00:52:14,345
have a job after Linear, but, if I did,
I, I, I would not work in any other way

917
00:52:14,345 --> 00:52:16,155
than just doing a sync engine again.

918
00:52:16,155 --> 00:52:20,043
I'm working in this environment
because it just makes the, yeah, the

919
00:52:20,043 --> 00:52:22,473
developer experience so much faster
and you can just ship functionality.

920
00:52:22,513 --> 00:52:27,443
Like, the easiest way to think about
it is to literally say that, you're

921
00:52:27,443 --> 00:52:29,153
effectively just building the front end.

922
00:52:29,653 --> 00:52:33,053
You have, data in memory, you've got
data objects, which you render on screen.

923
00:52:33,633 --> 00:52:35,903
Then you modify those and that's it.

924
00:52:36,093 --> 00:52:37,033
Your feature is done.

925
00:52:37,738 --> 00:52:40,488
Everything else is handled,
the synchronization, other

926
00:52:40,488 --> 00:52:41,978
users making the same edits.

927
00:52:42,271 --> 00:52:45,451
There's nothing else you need to
do in order to build a feature.

928
00:52:45,451 --> 00:52:48,451
You just build the frontend and
you're done with your entire feature.

929
00:52:49,021 --> 00:52:50,411
And that's pretty powerful.

930
00:52:51,285 --> 00:52:57,595
And I think that also like empowers the
already capable front end developers

931
00:52:57,655 --> 00:53:04,045
even further, since I think so far
in this more traditional three tier

932
00:53:04,115 --> 00:53:07,605
web app where you have your, your
front end that you're building.

933
00:53:07,605 --> 00:53:12,785
And then somehow like you're doing your,
your fetches or RPC calls, et cetera.

934
00:53:13,095 --> 00:53:16,645
But then you also need to worry about
like, okay, sorry, I need to serialize a

935
00:53:16,645 --> 00:53:19,135
bit of data over there, send it over here.

936
00:53:19,325 --> 00:53:21,015
Now I need to do something there.

937
00:53:21,015 --> 00:53:22,019
And like, Oh, what if.

938
00:53:22,160 --> 00:53:24,770
This now changes and I
need to send this back.

939
00:53:25,110 --> 00:53:30,870
If we can take that entire part out of
the picture and front end developers are

940
00:53:30,990 --> 00:53:34,650
only dealing with like the, the client
side state management, and that's it.

941
00:53:34,950 --> 00:53:40,120
And then either you have, you're
relying on like a external sync engine

942
00:53:40,130 --> 00:53:44,410
that already works super well for you
and you just need to integrate it, or

943
00:53:44,420 --> 00:53:49,621
you have the luxury of having someone
like yourself in a team who builds

944
00:53:49,621 --> 00:53:55,251
your own, runs it, et cetera, which
I think will be not always required.

945
00:53:55,321 --> 00:54:00,578
I think  the better the off the shelf
sync engines will get the more products

946
00:54:00,578 --> 00:54:02,178
can already be built with that.

947
00:54:02,613 --> 00:54:06,393
And I think someone like yourself
will rather be needed when a

948
00:54:06,393 --> 00:54:10,373
product really diverges from
that, from that standard path.

949
00:54:10,813 --> 00:54:15,683
And so I would probably say that
maybe in a couple of years from now,

950
00:54:15,873 --> 00:54:19,863
you could probably build something
like Linear in terms of like the

951
00:54:19,873 --> 00:54:24,793
data syncing capabilities with like
something like automerge, et cetera.

952
00:54:24,813 --> 00:54:25,383
Some of those.

953
00:54:25,768 --> 00:54:30,308
Upcoming sync engines, and then
it's probably rather a matter of can

954
00:54:30,318 --> 00:54:35,338
it also handle all of the scaling
patterns and the extra user experience

955
00:54:35,338 --> 00:54:37,808
patterns that you want to really nail.

956
00:54:38,265 --> 00:54:42,545
I want to give an example of,
like, how hard RPC actually is.

957
00:54:42,785 --> 00:54:46,085
Because I don't think people
understand, like, before they've tried

958
00:54:46,085 --> 00:54:49,605
it out and then run into these edge
cases, which always are edge cases.

959
00:54:49,625 --> 00:54:53,555
But once you run into them, you're
like, oh, shit, what do I do now?

960
00:54:53,565 --> 00:54:55,755
You need to rethink your
entire architecture in order

961
00:54:55,755 --> 00:54:56,965
to make that, make that work.

962
00:54:56,975 --> 00:55:01,340
So A simple example, you've got,
some sort of model object and it

963
00:55:01,350 --> 00:55:05,659
has two properties, and the user
makes a change to those properties

964
00:55:05,659 --> 00:55:07,619
and sends it out as an RPC call.

965
00:55:08,109 --> 00:55:11,989
And you're also connected with a WebSocket
to receive changes that other people do.

966
00:55:12,999 --> 00:55:16,569
Now, you send out the RPC call and
wait for sort of acknowledgement

967
00:55:16,579 --> 00:55:19,943
for the server um, that, you
know, everything was applied fine.

968
00:55:20,593 --> 00:55:24,713
While that's going on, you receive a
packet that, another user updated a

969
00:55:24,713 --> 00:55:26,463
certain property on that model object.

970
00:55:27,278 --> 00:55:27,918
What do you do?

971
00:55:28,678 --> 00:55:32,968
Like, and that becomes a really, really
hard problem because suddenly, like,

972
00:55:33,108 --> 00:55:35,328
you, you really don't know what to do.

973
00:55:35,338 --> 00:55:38,308
Like, you can't rely just on
that RPC call coming back.

974
00:55:38,733 --> 00:55:42,613
Because, again, your backend has
multiple servers on it, so you can't

975
00:55:42,653 --> 00:55:44,383
rely on the timing of these things.

976
00:55:44,393 --> 00:55:48,873
It's not just, one single server
running things, you know, serially.

977
00:55:48,913 --> 00:55:51,993
It's multiple servers writing to
the database, and then somebody is

978
00:55:51,993 --> 00:55:55,818
able to sort of send you a message,
and the RPC call might go through.

979
00:55:56,628 --> 00:56:00,418
have already been sent but hasn't reached
you yet because the network is slow.

980
00:56:00,751 --> 00:56:04,371
So when you receive that RPC
code, you don't know if all the

981
00:56:04,371 --> 00:56:06,061
values in there are up to date.

982
00:56:06,301 --> 00:56:10,401
And now you need to figure out what to do
with the updates for that model object.

983
00:56:11,191 --> 00:56:14,651
And when you realize that, you're
like, Yeah, I effectively need

984
00:56:14,651 --> 00:56:17,741
to implement another sync engine
in order to make that happen.

985
00:56:17,771 --> 00:56:19,351
There needs to be a queue of sorts.

986
00:56:19,611 --> 00:56:21,611
And it becomes very, very complex.

987
00:56:22,336 --> 00:56:22,916
It's funny.

988
00:56:22,916 --> 00:56:28,276
So like, it's a sort of a boiling frog
situation where you start out with like

989
00:56:28,276 --> 00:56:34,056
your, your blissfully ignorant happy
path of just like doing a fetch call

990
00:56:34,106 --> 00:56:39,036
to your backend and like, you get your
data back and you test this on localhost

991
00:56:39,056 --> 00:56:43,646
with like your one client over there and
your locally running server over there.

992
00:56:43,991 --> 00:56:49,021
And like, everything just works and like
you ship the feature, like  you mark the

993
00:56:49,051 --> 00:56:55,251
issue as done on, on Linear, but then as
it goes on production and like multiple

994
00:56:55,261 --> 00:57:00,181
users hit it, you get some really cryptic
error messages that you, you even have a

995
00:57:00,181 --> 00:57:04,251
super hard time replicating that locally
and you, you've spent hours on it.

996
00:57:04,351 --> 00:57:07,821
Hours and hours and days and days,
like reading through log messages.

997
00:57:07,821 --> 00:57:11,621
Oh, we realized I actually, we don't have
the right log messages for that in place.

998
00:57:11,861 --> 00:57:16,071
So you'll need to spend another two
weeks shipping that until you've like,

999
00:57:16,071 --> 00:57:20,861
finally have all of like the signal that
you pull out of the giant bag of noise.

1000
00:57:21,296 --> 00:57:25,136
To finally, like, have at
least some confirmation of

1001
00:57:25,176 --> 00:57:26,689
that  something is going wrong.

1002
00:57:27,079 --> 00:57:31,259
And once you have that hypothesis
to even replicate it locally that's

1003
00:57:31,369 --> 00:57:33,989
already takes heaps and heaps of time.

1004
00:57:34,029 --> 00:57:40,729
And then, like, The way how you pull
yourself out of that is by step by step,

1005
00:57:41,349 --> 00:57:46,929
applying changes that will ultimately lead
you to a sync engine, but that's such a

1006
00:57:46,959 --> 00:57:49,829
painful and inefficient way to get there.

1007
00:57:50,269 --> 00:57:54,609
I think it's, primarily probably
a problem to get, get us from.

1008
00:57:54,909 --> 00:58:00,029
A to B, like A being the status quo
of the world right now, where like

1009
00:58:00,039 --> 00:58:05,319
everything is built with the sort of RPC
ish way to B where most products where

1010
00:58:05,319 --> 00:58:09,899
it's a good fit are built with sync
engines is probably just that instilled

1011
00:58:10,169 --> 00:58:15,279
tribe knowledge that by now like all
the technologies are sort of like.

1012
00:58:15,779 --> 00:58:22,669
Fostering that, that status quo where like
all the libraries are built around RPC

1013
00:58:23,019 --> 00:58:27,989
and we're, we're kind of blind to, yeah,
it's kind of the spoiling frog situation

1014
00:58:28,239 --> 00:58:32,719
where it's already cooking like crazy,
but we don't realize it yet how much

1015
00:58:32,729 --> 00:58:34,539
complexity we've built for ourselves.

1016
00:58:34,949 --> 00:58:36,369
And how simple things could be.

1017
00:58:36,854 --> 00:58:37,254
For sure.

1018
00:58:37,284 --> 00:58:40,334
So it becomes simpler to not you
know, implement that WebSocket and

1019
00:58:40,334 --> 00:58:43,784
just have the user hit refresh to
get the latest version of that page

1020
00:58:44,264 --> 00:58:46,134
and be ignorant about or bliss.

1021
00:58:46,209 --> 00:58:47,392
Yeah,

1022
00:58:47,592 --> 00:58:48,092
exactly.

1023
00:58:48,092 --> 00:58:49,642
Which just dials up the temperature,

1024
00:58:52,332 --> 00:58:58,652
but this is where I'm so excited about
Linear and the success of Linear since

1025
00:58:58,822 --> 00:59:02,112
people can't ignore products like Linear.

1026
00:59:02,322 --> 00:59:04,652
There's like, Oh my gosh,
what makes it so great?

1027
00:59:05,002 --> 00:59:06,297
And then people want to.

1028
00:59:06,417 --> 00:59:11,977
understand how did you like explain the
success and sure a lot of it will be

1029
00:59:11,987 --> 00:59:16,827
attributed to like oh they have such
those great people and they have such

1030
00:59:16,827 --> 00:59:22,187
great design and they have that amount
of like border radius but then a lot

1031
00:59:22,187 --> 00:59:26,237
of it will also come down to the to
the implementation this is what I where

1032
00:59:26,247 --> 00:59:32,297
I hope that this will drive a lot of
like Similar to how Nike focuses not as

1033
00:59:32,297 --> 00:59:35,377
much on the products, but on the great
athletes, you're the great athlete.

1034
00:59:35,837 --> 00:59:39,627
And I'm very much looking forward
that people want to be like you.

1035
00:59:40,184 --> 00:59:44,979
I really, enjoy working in a
local-first environment, and I hope that

1036
00:59:44,979 --> 00:59:46,689
everybody else picks that up as well.

1037
00:59:47,179 --> 00:59:51,269
And there's starting to be tooling
around it, around the, local-first as

1038
00:59:51,269 --> 00:59:53,019
well, that you can use out of the box.

1039
00:59:53,549 --> 00:59:56,519
That will probably work
for most of the cases.

1040
00:59:56,849 --> 00:59:58,499
It will still be hard to scale that up.

1041
00:59:58,814 --> 01:00:02,594
But at least you can get started and
maybe then figure out whether you need

1042
01:00:02,594 --> 01:00:04,084
to build your own sync engine or not.

1043
01:00:04,490 --> 01:00:05,070
Perfect.

1044
01:00:05,210 --> 01:00:06,680
I think we can leave it at that.

1045
01:00:07,220 --> 01:00:09,910
Thank you so much for
this amazing conversation.

1046
01:00:09,970 --> 01:00:12,110
I was really looking forward to it.

1047
01:00:12,460 --> 01:00:15,950
And Linear continues to be
a huge inspiration for me.

1048
01:00:15,950 --> 01:00:19,710
And it's been so, also like so
interesting and fun to hear.

1049
01:00:19,965 --> 01:00:24,045
That a lot of like what has inspired you
and led you and like explorations you've

1050
01:00:24,045 --> 01:00:28,039
done where you had sort of like what
you do attribute to luck, but I think

1051
01:00:28,039 --> 01:00:29,999
is also just great taste, et cetera.

1052
01:00:30,379 --> 01:00:34,749
That I see a bunch of parallels
there to how I'm approaching Overtone

1053
01:00:34,759 --> 01:00:38,219
that gives me a lot of energy and
motivation to continue on my path.

1054
01:00:38,339 --> 01:00:39,379
So thank you so much.

1055
01:00:40,029 --> 01:00:40,639
Thank you so much.

1056
01:00:40,639 --> 01:00:42,529
And waiting for that invite to Overtone.

1057
01:00:43,599 --> 01:00:47,539
That's all, but when you're ready, like
when you feel that you can, you can

1058
01:00:47,539 --> 01:00:49,189
move on to the next customer group.

1059
01:00:50,499 --> 01:00:51,089
Sounds good.

1060
01:00:51,249 --> 01:00:52,849
I'll send you the magic link.

1061
01:00:53,669 --> 01:00:54,139
Perfect.

1062
01:00:54,339 --> 01:00:54,929
Thanks so much.

1063
01:00:55,639 --> 01:00:57,919
Thank you for listening to
the Local First FM podcast.

1064
01:00:58,329 --> 01:01:01,389
If you've enjoyed this episode and
haven't done so already, please

1065
01:01:01,399 --> 01:01:02,839
subscribe and leave a review.

1066
01:01:03,209 --> 01:01:05,719
Please also share this episode
with your friends and colleagues.

1067
01:01:06,109 --> 01:01:09,339
Spreading the word about this
podcast is a great way to support

1068
01:01:09,339 --> 01:01:10,789
it and help me keep it going.

1069
01:01:11,389 --> 01:01:15,569
A special thanks again to Rosicorp and
PowerSync for supporting this podcast.

1070
01:01:15,979 --> 01:01:17,029
I'll see you next time.