PurePerformance - Spring: The successful path to an open source project with creator Juergen Hoeller

Episode Date: October 14, 2019

16 years and still growing! Not every open source project has the track history of Spring (www.spring.io), a framework for building modern applications for the java runtime.Juergen Hoeller (@springjue...rgen), creator of the Spring framework, gives us insights into how he and his team have grown Spring to where it is now. We learn how they have built a developer community, how they deal with feedback, why its important to interact with your users on a regular basis and where the road is heading. Juergen also shares insights on topics such as scalability, performance, concurrency of the framework as well as how the rise of new java runtimes and distributions still keeps him excited about the future of Spring.If you want to learn more visit the Spring Framework’s GitHub project and make sure to read up on the latest blogs on https://spring.io/blog/https://spring.io/https://twitter.com/springjuergenhttps://github.com/spring-projects/spring-framework/

Transcript
Discussion (0)
Starting point is 00:00:00 It's time for Pure Performance! Get your stopwatches ready, it's time for Pure Performance with Andy Grabner and Brian Wilson. Hello everybody and welcome to another episode of Pure Performance. My name is Brian Wilson, and as always, is my co-host, the one and only live from... Are you in Austria today? Or I heard you say something about Germany and Frankfurt. So where are you live from today, Andy? Andy Grabner.
Starting point is 00:00:44 Hey, now I'm actually live from Linz, Austria, but I'm actually, you know, what's interesting. I might, I might not be the only one because I know there's another Andreas Grabner who actually is also in IT. He went to school close by and I think we only have like two or three years of difference in age. Wow. So there's another Andreas Grabner out there in the same industry, believe it or not. So, but I am the one that is doing typically the podcast with you. I will never call you the one and only, like I not the one and only brian wilson i'm not the although i would call myself if i had to give myself a title i would call myself the brian wilson because the beach boy is just brian wilson so i'd be like no i'm the brian wilson that's true but anyway i
Starting point is 00:01:19 digress um we've got a we've got a pretty cool guest today don don't we? Yeah, I think it's a man that should not need any introduction, especially for people that are active in the open source community around Java about a certain project that doesn't have to do with winter, neither with fall or summer, but with spring. Oh, that was it. I'm sure it's the first time you heard about that. I don't hear that often. But yeah, I love the connotation with the spring, the season.
Starting point is 00:01:49 And the greenish coloring that we do around it. We really mean it, right? So Jürgen, so we just revealed the secret. It has to do with spring, the spring framework. You are, I mean, just introduce yourself to the world in case people haven't heard about you. Yeah, just in a nutshell, I've been doing what I'm doing for quite a long time.
Starting point is 00:02:13 I've co-founded what became the Spring Framework project back in early 2003. And I've been serving as the core project lead doing the release management, everything around it, and quite a bit of the core development ever since. So I have had my responsibilities, my core responsibilities, for 16 years and counting. And I've been doing lots of things on the side. So I go out there to conferences talking about Spring
Starting point is 00:02:41 and what we're doing at the core Spring framework level. And, of course, there have been a few companies around it. We've had Interface 21 Spring source. We were part of VMware. We are now at Pivotal. So at Pivotal, we have, of course, an entire team working on the Spring open source portfolio. And I've got a team of roughly six people working on the core framework with me.
Starting point is 00:03:07 And plenty of other engineers working on other Spring projects like Spring Data, Spring Boot and Spring Integration. All of those projects have their own dedicated teams. So I'm literally working on the core framework of it all, right? On the core of the stack. And we actually met earlier this year in Krakow in Poland at a conference. At one of those conferences. We said, hey, you know, we live so close to each other
Starting point is 00:03:32 because we both live in the Linz area. And it's just interesting that we typically bump into each other at those conferences. Yeah, that's how it works in this industry. But talking about things and presenting at conferences is a key part of what we're doing. Like any open source project basically is only there to be used out there in the real world by people.
Starting point is 00:03:52 And in order to just keep it going and to motivate people to kind of keep up an interest, to keep upgrading to the latest, talking about it is just a key part of it, right? Development is like actual engineering is only a part of the story, of course. So 16 years and counting. I know it's obviously a success story. I believe, as I said earlier, I believe most of our listeners
Starting point is 00:04:19 that have anything to do with the performance engineering space and are dealing with Java-based applications, they most likely run and are aware of Spring. So let me ask you a question now. I know you're not in marketing, because you clarified this earlier when we did that little check in the beginning.
Starting point is 00:04:36 But what's your elevator pitch? What's your elevator pitch for Spring? What is Spring? What does it do for me in case I'm not using it yet? And I know I kind of throw it into the cold water now. Yeah. But it will be interesting to hear. Oh, I'm totally using it yet? And I know I kind of throw it into the cold water now. Yeah. But it will be interesting to hear. Oh, I'm totally unprepared.
Starting point is 00:04:48 No, I actually am unprepared. I don't usually do elevator pitches, but more like 60-minute pitches. Okay. Engineering pitches. But it is a very sophisticated portfolio of application frameworks. I mean, it is kind of an application development stack for Java, for the JVM, the Java Virtual Machine, with both Java and Kotlin as first class languages these days
Starting point is 00:05:13 and Groovy as well, more on a historic note. But there's still quite a Groovy-minded audience out there. So we basically provide a toolbox of components and the framework arrangements for all the sophistication that is needed out there for modern day application development purposes. And this is a wide range, right? From the good old monoliths of, well, the mid 2000s to modern microservice architectures and even function as a service models, we have quite a range to cover. But of course, we have our traditions.
Starting point is 00:05:48 We have an audience that is kind of evolves with us. And at the same time, we are also very much on the forefront of providing a modern day entry point into the Java ecosystem for an audience that might not have used Java, the JVM or in particular Spring on the JVM before. So it's kind of quite a few challenges,
Starting point is 00:06:08 and I'm right in the middle of it, I suppose. That's pretty cool. What's the, I mean, 16 years, it's amazing, right? Many projects have started and probably never made it to the public light, or let's say critical mass. What's the secret of success then to actually run a project like this? And it's also a little selfish question now because you know that we just launched our own
Starting point is 00:06:30 open source project called Captain. So we are still in year number one, so we'll see where we are in 16 years from now. But what can we learn from somebody like you? Well, man, all the power to you and Daniel Trace for actually being motivated to start a new open source effort.
Starting point is 00:06:47 The open source ecosystem is very diverse. But as you were hinting at, there's so much code written out there, in particular also as open source, that never really goes anywhere. The best code out there not getting picked up and used by anybody is basically in Maine, in Maine, right? Yeah. And I've seen quite a few things come and go, like actually reach mainstream potential at least, and then fade out again, right? I've seen Apache Struts, which was kind of the reference web
Starting point is 00:07:19 framework of the early 2000s. I've seen it rise to enormous popularity and then kind of fade out from there just in the course of a few years. And of course, struts on Spring was a thing for a while, right? We had all those integrations. I was literally there in the buff session at Java 1 2001 where the first proper struts release was announced, right? Where struts went generated available. So I've seen Hibernate, of course,
Starting point is 00:07:48 which is still very popular, grow along the same lines as we have. But it is certainly unusual for an open source project to stay relevant, remain relevant for such a long period. I mean, Java itself dates back to like 95. So that's quite a while. such a long period. I mean, Java itself dates back to like 95, right? So that's quite a while. But we've been a part of Java and the JVM ecosystem and of that story for such a long while ourselves, right?
Starting point is 00:08:18 We started in 2003, and that is basically like roughly just two-thirds of Java's lifetime overall that we've been a part of it, right? Like in the ballpark. I'm always quite amazed myself that it's already been so long. And in order to kind of foresee that such a lifetime, well, it's basically just hoping for the best and doing the best you can, right? But you never know, right? We, I have had those questions in the 2000s,
Starting point is 00:08:53 even by some people around me, like when spring reaches kind of the struts level of popularity, what are you going to do with it then, right? Well, I guess my personal philosophy, the philosophy we have in our team is a bit different there. We see an open source project as kind of an ongoing effort, right? An effort that you're never really done. You need to keep up with the time,
Starting point is 00:09:18 evolve with Java, the language, the JVM infrastructure underneath it, the open source ecosystem around it. You shouldn't get stuck in kind of an architectural vision that you initiated the project with. You really need to kind of reinvent yourself to a degree every couple of years. The part that is probably sort of, if not unique, then at least special around Spring, is that we never really threw everything away and started from scratch.
Starting point is 00:09:53 There are so many projects that kind of keep using the same name, but essentially reinventing to them means rewriting it from scratch. Struts 2, which really was a totally different code base, totally different project arrangement. We've never really done that. So we kind of try to keep the balance between a careful evolution and a mild degree of revolution at the usage model, at the development experience level. This is a fine line to walk without breaking all the integrations that we have, because Spring is a very integrative affair. We have so many integrations with other open source projects,
Starting point is 00:10:30 with commercial infrastructure, with all the application servers of the day out there. Some of them we maintain. Some of them, and actually a lot of them, are maintained by third parties, by the corresponding vendors, by open source volunteers. Anything we do that breaks a wide range of those people out there would backfire quickly.
Starting point is 00:10:54 So that's the fine line, right? So keeping up not only the APIs, but also the SPIs within the framework while you evolve towards a direction that you want to go is the challenge that I'm personally also very up to. Of course, there's always a little bit of an itch, right? What if I was starting this from scratch? Would I do this differently?
Starting point is 00:11:19 Of course, you would always do it differently to some degree. But personally, I really appreciate the challenge of um of evolving and existing arrangements a very sophisticated complex arrangement uh it's a different challenge uh but something i'm personally very up to um it's i i find it exciting to kind of move it forward uh from where it is to where we want to have it, and to take our community with us. If we go in a direction and the community is stuck on some old version of Spring and basically doesn't follow, then we've also failed, right? We've done something wrong.
Starting point is 00:11:54 And we've seen that in the Java space just recently. There's this quite radical change around the OpenJDK release cadence with Java 8 as the last traditional major release, very established out there in the industry. And then there cadence with Java 8 as the last traditional major release, very established out there in the industry. And then there's basically Java 9 and higher. And there's really a bit of a gap, right, in the community there between all the people on Java 8 in production and the more ambitious,
Starting point is 00:12:20 or, well, I don't know how to classify them really, but a different part of the community that has made the jump to Java 9 Tire and follows along and is now on Java 13, recently released and knocks on our door and saying, what about Java 13 compatibility, right? There's really quite a diverse audience out there. And our challenge is to keep all of them happy, right?
Starting point is 00:12:42 Brian, did you want to say something? I'm sorry. Oh, no, I didn't interrupt. But yeah, I did actually have a question. So you mentioned it started in 2003. So I'm going to make a music analogy here because that's more my background. So typically, if you think about like a band, right?
Starting point is 00:12:55 Something that's not a corporate songwriting team, a standard band goes through some growth. They have their early fans. People are keeping them afloat. Then they get more popular. But a lot of people don't hear about them until suddenly they have a breakthrough and they get on the radio or maybe they're on top 40 or something. With Spring, you've been around since 2003. I'm kind of like the grandfather who only hears the hits on the radio, right? So in my position,
Starting point is 00:13:23 we're dealing with monitoring software. So I see what know, in my position, you know, so I'm, you know, we're, we're dealing with, you know, monitoring software. So I see what our customers are using when we go in there. And I'd say, you know, spring really started becoming noticed, at least from my side, from, from the commoner side in the last three or four years, which is a far, that's an interesting observation, far, far, far push out from 2003. You know, this is like an enterprise and all that. But thinking back from 2003 till now, was there a time when sudden,
Starting point is 00:13:54 like was there a performance knee where you kind of hit critical mass and it just started taking off? Or has it just been a really slow, steady, you know, stream of increase? Yeah. What was that compelling moment, that compelling event, something like that?
Starting point is 00:14:09 That's an interesting question to reason about because there have been several points where we had a bit of a jumpstart into the enterprise in particular, but there's also a strong, steady growth. I mean, if we just take the download numbers, basically, they just kept going up. And in the original days, we've always been monitoring them like every morning.
Starting point is 00:14:34 But there have been a few key events. Back like, was that in 2007, when IBM made Spring a first class citizen on the WebSphere stack and kind of had official guidance, like even community pages with how to use Spring and Hibernate on WebSphere application server, that we saw a significant boost of interest from a certain part of the community out there, of course. At that point, when we started really getting into specific fields of enterprise integrations, launching the Spring Integration Project, launching Spring Batch, almost a bit of a unique kind of affair in the open source ecosystem. You only had commercial choices before, commercial development models,
Starting point is 00:15:24 and now you had an open source project for these really enterprise-y areas. That was quite a boost. And of course, and that might explain your observation, Brian, the launch of Spring Boot in like 2013, well, early 2014, when it went GA, Spring Boot, of course, just re-energized the entire community that we already had and also attracted a lot of new people and kind of enabled a lot of different architectural models. So even if we don't call it, we never called it a microservice framework. We don't actually use the term microservice much at all ourselves.
Starting point is 00:16:07 But it turned out to be a really good fit for microservice-oriented architectures. Then, of course, the Spring Cloud project, which we actually mean is a very specific toolbox arrangement for integration with specific cloud providers, also evolved around Spring Boot. So this really brought us to the level that we're in now. And this is, of course, you can't plan for the CEDAW. We had a Spring Boot-like vision even in 2007, 2008, but we couldn't realize it. We couldn't turn it into a product that we really felt comfortable with at the time. We had a few attempts. But it turned out that by 2013, 2014, several kind of ideas and streams of development kind of merged into a foundation for what became Spring Boot.
Starting point is 00:17:07 So yeah, in retrospect, that's probably the key event in recent years that really changed everything. In the meantime, we have just rough indications that we use here, but at least half of the Spring user base out there is using Spring Boot. With newly started projects, it's probably more than half. In the meantime, we have the start.spring.io project generator, which kind of followed right after Boot or along with the launch of Spring Boot.
Starting point is 00:17:44 That turned out to be very popular. Just because you could- It's a great developer experience. I mean, that's what it's in the end comes for me, right? As a framework that allows developers to build better apps faster, new apps faster. Manage the dependencies for them. Yeah, but it's-
Starting point is 00:17:58 Dependency hell. Yeah, it's a great developer experience. And I think that's also, at least that's what I would contribute to one of the success factors. And if you're building a framework for developers how can differentiate to others by giving a first-class developer experience if you can improve productivity and if you if you provide something that actually solves the problem in a very convenient way and if you have a large community obviously that supports it and the tool integrations
Starting point is 00:18:23 i mean that's yeah a lot of ingredients for success it is in uh also an interesting balance there that we are not entirely focused on spring boot but we of course really we recognize it as what it is right the primary entry point the very popular entry point and the very popular kind of stack enabler out there but at the same, we know that we have a quite large audience, both historically and to the day, that builds kind of their own in-house framework variants, distributions that are Spring framework-based, use Spring Security,
Starting point is 00:18:57 maybe Spring Webflow back in the time, and combine it into a sort of in-house framework distribution. They try to use as many open source components as possible, of course, but that was part of what we originally did. Our competition in the mid-2000s, basically, were in-house frameworks most of the time. So we saw a lot of migrations from custom in-house frameworks to spring-based open source stacks that replaced those in-house frameworks,
Starting point is 00:19:24 but they are still oftentimes managed by architectural groups within larger corporations that do their own thing, have their own guidance, their own project templates, their own whatever it is, right? So with everything we're doing in the individual open source projects, both at the spring framework level and others in our portfolio, we know that we also need to keep those arrangements happy. They sometimes make different choices, go different ways from where Spring Boot is or where Spring Boot wants to go.
Starting point is 00:19:55 So that's also kind of interesting for me that at the core framework level, a key part of what we're doing is enabling Spring Boot to do what it so successfully does. But we also need to keep empowering all those other groups out there in all those geographies. We, of course, we know a lot of them. Not everybody tells us that they're doing this, but over those 15 years, a lot of those people got in touch with us in one form or the other, like at our conferences, Spring
Starting point is 00:20:23 One, Spring IO, we often get in touch with them. So it's always interesting to see what people do with a framework if the framework is not all that opinionated. This toolbox philosophy at the core framework level, at the core project level, really is meant to empower such custom arrangements, whereas Spring Boot is a bit more of an opinionated framework with a predefined dependency arrangement with a strong guidance towards certain kinds of architectures. It's a perfect combination for us.
Starting point is 00:20:55 There's a strong, large audience for both of those philosophies. It sounds like, I just wanted to round out on that. You know, when Andy asked about what we can learn about success and all, it sounds like basically what you had said earlier too, about you're not just, you don't just create a project
Starting point is 00:21:14 and then run it in, keep it in maintenance mode, right? It's all about continuing to find new ways to leverage it, new layers to add on top of it, like say Spring Boot or something. And not only that, and I don't remember if you said this during the recording or before the recording, not just creating these things, but getting people out there and talking about
Starting point is 00:21:33 them, getting them to the conferences, getting someone like Josh Long with his crazy sense of humor to go do these Spring Boot demonstrations and really invigorate the crowd and make them laugh and say, hey, that looks easy and incorporate it. So it's a combination of not resting on your laurels, not falling into the temptation of going into maintenance mode, but really just pushing for new things that you can do, new ways you can fit it in, even if it's not the core. Like as you said, microservices were not the core of what you're looking to do,
Starting point is 00:22:02 but it just happened to fit it well. So hey, let's introduce it to microservices concepts and push it out there. And then people say, hey, I can use this for microservices. Great. And I think that's really part of the success. Things turn out to be a good fit, even if you haven't specifically planned for it.
Starting point is 00:22:18 So there's always a degree of luck. We've made a lot of design decisions in the early days that turned out to really match what modern day Java does. Like back in 2004, that timeframe, the template classes that we have, JDBC template, transaction template, those callback models where you pass a callback in and it would execute it under a specific context. With anonymous inner classes in Java, that was always a little bit unpleasant to code, right? But we believed in the model behind it, like this inversion of control arrangement, passing off
Starting point is 00:22:54 callbacks to framework code. And of course, then fast forward to 2014 Java 8 with its functional kind of design that it brought into the Java language, and in particular, into the core Java APIs, it turns out that the exact convention that we've been using for our callback interfaces in 2004 are naturally compatible with the functional interface
Starting point is 00:23:20 conventions that they introduced in Java 8. So you could immediately, without any change to our existing interfaces, you could use them with Lambda expressions and method references if you chose to use Java 8. So sometimes things just fall into place and kind of naturally match because there's a bit of a shared design philosophy that kind of goes together. But it took almost 10 years for that to happen. So that's the part that you certainly can't plan for.
Starting point is 00:23:50 But there's quite a few things you can do, right, that you can actively aim for. And empowering a community to participate in what you're doing. And community means many things. That can be open source contributors, can be students at universities. It can in particular be other companies, right? Partners, small companies, or the largest corporations out there, kind of embracing all the interests and the contributions that they might have and having a fair degree of involvement where basically they can be a stakeholder like everybody else, not like first class stakeholders and second class stakeholders out there, but really trying to treat everybody as kind of a natural citizen of your ecosystem.
Starting point is 00:24:38 That is something we've really been aiming for. We've never really had, fortunately, we've never really had the constraints that we need to kind of work for a particular stack as our primary target. We've always had this kind of very stakeholder level, open source philosophy that we were allowed to work with, even when we've been part of larger corporations like at VMware, or even Pivotless, a reasonably large corporation. And being allowed to wear an open source, a stakeholder-oriented open source hat, when you make decisions around the open source project, when you reach out to the stakeholders, to the community in terms of direction, or in terms of feedback, trying to understand where they are going,
Starting point is 00:25:27 being able to work with all the options that are out there that people are using and not having to prefer a certain option just because it happens to be a key product that a particular corporation is doing. That is an important part. It's a fine line, of course, because at the same time,
Starting point is 00:25:46 an open source project needs to be sponsored. It is effectively a strong form of sponsoring. Open source engineers basically work for the community, but are paid by a company out of a revenue stream that may be very immediate. Like back in the days, it was in our early days, it was trainings that we've been doing, consulting gigs that we are doing, that sort of thing. Our early attempts at subscription models.
Starting point is 00:26:16 These days, it is mostly subscription models. Pivotal with its cloud-native subscription, now the Pivotal Spring Runtime subscription. Those are really subscription models at a larger scale for larger stacks that we are a key part of. We are the entry point into the Java personality of quite a few stacks out there. And the model around it sponsors the open source development underneath. That is, of course, in the early days, in the early 2000s, it was a challenge to come up with a business model that really allows for sustainable open source development.
Starting point is 00:26:54 There were no references, really, where this worked to a particular degree. If we're looking at the modern day Java ecosystem out there, basically everybody does sponsor open source projects, professional open source, as it's sometimes called. Just look at what Red Hat is doing. Pivotless is open source in its DNA from the ground up. Everything that Pivotless is doing basically is open source based there um and even modern day microsoft right everywhere you get uh sponsoring of open source projects that are a natural part of the stacks of the stack products
Starting point is 00:27:35 that are being used out there so that's that's the way we are working today uh but personally that's the part i appreciate most is that we've always had this degree of sponsorship all the way through with different business models around us. Some of them very close to us, some of them rather indirect. But it always worked up to this day. We have a constant stream of engineering sponsorship across 16 years. And that is I'm really grateful for that to have turned out like this. And of course, there has always been a strong support from certain groups, certain companies, certain people that just helped us all the way through.
Starting point is 00:28:24 Open source business models are still not easy, but it's certainly more established now in 2019 than it was like 15 years ago. So it's also a degree of freedom on our end. We are now entirely focused on open source engineering. Occasionally we go out to conferences and talk about things. Occasionally we record podcasts. It's actually not that common, but we are very open source engineering focused. Whereas in the, in the early days, we basically at most, it would be half of your time on open
Starting point is 00:28:57 source engineering. The other half you would do a consulting or trainings or um that was very immediate right literally the very same people kind of uh did the uh did the uh um the customer services that sponsored the the other which is probably also great because you are basically using the framework with your engagements and you were refining it based on what you really saw you know on the floor with the people that you were giving the workshops for or that you helped actually implement new apps. And I think that's... I've done this for quite a few years myself. I wanted to keep it up until I've been told at the very end that we really should separate those roles now.
Starting point is 00:29:36 That was very late in the game, actually, because it's a very, very direct insight, very immediate insight into what people are doing. It's the fastest feedback loop too, right? Oh, yeah. Just sit next to somebody who tries to use your stuff and see where things break for them, right? Where it's not as intuitive as it should be to them. And that feedback loop is still important, but now it's separate roles.
Starting point is 00:29:59 Our developer relations people, like Josh DFO mentioned, Josh Long and his colleagues are, of course, very close to the engineering challenges out there so if we say developer relations it's really very close to the metal he does do more strategic kind of conversations as well of course
Starting point is 00:30:17 but he mostly spends time with people actually coding right and then there's still a very strong feedback loop from their side but i i have a certain love for the that period back then where we we've been very immediately involved with customer projects ourselves cool so i mean what i take back from this conversation and and like the the history now a couple of things uh i mean we because i want i want to learn right i guess i said i'm selfish i want to learn how can we do an open source project maybe listeners that think hey they have a project
Starting point is 00:30:49 internally does it make sense to open source it if to open source it what do we need to take care of i think what i learned is especially if you build frameworks that help you know our software industry developer experience is key uh i also from the spring boot but you said it's a it's a more opinionated approach which means it gives you less freedom, but the still thing is it pushes people into the direction that you think things have to be done. That's also what we do with Captain. It's an opinionated control plane for delivering cloud-native applications and running and doing automated operations. So we kind of went that approach.
Starting point is 00:31:24 I think we are also focusing on developer experience and then now preaching it out there, right? We also get, you know, we're working with companies to get early feedback. I think that's important. That's what I hear as well, because only if you get the feedback, you actually know if you're building the right thing
Starting point is 00:31:39 and then they can direct you. And we get the sponsorship also in our case now from Dynatrace, which is great, right? And essentially, right? Because you've been hinting at it before. It's kind of dropping it out there and turning it into maintenance mode. It's kind of, well, that's a way of getting rid of something, right? But it's not a strategy for a sustainable community.
Starting point is 00:32:01 So it's the initial launch, the initial release of a drop of open source code on GitHub or wherever is a starting point, not the end of the process, right? And I mean, of course, back in our days, that wasn't GitHub, it was SourceForge, right? We set up a SourceForge project with the code that Rod Johnson initially had coming as a download with a book. So no GitHub back then. But of course, we have been on GitHub now for many years. And we are very happy with this engaging model that those platforms have, where it's so easy for people to contribute, sending a pull request. And that's really a very straightforward way of contributing.
Starting point is 00:32:43 But yeah, it worked all the way through for us. We had so many people pointing out typos in the Java doc or wherever, right? Everything is, everything that is easy to fix, right? We just pay attention to also reacting to it. It's kind of the, that's another part that I was personally very keen on is if somebody goes to some lengths to create an issue, a report, or even pointing out a typo, right? Then the minimum we can do is to kind of get back to them, respond. And if it's trivial, straightforward to merge, whatever, then do so in a timely fashion,
Starting point is 00:33:23 right? Not just letting it pile up until you have an unmanageable amount of of thousands of issues and also people lose interest because if they see there's actually nothing happening with the comments with the feedback then you know why contribute why try to contribute if nobody's listening why would they follow up with anything um and there's a there's a degree of um there's of course a loop there as well you can educate your community in a certain direction right to kind of
Starting point is 00:33:48 so that they realize that for certain kinds of reports and issues that are very to the point we immediately merge them whereas others are put into a backlog where a totally different timeline is attached to it and kind of them learning how to present
Starting point is 00:34:04 their case or how to create a report and an issue report, in a way that allows us to immediately merge it. It really showed over the years that the community evolves with us, with our ways of doing things. And sometimes there's a very close relationship to certain contributors. We literally have people that are well-known usual suspects in the community because they've created so many reports and so many pull requests over the years. Sometimes they even come in a batch. Last year, was it last year, there was like 50 pull requests from the same contributor from Russia within like three or four months, maybe. It was even internally called a denial of service attack on me specifically, actually,
Starting point is 00:34:54 because it was very core container oriented. But I didn't see it as that at all. Of course, it is effort on our end to digest all of those. We have to go through every single product request and triage it and merge it. There's effort attached. But that is totally worth it. It helps you increase the quality. Basically, you're driving the product into the right direction to the people that can actually use it. That's what it is. What better kind of feedback can you have than, I have this this specific issue and if you fix it for me,
Starting point is 00:35:25 it's really going to help me. I mean, that's as immediate as it gets, right? So I have a lot of love for those details. Sometimes it is details and sometimes it is an overloaded method that they would really appreciate having at that point or just something minor that is easy enough to do, but really helps them and makes them basically happy, or even in some cases enables a certain integration that otherwise would be awkward to accomplish. So reacting to those and prioritizing those kinds of reports is something we've been explicitly doing almost at any point of the lifetime of the framework. We have our own ideas, our own vision, our own things we really want to get in.
Starting point is 00:36:09 But sometimes we put those on the back burner in certain periods, focusing entirely on user reports, because our strategic vision is just less attached to a particular timeline, whereas somebody creating a report would probably really benefit from getting this in a timely fashion. They might actually have that problem right now. They need a solution soon and they will really appreciate it if
Starting point is 00:36:32 it rolls into the next maintenance release. Maybe two, three, four, five weeks away, right? And not like a year later. I mean, it's interesting. So unfortunately, I'm the only one that can actually see Juergen while he's speaking because I stand half a meter away from him because we're connected with my little headset here. It was interesting because before we started, you said, well, you normally don't do podcasts. You're not really that kind of guy for marketing, right? You're a core engineer.
Starting point is 00:36:58 But it's amazing to see your passion when you move around. That's also why. Exactly. Yeah, no, definitely. That's why I don't want to stop you because you have a lot of, obviously, experience and history with this project and you can give a lot back to the community. And also, I like what you just said, but it is extremely important that people contribute to open source. And this is an encouragement
Starting point is 00:37:17 to everyone that wants to contribute. You know, make sure that you are, you know, giving your pull request, I mean, making your pull request, giving your comments, because that's the way you can actually make an impact, right? And if there are open source projects that are not that well maintained, and you don't see things appear to getting picked up, well, then maybe it was the wrong thing. And then you focus on another community that actually takes you more serious, right?
Starting point is 00:37:41 I think that's what I learned as well. Yeah. And I mean, I'd also add to that, Andy, that, you know, obviously a lot of people, like how do you, you know, myself, I'd be like, oh, well, I don't know what I'm doing. No one's going to take my, my contribution, but submit it. You know, the more you submit, the better you'll get. And maybe you'll get some feedback on them. If the project's being maintained well, they'll probably say, Hey,
Starting point is 00:38:00 we're not going to accept this because of X, Y, and Z. And you improve. And over the course of time, suddenly you start getting into the category where they are getting accepted, and you got to start somewhere. So to your point, just start doing it. And at the same time, to anyone considering such contributions, don't be afraid of submitting it. But also, if there's no immediate reaction, that might not be very telling, right?
Starting point is 00:38:28 It might just mean that there's a lot of issues created and the developers, the engineers are really busy with stuff. So a careful reminder occasionally, just a comment on an issue that might be a couple of months old even, right? A comment that says like, I have that problem. Even from somebody else, I also have that problem. I still have that problem. So all the notes in particular,
Starting point is 00:38:52 if somebody considers creating an issue, just looking through the open issues, somebody might already have reported the same issue. But don't stop at that point. Basically add your context, your perspective, or even just a, yes, I care too. It's a problem for me as well. We actually look at those comments, right?
Starting point is 00:39:14 At least recently updated. We know this if there's a comment and we take them as a form of escalation. Sort of, okay, the more people really care and the more timely this feedback comes in, the higher the chances that we'll take the time to roll it into the next maintenance release. And we really differentiate between our immediate upcoming
Starting point is 00:39:36 release as opposed to the backlog, right? So just a little hint. Any such comments, and in particular from several sites, such comments might put it back into the immediate bunch of issues that we deal with. There are no guarantees, of course. I mean, there's a strong human factor involved. We are not too many people.
Starting point is 00:40:01 We are roughly like six in the core framework group. So obviously it's sometimes like right now, basically, in this period up until our Spring 1 platform conference in early October. It's always very, very, very busy. And there's a chance that comments or issues created now are not going to see a reaction for a week or two or three until after the conference. But we'll get back to it right we're very carefully um managing our issue tracker so that we don't miss anything so if we know that there are certain periods where we can't pay immediate attention uh but then of course the modern day tools that we have for managing an open source project out there really allow us to get back to it.
Starting point is 00:40:45 And GitHub is, of course, also very enabling for others to step in. In the meantime, while we don't quite get to it yet, somebody else might come in and suggest a workaround, or even maybe diving in and suggesting a patch to initiate somebody else report it. So that's all very cool, right? It goes all those ways
Starting point is 00:41:07 immediate reaction from us is we we would like to do it every time but doesn't work out every time uh but the community and uh many common contributors stepping in is equally great so jürgen i mean there's a lot of great stuff that you just talked about we learned a lot about the spring frame with history i'm sure we could go on forever but and i know there's a lot of great stuff that you just talked about. We learned a lot about the spring frame of history. I'm sure we could go on forever. And I know there's some other topics we also want to talk about. We kind of wrote down a little list and maybe glancing over the list. And then, you know, we'll see how deep we go or maybe we'll fill another episode. But what else is going on and is important for you?
Starting point is 00:41:40 The strongest trend that we are seeing, that I'm seeing in the Java ecosystem, is this kind of totally different degree, new degree of energy of innovation that comes in at the runtime level. For the longest time, the Java virtual machine was basically, well, it was there. There were iterations every couple of years. It got a new major release but that was basically it uh innovation was mostly happening on top of the current jvm baseline within within the established baseline in the industry uh but now uh we have a uh a new release model in openjdk a release every half year um that doesn't necessarily mean that there's more happening. It just means we get things a little earlier
Starting point is 00:42:28 and in smaller slices. And this really turned into quite an interesting challenge for us, right, in kind of trying to be a natural citizen with all of those releases. Because as a framework provider, we leave it up to the user, to whoever builds the stack, to the architect, to the deployer, even to some degree, in using the runtime underneath.
Starting point is 00:42:54 So a Spring-based application, a modern-day Spring application, might run on JDK 8, right? Out of the common JDK 8 installations from Oracle and IBM. But it might, at the same time, run on the latest OpenJDK distribution, like? Out there, the common JDK 8 installations from Oracle and IBM. But it might at the same time run on the latest open JDK distribution, like open JDK 13 now. So that's quite interesting, both from a technical perspective and also from a community perspective,
Starting point is 00:43:17 because we generally recommend upgrading to the latest, right? The latest Spring framework version, the latest Spring Boot version. There's a bit of a history in the Java ecosystem that we tend to not necessarily recommend the latest JVMs. It's like, if Java 8 is good enough for you, then just hang on to it.
Starting point is 00:43:38 But there are quite a few reasons why you would want to upgrade. And we are trying to walk that line as well, that fine line between keeping a Java 8-oriented production audience happy, and at the same time, empowering everybody to use the latest Java innovation, right, out of JDK 11 or now JDK 13. And half a year durations are a challenge, right? But it is also a bit of new energy that comes into the ecosystem.
Starting point is 00:44:09 So I totally appreciate that. There's also quite a few performance improvements that came into the runtime. It's kind of, of course, a never-ending topic. You're basically never done optimizing for performance. But the part that I noticed recently, it just reappeared in my mind, it's simply not one size fits all. There are quite a few JVM distributions out there now. There's a standard OpenJDK, there's IBM's OpenJ9, basically a different JVM with the same language and class libraries on top.
Starting point is 00:44:45 There are quite a few different garbage collectors now, all of them first class, like the G1 garbage collector, the Z collector now, or Azul's efforts, and Ashin Andor from Red Hat. And the way that those are presented really indicate what I have in mind here, that they're designed for a particular target audience, a particular target scenario.
Starting point is 00:45:09 So this is not the norm. In Java, in the JVM landscape, we are used to just standard settings, drop it in and go with it. So the same applies to our framework level as well. We are really optimizing for certain target scenarios, even in some cases providing distinct products, projects, initiatives for certain target scenarios, understanding
Starting point is 00:45:32 that everything is a trade-off, right? The configurability that we have at the core framework level or even at the Spring Boot level is a necessity. There are choices made that we need to enable people to make the choices that they need to make. So this opinionated perspective that we've been talking about earlier is kind of a little bit challenged by the need to really specifically adapt to certain scenarios. And the combination of our efforts
Starting point is 00:46:06 is really all strongly going into that direction because in modern day cloud deployment arrangements, it's just a little bit different from the long running monolith. That's why it makes a lot of sense that you're building purposeful, like focused implementations for different runtime scenarios when you just mentioned about the settings and you know what
Starting point is 00:46:28 you can tweak and everything brian this reminded me of an episode we did a couple of weeks ago with the guys from akamas i'm not sure if you heard about them no it doesn't bring about so so what they basically do they have an ai machine learning um like system that is that optimized java applications while they're on the load either either in load testing or in production. They're basically tweaking the different parameters of either the JVM or the different frameworks until they reach a certain performance goal. So basically what they're doing, they're optimizing it for a particular load on a particular application, all these settings. And I think that's an Italian-based company. I call it Akamas, really cool stuff.
Starting point is 00:47:05 Yeah, like besides, besides like your, besides your heaps and all that, he was saying there's like, I think 700 configurations that are available in a JVM. Oh yeah.
Starting point is 00:47:14 So it's like, you know, I only knew about the small handful that you normally see. So the idea is like, yeah, let's let the machines figure it out and tweak all these things
Starting point is 00:47:22 until you find the optimal setting sort of really cool idea. It sounds totally cool. I mean, it is non-trivial to make those choices and to tune for those scenarios. And it doesn't get easier with the different distributions that we have now, right? In Java land, we are now basically going into a linux sort of world where
Starting point is 00:47:46 there are different jvm distributions from different uh different entities out there that can be a very cool thing because it's specifically optimized for certain scenarios but it can also be a bit daunting right when you to a newcomer to a new entrant it's like all those options yeah um and we're right in the middle of it also trying to provide some guidance well it's also not only that for even you coming up to pick but also for a vendor like a framework vendor or like a tool vendor so how do i optimize for all the different platforms do you even test against all of those exactly yeah which ones have support right which ones are going to be popular which ones are not going to be i mean that yeah and the the uh
Starting point is 00:48:24 the most radical one that we're currently dealing with is GraalVM from Oracle itself. Since Oracle, of course, runs OpenJDK, the traditional hotspot arrangement, but GraalVM comes from a different group. Some of them actually based in the very city we're in, in Austria. And for the longest time has been a research project in Oracle Labs and turned into an official Oracle product earlier this year. Mangral VM is many things. It is a replacement for the C1C2 compiler in Hotspot in a regular JVM, but it has some more radical options as well. internally, under certain conditions, a Java application into a native executable, which is, of course, a totally different mode of deploying, of executing.
Starting point is 00:49:11 It's not a regular JVM. It doesn't have regular garbage collection. But it comes with strong benefits, like totally different memory consumption profile, almost immediate startup, because the JVM warm-up phase is basically totally skipped. But there's many things you cannot do. You can't do dynamic class loading. You can't do JVM warm-up phase is basically totally skipped. But there's many things you cannot do. You can't do dynamic class loading. You can't do JVM agents. Dynamic random optimization. Yeah, it cannot dynamically optimize for peak performance.
Starting point is 00:49:34 So there's a bit of a trade-off even in startup performance versus peak performance at this point. Although they are working towards making sure that peak performance is kind of in the same ballpark as on hotspot. But this form of innovation, personally, I find it really inspiring. It is, of course, also a challenge because how would you go about it as a framework provider? Do you pay immediate attention to any such efforts, to any such reports of, hey, this doesn't quite work on OpenG9 or on GraalVM with native images here.
Starting point is 00:50:06 How do I work around this? How do I specifically configure my setup here? We can't take everything into immediate account. But from a technical perspective and from a product management perspective, I find this totally exciting. In trying to adhere to those conventions and allowing people, empowering people to build Spring-based applications under
Starting point is 00:50:30 certain conditions with certain trade-offs and certain limitations for a native image model is as exciting as it was a couple of years ago to make Kotlin a first-class language. I find this exciting from a technical perspective
Starting point is 00:50:45 because it really challenges the framework and the core facilities that we have in interesting ways, but also from a community perspective and kind of not forcing people to use Kotlin or forcing people to do native images or forcing people to be totally cloud-native oriented, but kind of empowering to make those choices and to combine those stack options if it makes sense for them,
Starting point is 00:51:12 if it fits for their purposes, for the architectures that they're aiming for. And it's an exciting time to be in the Java industry, in the JVM ecosystem, because of all of those things happening basically right now and having a mainstream appeal by 2020. Kotlin still has a strong upwards trend. Kotlin now has coroutines as a first-class language feature, something we find really exciting for our reactive stack options. GraalVM is really still a bit of an early adopter product at this point,
Starting point is 00:51:45 but by next year, by this time next year, we might already have seen certain niches, at least in the industry, being very, very focused on what GraalVM can provide to them. So this is just exciting. There's these spikes of innovation from different sides, also from the foundation upwards, are really important for a sustainable community overall, like a Java community as in all the options that the JVM is providing. I think we actually, because you mentioned GraalVM, earlier this year at Dev1 here in Linz,
Starting point is 00:52:23 we had Chris Thalinger from Twitter giving a talk about GraalVM and performance optimization and uh it kind of brings me to another topic that I remember you were mentioning in the beginning before we started our talk performance and scalability you know you are an engineer by heart right you are and and and again this is something that you do just maybe doing me a favor, like doing these podcasts, but it's not your regular day job that you do. But you told me that, you know, when it comes to performance and scalability,
Starting point is 00:52:53 it's basically you who picks up the keyboard and fixing all of these things that are coming in. At least oftentimes it is. Yeah, there's, as you may imagine, in particular in a container-like arrangement in a framework with core facilities where there's a lot of shared infrastructure underneath and a lot of shared metadata being managed, there's concurrency issues all over the place. And not issues as in bugs, but issues as in making decisions to trade off certain optimizations over the other. It's a constant effort. We have been optimizing the internal use of locking and the internal metadata management decisions
Starting point is 00:53:36 are really geared towards a runtime stack out there that is being monitored, right? For our code, our framework facilities to never appear as a hotspot, right? In like contention in lock arrangements. And fortunately, we also have quite a few reporters out there who do exactly optimize for those kinds of scenarios. And they present this on the reports of like,
Starting point is 00:54:02 look in my scenario under these conditions with them dead load, there's actually a little bit of, it's not too bad, but in my scenario, it does show up, right? And we really care even to that degree, where we're trying to optimize anything we can. But of course, there's always a chance that if you optimize it for somebody's case, you're kind of making it worse for somebody else, right? Or you trade off memory consumption over minimizing memory consumption over caching, cache arrangements.
Starting point is 00:54:36 And there's a few things on the JVM that are really hard to optimize performance-wise. Just naturally slow and cumbersome. Annotation retrieval being one of them, something an application never does. But a framework always, a framework with an annotation-based programming model as one of its options, has to, of course,
Starting point is 00:54:56 do annotation retrieval all over the place. And this can be really expensive. And it is something we've been spending a lot of time on recently. So just last year, this year, we kind of really expensive and it is something we've been spending a lot of time on recently so the just last year this year um we kind of re-implemented our entire annotation retrieval arrangement um not necessarily for being for better performance out of the box but for better configurability for better tuning and so the kind of uh we we often refactor towards an arrangement where people can customize things
Starting point is 00:55:26 if they realize if they recognize that certain things are an actual hotspot for them because us making decisions of trade-offs between those performance optimizations is sometimes not the right thing to do leaving it up to whoever builds the stack and whoever tunes the JVM and the entire stack anyway, leaving it up to them, giving them hooks, giving them options in fine-tuning the performance relevant behavior that we have in the core container or in the core web stack is a path that we've been going towards. We'll definitely connect it with the outcome, I guess. I think this is again...
Starting point is 00:56:06 Spring Boot is, of course, many of its options that it has are sort of performance-related or can be, right? Or optimizing startup performance. A recent topic, of course, now in cloud deployments in particular, many services, many instances of
Starting point is 00:56:22 services being bootstrapped, maybe just temporarily even. So optimizing for startup performance in Java in the JVM with a framework or several frameworks on top is totally non-trivial. And that's also why we, of course, are strongly interested in what GradVM native images can provide us. But at the same time, we know that the mainstream
Starting point is 00:56:40 is, of course, on a regular open JDK, so the out-of-the-box performance needs to be optimized for those scenarios. And in terms of what we've been doing recently in Spring Framework 5.1 and 5.2, many of those optimizations, fortunately, turn out to be transparent benefits. Basically, take an existing application, unchanged, upgrade to a newer version of the core framework underneath, and startup is just naturally faster, where some peak performance points are naturally optimized. That is the ideal scenario. We've also learned that in quite a few cases, it does have an impact onto the application's design.
Starting point is 00:57:19 So there's just a degree of performance optimizations where you hit the barrier and you basically need collaboration, cooperation from the application development team where like, no, if you stop doing this in your components,ructure your component and your configuration arrangement just a little, then you might be closer to native image compatibility than you are now. So we also need to educate people a bit that not everything can be a totally transparent optimization refactoring underneath the covers. So part of it is also that we need to provide guidance around it. So you like to optimize for certain performance characteristics. Here's how. Here's the facilities that we have. Some of it is your job.
Starting point is 00:58:12 We can't do it for you. But we can provide guidance, in particular guidance towards using framework facilities where it might not be entirely obvious what kind of performance impact certain design decisions within your component model has. It's some of those things we know, what kind of effort the framework goes through in making that happen. But an application at the application development level,
Starting point is 00:58:38 an application developer might not immediately realize how expensive certain component model options are. So again, another fascinating topic. I think we could talk probably for a long, long time now. I know, and this is typically a question that Brian asks at the end, but I want to actually ask it now. So you are a fountain of information.
Starting point is 00:58:58 And- BRIAN DORSEY- A fountain. FRANCESC CAMPOY FOSTER- Yeah, I mean, I think there's maybe better words for that. But it's like- BRIAN DORSEY- Next time we probably need to do a video so that I can give more of a fountain impression. So what I want to ask, so you are now, by the time of this airs, I think it's probably going to be end of October. You are, how do people know where they can find you?
Starting point is 00:59:21 I know you are on the conference train a little bit, not as much maybe as others, but what's the best way to get in touch with you? Because I think that's important if people have follow-up questions. I am on Twitter. I do read my Twitter profile, but I'm not an active tweeter. So it's kind of a read-only account, but I do read all the notes that I get there and all the references. It's like a Spring, Jurgen, as the Twitter handle. Other than that, the most immediate channel are our open source project references. It's like a spring during as the Twitter handle. Other than that, the most immediate channel are our open source project facilities.
Starting point is 00:59:49 So the forum, the issue tracker, my main means of communication. And of course, there's always email. I know it's old school these days. How dare I suggest email? But we also, we all have public email addresses. It's better than sending notes with pigeons, right?
Starting point is 01:00:06 Like Harry Potter. It is about being able to manage all the everyday communication that comes in. And the issue trackers and all those really focused facilities that we have, in our case, mostly from GitHub, are really a great help in that direction. Internally, we also have Slack, of course, and Slack channels for team communication. We are a distributed team. Most of us work remotely. So we also need to facilitate communication within our team, which, of course, has always
Starting point is 01:00:40 been like this. So we are used to it. But yeah, communication channels around open source projects are a key piece of the puzzle. If even the team has a hard time communicating with each other, it's going to show. FRANCESC CAMPOY FRIEDMANN- Exactly, yeah. That means if you cannot live it internally,
Starting point is 01:00:58 how would you live it externally? That's basically what it is. ANDREAS SUIKAERTMANN- And conferences are, of course, a great way to get a kind of life impression, to get in touch. So I often do both sessions if the conference is off for them or just Q&A sessions after the presentations. That is why I'm going to conferences. Otherwise, I could just record a webinar. But it's this life interaction with people, attendees, listeners, of course, also other speakers,
Starting point is 01:01:26 is a key part of why I occasionally go to conferences. I actually do quite a few. Just not as many as I used to, but I still go to like about 10 conferences a year. Well, that's plenty. So we obviously make sure that we put your Twitter handle and all the links that are relevant on the podcast proceeding so that people can reach out to you. Brian, I know typically you summon the Summaryator, but do you want to give it a try this time?
Starting point is 01:01:54 I'll take a crack at summarizing the first part. How about that? So in terms of if you're starting your own open source project or working on one currently, what we learned from Juergen today is that it's very important to keep pushing the boundaries of what you can be doing. Don't just sit back once you push it out. Keep developing it. Keep adding new features, but also find creative ways that you can fit it into existing things and new things that are coming up because that's the way it's going to be adopted. You can't just throw it out there and hope people recognize how beautiful it is.
Starting point is 01:02:29 It's like any other thing, right? If you're an artist creating music or anything else, you can't just create the, you can just create the project and put it out there, right? If all you care about is satisfying yourself, but if you want people to use it and if you want it to be adopted, you have to get out there, you have to talk about talk about you have to show people how they can use it you have to find
Starting point is 01:02:48 ways it can fit into new and upcoming feature sets that are coming out or new ways that things are to be deployed so with that in mind i'll wrap that up because you know i tend to ramble when i do these things that's about the best i can do in the summary there i like the analogy with the music scene yeah concerts versus conferences right the life interaction oh yeah it's true yeah or even even just even just promoting it on social media like you know you can't just be like oh i'm i'm an artist i'm just going to make my stuff and i'm going to get discovered you're not going to get discovered part of being a successful artist in any realm right is you have to also be a promoter of your own stuff
Starting point is 01:03:22 and building building your community, building your own community and your fan base. Yeah. And growing towards and along with your audience, right? There's also artists, basically, established artists already are at the end of, or far along that line. But for a new coming artist,
Starting point is 01:03:43 you really have to find an audience and kind of grow along with them. I guess the very same is true with an open source project. But it is that commitment that you really need to have when you're into it as a maintainer,
Starting point is 01:03:58 as an engineer on an open source project. You're committing yourself to sustaining and evolving the community along with your technical offering. You can't separate those things. And it requires a strong commitment, long-term commitment. My commitment might be particularly long-term with the 16 years and counting, but it is sort of it's not something you can just throw out. It is something you have to see as several years at least of involvement, of commitment, of guidance, of direction that you're giving. And you don't know where it's going. Maybe it develops a life of its own with other people stepping in and taking key roles in the project.
Starting point is 01:04:44 And you never know. But in particular for the bootstrapping phase, and that can be several years, there's a strong commitment where people expect guidance and direction from the original office, from the original project team. So the last thing that I want to say, I like it that I think you are a perfect example of somebody that sees change as an opportunity and not as a burden. Because a lot of change happening in our industry, which is very exciting. And obviously with your passion to it and driving it forward, it's just phenomenal to see what we can actually do. And that individuals like you have the power to kind of become, I think I'm using one of these marketing terms, the trailblazer that is like, you know, like the lighthouse that is guiding the way, but really seeing the change in technology as an opportunity to build better things, to make us as an industry
Starting point is 01:05:35 better and having the passion that you have just tells me now I understand why you are successful with it. It's very, it's very nice. Thanks. And I know you're very busy with everything that's happening the conference is coming up and you have you know it's your constantly releases and so thanks for taking out an hour of your time um it's thanks for the invitation i totally appreciate it and enjoyed it very much thank you and i know it's an interesting
Starting point is 01:06:00 setting here with us being so close because of our little headsets here. But thank you so much. We'll post a picture later on. We took a selfie. So people can see. I was going to say, it harkens back to the days of Walkmans and couples sharing the music. You'd see them walking close together with one another.
Starting point is 01:06:20 It feels a little bit like it. It feels like it right now. Yeah, exactly. That's what it is. Alright. Alright. Hopefully, we'll That's what it is. All right. All right. Yeah. And hopefully, you know, we'll have you back at some point because there's so much more stuff that, you know, you can share with the community.
Starting point is 01:06:32 It'd be my pleasure. And there's always something new to talk about anyway. Thank you. Thank you. Thank you.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.