 Where are we actually? Okay, glad you asked, because I did think a little bit further than you, since you've started driving and you've no idea where you're going. I thought since we went to the boozer in England, we could this time continue the trend but go to a vineyard. Ooh, that's a... Keep it classy. See now, look at this, right? I kind of feel like, yeah, all right, like we did the pub before back in England. But I do think this is a slightly better view. How qualified do you feel? Not at all. I know you're going through this. I know it's red or it's clearish kind of colour. It's nice and it's not nice. It's one of those, very binary with my wine tasting. And I have an upper limit of about five pounds or eight dollars. And if it's more than that, it's probably not worth it. Anyway, right. So since we're here, we tend to talk about the web and today I think is no different. I want to talk about libraries and frameworks. Ah, yes. Because you're not big on the frameworks, are you? No, and neither are you. On the other hand, I am not big on the frameworks. Yes, I don't think there's going to be much of an argument, but I do want to talk about it because it bothers me that I seem... I perceive that the default state of developers is, I've got a blank page here. How am I going to fill it out? Ah, I need a framework. Which one do I use? That is a problem I have for frameworks that they have way of starting projects. There's a kind of expectation to use them from the offset. And I think if you're thinking what combination of frameworks should I use to render this blank page, then I think something has gone wrong. Yeah. For me, it's entirely from a performance point of view. Well, no, it's not actually, but okay. Step one, performance. If your page has to load a ton of JavaScript in order to make a request for the actual data it's going to display, you've lost performance. And you can sort of say, oh, but next time it's going to be cached, it might not be. You might have changed code, busted the cache. And it's an assumption that somebody's going to come back again. Right? Well, it's your goal, I would say. It's your goal, but you don't know that somebody's going to. It's like paying a big hefty tax on the assumption you're going to get a repeat view. That's true. No, it's true. You might not. Yeah. And stuff falls out of the cache all the time. Yeah, exactly. So not the service worker cache, though. Oh, human service worker. Here we go again. Service worker. One trick pony, Jake Archibald. Come on, but it's got the cache. You can rely on it. All right. Okay. Performance that notwithstanding. I think for me, it's about code ownership somehow. It's about a level of trust that I don't necessarily feel. And what I want to do is I want to be able to feel like my application code is the thing that's running, that I'm not running through something else, that I don't necessarily understand. Running through something else is fine, because that's what a library is, right? That you've got hold of both ends, and you're running through bits of library that you don't understand. But that's fine. Because if one of them starts misbehaving, rip it out, either code it yourself or find a replaceable library. But when you're going through something else, to kind of get something else, I think, with the framework, and the framework will then do little bits of, it'll give you scraps, and then you do something. Please, sir, can I have some more? I'd like to work with this application. Can you please send this data up in it? Get out. But then the frameworks, you're kind of, you're sat in a tiny bubble of the overall application with the framework. And I feel like to get the most out of the framework, you need to understand how the framework is built. And these frameworks are huge. So it's really good to do that. I actually feel maybe, and maybe this is wrong, but it feels to me like it's a kind of, the decision is an ergonomics one. Like a developer is saying, my ergonomics trumps the user's requirements. I want to feel like, you know, my job is easy, and what the user gets is what the user gets. And my whole approach is very much the other way. I'd rather go the extra mile and all my users benefit than my life is a bit easier, and I'll take some of the bad performance or the tax of using that framework. So I don't think that frameworks are inherently evil and to be avoided, but I think you want to be able to transition to one and say, yeah, now it feels like we're getting to the point where we're going to reinvent that. And I think you can only do that when you've got to a certain point with the build. So for you, it's start lights, start with libraries as when you need them, and then make the jump to frameworks only if you have to. Agreed.