{"version":3,"file":"X7VlByTfx-23.CUVsRcxp.mjs","names":[],"sources":["https:/framerusercontent.com/modules/mDkIT313K0Wt5oSoVDyx/YXY020H2Vv5itJBUKbmE/X7VlByTfx-23.js"],"sourcesContent":["import{jsx as e,jsxs as t}from\"react/jsx-runtime\";import*as o from\"react\";export const richText=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** [00:00:00] So for Notion, we think a lot about like primitives or building blocks. Our goal as a company is to try to break the pattern of these like rigid vertical SaaS tools and instead reconstruct them from their underlying primitives and allow users to make their own custom software.\"}),/*#__PURE__*/e(\"p\",{children:\"So things like, like a relational database or a table view or different blocks within a page. I think of AI as another primitive in the toolbox lets you do really useful automations on top. So yeah we have AI primitive concepts. So The writing, the AI autofill is a great example.\"}),/*#__PURE__*/e(\"p\",{children:\"That's a primitive where you can write a custom prompt and it can do whatever you want.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** You're listening to the AI native dev brought to you by Tessl .\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** [00:01:00] Hello everyone. Welcome back to the AI Native Dev today we have an opportunity to talk to one of the makers of probably one of the most advanced AI adopters in the industry right now, which is Simon Last the co founder of Notion. Simon, thanks for coming onto the show.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Hey, Guy. Really happy to be here.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Simon, there, there's a lot for us to cover but I'm thankful that you're joining because I really perceive Notion as one of the pioneers in the product side of making AI really a fundamental part of the of the product. And And in useful ways, but also some ways that feel like a little bit weird and experimental, which I love.\"}),/*#__PURE__*/e(\"p\",{children:\"Like I like that it's a bit of a combo of the two and in the spirit of sharing and learning as a community, it's great to just tap a little bit to the do's and don'ts and the learnings and perspectives that you might have accumulated in the process. So I guess before we dive into the specific questions and try to tie them in and understand how they relate to software development tell us a little bit about what Notion AI is. I think people [00:02:00] will be well familiar with Notion as a modern knowledge base for the organization, but tell us a bit about Notion AI.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. So we got started working on it. It was back in October, 2022. We had just gotten early access to GPT 4. And it was something that I've been closely watching for a while.\"}),/*#__PURE__*/e(\"p\",{children:\"And then playing with GPT4 was the trigger for me. Oh my God, this thing is actually really useful now has a bunch more world knowledge. It can actually like, follow complex instructions. We immediately got to work then on building our first product, which was a AI writing assistant.\"}),/*#__PURE__*/e(\"p\",{children:\"And we launched that in February 23. So basically it can write and edit text insert new content and then there's a bunch of pre packaged prompts for different comment actions, like improving your writing.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And this one was focused on sort of an inline creation or more like it was always with some command, right?\"}),/*#__PURE__*/e(\"p\",{children:\"With sort of a slash.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** So yeah, so there were prepackaged actions and then also you could just type whatever you wanted.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** So similar to the combo, I guess that we're seeing today as well with some of the code completion and chat interfaces that we see in cursor or [00:03:00] in the coding tools.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. It's still in the product today. It's very similar to the cursor inline, replace, or insert. And then the second product we worked on we call AI autofill, and it's basically you give the AI a prompt on an entire column of a database. And it will like, fill out for all the rows of that column. So you can fill out a summary, you could do like a translation of a different column. You could extract some information from the document, something that was pretty useful. And then the third product that we shipped in November 23 was Q and A, so basically we built an embedding index over all of notion, and then you could ask questions and it's a chat bot where you can ask questions.\"}),/*#__PURE__*/e(\"p\",{children:\"That one took us a bit longer just because there's obviously a lot more technical stuff involved around indexing all notion, especially at our scales, a lot of data and then figuring out like how to retrieve it and answer from it.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And then I'm a big fan of the column capabilities of it.\"}),/*#__PURE__*/e(\"p\",{children:\"It's used quite heavily in Tessl in a variety of spots as a summarizer of it. Sorry, but I interrupted you. So third product and\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** yeah. And then [00:04:00] since then throughout 2024 we've been working on what we call AI connectors so indexing, not just notion but external apps and evolving Q and A to be like a.\"}),/*#__PURE__*/e(\"p\",{children:\"A true universal search product. And then we've also been adding more capabilities to the chat bot to turn it into more like an assistant. So we can now create and edit pages. And I can do all of this using retrieval. So you could do something like, go find me information about this customer and then drop me a customer proposal and we'll fill it out, in the right format.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** So those are kind of actions that compliment the search and they're again, kind of notion wide as opposed to something specific. And I'm curious, organizationally, like you describe these as different products, you call them, they're clearly a user experiences them as a, as capabilities within the product within maybe the sort of the one experience that is notion.\"}),/*#__PURE__*/e(\"p\",{children:\"How did you organize for this I guess both when the penny dropped or, when you got that exposure, is that kind of a commando force that sort of put to the [00:05:00] side to to tackle it or not. And also as you evolved, are these still dedicated teams outside the main perimeter?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. So I'm a big fan of starting like a tiger team for a new initiative. I think it's good to have like small group of people that can move really fast and have a clear focus mandate. So that's how it started. And that's how it was until probably the launch of the original writer.\"}),/*#__PURE__*/e(\"p\",{children:\"Then we created a more formal team around it with a manager. And over the course of the past year and a half, we've been growing the team. It's probably about 20 people now. And there's different kinds of like subgroups. There's a whole group working on the kind of indexing ingestion.\"}),/*#__PURE__*/e(\"p\",{children:\"We have a group focused on UX and a group focused on the modeling eval aspects. So it's still mostly centralized, although we've been trying to democratize it a little bit. So we want more teams to be using AI. I don't know. I just think there's so much low hanging fruit.\"}),/*#__PURE__*/e(\"p\",{children:\"I can think of a new idea every day and be like, Oh, I wish somebody would work on that. It feels this crazy technology just dropped [00:06:00] upon us and, it can do all these like insane things. If you have the idea and you know how to iterate on it.\"}),/*#__PURE__*/e(\"p\",{children:\"So yeah, we were trying to democratize a little bit more. We have two or three other teams also working on AI stuff now. There's been some challenges with that, which, we can chat about if you want.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. I'm very curious to dive in because indeed some things are the same and you just want to tap into them.\"}),/*#__PURE__*/e(\"p\",{children:\"And some things are quite substantially different, but I guess still on the organization, do you think about the team that is originally building it as a platform team? How did you consider that division now that you've been building this for a couple of years and you have, it sounds like multiple teams working it Yeah.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah. Yeah. How do you think about the shared infrastructure, if you will, between those or the shared learnings or evaluation methods, as we'll touch on in a sec how do you think about I guess enabling these other teams to adopt AI more easily?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, that's a good question.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah. Initially we didn't think of it that way as more just like a end to end product team the only goal is just to just ship them. Yeah. Just to ship useful stuff. And then we're learning along the way how to do evals and then our goal is to make it more of a platform team.\"}),/*#__PURE__*/e(\"p\",{children:\"So we're trying [00:07:00] to take what we build and expose it as something reproducible. I would say it's actually pretty tricky because in many ways we don't really do any training of models. It's all about taking the best models out there and packaging them into the product.\"}),/*#__PURE__*/e(\"p\",{children:\"And making everything work well, which involves doing logging in the right way like setting up your prompt, doing logging the right way, doing evals, all that stuff. And it's interesting most of it is actually, there's not that much technically challenging, I would say, about the platform aspect.\"}),/*#__PURE__*/e(\"p\",{children:\"A lot of it is more about the best practice of how you do it and the knowledge of what steps you take and even how to think about it. Yeah it's a tricky thing to get other people to work on without context. What we've had most success with actually is when someone new wants to work on AI we've had a lot of success with just having them join the AI team temporarily.\"}),/*#__PURE__*/e(\"p\",{children:\"And then they just join our standups and get in the weeds with us every day and then quickly pick up all the context around like how to do evals, how to iterate on prompts and yeah, we found it challenging the other way where we just like, give them, like the code pointers [00:08:00] to, all the different layers of the stack.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, here's the thing that would run the inference or whatever it is, but\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, and the code isn't that complicated. I would say the complexity is actually more in like the best practice of how you do things and the mental model of how to even think about it.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. Yeah. I think that makes perfect sense. I actually had Patrick Debois was a kind of DevOps luminary on the podcast. And we talked about how the analogies work from the DevOps era. And a lot of it is indeed about platform teams and reuse, but also about embedding and about someone walking a mile in your shoes a little bit and learning both for empathy as you might get annoyed later on when the product doesn't work quite as you want, but for skill sharing and in security and DevSecOps, we use the same approach.\"}),/*#__PURE__*/e(\"p\",{children:\"I think we're running out of letters we can add into the DevSecOps kind of combo. I think we need to find a new strategy there, but I think the approaches themselves are working quite well. I love that approach and it makes perfect sense to me. Maybe let's indeed I want to talk a bit more about the skills and those gaps, but maybe let's first describe what has been repeated oftentimes in this probably said most succinctly by Des at Intercom in an early episode here is that it's really hard [00:09:00] to know whether your product works when you're helping on AI. So I guess, what has your experience been when you're building these capabilities, how do you think about evaluation, about testing, about knowing whether it hits a threshold, but also knowing whether it hasn't regressed.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, it's super hard. And it's a really different experience than the pre AI world. Most of my experiences in building Notion building products, and it's been honestly really painful.\"}),/*#__PURE__*/e(\"p\",{children:\"It's very exciting and fun and like I'm pretty obsessed with the new technology, but it's very painful and I often miss the old world. In the old world I could have an idea and it might take me longer than I thought, but I could definitely ship it.\"}),/*#__PURE__*/e(\"p\",{children:\"But In the AI world, I can often have an idea and then be surprised that it didn't work in some way I didn't expect. I would say I guess the way I think about it is, it's a two fold challenge of One is, for the situations that you test, you need to make sure that those work and they don't regress.\"}),/*#__PURE__*/e(\"p\",{children:\"And then there's this nebulous space of things that you haven't even tested it [00:10:00] can be arbitrary. And then, filling enough of that space so that, you're confident that it's going to match the distribution of what users are going to request. Enough that you're reasonably confident.\"}),/*#__PURE__*/e(\"p\",{children:\"You can never like, like fully match it. Yeah, I guess the way I think about that is, yeah, you need like a repeatable system or engine around this and the key pieces are something like you need you need to set up good logging such that interactions, can be called up again if it fails in some way, you can go look at that.\"}),/*#__PURE__*/e(\"p\",{children:\"And it's extremely important to be able to exactly reproduce this is the failure situation. The log has to be an exact reproduction of the error. And then you should be able to, just rerun that inference with the exact same input. That's really important.\"}),/*#__PURE__*/e(\"p\",{children:\"If you can't do that you're totally screwed.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And that creates probably some challenges. Like I fully relate to the full logging even more so than in regular instrumented systems. How do you work around the kind of the privacy concerns or some of the user data concerns around it?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. So we take that really seriously. What we do is we have [00:11:00] an opt in early access program. So when you use Notion AI, we show you this little pop up and the default is no, but you can opt in to sharing data with us. And we don't use it for training.\"}),/*#__PURE__*/e(\"p\",{children:\"It's just for evaluation. So basically that allows us to see the logs like if you thumbs down, we can actually see the log with the input. And then, we can add it to an eval data set and we segregate out the prod data, to make sure that, it's not contaminated with other sources, but yeah that's been extremely helpful let people opt in and our user base is large enough that even if a pretty small percentage opt in, it's still quite a lot of data.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** So logging is one\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** yeah, so logging is one so yeah, I would say the next step is around collecting the failures into data sets. That's pretty important. So just like organizing them in some reasonable way such that for the given task, you have some data set or data sets that are like, these are all the cases that we care about and all the known, previous failures.\"}),/*#__PURE__*/e(\"p\",{children:\"And then the next bit is being able to evaluate that a given failure is still happening or not and that can be really [00:12:00] hard. There's many ways to do evals. I think about, you can have deterministic or non deterministic evals. Definitely best to use deterministic when you can, and then, you can use like a model grade eval when not.\"}),/*#__PURE__*/e(\"p\",{children:\"For model grade evals, they work best when it's as concrete and specific as possible. I've seen people fail a lot doing model grade evals when it's like too generic or the task is too difficult. I think I said this in the last one, but if your model grade eval is not like robustly easy for the model, then you have to have an eval for your eval.\"}),/*#__PURE__*/e(\"p\",{children:\"And you just created like a new stack of problems,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** an infinite loop. So I relate to the the data piece. So the data sounded like going further back, you have to create a set of test cases for the things you want to work and then a set of cases for problematic ones.\"}),/*#__PURE__*/e(\"p\",{children:\"I guess that's synthetic. That's at the beginning was you build a feature and then you need to have access to real world scenarios. And you curate out of that data set of failure cases with the proper user permissions, like amidst the users that opted in to help improve the system.\"}),/*#__PURE__*/e(\"p\",{children:\"I guess. Do you [00:13:00] accumulate. over there. Good cases as well. Does the data set mostly grow in the negative sense of don't do this? Or is it the same one? Is it basically you're like, here's a scenario, here's the correct. And here's the incorrect answer.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** I tend not to care about good cases that much.\"}),/*#__PURE__*/e(\"p\",{children:\"I think the main focus is on, cause what's the actionable value of that. Maybe it's nice to have a few of them just as a sanity check but. But to me, the main goal is to collect concrete regressions, and then fix them, and then make sure that they stay fixed.\"}),/*#__PURE__*/e(\"p\",{children:\"And then over time, you're ratcheting up all these things that you, that used to not work are now working, and then you're growing this data set of things that, continue to work. And it that's ideal. You'll often find issues that you just can't really fix.\"}),/*#__PURE__*/e(\"p\",{children:\"And so that's just part of the yeah, we'll come back to that.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** That's really interesting because my product works at this percentage of Yeah,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** The models have limits there's many issues that we can fix and we're not a foundation model company it's like, all right, we'll just wait till the next model comes out.\"}),/*#__PURE__*/e(\"p\",{children:\"Hopefully it'll fix this one. So you want some kind of. And it could be just like a like a human grade eval, although that can that'll quickly get out of control. Then the really key next thing is [00:14:00] you need to enter this loop where, you find some new regression, you add it to your data set, then you change the prompt in some way.\"}),/*#__PURE__*/e(\"p\",{children:\"Then you rerun the examples of the data sets and then you need to be able to decide whether it's like better or worse. And ideally that's as automated as possible. And then, ship that change. And then there's just this constant loop of, new example, improve the prompt.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Improve the product. And I think on the eval side Notion is pretty open or flexible in what you can do with it. There are a lot of degrees of freedom of it. It's easy to think about non deterministic evaluations that you can have in Notion as you're looking at text and unstructured data and the likes, what's an example of a structured evaluation that you can do in an Notion AI capability?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. A lot of them, like anything to do with formatting the output in some way, maybe it's XML, maybe it's JSON. That's ideal. I think about, if you're having some issue, the best way to solve it is by solving it with a validator. Make it so that the invalid output is [00:15:00] impossible by, structuring the output in some way where you can deterministically say that, the bad output is incorrect.\"}),/*#__PURE__*/e(\"p\",{children:\"So that's like the best way to solve any problem. And it's the easiest way to, to evaluate it. Another deterministic eval that we use all the time is I love using mini classifiers as part of the flow. Classifiers are really great and by classifier, I just mean some inference that outputs, like an enum.\"}),/*#__PURE__*/e(\"p\",{children:\"Like set of possible values. Classifiers are really great because they're really easy to eval because\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** you classify the result of the of the products activity. Like you classify the output from the LLM.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** No, actually as part of the flow. So for example, one thing we need to do as part of the chat experience is decide whether to search or not.\"}),/*#__PURE__*/e(\"p\",{children:\"Just as an example. So it's should I search or not search? Yes or no, basically. There's other classifiers that have more than two possible values, but yeah, those are really great in large part because they're so easy to evaluate. Because you just have this ground truth output and then you just compare, the actual versus expected.\"}),/*#__PURE__*/e(\"p\",{children:\"It's really great for that reason. You can collect a big data set,and you can get a score.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. And [00:16:00] I guess what has been the driver behind the choice not to fine tune, or actually, you know what, I might be jumping to conclusions here. You said you're not training foundation models of it.\"}),/*#__PURE__*/e(\"p\",{children:\"Do you find yourself fine tuning the model?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. So we've tried fine tuning. extensively. I've personally banged my head on it a lot. I think I need to ask OpenAI, but I feel like I'm, if not the highest, maybe like 99th percentile like number of fine tunes created.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah, we try fine tuning quite a lot. I would say, yeah, the big issue with fine tuning is that you're making your job like a hundred times harder, at least. Because, I need to collect this whole dataset. The actual fine tuning process can be difficult.\"}),/*#__PURE__*/e(\"p\",{children:\"Especially if you're using, not just an slower. You have to wait for, things to train. And then it's really hard to debug issues. You're basically like creating this black box where any of your new examples, as you do, successive fine tuning runs, any new examples can poison the entire data set.\"}),/*#__PURE__*/e(\"p\",{children:\"You can mess up the model. So it really requires you to have extremely good [00:17:00] evaluations. And It's really hard to debug issues. So I've had issues with fine tuning where, you know, I literally would spend weeks trying to figure out what the problem was and just extremely hard.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah, I would say I'm honestly not that bullish on companies outside of the foundation model companies doing fine tuning. And if I like meet a startup and they say, they're doing fine tuning. I actually now think of that as like a negative update. It's like a lack of\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** experience.\"}),/*#__PURE__*/e(\"p\",{children:\"You buy into the promise, but it doesn't actually\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** justify itself in the\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** real world,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** And I got bit by this bug to like it sounds so cool and like I think as engineers we want to have more control. We want to do a technically cool thing. You know the technically like powerful thing and I was totally susceptible of that and it was really fun to do it But I don't know.\"}),/*#__PURE__*/e(\"p\",{children:\"I'm a huge fan of in context learning. Like It's gonna get better Yeah, there's a lot of reasons to do it. Another big reason not to fine tune is if you're not a foundation model company, you really want to just be using the best model at any given time.\"}),/*#__PURE__*/e(\"p\",{children:\"And the progress is so fast. And so if something doesn't work [00:18:00] now, there's a good chance it's going to work in the near future. And if you're fine tuning, you're really just locking yourself in to this slow, complicated process that makes it hard to update and context learning is amazing because if it's a new model, I can switch the next day.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And I guess in that case, that was my next question is like how often do you try different models and how rigorous a testing process do you feel is necessary to make that switch. Cause those are probably, new features are new features.\"}),/*#__PURE__*/e(\"p\",{children:\"You control the timeline. A new model comes along. I guess you still control the timeline of how quickly you, you roll it out. How do you think about the trade off between wanting to tap into the new hotness versus, I don't know, potentially slow or how confident, do you feel about, Hey, like the next one came out, can I sort of slot that in and get it out within the week?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, that's a good question. I would say the speed at which you can do it is really dependent on the quality of your evals. How good do your evals like, how good are they at telling you confidently that, this change will improve the overall experience. Yeah, I would say that's one of the reasons why evals are so [00:19:00] important.\"}),/*#__PURE__*/e(\"p\",{children:\"Probably, Changing prompts is more important than changing models. That's going to happen much more often. But, the same evals work for both, right? Yeah, we try to, yeah, we've definitely invested a lot in really making sure the tools are right and the evals are really good.\"}),/*#__PURE__*/e(\"p\",{children:\"But also, I would say, as a products company, I think it's pretty important not to be just like jerked around constantly by new models coming out. I think it's important to like, think about, like really understanding the task that you uniquely really care about a product and, your alpha should be really deeply understand the task and what it means to produce a good result and the product experience around that.\"}),/*#__PURE__*/e(\"p\",{children:\"And not just like watching new capabilities and, releasing them as they come out. I think, it's really about you and your product and like thinking about the models as like a means to an end to enable that. And very often a new model like just it's like shiny and cool, but it's like maybe it just doesn't really get you much [00:20:00] benefit for the tasks that you care about.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And I guess, is there an example of distilling? You mentioned a couple of times is now the importance of being super crisp about, what it is that you need either, what is it that you want for your task and from the model for it, or in the evaluation about actually asking the model for something very concrete.\"}),/*#__PURE__*/e(\"p\",{children:\"Is there any like an evolution example of, Hey, when I, when we started with feature or product X, Y, Zed in notion we did this and then we we learned that we have to trim it this way, that jumps to mind.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** You're asking about making the task more specific.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. I'm just I guess I'm curious what has been the real world experience as you were building within Notion, these capabilities of a case where making it more crisp or more succinct has yielded better results.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, in general. Yeah, like the model doesn't know what you want until you tell it and right Yeah, I think a big one. Q&amp; A is probably a really big example obviously, you know in the in our very first experiment, you know you just give it the search results and then tell it to produce an answer or something like that I think a big evolution there [00:21:00] is coming up with a more specific rubric which just explains in detail what we care about and what it means for answer to be good in our product experience.\"}),/*#__PURE__*/e(\"p\",{children:\"And then literally telling the model that rubric in the prompt is, yeah, super helpful.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And I guess just to make sure everybody listening is aligned on it, the search versus chat is really like search is the more traditional search, the search your knowledge base with Notion has had for quite a while.\"}),/*#__PURE__*/e(\"p\",{children:\"It probably involves some amount of AI there as well for ranking or at least some algorithmic ranking within the findings.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Oh, we actually completely rebuilt that stack for the Q&amp; A. The key technical unlock there is the embeddings. Our previous core search stack was like, like Elasticsearch, full text fuzzy search.\"}),/*#__PURE__*/e(\"p\",{children:\"It doesn't really work if you just use that and try to do Q and A, maybe works, but yeah, the really magical experience comes from rebuilding your stack to use embeddings.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** So today when you say search, you mean the two parts are both kind of LLM inspired, one is embeddings, why pull up the relevant records from the vector database or, and then [00:22:00] subsequently process those.\"}),/*#__PURE__*/e(\"p\",{children:\"Wisely knowing what it is that a good answer looks like to produce the result.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. That's the Notion AI yeah. I like the Q and A experience.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Got it. So I guess let's talk a little bit about the people building the stuff. We talked about the frustrations, the set of the new skills, how does that change, if at all, the skillset of the individuals building and you've already spoken about the fact that there's a learning and so not a, if you're just a software engineer and you pick it up right now, it's going to take some getting used to, and you'll need to change some of your ways.\"}),/*#__PURE__*/e(\"p\",{children:\"Does it change anything around who would be good at it? The traits you might be looking for in a hire?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, that's a really good question. And I think it, it definitely does. Yeah, I think of a few things. So one is, especially on the more producty side, if you looking for someone that's going to be able to lead an AI product team, you definitely need someone that's going to be very okay with a lot of uncertainty and really pushing to think through every day are we doing the right [00:23:00] thing?\"}),/*#__PURE__*/e(\"p\",{children:\"I think that's yeah, it's so important because you can use, I've basically every time we do one of these projects, like the idea that we had at the beginning and the end are often super different. And you have to really just be, putting in the energy every day to think about okay, are we today still doing the right thing?\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Are the changes due to like misassessment of what the AI can and cannot do? Is it how the user might want to use it? I guess what do you feel drives the more substantial evolution versus software?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. It comes from multiple places. Yeah. One is definitely what the AI can and cannot do.\"}),/*#__PURE__*/e(\"p\",{children:\"And then actually morphing the experience to what the AI does well, to the thing you discovered as well. I think that's pretty important. Another big element is there's no, product paradigms really around it.\"}),/*#__PURE__*/e(\"p\",{children:\"There's a few things, we have the AI chat concept now, there's a few concepts now, but there's just not that much. So you have to invent things. And then when you have people actually using them, you can easily discover a lot of things like, the user wasn't using this [00:24:00] the way I expected.\"}),/*#__PURE__*/e(\"p\",{children:\"So yeah, just, there's a lot of uncertainty around just like inventing the product concept. It's such a fuzzy, weird technology. For any given goal if you think of I want to build this feature for this goal, I can think of 10 different ways to do it. You have to navigate that. Another big one is discovering an ideal feature, I think, doesn't require people to change their habits. It's just embedded in their existing habits. That's really great if you can get that. Otherwise, you have, this double challenge of in addition to making your thing work, you have to actually Get people into your flow.\"}),/*#__PURE__*/e(\"p\",{children:\"And it's particularly hard for us because Notion already does so many different things. So yeah, that's a really big one. And it's not always obvious at the beginning. So yeah, I would say like general umbrella there is like just a lot of iteration speed and capable of dealing with that uncertainty.\"}),/*#__PURE__*/e(\"p\",{children:\"On the kind of modeling ML side, I would say one of the biggest predictors of success is just like how often do they touch reality? Like how often do they like try that [00:25:00] idea and run that experiment and then the kind of loop on that because it's such a weird technology.\"}),/*#__PURE__*/e(\"p\",{children:\"Like it has to be so empirically driven You can have an idea You're not gonna get anywhere unless you try it and you should try it really quickly and then move on to the next idea Not just at the project level, but you know on a day to day level of just like different ways to solve each problem So yeah, the really key thing there.\"}),/*#__PURE__*/e(\"p\",{children:\"It's just like they have to just be able to just really quickly, empirically iterate. And if you don't do that, it's not going to work.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** It's a great advice. And I think what I find really interesting is that it actually is very grounded in product. None of the skills you mentioned are, Hey, it'll be useful if they have, a master's in machine learning or in general kind of mileage with working, do you, I relate to that. I don't know, like I come from software development and from product. Also, it's hard to find good software engineers that also happen to have ML backgrounds. So it was an advantage to that. But do you find those are advantageous? Like when you see someone with a resume or when you look at the people in your team that feel like they're the best or have been the best at adapting, to [00:26:00] it.\"}),/*#__PURE__*/e(\"p\",{children:\"Does a machine learning background help?.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, I think not necessarily It's funny. I'm, not sure. I mean we definitely have some really great folks on the team that have an ML background I've definitely met people where they had an ML background, but it felt like it was actually harming them especially if the background is like from the, pre language model era.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. The symbolic AI\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** yeah, it's just a different, you can easily get trapped into small ways of thinking. A lot of the concepts do still apply and it is helpful to apply those, but I don't think I look for that as like one of the primary things. In fact, I actually, like if someone has a strong ML background, I have to suss out like like how locked in are they, to the previous paradigm.\"}),/*#__PURE__*/e(\"p\",{children:\"But yeah, I will say that if you have a strong ML background and you're into the new tech and a strong open mindedness, then yeah. It can be a huge strength.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, it's a great combination for it. So I guess maybe one last question still on the dev side of it. How strongly did you adopt, in Notion, not just in the AI team the use of AI in [00:27:00] development, any, maybe starting with you do you use any of the Cursor or the AI test generations or docs, whatever, what's your tool of choice, if any, in the AI dev space?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. These days I'm using a Cursor. It's really good. I, in particular, I really like their autocomplete model. It's just extremely good, that it, it can actually, produce arbitrary edits around the code. And I often find myself just like tab, tabbing. I think there's a meme on a Twitter I saw a few weeks ago.\"}),/*#__PURE__*/e(\"p\",{children:\"I just like, the new engineer experience, just like tab. That's pretty funny. Yeah. I think yeah. Cursor is really great. I just, yeah, I use like Claude, ChatGPT or more Claude for coding these days.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And then just in the chat to ideate and yeah.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. And yeah write code for me.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And what about the rest of the team? Are the team, is there a standard, when you think about Notion as an organization, have you pushed to, do you push people to use it? Did you try to standardize on anything?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, we definitely do try to push people to use the tools we think are most productive.\"}),/*#__PURE__*/e(\"p\",{children:\"We have most engineers using Cursor now. And then we're experimenting with, we're doing like, like proof of concepts [00:28:00] with a bunch of startups doing various things. I wouldn't say there's anything crazy successful to call out there. Yeah. There's a lot of startups working on just coding agent type things.\"}),/*#__PURE__*/e(\"p\",{children:\"And yeah, I think we're working on a few, like for some refactoring projects. And yeah, I would say nothing quite works yet still. I was actually just playing with Devin again. I I'll try Devin every couple of months cause they're always improving and it's only gotten a lot better it's still didn't do the my favorite eval example.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, I'm curious now, what's your favorite eval example? Is it just that?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Oh, it's an app. Yeah. So it's a it's pretty simple app but it touches all the pieces that I think are interesting. So it's a calorie tracking app. All it is it's a table of with the food and the amount of calories, and then there's an input, and you can just type whatever you want, and then it's supposed to extract out each food item and the calories added to the table.\"}),/*#__PURE__*/e(\"p\",{children:\"So it involves a database, a backend, a frontend, and then it also has to write a prompt and call into a language model. To do the extraction. And last time I tried, it [00:29:00] actually did get the initial version. And then I asked for just one small feature change and then it didn't work from there.\"}),/*#__PURE__*/e(\"p\",{children:\"They've made huge improvements and it's like super impressive, but yeah I feel like we're not quite there yet still.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. I want to shift gears a little bit and talk a bit about trust in AI. And then maybe we do come back a little bit to this like future of both development and Notion AI itself.\"}),/*#__PURE__*/e(\"p\",{children:\"I think in AI, a lot of the challenge, with sort of users is learning and knowing what to do, what can they do with that sort of empty chat box or actions, as you pointed out, like learning new workflows is also quite hard, but I think another challenge is trust. You're putting something in.\"}),/*#__PURE__*/e(\"p\",{children:\"How do the simple example of I don't know if it hallucinated something, but also like, how do you know if it succeeded in a thing or if the answer is correct, like it could hallucinate, but it could also just be wrong in that sort of path, how do you think about trust in Notion AI?\"}),/*#__PURE__*/e(\"p\",{children:\"Is there anything you've learned around helping users figure out when can they, trust an answer in Q and A more than elsewhere, or. And again, some [00:30:00] of it is true or legit your product did or didn't work, but also some of it is, it's just the user adaptation and learning new skills. How do you think about that?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. That's something we think about a lot. I would say, the most obvious tools are one, if the AI is taking an action, have the user confirm that and be able to see in a nicely visualized way. What is action being performed? I think that's just like a really key thing. So even for our original AI writing the first product that we came out with, it never just edits your doc.\"}),/*#__PURE__*/e(\"p\",{children:\"It's always producing a diff and then you preview the diff and you can accept it or cancel. And if you want both, you can, there's like an insert below button and then you get both. You sidestep a lot of those problems. Just by, letting users visualize.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Your attendance, eventually.\"}),/*#__PURE__*/e(\"p\",{children:\"So the user decides. You just prompt them to Yeah,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** I think that's, that's the most critical tool. And that's, extremely useful. sidesteps a lot of it. Just let the user decide if it, if they like it or not. And it especially makes sense for the writing task.\"}),/*#__PURE__*/e(\"p\",{children:\"Cause it's a fuzzy task. Like it might, it might have partially done it right. And that's still useful. But it's not something you'd want [00:31:00] to like immediately send an email about. And then you mentioned Q and A, I think, yeah, super important thing there is just citations and visualizing those in a good way.\"}),/*#__PURE__*/e(\"p\",{children:\"So it's grounded and then, and\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** yeah. And how often do people use those? Do people when you look at the at the stats, do people actually go off and click those links and make sure that you didn't make it up? Or is it more. Hey, it's actually needed because we get it wrong often enough that we actually still want users to correct us.\"}),/*#__PURE__*/e(\"p\",{children:\"Or is it typically, hey, it's just like for the warm and fuzzy, but we're pretty good at this.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** People click the citations quite a bit. I think it's more than like a web search tool because, you actually might want to go see more information. It is like an internal doc that somebody wrote.\"}),/*#__PURE__*/e(\"p\",{children:\"But I would say, yeah, it really depends on the nature of the question. There's a class of questions where, you know, they, I can just really robustly answer them. Some kind of factual question do we have president's day off or something?\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah, it's gonna, if it's written somewhere, it's going to figure that I was going to cite it. There's not much chance of it like, like messing up on that. And then if you see that, if you see that answer, yes, we have it off. And [00:32:00] then here's the page and it says 2024 benefits.\"}),/*#__PURE__*/e(\"p\",{children:\"Other users not gonna click through on that probably. But yeah, Q and A at the limit is an arbitrarily hard task. People ask and especially when we get to our, connectors like pulling from many sources, people can ask a kind of complicated one thing we're working on right now that I'm really excited about is a GitHub connector so we can actually see your code and your PRs.\"}),/*#__PURE__*/e(\"p\",{children:\"And that's really fun because, a non technical person can ask a technical question and then you get this really interesting answer where it's like weaving together something from the code, something from slack that somebody said, and then something from some Notion docs or tasks that somebody wrote.\"}),/*#__PURE__*/e(\"p\",{children:\"And then, yeah, it's doing a much harder task at that point. We've been getting information from multiple sources and then there's many potentials for it to make reasoning mistakes. It might be conflating, two things that are actually similar.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** How do you handle those situations then? Like you're representing an answer. Is there an element of like confidence or something like that? If you considered adding that to the product of hey, I'm 70 percent sure this is right.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. We do definitely prompt it about that.\"}),/*#__PURE__*/e(\"p\",{children:\"I think that's pretty [00:33:00] important. We want the model. We so mostly using language. We don't have like an indicator. I think you can go a pretty long way using language to telling it that needs to communicate uncertainty when it's there and the models are getting pretty decent at doing that.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And would it sometimes say it doesn't know?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, definitely. Yeah, if it's not there, it doesn't know. Yeah, we wanted, yeah, that's part of the prompt too. We wanted to have reasonably high bar.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** A bit of a side question on it, but like, how big do the prompts get? Like, all of that, so the system prompt.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Pretty big. We're definitely pushing the limits. Especially the Q&amp; A prompt, definitely, also the writing prompts. We're definitely pushing the limits of what the models can do especially because we want it to work in all the cases, right? And so over time, we've incorporated all these Interesting corner case people find that we don't want to progress on.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah, I feel like we're maxing out the prompt, not in terms of the actual context length, but in the context lengths have gotten pretty long, but I think in terms of the model's ability to actually attend over complex instructions.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"So the system instructions are quite long and there's many examples.\"}),/*#__PURE__*/e(\"p\",{children:\"And then also there's the actual user task, which can have a lot of additional context. I often feel like [00:34:00] after a few, like maybe weeks of iteration or something and like finding all the regressions, it can actually be pretty hard to improve more beyond that. So we often will find cases where it's okay, the engineer is working on it.\"}),/*#__PURE__*/e(\"p\",{children:\"They'll add it to the system prompt. In this case. Don't do this or something, but then it just doesn't work. There's too much going on already.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Instructions. Yeah. I guess like humans, if you're going to give me too many instructions, eventually I will I might technically remember it, but won't pull it up at the right time.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. So we often have to just like prioritize and just be like, all right this case, maybe the only way to solve it is just for it to attend over that instruction somehow, and it's just not working. So then at that point, unless we have some more creative idea, we have to wait.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And do you ever engage users and have you considered doing so in the thought process of hey to answer this Q and a, I pulled information from these, seven locations and I've blended them together. And get user feedback on it. Maybe I'll broaden even that question, which is like Notion is a very powerful tool and it has probably a lot of regular users, but it also has some pretty real power [00:35:00] users who can really squeeze a lot more out of the product because they know how to make the most of it.\"}),/*#__PURE__*/e(\"p\",{children:\"Is there a power user of Notion AI?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. Yeah. So for Notion, we think a lot about primitives or building blocks. Our goal as a company is, to try to break the pattern of these like rigid vertical SaaS tools and instead reconstruct them from their underlying primitives and allow users to make their own custom software.\"}),/*#__PURE__*/e(\"p\",{children:\"So things like a relational database or a table view or different blocks within a page. I think of AI as another primitive in the toolbox lets you do really useful automations on top. So yeah we have AI primitive concepts. So the writing, the AI autofill is a great example.\"}),/*#__PURE__*/e(\"p\",{children:\"That's a primitive where you can write a custom prompt and it can do whatever you want. And then our power users basically are writing these really long complex prompts, to do something crazy. And then, the way that has impact for us is then, their complex prompt gets packaged as a Notion template, which then can be distributed to other people.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, interesting. So I guess I'm [00:36:00] taking two things. One is it's not a notion AI power user. It's a Notion power user and AI is part of their kind of toolkits now that they have one of the primitives they can understand that can make the most. And then two is that yet within notion AI you're looking for capabilities to make available to those users when they really want to double down and prompts are the core version of it.\"}),/*#__PURE__*/e(\"p\",{children:\"Have any of these prompts eventually make it back to the product of hey, these users figured these things out with the proper permission.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** I think so. Yeah. We've, definitely several times had, in like beta testing a feature, we like for example, for the writing.\"}),/*#__PURE__*/e(\"p\",{children:\"AI writing product, the way it works is we have these kind of predefined prompts that we control. And there were definitely several examples of like people saying, hey, I want to do this. It's not quite working. And then we make the prompt and then, we'll optimize it like, like much more than they could.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. One more question on the trust side. A lot of the conversations I've had here on the podcast came down to this kind of a garbage in garbage out type reality where maybe indeed in support cases like an Intercom if your knowledge base is incorrect, [00:37:00] then your support bot will give incorrect answers because it's relying on that information on it or talking to Jason Warner at poolside, we talked a little bit about , how do you overcome bad coding practices that you might have in the code and sift those out?\"}),/*#__PURE__*/e(\"p\",{children:\"I imagine within the. any organization that has enough maturity with Notion, you're going to have a lot of documents that are out of date. They no longer represent kind of reality or truth. How do you think about I don't know if it's ranking or identifying the better, the correct data, the good data from the bad one.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. No, yeah, that's extremely important. That works on a lot. Yeah, very similar to code. People often don't update the old thing. It's probably even worse than code. Knowledge bases are often like, like very neglected. Yeah. You almost touched on it, yeah. I think, there's two steps where, this can happen or where you can solve this problem.\"}),/*#__PURE__*/e(\"p\",{children:\"One is in like some kind of ranking or filtering step. We definitely do a lot there. We want to make sure that we're ranking, the highest confidence documents using all the signals that we can like, like how recently was the document [00:38:00] edited? Is it maybe where is it located?\"}),/*#__PURE__*/e(\"p\",{children:\"Is it connected to other documents? Who wrote it? We try to use all these like signals and you can get quite far with that, even just when the document was last edited or viewed, is it like very powerful signal. And then, yeah, then the second step is giving it all to the model and having it decide.\"}),/*#__PURE__*/e(\"p\",{children:\"And the models have gotten like much better at that. I think, yeah, our case is different than like the Intercom case, cause the Intercom case, you're sending this message to a customer autonomously, so that's pretty high stakes. I think for our Q and A product. It's a bit lower stakes. It's all internal information and then we're giving\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** users,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Our prompt is more about just like presenting to you all the relevant information in a really distilled actionable way.\"}),/*#__PURE__*/e(\"p\",{children:\"And so if there's like multiple sources that say conflict things, we want our answer to just say that whereas in the Intercom case, you probably wouldn't want that. So it's a bit of a different,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** you'd have to conclude what is the answer you actually want to,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** yeah, exactly. Yeah.\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah. If it says, if one document said the product is shipping this month and one says the other month, the answer should just say both. Like it just says, in the most recent document it says this, but in this document it said that. [00:39:00] And that's really useful for people.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. And I guess the how when you say you give it all to the LLM, that includes then the metadata of probably obviously like dates, the documents were written and things like that. But does it cope with more metadata as well with things like. view, like visit counts and I don't know, like organizational charts of like seniority, if that's more of an authority or like affinity to a domain, or do you end up going down those routes and are those impactful?\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah I would say, yeah, like I'm a bit less bullish on like showing it some kind of like rank score or something like that. I don't think it would be able to reason that well over that, but I don't know. I think of it like. If you were showing a person a stack of documents and you had this, you give them all day to figure out like what's the answer.\"}),/*#__PURE__*/e(\"p\",{children:\"What would you give them? Like when the document was last edited, for example, it feels like a great one, right? Cause that's it's a very transparent signal. And it's actually useful for the answer itself. Like the model will actually often directly use that information in the answer.\"}),/*#__PURE__*/e(\"p\",{children:\"It will say, [00:40:00] in, this document was edited a month ago or something like that, but yeah, I would say, yeah, I think it's, I'm a little bit, I'd be wary of showing it, Like non transparent, like black boxy type information, because you could usually steer in the wrong direction.\"}),/*#__PURE__*/e(\"p\",{children:\"If the answer is wrong, but somehow your system produced affinity score 0. 9 or whatever and the model uses that information yeah, that's, I don't think that's going to work very\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** well.\"}),/*#__PURE__*/e(\"p\",{children:\"I heard you say on another podcast that you're better off trying to stay close to the way the model was trained to the data that the model might have seen, right? And I guess that aligns with date stamps is probably something the models saw a lot in their training data view counts is probably not something that was frequently there.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, , especially any kind of like novel score that they are producing, certainly would never seen before.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. So let's maybe for the last section here, talk a little bit about being ambitious which I heard you refer to of you need to be, when you think about AI you need to be ambitious around where it's headed and [00:41:00] plan for it. And so let me start by, by asking a bit of a meta question and then we'll maybe try to get a bit of a bit of a glimpse into your ambition, with AI, you, when you build an AI solution you have this duality of, on one hand, you want to fit into the current flow, as you pointed out here as well, because users don't really know what they want and how to use this.\"}),/*#__PURE__*/e(\"p\",{children:\"So you have to fit into their current realities. And, you also want to be ambitious. You want to think about the future and something that's entirely different. But you think when you stop and think about it from first principles that there might be a better way to do it.\"}),/*#__PURE__*/e(\"p\",{children:\"I guess, how do you think about the two and how do you prioritize between these two tracks as you build AI capabilities?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** So just to understand, it's like you're asking about incrementally changing existing behaviors and,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** yeah. So maybe let me reiterate a bit as so I have a, this mental model that thinks about the level of change and the level of trust that you need in any AI solution.\"}),/*#__PURE__*/e(\"p\",{children:\"And the solutions that get the most adoption today are the ones that require little change and little trust. So there are [00:42:00] things that are very easily human verifiable. And they are there for, easy to adopt on it, but they also have a bit of a local maxima because they work within the workflow.\"}),/*#__PURE__*/e(\"p\",{children:\"They don't change anything around it. The solutions presumably that have the top potential of it are ones that assume you have high trust. And so you allow autonomous actions and the likes. And you're willing to adapt the way you work to be able to make the most out of the new capabilities of it.\"}),/*#__PURE__*/e(\"p\",{children:\"But those are hard to adopt because you don't really have that trust and you haven't changed. And so that's a, as you pointed out, a double ask of the user. But eventually, I guess my theory or kind of my perspective here is that it is a local maximum if you limit yourself to existing workflows.\"}),/*#__PURE__*/e(\"p\",{children:\"So you have to think a little bit about the head. So I guess what I'm asking is, one is do you agree? You might, this is just theory. That's not at all proven. And and two is like, how do you think about the two? I'm sure you have a lot of like longer term thoughts about where this is all headed.\"}),/*#__PURE__*/e(\"p\",{children:\"Those just basically they go into the parking lot or do you try to build them [00:43:00] into the product in some wilder bets that you do in parallel?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, I don't think those things need to be separate necessarily. I think there's yeah, when I'm thinking about a new product, I have two considerations.\"}),/*#__PURE__*/e(\"p\",{children:\"One is, what is the capability and the value being created and does it actually work? And then there's a second one around like, how do you onboard people into it and expose them to it? And I think if you're clever about it, you can be both familiar and in their workflow and also giving a new capability.\"}),/*#__PURE__*/e(\"p\",{children:\"Even an autonomous one, like in you should be able to connect it to something they're already doing. And also propose a new behavior and then incrementally get them into The more autonomous thing. Yeah, , I think if you cleverly design it, like it, it doesn't feel like a fundamental correlation.\"}),/*#__PURE__*/e(\"p\",{children:\"It just feels like it happens to be correlated in that way. But if you're clever about it it's doesn't need to be. And I think the best thing, the best example is probably just that, the code autocompletes, so originally copilot and then like Cursor's one is extremely good.\"}),/*#__PURE__*/e(\"p\",{children:\"It's [00:44:00] actually doing quite a bit for you and like scaling it up. Scaling up and what it does for you. And then yeah, I think you can ambiently show people a new experience and something that they're already doing. That's the ideal\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. Yeah. To get the adoption. Yeah, I get it.\"}),/*#__PURE__*/e(\"p\",{children:\"I've got all sorts of thoughts about the code piece on it because I do think that sort of moving out of editing the code, even if you can edit the code much better to a different source of truth.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"Different different conversation, but well set around making it a journey and making it be incremental steps that lead user to that destination.\"}),/*#__PURE__*/e(\"p\",{children:\"So I guess with that, what is the future for Notion AI? If you could overcome and educate everybody or whatever, walk them through this path over a bunch of years, what do you envision as the destination for Notion AI or how would it transform Notion?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** I would say the North star for me for AI is basically, can you automate all the things that people don't want to be doing, right?\"}),/*#__PURE__*/e(\"p\",{children:\"All the cumbersome, tedious tasks that people do every day. And ultimately lift humans up into a higher level of abstraction where they're doing like higher leverage, more fulfilling activities. To me, that's like the North [00:45:00] Star and what's possible with AI. For Notion, I think about, we're basically like a knowledge work system, right?\"}),/*#__PURE__*/e(\"p\",{children:\"And people do all kinds of different knowledge work tasks on it. You might be an engineer. Managing your team's knowledge base and the tasks and the projects, maybe a product manager doing your product road map and giving updates, you might be like a sales leader, making like a like a custom CRM and so much of what people do in Notion is these tedious tasks, right?\"}),/*#__PURE__*/e(\"p\",{children:\"Notion's core important concept is the database, like a relational database. And a lot of what people are doing is essentially like manual data entry into the database, right? Manually reading and writing to it. There's a huge opportunity there, but I see basically, let's lift up one level of abstraction and these tools like a database should become like an implementation detail and the AIs or some workflow that involves AI should be automating all those tedious steps and the human should be uplifted to be more like observing the final outputs and steering [00:46:00] them and, figuring out what like high level tasks are more important to us.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And is it a curation exercise? If you can reliably. extract information from their original source, whatever, listen to a conversation and capture it, or indeed with your connectors, pick it up from other systems and you put them into Notion. Then Notion as a knowledge base, is it about it being a curated knowledge base?\"}),/*#__PURE__*/e(\"p\",{children:\"Because humans have chosen what goes in and what doesn't go in or verified it in the process, as opposed to just having a fire hose access at any time.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, in the pre AI world, like for any use case, Notion is like the repository for it and the way that you read and write to it.\"}),/*#__PURE__*/e(\"p\",{children:\"I think in the AI world, it's also like the host for the workflow that actually, directly does that job to be done that the data is trying to accomplish. For example, let's say you're an engineering team, one of the things that an engineering teams do is they manage their tasks, incoming bugs, triage [00:47:00] them, figure out which bugs are important which ones are going to work on this week.\"}),/*#__PURE__*/e(\"p\",{children:\"When they're finished, maybe you want to like notify the right people, maybe tell the customer it was fixed. That whole end to end workflow should be automated. And then , the level of abstraction of the engineer working on that is thinking less about there's this ticket that came in.\"}),/*#__PURE__*/e(\"p\",{children:\"Is it a clear bug? Do I need repro steps? Should I send it back to the customer? And a little abstraction is like a little bit higher , on more of a strategy of which let's encode into the system which classes of bugs are most important for us to fix when it's something high priority and should be flagged to us, and when it's something low priority and should be backlogged.\"}),/*#__PURE__*/e(\"p\",{children:\"And then the AI is actually making those micro decisions and managing the database for you.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And I guess, how do you think about evolution? Notion. There might be like a lot of tedious data entry work done in Notion, but Notion is also like really good at that. Or rather it's a much more delightful experience to enter that data into Notion that it is into other tools.\"}),/*#__PURE__*/e(\"p\",{children:\"And I dare say that's one of the competitive advantages of Notion compared to some tools. And so if [00:48:00] that's the case, is there like a strategy change that you have to apply it? So say, Hey, of course we'll keep maintaining this but it's actually more important now, for instance, to invest in workflows than it is in I might be getting into secret sauce material over here.\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** So I think it's still both important. So the limit, let's say for the engineering tasks, triage use case that I just talked about at the limit, you could just ask like a coding agent, make this entire thing for me and it will make like a Postgres database, and then like Postgres database for your tasks, and then it will go, connect to the Zendesk API and input them, right? Like that will work at the limit. It doesn't quite work now, but I think in that world though, you still want a convenient data container and a permission model that is end user accessible.\"}),/*#__PURE__*/e(\"p\",{children:\"I think that would still be like much preferred. I don't want my tasks to be in some like Postgres database with a one off custom UI that was built on top of it. And who has access to it? And have I verified that? Is it also building me a whole permission model where I can see who has access and is it tested?\"}),/*#__PURE__*/e(\"p\",{children:\"And right [00:49:00] so I still think that world is really important. Even when the AI is automating 90 percent of the workflow, You still want to, maybe go in and see the current task list and, go look at the backlog and maybe be able to see one that, that shouldn't have been backlogged.\"}),/*#__PURE__*/e(\"p\",{children:\"And then, go add it to the current sprint or whatever it is. And so that's the way important. I just think of it, more like the balance will shift a bit more to the workflows. But this, like highly user accessible data container is still extremely important. We're going to, I think of it like, yeah, keep investing in that.\"}),/*#__PURE__*/e(\"p\",{children:\"And that's the foundation. And then, the workflows are like. reducing the tedious work.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And additional, I absolutely relates to that. I oftentimes say that you don't want to be in a place in which when you ask the LLM to create an LLM to create a tic tac toe game for you, it will have to create an operating system.\"}),/*#__PURE__*/e(\"p\",{children:\"Like you want to be able to build on reusable components that are good, shared jargon between different users. You want to go from one company to the other and be able to see familiar interfaces especially amidst things that are not necessarily true or not. They're just tastes.\"}),/*#__PURE__*/e(\"p\",{children:\"They're just preference, but [00:50:00] at least you can create commonalities and norms.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** So I think in the category of knowledge work like I think notion is conveniently made, like a really good data container for that. What do you need for knowledge work? You need a database, definitely multiple databases related to each other.\"}),/*#__PURE__*/e(\"p\",{children:\"You want like unstructured documents as well. And then you want them all wrapped up in a container that's convenient for users and for the AI. And with a clear permission model so that we can trust, what the AI has access , to read or write to.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. Yeah. Makes a lot of sense. So I guess maybe one last question is what is your wishlist in terms of the future of development?\"}),/*#__PURE__*/e(\"p\",{children:\"So when you think about AI powered software development. What's a, if you cast your eyes to the future, what would you like to have?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah. I would love to I guess similarly to the knowledge work thing, like I think of it as just yeah, successive layers of abstraction of abstracting away tedious work and getting me into higher level modes of operating autocomplete is like the most basic layer and with a new like Cursor one, it took me from auto completing this one line to actually it can do like [00:51:00] semi complicated refactors just by tabbing through the document.\"}),/*#__PURE__*/e(\"p\",{children:\"And then, if you actually like chat with AI, you can ask for a function basically, or maybe write some tests for me. And then, yeah, just like successive layers of abstraction can it do the micro tasks that I'm trying to do right now? That's like a, 30 minute task.\"}),/*#__PURE__*/e(\"p\",{children:\"Can I actually design and spec this entire part of the code? And, write all the tests and implement it? I would love for my level of abstraction to be more like a technical product manager. Then a coder at some point,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** right?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Where all I'm doing is just, getting rigorous about what the requirements are and roughly how it should work and then, yeah, letting it figure out like how to actually implement it and how to test it and, prove to me that what it wrote actually works and then, when when I have a feature request, I can just communicate that in some clear way that would be incredible.\"}),/*#__PURE__*/e(\"p\",{children:\"I think, yeah Not quite there yet, but that sounds good.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. We're one of those working on it. We'll get back to you in\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** the,\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Simon, thanks for all the the insights and the sharing here. It was a pleasure having you on the podcast.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Last:** Yeah, it was super fun. Thanks for having me.\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And thanks everyone for tuning in. I [00:52:00] hope you join us for the next one.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Thanks for tuning in. Join us next time\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** on the AI Native Dev\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** brought to you by Tessl.\"})]});export const richText1=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Introduction\"})}),/*#__PURE__*/e(\"p\",{children:\"In the latest episode of the AI Native Dev podcast, Simon Maple, the founder and CEO of Tessl, alongside co-host Ben Galbraith, dives deep into the transformative vision of AI-native software development. This episode highlights Tessl's unique approach to addressing the challenges faced by developers today. With Simon's extensive background in software development and Ben's insights, they explore the intersection of artificial intelligence and coding practices, emphasizing the importance of community feedback and upcoming product developments. This discussion is crucial for anyone in the tech industry looking to understand how AI can reshape software creation and maintenance.\"}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Tessl's Vision for AI Native Software Development\"})}),/*#__PURE__*/e(\"p\",{children:'At the core of Tessl\\'s mission is the recognition that current software development is heavily code-centric. As Simon articulates, \"the code couples within it both what the system does and how it does it.\" This intertwining of functionality and implementation can lead to complexities that hinder software maintenance and optimization. The vision behind Tessl is to leverage AI technology to decouple these elements, making it easier for developers to create and maintain software. By enabling a clearer separation between functionality and implementation, Tessl aims to enhance productivity and reduce the fragility of software systems. This approach not only simplifies the development process but also opens the door to more innovative and efficient coding practices.'}),/*#__PURE__*/e(\"p\",{children:'The significance of this decoupling cannot be understated. By allowing developers to focus on what the application does separately from how it does it, Tessl paves the way for improved collaboration among development teams. Each member can contribute expertise without being constrained by the intricacies of the underlying code. Simon emphasizes this point when he mentions that AI can help \"make software easier to create, but also easier to maintain over time.\" This forward-thinking approach is indicative of Tessl\\'s commitment to driving productivity and innovation in software development.'}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"The Role of AI Assistants in Development\"})}),/*#__PURE__*/e(\"p\",{children:\"Ben raises an important question regarding the efficacy of current AI tools: \\\"What is it about AI assistants that doesn't satisfy this shortcoming in where we're talking about development today?\\\" This prompts a discussion about the limitations of existing AI assistants in capturing user intent accurately and translating that into actionable coding tasks. The hosts explore how AI assistants can fill gaps in understanding developer needs. For example, while AI can generate code snippets, it often lacks the context necessary to implement these snippets effectively within a larger system. The challenge lies in bridging the gap between user intent expressed in natural language and the technical implementation required to realize that intent in software.\"}),/*#__PURE__*/e(\"p\",{children:'Simon further elaborates on the need for a systematic approach to capture user intent, stating, “It’s almost like systemizing how do you capture your intent, which oftentimes users express in words.\" By focusing on this aspect, Tessl aims to create a platform that not only understands user input but also translates it meaningfully into code implementations. This understanding is crucial for AI tools to be genuinely effective in the software development lifecycle, ensuring that developers can leverage AI support without losing sight of their original goals and intentions.'}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"The Shift towards Test Driven Development\"})}),/*#__PURE__*/e(\"p\",{children:'A significant theme in this episode is the industry\\'s evolution towards more structured development practices, particularly test-driven development (TDD). Simon reflects on the long-standing desire for this shift, noting that TDD \"wanted to motivate this style of development.\" TDD emphasizes writing tests before code, allowing developers to define expected behaviors and outcomes from the outset. This proactive approach not only enhances software quality but also fosters a culture of continuous improvement. By integrating testing into the development workflow, Tessl aims to create a more robust framework for building software that meets user needs effectively.'}),/*#__PURE__*/e(\"p\",{children:'The conversation around TDD leads to a broader discussion about the need for methodologies that prioritize quality and reliability in software development. Simon points out that \"sometimes you build something basic, and then you decorate, and you expand it.\" This iterative mindset aligns perfectly with the principles of TDD, where each test serves as a contract that the code must fulfill, thus reducing the likelihood of defects and improving overall system integrity. By fostering such practices, Tessl is not just following industry trends but actively shaping them, ensuring that developers have the tools they need to succeed in a competitive landscape.'}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Fundraising Journey and Industry Validation\"})}),/*#__PURE__*/e(\"p\",{children:\"Another key topic of discussion is Tessl's fundraising journey, which Simon and Ben present as a significant milestone. \\\"The initial round demonstrated that serious people had confidence in the vision that Guy had,\\\" notes Simon, highlighting the validation that comes with investor interest. This confidence reflects broader industry trends recognizing the potential of AI-driven software solutions. As the tech landscape evolves, investors are increasingly inclined to support innovations that promise to reshape software development, making Tessl's vision not just relevant but essential in today's market.\"}),/*#__PURE__*/e(\"p\",{children:\"Simon emphasizes that this fundraising effort is not merely about securing capital but also about validating their approach and vision. He explains that \\\"sometimes when you have these large raises with an AI company, it's clearly destined to fuel the development of something like a new foundational model.\\\" Instead, Tessl's focus is on building a platform that enables AI-native software development, showcasing a clear commitment to practical solutions rather than speculative technology.\"}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Iterative Development and Community Feedback\"})}),/*#__PURE__*/e(\"p\",{children:\"Simon emphasizes the importance of iterative development in Tessl's approach, stating, \\\"We think a lot about all these moving parts and try to bring them in.\\\" Tessl has engaged with a community of friendly users to gather feedback on their platform's iterations, allowing for a more refined and user-centric product. Community engagement is critical in shaping the tools developers need. By incorporating user experiences and suggestions, Tessl is committed to creating a platform that truly serves the needs of its users, enhancing both functionality and usability.\"}),/*#__PURE__*/e(\"p\",{children:'The iterative process Simon describes is fundamental to Tessl\\'s development philosophy. By involving users early and often, the company can identify pain points and areas for improvement, ensuring that the final product resonates with real-world needs. Simon mentions their \"hackathons of trying to create tiles,\" which are units of software, illustrating how hands-on experimentation and feedback loops are integral to their development process. This collaborative approach not only strengthens the product but also fosters a community of engaged users who feel a sense of ownership over the tools they use.'}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Future Prospects and Product Release Timeline\"})}),/*#__PURE__*/e(\"p\",{children:'Looking ahead, Simon and Ben discuss the anticipated product release timeline, hinting at a launch within the next 12 months. \"Can I push you on a month, day, and time for the product release?\" Ben playfully asks, underscoring the excitement surrounding the upcoming developments. Listeners are encouraged to join the waitlist for the product release, ensuring they stay informed about the latest updates. Additionally, engagement through the Tessl Discord community offers an avenue for direct interaction and feedback, fostering a collaborative environment for developers.'}),/*#__PURE__*/e(\"p\",{children:'This anticipation for the product release reflects the broader interest in AI-native development tools. As Simon notes, \"we are building a platform that enables AI native software development,\" which resonates with the growing demand for innovative solutions that streamline coding processes. The forthcoming launch is positioned as a significant step forward, promising features that will enhance how developers create and maintain software in an increasingly complex landscape.'}),/*#__PURE__*/e(\"h2\",{children:/*#__PURE__*/e(\"strong\",{children:\"Summary/Conclusion\"})}),/*#__PURE__*/e(\"p\",{children:\"In this engaging episode, Simon Maple and Ben Galbraith illuminate Tessl's vision for AI-native software development, focusing on the transformative role AI can play in this field. Key takeaways include:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"11px\",\"--framer-text-color\":\"rgb(0, 0, 0)\",\"--framer-text-decoration\":\"none\"},children:/*#__PURE__*/e(\"p\",{children:\"The potential for AI to decouple code functionality and implementation, simplifying software development.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"11px\",\"--framer-text-color\":\"rgb(0, 0, 0)\",\"--framer-text-decoration\":\"none\"},children:/*#__PURE__*/e(\"p\",{children:\"The significance of community feedback in refining development tools and practices.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"11px\",\"--framer-text-color\":\"rgb(0, 0, 0)\",\"--framer-text-decoration\":\"none\"},children:/*#__PURE__*/e(\"p\",{children:\"An exciting product release on the horizon, promising to enhance processes for creating and maintaining software.\"})})]})]});export const richText2=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"[00:00:00] - Introduction to AI Native Dev and Tessl's Major Announcement\"}),/*#__PURE__*/e(\"p\",{children:\"[00:01:00] - Guy Podjarny Introduces Tessl's $125M Funding Milestone\"}),/*#__PURE__*/e(\"p\",{children:\"[00:02:00] - Guest Introductions: Ben Galbraith and His Role at Tessl\"}),/*#__PURE__*/e(\"p\",{children:\"[00:04:00] - Understanding AI Native Software Development\"}),/*#__PURE__*/e(\"p\",{children:\"[00:06:00] - Addressing Current Shortcomings in Software Development\"}),/*#__PURE__*/e(\"p\",{children:\"[00:08:00] - The Role and Challenges of Large Language Models (LLMs)\"}),/*#__PURE__*/e(\"p\",{children:\"[00:15:00] - Tessl's Platform Development Journey\"}),/*#__PURE__*/e(\"p\",{children:\"[00:20:00] - Insights into Product Development and Community Engagement\"}),/*#__PURE__*/e(\"p\",{children:\"[00:29:00] - Tessl's Strategic Funding and Future Outlook\"}),/*#__PURE__*/e(\"p\",{children:\"[00:33:00] - Closing Thoughts and Call to Action\"})]});export const richText3=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** [00:00:00] We're building a platform that enables AI native software development. And so what we've been building so far is iterations on what that platform could be and can be tried. We think the right future for it is a pluggable system. It's a system that is open, that is extensible, that is able to allow builders and tool builders to, to build pieces of it, and then allow developers and developers teams to compose those into their own unique build workflows.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** You're listening to the AI Native Dev brought to you by Tessl Hello and welcome to the AI Native Dev. This is actually quite a special episode. And it's one in which we're [00:01:00] going to be making quite a significant Tessl announcement. Guy, why don't you kick us off with the announcement?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, indeed. We got a few bucks around the company. So we are announcing a 125M dollars in funding.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"This includes a 25M seed round that we actually did back in April. That was led by Boldstart and GV. And a 100M round that we've just concluded that was led by Index with participation from Accel as well as Boldstart and GV again. So it's a big news for us. It fuels us.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"We'll talk about kind of motivations and such more. But it sets us up to build towards that big vision that we have. So it's an exciting day.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** There we go. And we were so excited. We had to get that announcement out in the first 30 seconds. Now let's take a step back and as I mentioned, this is a special podcast.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"I'm going to be the host for this podcast and Guy, unusually you're not going to be the host for this podcast. You're going to be one of the two people that I'll be interviewing. Let's do some intros.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** God help us all.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** My name is Simon Maple. I'm the. One of the hosts, usually, of the AI Native Dev Podcast. I work for yourself Tessl and [00:02:00] I run DevRel at Tessl.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Guypo, why don't you give us a brief introduction for those who don't know you?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** I am the founder and CEO of Tessl. Before that, I founded Snyk, which I built into a multi billion dollar company with an amazing group of people around me in the developer security space and I am the co host here of yourself, Simon on it and have a pretty kind of rich background before that building developer tools in the DevOps space.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Wonderful. And we also have Ben Galbraith. Ben.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** I'm delighted to be here. I joined Tessl. I guess it's been about two months to lead product and delighted to be here as part of joining Tessl. I've moved to London from the Bay Area, California. Huge move for us. I've got a bunch of kids that have come with me and my wife as well.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And prior to joining Tessl, I was a Google for a number of years with product and design leadership roles on Firebase and Chrome and Identity. And before that, where we met was when I was at Walmart Labs running product design and the front engineering for Walmart's globally commerce stuff. And before that did a bunch of stuff, Mozilla and Ajaxian talking about [00:03:00] the dynamic web back in the day and a bunch of other roles and really delighted to be here on the Tessl team.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah. And it's fun. And Ben and I have been talking about doing something together for I guess pretty much since those kind of Walmart labs.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** 15 years, yeah.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** It's really fun to get the opportunity. The only part was to, have him move his family over here to London.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Yeah, it was a small thing.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** To do over here, but it's a big adventure, yeah, we're super excited.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Wonderful. In the celebratory mood, why don't we? Bubbly. Pass across some bubbles and so that people on the podcast as well as on the video can join us. Let's cheers in front of the microphone. So cheers, 125M to Tessl.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Cheers to the AI Native Development movement. Absolutely.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So AI, yes, AI Native Development. We know before we talk about the announcement had the money, the green in too much depth. Let's talk a little bit about the space. Now we know because this is the AI Native Dev Podcast, we know the space that Tessl is in, which is AI Native Development.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Let's first of all. And I know we talked about this Guy [00:04:00] in the first episode, but let's go a little bit deeper now and just talk about, see how that's changed. First of all, let's start with the pain points. So when we think about AI Native Development as potentially a solution or a new paradigm in which we see development going forward, what are the shortcomings of how software is developed today.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** So our premise is that today software development is code centric and the code couples within it both what the system does and how it does it And it's written into the very same lines, right? I guess a developer or an LLM you're reading the code and you're trying to parse out from the implementation both what the application does and how it does it.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Maybe you're helped by some comments. And this is just the reality of software development. The code becomes the source of truth and over time it gets more and more hairy to maybe parse it out. It gets bigger, the logic becomes more refined and optimized and edge case ads. And if the comments get out of whack because there's no immediate value to maintaining them or the documentation.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And so the code continues [00:05:00] to grow coupling this what and how, and they become very hard to remove and separate. And that really creates a fragility challenge in the software that gets built up every time you modify the how, which is necessary every time you maintain. The software , it lives in a dynamic environment.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And so there's a dependency. The change is open source, a component or framework on operating system or a service that you use. And so all of these things change. You have to change the system. Of course, you evolve the system. You add a feature. It might break another feature, and every time you do that, it's very hard to know that you haven't modified what the application does.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Once again, like if you're amazing at it, then for a while you would build tests, and even the tests, they combine both testing what the system does and how it does it. And so it really grows over time, and it's just been our reality. We try to tackle it with breaking the system out into smaller components and things like that, but fundamentally it's the core challenge that exists in software development, and we think there's an [00:06:00] opportunity which we can talk about to separate those with the world of AI for a variety of reasons, and we think that would help make software easier to create, but also easier to maintain over time and make it less fragile and easier to improve and optimize.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** I really like the articulation of the sort of what and how, and it feels as an industry, we've been trying to do this for a while. I think about, I don't know how many people looked at what Charles Simonyi was doing with this thing called intentional software 20 years ago, but he also had this observation that you've got a description of the system and documentation and comments, and then you've got code, which is a parallel rearticulation, and he tried to make the comments be the canon of the behavior and to drive the system. And I just don't think they had the tools that were necessary. And that's what's so exciting about the world we live in now with LLMs having this ability to fill in the gaps. And I think that's tantalizing. We've all had this experience with things like Claude and ChatGPT.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's seen what happens when you have a brief articulation. And then you see the LLM fill in all these gaps, but [00:07:00] that sort of leaves a lot of questions about, okay, so I've generated a lot of stuff, but how do I maintain it? And doing that in a dialogue with sort of a chat agent is a way to do it, but I think we've all found that it's not a very satisfying way to do it.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And so one of the ways I think about what we're doing at Tessel is how can we take what the LLMs have proven to be really good at and structure code in a way where you can have an ongoing maintenance relationship. And then one of the other big challenges is how do you validate in a meaningful way that the LLM got it right? Because randomness is baked into the system. Like all of these models have this notion of temperature, which is explicitly about don't do what you think you should do. Do something random. It's so creative. That's right. And so you really have to have some sort of a validation story coupled with this gap filling ability that LLMs bring to the table to bring spec driven development to life.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** And that's interesting. It's essentially the LLMs, the AI that's unlocked this. Obviously there are a ton of tools around as well today. A few. A few, one every day. What is it about AI assistants that doesn't plug this hole, doesn't [00:08:00] satisfy this shortcoming in where we're talking about development today?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** Yeah, I think there's at least two ways to think about it. One is the power we're seeing for these tools to augment the code that you write today. And that's a really powerful use case because it's really clear that these models are fantastic at generating snippets of code. And you have this opportunity to roll the snippet multiple times too.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And that's a really natural expression of what these things are good at. But if you take a step back and you ask yourself, how do you create an entire system in this way? It's really a different challenge. And so that's one thing that I think that separates what we're doing from the sea of tools that are out there.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And occasionally I see a few companies that are tackling this challenge, but by and large, it still seems to be a pretty wide open space to figure out how you can take these LLMs and create a way of programming. that capitalizes on what they're good at and recognizes what they're not good at and create truly scalable systems on top of that.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And I'm preaching to the choir here, but it's such a different way of thinking about software that it motivates a whole new [00:09:00] category. And that's what we're calling at Tessl, AI Native Software Development. To me, that's what that term is really trying to express. It's that it's a new way of developing how with cloud.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"When you really think about cloud and what cloud makes possible, you don't want to take a VM and shove it into into sort of some cloud hosts. You want to really think differently about how you design a system to take advantage of cloud. And that's really the type of journey that I think we're going to have to be on to really create entire software systems in this way.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"That's how I think about it.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** And I think that's a really good description around almost like systemizing how do you capture your intent, which oftentimes users, they express in words, the LLM fills in the gaps and it's useful but how do you then continue from there?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"What remains to me is indeed the second aspect, which is eventually today, a lot of these tools are different UX for generating code. They go through a more or less elaborate process of creating something. And then eventually they produce code and the code is the long lived asset. The code is the thing that lives from version to version.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Actually most of these applications don't really have a life that is a, [00:10:00] that is longer term, right? So they build those out and and maybe you export that and you continue to work with it in language. But really all it does is it. It modifies the code. So very powerful new user experience for the code, but the code is the asset that continues.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So it continues to conflate this how and the what. And the intent when we talk about spec centric is that spec will capture the intent. What is it that the user has wanted, including verification that we have a lot to do on defining them to say what do you want? And how do I verify that what was produced satisfies those needs?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And this is the thing, the artifact that we continue nurturing over time, we continue building out over time. And once you have this great kind of niche, like central entity that says what you want, and how to verify it's correct. Now you can really tap into that creativity of the LLM, And you can imagine multiple stages of non deterministic, creative, LLM powered or other optimizations and improvements that adapt that [00:11:00] implementation, that improve that optimization.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So I think that's really exciting. And that is that spec centricity. As long as you don't create the new asset, as long as all you do is you generate the code. You always have to decipher back what was the sort of the implementation intent and what was the intent in it. I think I want to highlight also one more thing.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's pretty obvious that the one unlock here is that machines can write code. Fine, LLMs can implement this and we're capturing it. But also, we're taking for granted, maybe a little bit, is this comment you made quickly, which is filling the gaps. Today, you can provide the machine, the system, an incomplete spec, and it would fill in the gaps.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"If you can say, create a tic tac toe game, And not say what are the rules of tic tac toe, because the LLM knows.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** Yeah.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** That's amazing. And it makes specs viable. If you compare them to the formal specs of old that are just so painful to use. That's right. It makes them viable, but it also represents [00:12:00] trouble, right?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It also represents a problem. It's like, how do I know which decisions it made? Which is another reason for needing the new development paradigm, because we have to figure out how do you Interact with the LLM's decisions. How do you figure out what it did? How do you define degrees of freedom between the spec and the implementation?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And all of those, they require a craft. They require some information which is what we're trying to build.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** It's super exciting because it feels like the industry's wanted to go here for so long. I think about test driven development and I feel like test driven development wanted to motivate this style of development.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"But when you, the human, are writing the tests and the implementation, it's just too much labor. It's too much toil. And there are a few shops that have managed to make it happen, but most people just don't get there. And now we have another opportunity to think in this way. I don't think specs will feel like a list of tests, in TDD, but I think the craft will feel similar to people who develop software that way.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And I should also say, I started as an engineer, but for most of the past, I'd say, gosh, 12, 13 years, I've been more on the product side than I've [00:13:00] been on the engineering side. And to me, that's what makes spec driven development really resonate because I'm a technical person, but I don't really care about what the current sort of fashion is for Swift or for TypeScript, and I don't want to learn new best practices, but I am very comfortable thinking very technically about what a system should do.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And if there's some new hot way to enumerate a data structure, if there's some new pattern for doing asynchronous callbacks, I don't really want to learn that. But I am very happy to spec out in collaboration with the LLM behavior That's a little bit higher level than that and to get a lot of leverage from that And we'll figure out the right level for where the specs should live and that's something that I think I'm really excited about with our community approach to engage the community and figuring that out together. We have concrete ideas with our current implementation, but we'll see if they're at the right level of abstraction but I'm really excited about this general level of altitude of thinking technically about what the system should do without having to get into the actual weeds of writing the implementation of everything myself and [00:14:00] being productive in that way.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Yeah, and that's great that you're just starting to lean into a little bit of talk about the implementation of how we're, not the implementation of the code, but implementation of a platform of Tessl. And, every single time that we talk about AI Native Development publicly, people go this sounds really interesting.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It sounds very much like a future that's very possible. But what does Tessl do? And I think, you know what? We've got a bit of money now. I think it's time to get a little bit more concrete. So let's talk a little bit about, first of all, the seed. So the 125M. has been raised so far. That's in two buckets.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"That's a 25M seed that was led by Boldstart and GV and then a 100M for a Series A. So let's first talk about the seed. When did that happen, Guypo?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** It happened back in April, in practice, over March with the two investors building it out.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It takes a moment to get all the paperwork in place and that helped us get off the ground. It helped get sort of two great partners for the journey and Ed Sim at Boldstart and Tom Hulme at GV. I am happy to be in a position in which I have more freedom to operate. And part of it is getting [00:15:00] amazing people to to join the journey and pursue a big mission on it.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And it helped on the fundraising side. It was easier than before. But I think it's very important when you build a business to be accountable, to need to explain to people, I'm a bit of a control freak. I don't like giving up control. But I do think accountability is healthy, needing to explain your actions, both to the people around you and to investors.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So that was good. And that was a, an opening shot to say, hey, we're building something real here. It's not some sort of whim that Guy is talking about over here, but a true mission. And that really is demonstrated by getting a great group of people around it. And getting a decent round of funding from top tier investors.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** If I can add a different perspective too, just as someone who talked to Guy a lot during this period of time and have come in relatively late in the journey so far. I'm just really excited about what Guy was able to do with the fundraising because the initial round demonstrated that serious people had confidence in the vision that Guy had, but when Guy started to talk through the potential of doing a larger round, it was really a powerful [00:16:00] validation of the concept and vision that Guy had incepted with the team.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And not to repeat your words, and also the team that we've been able to recruit here at Tessl, we're now about 20 people, it really gave us what we needed to be able to go the distance, because this is a bold new vision, it's going to be a long journey to figure this out, and we're helping to incept a whole new category.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And it was really important, I felt, just again, as a newbie outsider to see that we had the capital to be able to sustain this journey and that we weren't going to be under pressure to try to figure this out. And are we going to have to make compromises and go in weird paths?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"We have enough capital to really see this through, which is just a really exciting place to be. And that's my perspective.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** And Guy, this is interesting, actually, because whenever like with startups, timing matters, right? So Guy, obviously with, 125 million now, that puts a lot of cards in your hand.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"What does that mean from a timing aspect?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Yeah, so I think there are a bunch of reasons to indeed add [00:17:00] around. Ben just mentioned a few, which is to give us stability to go the distance and give everybody involved, ourselves, to build the right thing, the community to say, hey, we can invest in this.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Some of these things will materialize very quickly. Some will take a while. Our customers or would be customers to know that this is solid foundation that they can build upon. And so all of those were important to go further. They didn't have to happen right now. We haven't quite consumed much of the 25M that were originally invested.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"But I think the opportunity came to just get a really great investor in Index and Carlos, and then have Excel participate again, fundamentally, I guess having been in this world for a while now, both as the founder of Snyk and building that out, but also with the many angel investments that I've made, getting the right investors on board.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's not a trajectory changing path for the company. But if you get the partners, the right partners to be with you for the journey, them as individuals can be very valuable. They offer a different lens on the world because they look [00:18:00] at the macro. They start by looking at the whole market and the whole path.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"You're building the company and then you have people in the team that look at the very bits and bytes and the low levels and that completeness of perspective is very important. Carlos was the CTO at GoCardless before this in general, I've known him for over a decade, I think now and and so having that, that right lens is very valuable.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's also useful, and I see this now in Snyk, to have people that have been along for the journey because they build with you the appreciation of what's important to maintain. And because we're, we're planning here on a long lived company right on a company that would eventually go public and would be sustainable company in the industry It's important for those significant shareholders and original investors to have that conviction around where it's going and not just be excited by the traction or the path we're early in it and I think this investment on the investor side, of course, I'm putting words in their mouth, but it really comes in because they are excited by the team.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"They're excited by the vision [00:19:00] and they're excited to build it together. They themselves believe in the thesis and the change that will happen and they want to be part of it. So it's great.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** I just want to clarify one thing. Sometimes when you have these large raises with an AI company, it's clearly destined to fuel the development of something like a new foundational model or some other complex deep model development.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And I wanted to clarify, that's not our vision. We think we can get where we need to go on top of the existing foundational models and other models that are emerging from the ecosystem. So don't think about this raise as being motivated by a race to burn in order to out innovate some of the other foundational model vendors.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"This is really about having the resources to build the team that we need to create what we're trying to create.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** With 25M, you were able to afford myself\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** and I needed another 100M to hire Ben.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** With the change you were able to hire another 19.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** I've got a lot of kids that take a lot of money to move the circus, my friend.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Now publicly, obviously Tessl's done a fair amount already. This podcast we've launched a virtual conference, which is happening on the [00:20:00] 21st of November, all around AI Native Development and some of the tools and practical advice about how organizations can get started using AI powered tooling today.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"We've launched a community last week which is the AI Native Dev community. Go onto Discord. You can talk with like-minded people and talk a little bit about how we are getting on with Tessl as well. But it's a vendor neutral community there. When we think about what's actually happening under the covers though, the things that we haven't announced, is there anything more we can talk about the platform?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"What we are actually building? How far we've got today.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Look at Tessl we are building a platform that enables AI native software development. And so what we've been building so far is iterations on what that platform could be and can be tried. We've been working with sort of friendly users to give us feedback to see which parts are terrible and which parts are are compelling. Our own team is using it. And, we do these hackathons of trying to create tiles, which are our unit of software and seeing what we like about it and what we don't. And we've [00:21:00] been iterating, we're on a second major generation of the platform, even though it hasn't seen the light of day, we are iterating on it substantially.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And we're building it out towards and early 2025 beta to start putting people into it. There's an interesting mix here in which on one hand, we firmly believe in shipping it and in being out there and in allowing users to tell your product is terrible and hopefully say why.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So you can fix it. You can improve it. And since we're trying to build something big, we have no illusion of getting it right on the first take. At the same time we want to be respectful of people's time. We don't want to, just have everybody face problems that we can already identify and address, we want to be able to demonstrate enough of this sort of enticing future of AI Native Development and give users an opportunity to engage with them.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And so we're working between those. It's important for me to just further emphasize is that there's a risky trend that happens with every new technology trend, but specifically in the world of AI, to favor walled gardens, to favor small, closed ecosystems that are [00:22:00] very opinionated, it's easier to, to grok, to absorb a new technology, definitely something as disruptive as AI.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Within that more confined context and a lot of the companies in the space right now are naturally leaning towards that. Hey, I will do the end to end thing. And we actually discussed this in the podcast several times. And Matt from Netlify just mentioned this, but the context of the web and we talk about, is it one product that understands the code base and therefore offers you everything around it?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Or is it composable? We believe in an open ecosystem. Then we think eventually. tech moves, it shifts new ideas, new technologies come along, different innovators build different pieces of it. And so what we're building, while we aim to build a sustainable end to end flow, that doesn't require something else, you'd be able to use it and produce powerful things on it, on its own, we think the right future for it is a pluggable system.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's a system that is open, that is extensible, that is able to allow tool builders to, to build pieces [00:23:00] of it and then allow developers and developer teams to compose those into their own unique build workflows. And so we think a lot about all these moving parts and try to bring them in to this initially more contained community that we'll start at the early next year.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"That again will call us on all the sort of silliness that we might have in the platform and and will allow us to improve the product and we will grow that group as we improve the platform.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** Yeah, from a product perspective, this is one of the more interesting decision points is at what point do we bring the system out to engage the community because we have these expansive visions across so many dimensions about what we want to do.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Like we have ambitions for what spectrum and development. means. And we have milestones along the way that sort of take us there. And there's a temptation to release it at the first milestone. But do we wait? Do we refine it? Do we prove it out? Or do we just let the community give us feedback?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And we think about that with our generator. We think about that with the way that we generate documentation with the system. We think about that in terms of like the types of systems [00:24:00] that we facilitate you building. There's decomposition is a big part of the system, this notion of if you have a really complex system that you want to build, how do we help you factor that into simpler parts that can be effective?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And how much do we want to invest in the decomposition engine and what's anyway, just this balance of figuring out the right movement to surface it for the community is a challenge and it's a fun one.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** And over the last, few months, obviously with various product advancements from Tessl engineers, are there anything you want to call out as specifical learnings in terms of, obviously, we've been sharing with certain friendlies who are giving us feedback on the product.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Are there certain things that, our listeners can take away, really interesting takeaways.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** One thing that's just lately on my mind from the latest testing session and feedback session is the relationship of the information generated because there's this sort of asymmetry from the input you have in the system. I want a system that does X. For example, I want a system. That's a silly example is I want a utility that helps me convert between color spaces and you have something that's really simple and then you put that in the system and it can generate a ton of [00:25:00] information from that. We have the ability in the system to do like a big one shot generation, if we really wanted to, that sort of decomposes that into different pieces and creates specs for the different pieces and a lot of code.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"But it can be overwhelming for people to process if you go from like a prompt, this just drop of like dozens of sort of pieces and we're really thinking through what is the right creation journey to go? And do we really want to bring you in an attended fashion along multiple steps in that journey?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And I think we're finding that for some users, the answer is yes, they very much want to go along the way they want an opportunity to look at decisions that the system has made the sort of gap filling we talked about earlier. And understand it along the way and maybe influence it. Whereas other people just feel like, give me your best shot, and I'll take a look at it, and I'll decide if I like what you generated.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"That's one of the design challenges that we're puzzling through at the moment.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** It's also interesting that eventually, we think all of those workflows are legitimate. There isn't one way you develop software. Sometimes you build something basic, and then you decorate, and you expand it.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Sometimes you design something quite elaborate at the beginning, and you build it. [00:26:00] Neither of those is correct or incorrect. They're just You know, whatever fits that person, the current setting. And eventually software development should have flexible workflows. You should be able to choose those.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"But at the moment, we're trying to shrink it something that is shippable, that people can start. And related to that is this debate of customizability. We want to demonstrate AI Native Development and one path of temptation is we're going to pick a workflow that is, the workflow of generating software that is AI native, that is spec centric, but that accommodates only one option for those things versus a second path that is actually like injecting in a bunch of these places extensibility and tinkering and modification, which we want to enable because we think that is the right path and also would be relevant to our users, but there's a certain amount of the more options you give, the less streamlined the experience. So I think all of that is really interesting to me.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Probably the biggest learnings are in the world of what the LLMs do and do not do well today. And this [00:27:00] challenge of capturing generation in a delivery plan, right? And how do you bring it forward? How do you advance it? I think it's interesting. The LLMs are very good at certain generations and then not so much at others.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"One thing that I was dismissing at the beginning is how much they're willing to cheat. If you give them as a part of that spec, you give them the tests. Initially the team was quite concerned about them cheating and writing if statements. Oh, you told me that the test is if I get three I return seven So it'll just write code that says if I give you three I return seven.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"It's just like nah That's not like the LLMs are not designed to cheat. They're designed to give you a correct answer and then they would also do it lo and behold they cheat Quite well, there's all these like human traits of how the LLMs behave and it's interesting because sometimes the way to address those are human emphases.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Either you like emphasize in the prompt to say, do not do that, or you supervise you introduce a critic that says , did they cheat? Did it cheat? It's the same as pretend code, right? You tell it generate a QR code [00:28:00] generator. It's here's the placeholder for the QR code generators.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"No. I told you to generate this, not to and so I think dealing with these eccentricities of the LLM is to me the the primary insight for us, like in terms of sharing. I think there's just a lot. And some of those I think are probably learned by every AI dev tool out there.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"I think we try to focus more on what is the software development. process here and build these things because we think some of these problems we will solve and some of them we will give the sort of the workflow the system and we actually want to tap into the kind of creativity and brilliance of others to say here's how I solve it or even this is how I solve it for my specific scenario\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Let's jump back to the 100M series A, Guy?\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"What do you think about these AI startups and companies that are raising stupid amounts of money and on ridiculous valuations? What would you say?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** We could have raised at a higher valuation, but we chose to be robust [00:29:00] here and choose a modest valuation. I'm just, Joking.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"We're rated at a pretty good number. I think there's a whole bunch of reasons why this happens, and I think some are better than others. I think there are definitely companies that are just blinded by the sort of the sheer numbers and investors. Investors have very complicated incentives.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"You can go from the most cynical route, which is some investors are playing the fees game, like investors get paid both on carry of return or a portion of the returns that they bring their investors and on fees. And so if you're like most cynical, you can talk about them just deploying fast amounts of money, they're still going to make a lot of money.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"You can talk about just like learnings, they have to be in the game, they have to try them out. And even if there's a few, failed investments they have to do it, but also there's just firm belief that some of them, you don't know which ones, but some of them will like, look at OpenAI, become incredible businesses.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"OpenAI's valuation is eye popping, but their business is pretty ridiculous and how quickly it grew to like billions in revenue. And so [00:30:00] I think there's definitely an element of true belief. I do think that within these fundraisers, there's, you can loosely split them into these two camps that Ben mentioned.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"One is big raises that are needed because you need big money to buy GPUs and train your system on it. And those are harder for me to grasp. I think again, people have all sorts of thoughts about them, but they very industrial to me in nature, you have to depreciate to these models very quickly.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So you're building a factory to train the model, then you're burning it down. There's power that gets lost.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** I have to say as someone who's new to the UK, it reminds me of F1 in a sense, right? Like before the budget cap, right? Like you can feel the team on a shoe string budget. But you're probably going to lose to Ferrari, Mercedes, and maybe McLaren.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"If you don't build those out. They're really well funded, because I think of the big vendors in the space, the big players that we all know, OpenAI, Google, Anthropic, it's hard to imagine that any startup, even if you have a fantastic race, can go the distance.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** If you're playing this game. You have to have that money.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So the startups make sense to me and the [00:31:00] investors. It's just a question. . And then you have the other set, which I believe we are part of which is the reason they're raising the large rounds is because they're taking on a big mission and we are seeking to go the distance and do something big.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah. Those are just opportunities. There's sort of two reasons not to raise money. One is optionality. Basically every time you raise, you're doubling down on the company because you've just raised the valuation for any potential exit or acquisition. And I think we're quite committed, I can definitely say for myself, and I think the team, everybody came in with that conviction, which is we're trying to build something big, and so for us it was less of a factor.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And two is, if you spend the money ahead of actually being ready to spend the money, so you use it unwisely. And I think over here we're relying on our discipline with the experience in the team and myself to be smart about how we how we spend the money and to be ready to hit the gas when we are ready, but not to create fake product market fit sensation by spending money.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And that's why you have to sell that Ferrari.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Is that why this is that why this is just apple juice and sparkling water? Exactly. [00:32:00] So let's talk about the future then. Let's finish off with that. Can I push you on a month, day, and time for the product release?\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** January 15th at 4 p. m. We've pre decided, no we haven't decided on the launch date. We think about it more in terms of making sure that the product is ready for this community that we want to give it to so that it really doesn't waste their time.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"We're innovating on what it means to do AI Native Development, and we want to find the right starting point where you see the vision we have and you can realize aspects of that vision in the system and we have meaningful extension points where people can put their labor into it and move things forward.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"What we're not trying to do is have a Tessl proprietary platform and invite volunteers to enrich Tessl. We're really trying to create a community that is expansively defining this category together and we're providing some tools, but we want people to really feel like the skills that you're creating by using this tool are general skills that will apply to this new category that we're helping to create with AI Native Development.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"So [00:33:00] we are planning to have something ready in early 2025. That's the target. We're not more specific than that, but we really do want to bring it out to develop it in the open with the community and not be in a lab doing an R and D project for the next two years.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Yeah. Yeah.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** So something definitely within the first 12 months I thought he said December 15th, no? Did\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Ben Galbraith:** you hear December? This is our journal road back conversation.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** We talk about, I think we have all have strong conviction to say, to ship it to bring it out there.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And indeed it's balanced with that sort of desire for breadth good opportunity to maybe call out for the listeners is we have now opened our waitlist. And so you can now go to Tessl.io and sign up for the waitlist. You can tell us a little bit more about yourself. That would help us pull you in sooner because we want a variety of users within our early community.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And we're very keen to open that up. And so nobody's more impatient than us in bringing it out there. So I'd encourage the listeners here to sign up and we will pull you in as soon as we can and in the meantime, we'll keep you [00:34:00] posted about development and would love for you to engage in our community and the upcoming conference.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Yeah, absolutely. The waitlist is great for the product. And then of course, if you're just dying to carry on talking about this, of course, we have the podcast. So feel free to subscribe to that. We obviously have the Discord community, which you can connect to from our website AI Native DevCon, which is happening in a couple of days, actually.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Let's talk more on the community. Ben, Guy, thank you very much for joining. Thank you, Simon.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Congratulations to all of us, and everyone at Tessl for this amazing raising moment.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Guy Podjarny:** Indeed. And I just thought it was a good time to say thank you to everybody that has engaged so far and to all of you who will engage in the future.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"And there's a big, exciting journey ahead of us. I know we say this all the time and maybe it sounds cliche, but we really think that this is a group effort and this is a community effort. And really excited to bring a platform to you and then excited to see what you built on top of it. Thanks.\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Amazing. Cheers\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"**Simon Maple:** Thanks. And tune in to the next episode when Guypo will be back as the host next week Yeah, indeed like it or not[00:35:00]\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"‍\"}),/*#__PURE__*/e(\"p\",{children:\"Thanks for tuning in join us next time on the AI Native Dev brought to you by Tessl.\\xa0\"})]});\nexport const __FramerMetadata__ = {\"exports\":{\"richText3\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText1\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText2\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}