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.