Loosely Coupled - Adopting Event-Driven Architecture

Show full transcript

Karol:

Hello, hello, good evening, good afternoon, good morning, or well, maybe good night for some people watching in India, if anybody is in India.

Karol:

Welcome to loosely coupled, our first live stream from Bridging The Gap.

Karol:

I'm your host Karol Skrzymowski, I'm the co-founder of Bridging The Gap, an open source project aiming at educating about enterprise application integration.

Karol:

And with this stream, I want to bring some interesting topics loosely coupled with the field of application integration, and very loosely coupled with technical topics.

Karol:

Now I made a mistake of having too many windows open, so I'm actually hearing myself all over the place.

Karol:

All right.

Karol:

A little bit of housekeeping.

Karol:

We're live on YouTube.

Karol:

We're live on LinkedIn.

Karol:

Please keep the comments and questions and everything coming.

Karol:

If something will be relevant for the topic, we'll be showing that on stream and asking that directly.

Karol:

If not, we will still have some time at the end for a Q&A.

Karol:

And with that, let me welcome our first guest to this lovely live stream.

Karol:

First edition, Fran Mendez.

Karol:

Hello, Fran.

Fran:

Hello.

Karol:

Well, how is your evening so far in Spain?

Fran:

Packed and hot.

Fran:

As you can imagine, I'm in the south, I'm in Balakot next to Portugal.

Fran:

And, you know, we have a saying here that 35 degrees Celsius is getting cold, you know.

Fran:

So, yeah, it's not getting cold.

Karol:

It's quite toasty in the Netherlands as well.

Karol:

The morning was cloudy and a little bit chilly, but the afternoon is quite, quite, quite warm.

Karol:

So, very nice indeed.

Karol:

All right.

Karol:

We're having a lovely topic today related to enterprise application integration and software architecture as it is.

Karol:

We're talking about event-driven architecture.

Karol:

And who better to talk about event-driven architecture than the creator of AsyncAPI himself?

Karol:

So, Fran, tell us a little bit first about AsyncAPI and your context and your background here.

Karol:

So, for the people who don't know you, who only heard about AsyncAPI from, let's say, when they used MuleSoft or Solace or any other technology, so they have the proper context of who you are and what the hell is AsyncAPI and why did you even create that?

Fran:

Oh, that's a lot.

Fran:

Yeah.

Fran:

I can own the whole live stream just with that.

Fran:

Let's keep that part brief.

Fran:

So, yeah, my name is Fran Mendez.

Fran:

I live in Spain, as mentioned.

Fran:

I don't even know how to categorise myself.

Fran:

Like, I've been a director of engineering in my last position, but before I was a manager, but before I was an architect, but before I was a CTO.

Fran:

So, I've been, like, jumping from role to role.

Fran:

And I keep saying that I'm just an engineer, and I do whatever it's needed to do, and I'm always adapting to whatever it's needed in each situation.

Fran:

So, I don't like to label myself as one thing, for the good, for the bad.

Fran:

And, yeah, so, I created AsyncAPI, as Carole mentioned.

Fran:

So, this was almost nine years ago.

Fran:

And the reason I created AsyncAPI, it was just for me.

Fran:

It might sound egocentric looking back or explaining it like this.

Fran:

But the reality is that I wasn't expecting this kind of success.

Fran:

I was just building it for me for two reasons.

Fran:

One of them is I wanted to learn OpenAPI well.

Fran:

So, I had to create AsyncAPI.

Fran:

I had to go from top to bottom of OpenAPI specification and read it and change whatever didn't make sense to me.

Fran:

Didn't make sense for my use case.

Fran:

And what was my use case?

Fran:

That's the second reason.

Fran:

My use case was I was using RabbitMQ to coordinate some microservices and, you know, and communicate between them and so on.

Fran:

I was building an event-driven architecture.

Fran:

And there was nothing like OpenAPI for that.

Fran:

So, I decided to go ahead and modify OpenAPI.

Fran:

In the beginning, it was mostly me.

Fran:

Like, okay, maybe when it says GET, the documentation generator can say SUBSCRIBE.

speaker 1:

And when it says POST or something else, it can say PUBLISH.

Fran:

And that might do the trick.

Fran:

Well, for documentation, it kind of did the trick.

Fran:

For code generation, not so much.

Fran:

It felt a lot like a hack.

Fran:

It was a hack.

Fran:

So, yeah.

Fran:

And then that's when I realised I had to go through the whole thing and change it.

Fran:

And it was all done in open source because that's always my default.

Fran:

So, I was not...

Fran:

I already had, like, a bunch of other open source projects, but they never took off.

Fran:

And this one started taking off because, you know, I started talking about it in conferences.

Fran:

And I saw some interest from people and so on.

Fran:

And it started to show some traction, let's say.

Fran:

So, I created Slack and so on.

Fran:

And started inviting people there.

Fran:

In the beginning, it was me mainly talking to the wall, as we say in Spanish.

Fran:

So, I was just like, hey, so today I did this.

Fran:

And today I added that.

Fran:

And the funny thing is that the other people on the Slack was the people from my own company, from the company I was working on.

Fran:

And they already knew that.

Fran:

And they were like, hey, we don't care, Fran.

Fran:

We already know.

Fran:

So, they were not interacting with me.

Fran:

And that was funny and desparating at the same time.

Fran:

But eventually people start getting in and asking and so on.

Fran:

So, yeah.

Fran:

So, that was...

Fran:

And here we are.

Karol:

Here we are.

Karol:

And now I had a look through the AsyncAPI Slack.

Karol:

Wow, that's a busy place.

Karol:

I get so many messages.

Karol:

There are so many pull requests going through the channel.

Karol:

So many conversations happening around various topics.

Karol:

It's crazy.

Karol:

And so many people participating also with the AsyncAPI conf and all that.

Karol:

And I already saw a few streams online of the community.

Karol:

It's interesting how that can grow.

Fran:

Yeah, this is something I would love to highlight is we do everything in the open.

Fran:

So, we aim for total transparency.

Fran:

Not as a way to...

Fran:

Not as a way to show off or something like that.

Fran:

Or to justify our behaviour or something like that.

Fran:

Because we believe in transparency, in radical transparency.

Fran:

So, we try to do everything in the open.

Fran:

We are conscious.

Fran:

We are aware that just because you make everything in the open, it's not necessarily transparent.

Fran:

You need to publicise it.

Fran:

You need to advertise it so people know where this information is and how to consume it and so on.

Fran:

We try to do it, but as you said, we generate a lot of content that is almost impossible for us to promote all the content we create.

Fran:

All these live streams, all these meetings and so on.

Fran:

So, meetings are not recorded.

Fran:

They are live streamed.

Fran:

Always.

Fran:

All the meetings.

Fran:

Unless there's something like code of contact stuff that is obviously handled separately for privacy reasons.

Fran:

But other than that, everything is open.

Fran:

Everything is live streamed.

Fran:

And that's really cool because when someone wants to land on the community, the only thing they have to do, the only thing, is to start watching these live streams.

Fran:

Start joining these meetings if they can.

Fran:

If not, they can watch the recording.

Fran:

Following these certain issues on their favourite repo and so on.

Fran:

And it's really...

Fran:

And it's easier, I would say, to get on board.

Fran:

It's not easy.

Fran:

It's easier.

Fran:

It's not easy, though.

Fran:

Because, as you said, it's huge.

Fran:

It became a huge project with lots of people.

Fran:

So, filtering in the noise is always difficult.

Karol:

Okay.

Karol:

But we met today to talk about even-driven architecture.

Karol:

An adoption of said even-driven architecture.

Karol:

Now, the key question I have is, how would you define even-driven architecture?

Karol:

Because I'm pretty certain that from your perspective, the definition's a little bit different than from my perspective.

Fran:

Okay.

Fran:

So, I mean, in general terms, I would say, I want to make a...

Fran:

I want to clarify something here.

Fran:

So, we often talk about even-driven architecture.

Fran:

All of us, including myself, when we mean message-driven architecture, right?

Fran:

What's the difference?

Fran:

So, to me, I don't think it's only to me, but the difference is in the meaning of the message, right?

Fran:

So, message is like the broad concept.

Fran:

There's a piece of data flowing, usually through a broker, from producers to consumers, and so on, right?

Fran:

But to me, even-driven architecture is when you work with events, with facts that happened, right?

Fran:

That's it.

Fran:

Like, you send events to a broker and consume them from other consumers, and so on.

Fran:

For which purpose?

Fran:

That's not defining the term to me.

Fran:

That's something that's kept open, right?

Fran:

So, I just live there.

Fran:

Even-driven architecture is something that is...

Fran:

It's a kind of architecture that usually relies on a broker and where you exchange events as facts, let's say, right?

Fran:

But some people, as I said, like, some people also, including myself sometimes, because it's useful to talk about EBA all the time, if you send an action, a command, and expect a response over a broker, which is also possible, we sometimes also talk about these things as even-driven architecture.

Fran:

When it's not, it's not an event, right?

Fran:

It's a command.

Fran:

But that's a different discussion, let's say.

Fran:

So, that's what I live at usually.

Fran:

This can be just to communicate microservices in your team, your domain, or something, or it can be as a means to integrate, to build integrations inside your company, or with partners, or with public, you know, with the public audience.

Fran:

That depends on your business.

Fran:

For instance, robotics.

Fran:

We see a lot of this in robotics with MQTT.

Fran:

They offer their OpenAPI as an I think you pay file defining an MQTT API, right?

Fran:

So, and anyone can consume it, right?

Fran:

Anyone, you only have to apply for a token.

Fran:

And that's it as a token that it's going to be prepared to your MQTT topics and so on.

Fran:

So, it's effectively like the counterpart, or let's say the sister of a public REST API, but using MQTT in this case, right?

Fran:

So, yeah, there are many usages of event-driven architecture.

Fran:

There is a talk that we have it on the Cinque Bay website on the documentation.

Fran:

It's linked there from Martin Fowler.

Fran:

And the talk is titled, the many meanings of event-driven architecture.

Fran:

And I think that perfectly illustrates what I mean, this talk.

Fran:

So, if you go to the website, and you go to the documentation, if not the first page, one of the first pages, I'm sorry because I don't follow closely the docs anymore.

Fran:

It's too much.

Fran:

It's fine.

Karol:

But I'm sure we can find it later and put it in the description of the recordings for people to find.

Karol:

That's going to be fine.

Karol:

See, one of the highlights I have in terms of event-driven architecture, I have two perspectives on that.

Karol:

First one is the interoperability and the way we design communication within the system, which, for example, like microservices, microservices go well with event-driven and choreography and all that, right?

Karol:

Which is usually not of my concern because I don't design domain systems.

Karol:

I look always on an ecosystem level, so the communication and interactions between various systems.

Karol:

And there, event-driven architecture has a lot to do, but it differs slightly in certain areas, like, for example, do we use data-based contracts or key-based contracts?

Karol:

So like anaemic events, usually in business systems, key-based contracts would be quite normal, while in ecosystems, they're actually more of a considered as an anti-pattern.

Karol:

So there are these kind of small discrepancies of what would be acceptable on the level of a system using EDA and what would be acceptable on the level of an ecosystem using EDA.

Karol:

Then also the differences are like the sets of patterns sometimes differ or what is the database topology.

Karol:

So we usually work with completely distributed separate databases, separate sets of models, data, everything separated.

Karol:

So that's my kind of take on EDA.

Karol:

For me, these are just two types which drive my conversations in enterprise application integration at least.

Fran:

I would say even more than two types.

Fran:

It's like inside a certain domain, a domain understood as a domain-driven design.

Fran:

It's inside a single domain to coordinate stuff in between a domain.

Fran:

Sometimes you have services or microservices inside the same domain and they need to coordinate for whatever reason.

Fran:

Usually these events are not useful for anyone other than these people in this domain.

Fran:

But then you have cross-domain that starts behaving as integration as well, but inside the company, inside the organisation, doesn't have to be a company.

Fran:

But then you have cross-organisation.

Fran:

Cross-organisations in plural, and you have partners, integrations, and so on, or public.

Fran:

So the scope can go well beyond my truth.

Karol:

The funny thing is, because I've been sitting recently with a lot of domain-driven design people and discussing the overlaps of domain-driven design and interoperability topics, and the most amazing thing is that actually if you look at it from the perspective of domains, a domain can span across several systems.

Karol:

And a specific system may represent within itself several domains.

Karol:

So those overlays we can draw over those system boundaries and different block diagrams are quite elaborate at times, depending on how the company was built, how much design went up front into those systems.

Karol:

And then the world of cloud comes in and with SaaS solutions, everything is wrecked all over again because obviously SaaS solutions have a completely different philosophy and they again represent multiple domains.

Karol:

And it's over a layer, on a layer, on a layer, depending how we want to approach those layers, but there's so much to it to walk around.

Karol:

And with that so much, I think there's a level of hidden chaos in all ecosystems.

Karol:

I mean, entropy creeps in everywhere, so I would guess sooner or later everybody will experience chaos somewhere.

Karol:

But in terms of even-driven architecture, I think one of the biggest challenges of a hidden chaos might be the overall lack of standards in a lot of companies or a lot of organisations.

Karol:

While we have very robust standards for synchronous communication, I think not a lot of companies actually know how to standardise async.

Fran:

Yep.

Karol:

What's your take on that?

Fran:

That's a good point, actually.

Fran:

You're touching on the point of governance, right?

Fran:

So there are standards.

Fran:

There's AsyncAPI.

Fran:

There's cloud events that Aleksandr has mentioned on the LinkedIn comment.

Fran:

There are a lot of different standards for messaging.

Fran:

Then you have Avra.

Fran:

Then you have for schema definition, right?

Fran:

It's the schema itself.

Fran:

Then you have this protobuf and so on.

Fran:

So there are many different layers, different levels, but there are different standards for that.

Fran:

Now, the thing is that it's funny.

Fran:

Something that I'm seeing lately is that maybe I'm biassed.

Fran:

So bear with me.

Fran:

But way more companies now are starting to adopt an API-first mindset.

Fran:

And I'm talking about synchronous, right?

Fran:

So now they are starting now.

Fran:

It's like the bulk of it, the bulk of the companies like everywhere you look around or almost everywhere you look around in tech companies or in companies with a mature, let's say, technical team.

Fran:

You'll see more and more people adopting OpenAPI, adopting API-first mindset and so on, right?

Fran:

So that's cool.

Fran:

That's really good.

Fran:

But that's just, to me, as I see it, that's just starting to happen now.

Fran:

It started to happen many years ago.

Fran:

But now is when I'm seeing it like, oh, it's starting to be everywhere.

Fran:

Cool.

Fran:

That's good.

Fran:

Finally.

Fran:

It only took us 20 years now, not 20.

Fran:

But yeah, like when I was working, when I created AsyncAPI, we were already building a product to work with OpenAPI.

Fran:

So OpenAPI was already around, not Swagger, OpenAPI.

Fran:

So OpenAPI was already like, Swagger was already renamed by then.

Fran:

So it means that it was there for a while already.

Fran:

What I mean with this, and this reminds me to a panel I got invited in Silicon Valley, I think 2018, or something like that.

Fran:

And I was there.

Fran:

I remember my phone sitting there in the panel and listening to everyone, not speaking at all, and thinking, everyone was saying that how cool OpenAPI was, how cool, how everyone was using standards, how beautiful everything was, right?

Fran:

And I was just sitting there and it's like, that's not what I'm seeing.

Fran:

Like, what's wrong with this?

Fran:

Like, is it just me that I'm not seeing enough or what's happening?

Fran:

And I recall someone from the event, I don't recall the name of the guy, sorry for that, but someone from the event said, like, mentioned my comment in Twitter, I think.

Fran:

And he was like, the point, the whole point of the day was this take by Fran Mendez saying, hey, get down to earth, like, this is pretty cool.

Fran:

But we're just a bunch of us using it, right?

Fran:

Like, we're those nerds that love APIs and OpenAPI and so on and API first and sign first and we're thinking about these things, but nobody cares, nobody out there cares, right?

Fran:

Many people are building microservices and they don't even know what OpenAPI or Swagger is.

Fran:

And it's not that they care about or not, it's that they don't even know what it is.

Fran:

They don't even know it exists.

Fran:

I'm talking about 2018, right?

Fran:

And I was like, I don't want to disappoint people here, but my feeling is that this is still very niche, looking as API nerds, right?

Fran:

Then now I'm seeing this with this in KPI as well, or with even driven architecture, driven in this case by this in KPI and or cloud events.

Fran:

I'm seeing that more and more companies are adopting it.

Fran:

But it's still very early in the days for these companies to even, some of them, they don't even know if these standards exist, right?

Fran:

And I could even, I could see it from the Postman surveys.

Fran:

So Postman was organising a survey every year and I think it was around 1% of people knew what API was.

Fran:

And I was like, I know it's a very specific target audience, APIs, but precisely, it's very related.

Fran:

It's actually coming from that same world when I created this in API, I created it from OpenAPI.

Fran:

And I was always advocating for it on API days conferences and in API related conferences because that was when I was feeling comfortable, not for any other reason.

Karol:

But you know what, I was like, when you're talking about the standards and the old nerds like hyping about those standards, I'm like looking back at my career, when I started doing application integration, REST was nowhere to be found.

Karol:

Nobody was using JSON because it was non-existent.

Karol:

We were using XML.

Fran:

It's still nowhere to be found yet.

Karol:

I'm going to get to that one in a moment.

Karol:

So looking back 14 years ago when I started as a junior developer, we were building SOAP services over HTTP or SOAP services over JMS. And that was already a very robust standard and was already a very established standard.

Karol:

Very rigid, had to be very precise, so it was very prone to errors.

Karol:

You could do a lot of errors and everything will be just returning you a 500 HTTP error, right?

Karol:

Which is fine because where I worked, we actually needed very high rigid standardisation of the APIs so that we can have that quality of data.

Karol:

But even though that was a very established standard at the time, we still stumbled into people who had no idea what they were doing, even if they were senior, right?

Karol:

So I remember this lovely conversation some time ago where somebody was debugging a SOAP service and the guy had no idea why it was not working.

Karol:

The message was sent according to specs.

Karol:

The specs said that the specific element could be empty.

Karol:

Like no string at all, right?

Karol:

So basically in the XML, they got an empty tag.

Karol:

So a tag that doesn't have two elements has one element so it's already closed.

Karol:

Self-contained, yeah.

Karol:

And I remember the lovely comment from that developer debugging that communication because it was wrongly interpreted.

Karol:

It's like, I'm getting a very weird tag here.

Karol:

It's neither open nor closed.

Karol:

I don't know what that is.

Karol:

And I'm like sitting there and it's like, after a few years later, I mean, when I started doing proper research into interoperability and why we're doing certain things the way we are doing things and I started reading the specification of the XML, I was like, that self-contained tag is in the first version of the specification.

Karol:

It's old as hell.

Karol:

It was there for a reason.

Fran:

It's pretty common in HTML as well, yeah.

Karol:

Yeah, exactly.

Karol:

The new line tag, that's basically what it is, right?

Fran:

Line, link, all this stuff, yeah.

Karol:

Yeah, plenty of those.

Karol:

And I was like, right, perfect.

Karol:

So we have standards but nobody actually even reads them.

Karol:

They apply to the use case.

Karol:

Sometimes good, sometimes bad.

Karol:

And now looking at the REST standard, I would say that over 95% of REST services are not aligned with the REST standard.

Karol:

We call them REST services, but they're not actually up to par.

Karol:

They don't have the next page.

Karol:

They don't have the related objects, nothing like that.

Karol:

We just use this to convey messages based on CRUD, create, read, update, delete.

Karol:

And we have standards.

Karol:

But who read the REST API standard?

Karol:

I mean, hands up, probably nobody, other than the two of us, I would guess.

Fran:

No, no, no, I haven't.

Fran:

I just went through it like a little bit, but couldn't finish it.

Fran:

I mean, it's an interesting one, probably.

Fran:

I just didn't have the time or energy to do it, or even the need to do it.

Fran:

So if I have had the need, probably I will have done it, and that's fine.

Karol:

Yeah, the need is also quite important.

Fran:

So I never had the need to have, let's say, a proper REST API.

Fran:

Because what you said, even consuming this kind of APIs will become more difficult for teams that are already like being pressured to deliver quickly, quickly, quickly.

Fran:

Right?

Fran:

So yeah, this sort of SCRAM methodology that we have been applying for the last decade, it's a little bit of a culprit there as well for telling people that you should be rushing out and delivering things quickly in the next two weeks without looking farther than just two weeks.

Fran:

So I know it's not exactly what SCRAM says, but that's how it was usually applied.

Fran:

So in the end, we'll get back to the same thing.

Karol:

So basically we could say that, yes, we have standards, but nobody's adopting those standards.

Karol:

So we basically live without standards.

Karol:

And that's one of the usual problems.

Fran:

Now, I would love to give, let's say, a vote here to these people who never reach standards and try to build things and so on.

Fran:

I'm one of them as well.

Fran:

And I think everyone is, everyone, like we all do it with certain things, not with all of the things, right?

Fran:

But the thing is that if you are under pressure to deliver, deliver, deliver, you could not be reading MSN.

Fran:

All the standards that are out there and so on, sometimes it's faster and easier for you to deliver something that is, meh, it works, right?

Fran:

And you're not going to be fired because you deliver.

Fran:

Then to say, you know what, let me properly read this and let's build this in eight weeks instead of two.

Fran:

But the cool thing is that next time we have to build something like that.

Fran:

Actually, next time we have to build a feature on the API, we don't have to change the API.

Fran:

Like the whole API will adapt itself, right?

Fran:

Like the web is doing with HTML, for instance.

Fran:

You don't have to encode each website in the world, like everybody got a language, which is HTML, and then you can create the content.

Fran:

And then you have link tags and so on, script tags, and all this kind of references to other webs, the A tag, the anchor tag, and all this stuff, which are hyperlinks.

Fran:

So there's a system there, right?

Fran:

The thing is that for some reason, at some point, we decided to say that XML or HTML is not good enough.

Fran:

Let's just jump to JSON because it's more readable.

Fran:

I can relate to this, like I failed myself.

Fran:

I prefer to read JSON than to read XML.

Fran:

But it's true that it's not compatible, so we're losing features when we jump from XML to JSON.

Karol:

I mean, I know a few people who would argue that nowadays JSON already has those features that XML has.

Fran:

That was like a kind of patches and so on, but at the time, it's already late, let's say, because people have too invested in using plain JSON with no structure and so on.

Fran:

So it's a bit of a mess, but I will not point to those who are using the standards without reading the standards.

Fran:

I will instead point to these organisations who don't give enough space to these engineers to iterate and to experiment and to build better systems, right?

Fran:

And instead, it's like ship, ship, ship, ship quickly because we need to go to another feature and another one more feature, one more feature.

Fran:

We don't care.

Fran:

It's like technical debt.

Fran:

Who cares, right?

Fran:

This is not going to give us money, right?

Fran:

So I will point to these people instead.

Fran:

Like there's company cultures, organisation cultures that don't enable for engineers to experiment and fail and develop things in a calm way while you're reading things and develop things properly.

Fran:

In the automotive industry or in the aerospace industry.

Fran:

I'm pretty sure it happens to some degree, but it doesn't happen as much as with software, right?

Fran:

Why?

Fran:

Because she cannot just ship a half-baked plane into the air with people, right?

Fran:

Because if it fails, it will kill people, right?

Fran:

So that's why it takes so long time to build something that is, okay, this is now properly tested.

Fran:

It's not going to kill anyone.

Fran:

And if at some point there's an accident because of a failure of an aeroplane or something, that will become the rare news of a plane accident.

Fran:

That's really rare.

Fran:

But bugs, software bags, we see them daily.

Fran:

Because who cares?

Fran:

Who's going to die for this?

Fran:

I mean, yeah, one could argue that there are certain systems where people could die of software bags.

Fran:

But in general, who cares?

Fran:

Like, well, what's going to happen?

Fran:

Like, someone's not going to be satisfied.

Fran:

I don't care.

Fran:

Let's just keep rolling.

Karol:

That's why we say that if we're testing software, we're never 100% sure that there are no bugs.

Karol:

There are always bugs, and software we just haven't found them yet because we just found that the right deterministic situation is everywhere.

Fran:

That's the situation.

Fran:

Hardware as well.

Fran:

It happens as well.

Fran:

So the thing is that if you are serious enough about it, if you have that need, like in the aerospace industry, you don't want to be in the news constantly because you killed a lot of people, you want to make sure that you reduce this probability to the very minimum you can, right?

Fran:

And you do a lot of tests.

Fran:

And so before you even launch something, right, before you even launch a beta version, right?

Karol:

Yeah.

Fran:

That's something they do at all.

Fran:

So that's my point.

Fran:

So I will not point to these people who don't understand the standards and so on, but instead point to our shitty organisation, organisation cultures, and that don't provide psychological safety to engineers to experiment and to fail.

Fran:

That is my take.

Karol:

And learn from those failures.

Fran:

Yeah, exactly.

Karol:

And this is a very nice segue to the next topic at hand, which is the non-technical barriers, but also the mindset shift that is required for proper governance and proper placement of even driven architecture within organisations.

Karol:

Because from my perspective, it's extremely easy to jump into doing point to point.

Karol:

That's amazingly easy with OpenAPI spec, with just all the libraries that enable you to put in just a REST API in seconds, with LLMs that just give you a definition of a REST endpoint in matters of seconds, and with a spec that you can send to somebody and they will use it.

Karol:

I mean, it's extremely easy.

Karol:

But to properly govern asynchronous communication, I think that's something completely different in that sense.

Fran:

That's really happening by the way.

Fran:

So you can really do that.

Fran:

And with LLMs as well, like you can generate AsyncAPI and you got pretty much, I will not say the same coverage as with OpenAPI, but this is not yet as mature as OpenAPI.

Fran:

I like to remember that OpenAPI has been around for probably around 10 more years, or a little bit less probably.

Karol:

Yes, while you can generate, that doesn't really change anything in terms of governance or the non-technical obstacles.

Fran:

That's my point.

Fran:

That's my point.

Fran:

So you can generate even mocks or stops for like people can use postman, for instance, for OpenAPI, but people can use also microx to generate mocks for, you know, for, I was going to say a Kafka topic, but I have to learn myself to stop saying Kafka for everything that it's even doing architecture because it seems like it's the same.

Fran:

So let's say for an AMQP topic or an AMQP queue, depending on your configuration, or an MQTT topic or whatever, right?

Fran:

So you can mock this already with microx as well and with AMQP contracts.

Fran:

And you can have people who are, let's say not very technical, like product managers who understand a little bit about the topic, but not so much.

Fran:

And they can already create some mocks, some fake data that will be published to a broker and things like that, right?

Fran:

So it enables, let's say, non-technical people to go one step, let's say one step ahead, one step beyond without having to wait for the engineering teams to apply these things.

Fran:

And you have similar technologies like Spectral that it's used to create, to link OpenAPIs, to link this into API as well, right?

Fran:

So you can use both, right?

Karol:

All right, but going to the mindset shift.

Fran:

Yeah.

Karol:

And that's actually a very nice, also a point where we could pop this lovely QR in.

Karol:

Fran is actually writing a lovely book about, what is that about, more human challenges of adoption of?

Fran:

No, no, no, actually, lately I'm talking about a lot about these things, the human challenges of adopting engineering architecture, because that is the most overseen aspect of it that I found out, right?

Fran:

So I know, like I can write a book about the technology needed to build an event-driven architecture and apply some governance to it and so on.

Fran:

That's fine.

Fran:

That's what I've been doing for the last 10 years or so.

Fran:

The problem usually relies on a more human side of things, right?

Fran:

So like, I'll give you an example.

Fran:

So for context, in the last four or five months, I've been interviewing more than 20 people from different companies at different stages, but they all were doing event-driven architecture for the sake of the book, right?

Fran:

I want to understand how people are doing, what are their challenges and so on.

Fran:

So I wanted to make sure that it's not, this book is not just based on my experience or in my opinion, but also on facts, let's say, right?

Fran:

And I'm glad I did because I was not going to even mention anything about the human side of things, right?

Fran:

And what I found out is that every single company out there, their major challenge is about communicating, you know, like convincing their thoughts.

Fran:

I'll put you an example.

Fran:

If you're an engineer, if you're an architect that you want to introduce event-driven architecture or certain practises related to event-driven architecture, and you are in a well-established company, old company and so on, the rest of the teams, the rest of the engineers are super comfortable doing what they used to do, right?

Fran:

They don't want to change, right?

Fran:

So how do you convince them to adopt this new mindset?

Fran:

Likely if you are a, if you're a leader in the company, like let's say head of engineering, CTO, whatever, how do you convince the rest of the teams, the rest of the engineers that EDA is what they should be doing and there should be a mindset shift in this case.

Fran:

That's why it's called shift, right?

Fran:

So why, how do you do it and why?

Fran:

Because what I found out is that people were sure that EDA is what they needed and what they should be doing, but they struggled to convince their thoughts, their peers on the why.

Fran:

Like why is it what we need?

Fran:

Like we've been working with without it for years.

Fran:

Why is it needed now?

Fran:

And what I found out is that most companies don't even know where to start.

Fran:

I only found one, by the way, one company that I think in my opinion, either they were lying to me or they're doing it pretty well.

Fran:

So it was like a combined effort.

Fran:

Like it was a bottom up and top down approach.

Fran:

It was a combination of both.

Fran:

That was alignment from, let's say architects, but also senior engineers, staff engineers, all the stuff, stuff plus in here with the leadership.

Fran:

So everything was coming from, let's say from the bottom of the organisation, not right and sideways as well as much as possible.

Fran:

But when someone was not buying the idea, then you have leadership saying, no, this is what you have to do.

Fran:

I'm not asking for your opinion.

Fran:

Like we want to convince you, right?

Fran:

We give you the option to be convinced by faults and so on, right?

Fran:

And everyone is pretty much in, but sometimes you have the black sheep around, right?

Fran:

That said, I don't care about that.

Fran:

I'm disobeying whatever they tell me.

Fran:

I don't buy it.

Fran:

Well, in this case, it's useful to have someone from above, right?

Fran:

And say, no, no, you have to do it.

Fran:

Like there's no chance I'd say that this or you leave basically.

Fran:

I mean, they should never be using that card if possible, but it's useful to have it, right?

Karol:

I'll put a opposite example of not adoption.

Karol:

I've seen many companies adopting new practises in terms of interoperability.

Karol:

And I've seen some really bad examples of those adoptions, one of which was to create a whole integration team from scratch from former database developers and database administrators.

Karol:

And if we put people that don't have the right mindset into these kinds of roles where they need to do interoperability, I mean, some really wonky stuff happens.

Karol:

The wonky stuff that happened there was that they, with their database mindset, they persisted everything.

Karol:

Imagine just purely persisted communication, like everything has to be written down, persisted in the database, then redistributed by usually point to point.

Karol:

It was magical.

Karol:

And one of the reasons I observed why they did that is because that company, in terms of how they communicated between teams or how they communicated between departments, between each other, was mostly on meetings and with robust documents.

Karol:

Like they just made humongous paper trails.

Karol:

And from my observation over the years in application integration is that if we look at the way that a company communicates internally, that translates directly to how systems communicate in that company.

Karol:

So if we have lots of meetings, we're going to have...

Karol:

Yeah, Conway's law, pretty much, yeah.

Karol:

If we have meetings there's going to be a lot of request reply.

Fran:

Yeah.

Karol:

If those people are accustomed to using...

Fran:

And synchronous.

Karol:

Yes, definitely synchronous, yes.

Karol:

If that company is accustomed to using chats and they're accustomed to not rely on instant reply, well, we'll probably have some even driven in the systems, a decent amount.

Karol:

And then if a company is relying on documents, that's going to be batch, batch, batch and file-based transfer, file-based transfer and file-based transfer all the way.

Karol:

I mean, it's fine if it's proper ETL, ELT or batch, but if file-based transfer, I mean, come on, are we like in the 70s?

Fran:

That's still useful sometimes.

Karol:

It is.

Fran:

I mean, think about it.

Fran:

Like if your system is not...

Fran:

I mean, if it's not relevant for your system or for your company, to have this information right straight away, like in real time, as much as real time, you want to define it.

Fran:

File transfer, like a batch overnight, it's completely fine.

Fran:

Like if it works, if it's not, let's say...

Fran:

If it's not a problem, if it's something that can be done secondarily, it's not critical for your system and so on.

Fran:

That's another technology.

Fran:

Like I said, it's a technology.

Fran:

Use it whenever it makes sense.

Karol:

Exactly.

Karol:

And I agree on that.

Karol:

Whenever it makes sense, but then...

Fran:

Exactly.

Fran:

Don't use it for everything.

Karol:

If you have 90% of your communication being robust operational communication because batch is great for analytics, batch is great for long-running processes, it's fine.

Karol:

But if you're doing your operational communication with file transfers, there's something definitely very wrong in the way people do not communicate with each other.

Karol:

Because if I'm looking, if most operational work is done over sending a document...

Fran:

Honestly, I think, again, like every time I dig down into this topic, I find out that it has nothing to do with technology.

Fran:

So every time I found that, and I scratched a little bit of surface and asked, why do you keep doing these file-based transfers, these batches overnight and so on?

Fran:

Every time I kept scratching, I instantly found that...

Fran:

Instantly, sometimes even in the same meeting, like one question away or two questions away, I was just not even asking directly, just asking around.

Fran:

And instantly what popped up is it's a psychological safety in the organisations.

Fran:

So picture this.

Fran:

If you are an engineer that's been in a bank for 20 years working there, you know the system inside-out, right?

Fran:

Now someone comes to you and say, we now have this Kafka broker, right?

Fran:

And we are doing...

Fran:

We're now doing everything over Kafka.

Fran:

But you still have to deliver stuff, right?

Fran:

So what you will probably do is either say, no, I'm not going to do this because I don't need it.

Fran:

If you have the psychological safety to do that, and meaning that you know that you're not going to be fired for disobeying, or you say yes, but you don't do it, right?

Fran:

Which is even worse, right?

Fran:

That's even worse because everything...

Fran:

What happens in this case is that everything seems to be working.

Fran:

Everybody is buying the argument.

Fran:

Let's use Kafka.

Fran:

Let's react on real time or, yeah, as it happens, to all the events and everything.

Fran:

We process them and so on.

Fran:

And we do the calculations in the very moment as we get the event, right?

Fran:

Instead of just relying on overnight batches, right?

Fran:

It seems that everybody is buying your argument.

Fran:

But then you find out that adoption is like, this is not happening as fast as it should.

Fran:

What's happening here?

Fran:

They keep putting excuses here and there, like we have some deadline that we have to match, whatever, which might be true as well.

Fran:

And then it's almost impossible to migrate to this new kind of system, right?

Fran:

Let's say in an acceptable time because these people are boycotting you, right?

Fran:

Even if you are their boss, right?

Fran:

Because for different reasons, it can be because their manager is not aligned with the leadership making this change.

Fran:

So their manager is still like putting them pressure, like you need to deliver this, this, this, this, this, more feature, more things, more blah, blah, blah, whatever.

Fran:

So we don't have time to change our mindset here or to study or to start experimenting because it's a new technology.

Fran:

You have to experiment because you don't know how it works.

Fran:

So you've got to experiment, right?

Fran:

So the manager is not letting them experiment.

Fran:

So they never have time to experiment.

Fran:

So since they don't have time to experiment, someone, some colleagues, some peer come to them, maybe an architect, usually an architect comes to them and say, hey, why are you not already publishing this information to Kafka or consuming from Kafka or whatever, or from, I mean, why to bother, right?

Fran:

Why aren't you doing this already?

Fran:

Like it's been two months or whatever.

Fran:

Then you have this problem that they need to keep shipping because the manager is putting them deadlines.

Fran:

Now, the other thing that I've seen is this is if the whole technology changes, I may become redundant in this company.

Fran:

I may lose what makes me special and what makes this company not fire me, right?

Fran:

And so I will lose this job and I don't want to lose this job because as opposed to us who are passionate about software, many people are working in companies just in exchange of a salary just because of debt, which is perfectly fine.

Fran:

You don't have to have a passion for software or for your job.

Fran:

That's completely fine.

Fran:

And it's totally acceptable, right?

Fran:

The thing is that if these people fear for their job and they know they've been doing this for 20 years, so they know that if they go out, they're going to struggle to find a new job because that world is not there anymore, right?

Fran:

It's only in a few companies here and there.

Karol:

Very true.

Fran:

And they're not hiring for these roles anymore.

Fran:

So that is creating a lot of stress and their instant reaction is saying...

Fran:

Resist, exactly.

Fran:

Resist here.

Fran:

I'm going to boycott this initiative because that doesn't make sense.

Fran:

Sometimes, I will even argue, most of the times, if not all of the time, they don't do it on purpose.

Karol:

No.

Fran:

It's just unconsciously.

Fran:

And it happens to all of us in every aspect of our lives.

Fran:

So what I'm researching a lot for the book, for writing the book, is precisely on the organisational psychology.

Fran:

I mentioned the safety.

Fran:

I mentioned also the resistance and so on.

Fran:

Aleksandr is in chat, he's mentioning the architectural comfort zone.

Fran:

Totally agree with that.

Fran:

It's the comfort zone.

Fran:

And nobody wants to leave the comfort zone because the comfort zone is comfortable.

Fran:

That's why it's called comfort zone.

Fran:

Nobody wants to leave that.

Karol:

It takes a lot of effort to leave your comfort zone.

Karol:

It's very annoying to leave the comfort zone.

Karol:

It takes a lot of courage and a lot of energy to get used to pushing that comfort zone further and further.

Karol:

But it's a fallacy in its own if you don't do that.

Karol:

Because those people will, sooner or later, will end up without the job and they will realise how...

Fran:

Maybe these people are already 55 years old and they're aiming for less retirement without any complications.

Fran:

So that's also valid.

Fran:

The software industry is already becoming so old but it's already common to see people over 50 years old in teams.

Fran:

So we're getting there.

Karol:

Just last week I spoke to Mark Riches on a live stream with Utrecht Mulesoft Meetup.

Karol:

And Mark has...

Karol:

Let me not get that wrong.

Karol:

42 years of experience in IT, 31 years of experience as an architect.

Karol:

I mean, he's a dinosaur in the field.

Karol:

An absolutely amazing guy and an absolutely amazing architect and he's very comfortable with moving his comfort zone and stepping out of his comfort zone which is an amazing thing to watch.

Karol:

But he's one of the rare people there that actually is still capable to do this with his years of experience.

Karol:

That's amazing but that's such a rare thing to observe.

Karol:

That's passion.

Fran:

That's passion.

Fran:

That's only possible because of passion.

Karol:

And there is...

Karol:

If we look at our organisations, I mean, those people are there to make a buck.

Karol:

They want to make a living and move on with their lives.

Karol:

They don't have to have that passion.

Karol:

It's fantastic if they do.

Karol:

That's awesome.

Karol:

But it requires really strong leadership and actual leadership that leads to spark the minimum of passion for those people to be able to step out of those comfort zones without fear with that psychological safety somewhere there.

Karol:

And that's difficult.

Karol:

That's extremely difficult.

Fran:

It is because we all have a boss, right?

Fran:

So that's the thing.

Fran:

We all have a boss.

Fran:

Even your boss has a boss, right?

Fran:

Nobody wants to be the guy that is like, why are you so weak with your team?

Fran:

Like why don't you tell them what they have to do and if not, fire them, right?

Fran:

There's still this mentality, especially in these old industries like banking.

Karol:

It's the mentality, the very specific mentality called the Peter Principle.

Karol:

You heard probably about that.

Karol:

So for those who don't know Peter Principle, it's a concept described in 1969 by Dr. Lawrence J. Peter

Karol:

It basically means that, especially in larger environments, the smaller the company, the less it happens.

Karol:

But in large corporate environments, people tend to be promoted to higher positions based on their time with the company, not based on the competence for that next position.

Karol:

So they're great at their role.

Karol:

They're like, let's say, you're a great junior developer.

Karol:

Okay, you get a promotion to a mid developer role, right?

Karol:

You're a great mid.

Karol:

You get promoted to senior.

Karol:

And then all of a sudden, you get promoted to a team lead, right?

Karol:

And then you become incompetent because being a team lead is something completely different in terms of skill sets than being a senior developer.

Karol:

Because being a team lead requires a different set of skills in terms of soft skills.

Karol:

Being a senior developer, you just need to communicate clearly about the code you're writing and the technology, maybe a little bit of a coaching of juniors, etcétera, your colleagues in the team.

Karol:

But as a team lead, that's something different.

Karol:

So if you never have any interest in psychology or any interest in building your soft skills as a developer, and you get promoted on the basis of a Peter principle, then all of a sudden, you become completely incompetent in your job.

Karol:

And that's horrendous.

Karol:

And I've seen managers and directors being promoted that way.

Karol:

Where they're completely incompetent to lead the whole departments and they destroy the company from within.

Karol:

And then you have a large turn of employees and it all becomes very costly and difficult for everybody.

Fran:

I must say, I face that myself.

Fran:

In my last job at Cosmo, I was a director of engineering.

Fran:

I don't know how to be a director of engineering.

Fran:

I still, I mean, I more or less know now after four years being in that position.

Fran:

But when I landed there, I was like, I mean, can you imagine the imposter syndrome on me?

Karol:

Let's not get started on my imposter syndrome.

Fran:

Can you imagine that like, yeah, I created this AsyncAPI, cool, whatever.

Fran:

But when I quit my job to work 100% of my time, full-time, on AsyncAPI, I was just recently promoted as to manager position at New Relic.

Fran:

But I think I was in the manager position.

Fran:

I was just one month and then I quit.

Fran:

So I didn't quit because of the company.

Fran:

I quit because I had the opportunity to dedicate full-time to AsyncAPI and I took this opportunity and not looking back, right?

Fran:

So it was a different reason.

Fran:

So I jumped straight from lead engineer, let's say that I was usually playing that role in different companies.

Fran:

Sometimes architect but of smaller companies.

Fran:

So it's effectively it's like lead engineer.

Fran:

I was instantly promoted to director of engineering, managing other managers managing people, managing the project, the budget, the strategy, you know, all these kind of things.

Fran:

Aleksandr says I figured that we make it.

Fran:

That's what I did usually is I kept going.

Fran:

I kept going because also I was like, there's another point by Kubilay saying that is it really being an imposter?

Fran:

Well, if you hide it, and you don't try, you're imposter.

Fran:

In my case, I was trying hard.

Fran:

I was trying to learn as much as possible, learning from peers within books, taking courses and so on.

Fran:

I was trying hard.

Fran:

It was just not made for me.

Fran:

It's not what I should be.

Fran:

It's not what I like.

Fran:

It's not what I enjoy.

Fran:

And it's not what I'm good at, at managing.

Fran:

I can be decently good.

Fran:

At least I'm not.

Fran:

I'm really good at the human level in the sense of like something that I'm proud of is that I acted as a as an umbrella for my team.

Fran:

kind of like a two way, two ways umbrella.

Fran:

So I was filtering all the shit from the organisation so they don't have to worry about things happening at the higher level.

Fran:

But letting them shine to the rest of the organisation and promoting their work and their achievements and so on.

Fran:

So I'm happy with that work that I usually did.

Fran:

And even when I quit and when they all were fired one month after I quit, the whole team, right, at Postman was led off.

Fran:

Even after that, I was on holiday time and I was trying to find them a job and so on and talking to people so they could find a job.

Fran:

So I'm happy.

Fran:

I'm proud of myself at the human level.

Fran:

But I don't know how to do that.

Fran:

I don't know how to properly do that and I don't and even more important I don't enjoy it.

Fran:

So yeah.

Karol:

I mean, I must compliment you because this kind of behaviour absolute leadership.

Fran:

Well, and I must say as well, I appreciate that but I must also mention something that I don't want to miss.

Fran:

I want to make sure that everybody understands this point.

Fran:

So and this took me a few sessions of therapy.

Fran:

I'm not joking about that.

Fran:

It's true.

Fran:

It took me a few sessions of therapy.

Fran:

So it was really painful for me to see my team being led off this way.

Fran:

it's really like it takes true leadership as you said and as many people say that this is what you should be doing and so on.

Fran:

But if you ever if you are ever in this position my piece of advice is don't do it.

Fran:

Don't do it to that extreme.

Fran:

So I've spent more than a year at Postman being burned out just to protect my team because I knew or I felt it that if I quit they all will be fired.

Fran:

Because our hire basically was a marketing hire.

Fran:

It was not a technical hire or product hire it was a marketing hire so if they don't have the founder of AsyncAPI why keep investing it in this ship right?

Fran:

Or they don't care.

Fran:

And I felt that because of their comments and so on.

Fran:

I don't agree.

Fran:

I would have left the whole team there because also Lucas was still the director of the initiative so the director of AsyncAPI was still there.

Fran:

So it could have continued even as a marketing hire or as a marketing investment.

Fran:

Now the thing is that my biggest mistake there was allowing myself to stay there to protect the rest of my team.

Fran:

Don't ever do that because you can get to a point where recovering from the burnout is not recovering from the burnout anymore and it's recovering from the depression.

Fran:

So because you are trying to you are trying to protect people that first of all they never asked you to protect them.

Fran:

That's the first thing.

Fran:

You're doing it just because you want to and you feel that you should be good.

Fran:

That's like the saviour role like you want to save everyone from the pain and so on.

Fran:

And secondly, they are very good professionals and adults and so on.

Fran:

So when they were laid off nobody was like or almost none of them was like hey, let's rush out to find another job.

Fran:

Most of them were like who cares?

Fran:

Cool.

Fran:

I've got holidays now and they were fired in June by the way.

Fran:

So in the beginning of summer like it's been a year now.

Fran:

So most of them thought like cool, let's just have holidays and proper holidays and so on and now slowly find another job at the end of the summer.

Fran:

That was like I've been worried.

Fran:

I've been worried for all these people when and yeah, they are sad that they've been laid off but they're not worried for their financial situation or anything like that.

Fran:

So don't overload yourself with things that are not your problem.

Fran:

Right.

Fran:

If your team loses a job it's not your problem.

Fran:

I know it's hard to say but it's not your problem.

Fran:

Yeah.

Fran:

It's their problem.

Fran:

So it's something they have to solve, not you.

Fran:

You can try to make it harder to happen but not at the expense of your own health.

Fran:

That's what I would say.

Fran:

Never at the expense of your own health.

Karol:

And you're touching a very, very important topic which I didn't really expect to land in this stream which is mental health.

Karol:

We discussed that offline that the industry is just a perfect hiding spot for a lot of people with a lot of different disabilities as in ADHD or being on the spectrum of autism.

Karol:

A lot of the issues we're having we are having in our works especially also burnout and like the comment from you to Bright Hair will burn out middle name, right?

Karol:

Is that common?

Karol:

Yes, that's very common in the industry.

Karol:

But it's common also not because the industry is burning us out or the bad leadership or bad management more likely is burning us out.

Karol:

It's because we also suffer from ailments that we are not even aware because our industry and our jobs are great at hiding those.

Karol:

So, for example, there are actual studies that certain industries like IT, events, etcétera are absolutely great at hiding ADHD.

Karol:

People with ADHD can hide there indefinitely.

Karol:

But that also means that they will suffer because they don't even know that their ADHD is causing them a lot of problems including that burnout.

Karol:

So, as we're talking about mental health and as a person that I've been diagnosed this year with ADHD, right?

Karol:

Go seek professional health help and dig into the topic because if you're having depressive thoughts if you're having a burnout that might be just the symptom.

Karol:

That might be just the symptom of the fact that you have ADHD and it's wrecking up your life because you left it unmanaged for too long and you're overburdened with certain things and it starts kicking you in the butt.

Karol:

If you're overstimulated constantly if you're constantly feeling overburdened if you're constantly feeling tired there might be something more to that.

Karol:

It's not only your imposter syndrome kicking you down it's not some sort of a depressive thought or something.

Karol:

It actually might be something that was hidden because you work in IT because the amount of changes you need to go through oh man ADHD people love changes.

Karol:

If the environment changes around them in the fast-paced yes I'm really great at that right because I have ADHD we love those changes but then you don't realise that you actually have that.

Karol:

You don't realise that your brain works a little bit different you kind of think that oh everybody has that everybody everybody's brain works the same way.

Karol:

no it doesn't that's not normative that's neuroatypical so for those finding themselves in what Fran just said about burnout about depression about having that kind of a a little bit of a saviour syndrome because what you described in protecting your team was kind of that saviour syndrome there.

Karol:

Take a look at that.

Karol:

Dig into the topic.

Karol:

If you're feeling burnt out, if you're feeling depressive and you feel like it's because of your work, it might not have nothing to do with your work.

Karol:

Your work might be contributing to the state you are in, but you might be just neuroatypical.

Karol:

And that's also perfectly fine, but go to a specialist.

Fran:

Yep, exactly.

Fran:

I agree with that.

Fran:

And that links back to what I was saying that this psychological safety and organisations, like it's not just for experimenting.

Fran:

It's not just for, you know, for adopting a new technology and so on.

Fran:

It's also for feeling this burnout, which by the way, I would like to clarify, burnout is not a clinical term, right?

Fran:

This is a beautiful name we invented to describe depression.

Fran:

So that is depression, right?

Fran:

So when you feel burnout, depending on the stage of it, you might be in the beginning of a depression, you might be like straight into a depression.

Fran:

So let's call it for what it is.

Fran:

It's cool to call it burnout because most people are searching for this word, but let's call it also for what it is.

Fran:

The clinical term is depression, right?

Fran:

So search for help.

Fran:

That's what I would say.

Fran:

And yeah, and if you are a manager, if you are a team lead or something, or you're managing people, I'm not gonna say that you should be acting as a psychologist, because that's probably not your problem, again, but at least give them space for expressing their thoughts openly.

Fran:

And if they need help and the company supports it, like for instance, paying for the treatment, paying for the therapy sessions.

Karol:

Paying for coaching, ADHD coaching sessions.

Fran:

Paying for holidays.

Fran:

Like for instance, I remember a friend of mine, like he was in my team.

Fran:

He was, I immediately detected him to be like, like super, like about to collapse, you know?

Fran:

And he was not taking holidays because in his own words, I have to finish this.

Fran:

I have to, and I said, no, no, you don't have to.

Fran:

It's good if you do it.

Fran:

It's good if it happens, but you don't have to.

Fran:

You don't have to finish this.

Fran:

We're an open source project.

Fran:

It's okay if you need this for the community to complete it, to contribute and so on.

Fran:

And if it doesn't happen this summer and it has to happen next summer, that's completely fine.

Fran:

We're not a product company.

Fran:

We're not trying to sell anything.

Fran:

We're building an open source project.

Fran:

So if something is not developed as fast as you like, then maybe we should focus in inviting more people to join our community and contribute more, not you doubling down the hours and the effort you put in, right?

Fran:

So, and I sent him like four weeks straight into holidays, like finish whatever you have a time today.

Fran:

Tomorrow you're on holidays already.

Fran:

And I don't want to see you connecting for weeks, right?

Fran:

He came back recovered and with a mind clear like shit, I was like so deep into this that I was even like believing that this was all my responsibility.

Fran:

Yeah, down the rabbit hole you go.

Fran:

Down the rabbit hole exactly.

Fran:

And so this is something that I also ask managers whenever they detect this kind of things, protect your team, don't protect the company.

Karol:

Right.

Fran:

I mean, if you protect your team, you're going to protect the company anyway.

Fran:

So, but don't look up, look down, look to your team, protect them, right?

Fran:

Because in the end, the company is going to fire you someday, right?

Karol:

You're just an asset that is easily removable.

Fran:

Whatever company you work for, they're going to either you're going to quit or they're going to remove you.

Fran:

So protect your team because they're probably their colleagues as well.

Fran:

And also for humanitarian reasons, don't let people suffer for the sake of just a few millionaires, right?

Fran:

I don't care about that, but I'm a little bit punk here, I will say.

Karol:

But you know what, from my own experience, when I learned that I have ADHD and I started sharing and talking about that with people, and I told that over a team meeting with my previous employer.

Karol:

And that was very interesting that all of a sudden I had pings on Slack from people I didn't even know at the time in the company.

Karol:

They were like, hey, I heard you have ADHD.

Karol:

I also have ADHD, but I haven't come out of the closet.

Karol:

Nobody knows, but I want you to know because you have ADHD so you'll understand.

Karol:

And there was so many people that didn't feel psychologically safe in the company to be themselves and to be open about themselves.

Karol:

So instead of being open about themselves, we just basically created an internal community of people with ADHD.

Karol:

And that worked to an extent because we started doing body doubling sessions, etcétera, to just help us work through certain blocks, right?

Fran:

You don't feel alone as well.

Karol:

And then you feel that you belong to somewhere, right?

Karol:

But it's very difficult.

Karol:

The psychological safety topic is a very broad topic.

Karol:

And there are so many reasons why somebody might not feel safe psychologically in a company and then act out based on that lack of safety and create even more troubles in the core topic that we were talking about, for example, so adoption of event-driven.

Karol:

Yeah.

Fran:

Yeah, so let me get back because I was reading the comments.

Fran:

And we have some questions.

Karol:

We have some really good technical questions.

Karol:

And I think we can jump to another point of a discussion, meaning the evolution of AsyncAPI, which some of those questions would be very fitting.

Karol:

So let me quickly scroll that up because I found one that was somewhere at the beginning of.

Fran:

Yeah, Aleksandr, I have first question.

Karol:

Yes, there we go.

Karol:

Yes, cloud event specification.

Fran:

If it's, you want to reply?

Karol:

Go ahead.

Karol:

I mean, it's about included as a recommendation to AsyncAPI.

Karol:

I have nothing to do with AsyncAPI at this point.

Fran:

I'll say it's mature enough, yes.

Fran:

I'm not sure how widely adopted it is right now, but I think I see it more and more, which is good.

Fran:

So everything that, whatever it is sticking to standard is always good.

Fran:

So I always celebrate that.

Fran:

Now I must clarify something.

Fran:

Some people think it's either cloud events or AsyncAPI, and they are complimentary.

Fran:

We actually tackle different problems, right?

Fran:

So I wrote a blog post about it in the AsyncAPI blog, because I found out at some point people were like, even like throwing fire at us, right?

Fran:

Like, hey, come on, say something bad about cloud events.

Fran:

And some hot take about it.

Fran:

And it's like, no, I'm not gonna say something bad because I always recommended myself.

Fran:

I was, when I was consulting with Adidas, I was helping them to adopt AsyncAPI.

Fran:

They were using Kafka as well, and they were already using cloud events.

Fran:

And I saw it in action, and I think it's pretty cool.

Fran:

So let me clarify.

Fran:

So cloud events, it's defining a, what's it called, like the envelope?

Fran:

The envelope of the data, right?

Fran:

Pretty much, it's not exactly that, but it's pretty much the envelope of the data.

Fran:

I think about it like enveloped in the post system, in the postal system, right?

Fran:

You don't send your letter straight away, right?

Fran:

You put it inside a letter, right, an envelope, sorry.

Fran:

And then you send the envelope with the letter inside, right?

Fran:

So that's pretty much it.

Fran:

It's like, it's a common envelope.

Fran:

It's a format so that all your messages across your system, they all follow the same structure when it comes to metadata.

Fran:

When it comes to specific data, then each one is different, right?

Fran:

And not even cloud event patches in that point.

Fran:

Cloud events has a field that it's called data, and this is free form.

Fran:

You can put there whatever you want.

Fran:

Now, the funny thing about this is that AsyncAPI helps you define, helps you define the communication, not the communication, the messages that your application, let's think about microservices, for instance.

Fran:

Your service is sending and or receiving from a topic, from a broker, from so on, right?

Fran:

You define this communication.

Fran:

But when it comes to defining the message itself, the message piece, there is a field called payload, right?

Fran:

And this one is free form.

Fran:

So we don't dictate how the payload of a message should look like, right?

Fran:

This is free form.

Fran:

You can put there whatever you want.

Fran:

Actually, in the JSON schema definition, this is, the value is true, because we always want to pass the validation.

Fran:

Like, we don't validate it.

Fran:

It's always, whatever you put there is valid, right?

Fran:

We don't want to get there.

Fran:

So there in the payload is where, payload and also headers as well, is where cloud events belong, right?

Fran:

The envelope and as the envelope of the data.

Fran:

So actually, I think there's a pull request or an issue discussion right now in AsyncAPI.

Fran:

If I recall correctly, something I started at some point, I want to integrate the two standards in a better way.

Fran:

Like if you're using cloud events, you should be able to somehow natively say it in AsyncAPI.

Fran:

I'm using cloud events.

Fran:

The format of the message is cloud events because the cloud events format itself is then going to tell you which format your data is in.

Fran:

Is it XML?

Fran:

Is it JSON?

Fran:

Is it following certain schema definition?

Fran:

So it will be cool if they could, you can already use both together, but it will be cool if it could be blended even better, right?

Karol:

Right.

Fran:

So, so yeah, so that is

Karol:

Just to be clear on the article, because I did some quick Google searching, would that be somewhere around May 2019?

Fran:

Yes, but the thing, I have to update this article at some point.

Fran:

It's not exactly how it's done anymore.

Fran:

But you see, like six years now, and I was already recommending this.

Karol:

Yeah.

Karol:

So that's the original article to be updated.

Karol:

I see the differentiators in the description is there, as you just said it.

Karol:

Maybe there would be probably some discrepancies over the past six years because things have changed, but that's pretty much it.

Fran:

At this point, I was exploring and telling people the different ways you could use both, different ways to use both.

Fran:

Now there are, let's say, best practises for using both that are not described in this article, because now in version three of the spec, things have changed a little bit, so now it's easier.

Fran:

We have traits.

Fran:

I think we had traits at that point, but there are other ways to do it.

Fran:

Honestly, on the top of my mind, I don't recall how people are doing it right now, but there are, let's say, best practises.

Fran:

So, yes.

Karol:

All right.

Fran:

It's not like that, like I described in this article.

Karol:

Yeah, but, you know, things change.

Karol:

Article has six years.

Karol:

That's only obvious that this will no longer be fully up to date, so, yeah.

Karol:

It will require a little bit of a fixing up in that sense.

Karol:

All right.

Karol:

Let's see.

Karol:

There were some, I think, oh, quite long questions from Maksim.

Karol:

Really a packed one.

Karol:

Best practises for designing data models for messages.

Karol:

Ooh, that's a, ooh, la, la, la.

Fran:

Canonical data model.

Karol:

That's packed.

Karol:

My personal take is I'm not a fan of canonical data models.

Karol:

Never will be.

Karol:

I've seen that happen.

Karol:

The larger the org, the worse it gets in canonical data models.

Fran:

Or if you do it, you do it as an afterthought.

Fran:

So, after you've been having, let's say, probably hundreds or thousands of message types, and you notice a pattern, maybe you standardise it.

Fran:

Because you make it a pattern, because it's already a pattern anyways.

Fran:

So, cool.

Fran:

In that case, cool.

Fran:

But if you do it up front, you're probably gonna be restricting yourself.

Fran:

And unnecessarily.

Karol:

That's where I am a fan of domain-driven design and bounded contexts within interoperability topics.

Fran:

Exactly.

Karol:

Because then we can define each object several times for each bounded context or each domain separately.

Karol:

So, a definition of a customer in terms of a customer domain will be a different customer defined in the order domain.

Fran:

Yeah, correct.

Karol:

Different attributes, even that's still the same core object, core data.

Fran:

It's still the customer, yeah.

Fran:

But it's a different representation of the data, yeah.

Karol:

Different context of usage, which makes it better.

Fran:

I will link it to the previous question about cloud events.

Fran:

It's needed.

Fran:

So, I'm seeing many people defining their canonical data models using cloud events as well.

Fran:

Because cloud events is extensible.

Fran:

So, you can add your fields, your own fields, whatever you want.

Fran:

So, you just have to respect certain fields that are mandatory, I think.

Fran:

Maybe one or two are mandatory, if I recall correctly.

Fran:

The rest are just optional and you can add more of your own.

Fran:

So, some people are opting for that.

Fran:

It's not exactly a canonical data model, but it gets close.

Karol:

Yeah.

Karol:

And a twist, which is a lot shorter of a question.

Karol:

Sharing resources data models between OpenAPI spec and AsyncAPI.

Karol:

Ooh.

Fran:

Many people do that, yeah.

Karol:

I think that's, in general, that's not a bad idea.

Karol:

Especially if you're having a integration platform, and especially in API-led architecture where you can actually do the domain partitioning.

Karol:

And some of your services are, at the same time, synchronous and asynchronous, because you have a lot of orchestration and different things are happening within the composition layer.

Fran:

Yeah.

Karol:

That means that that sharing would be actually a very good thing.

Fran:

I actually recommend it because, and actually, the reason why AsyncAPI is so similar, it's still so similar to OpenAPI, is because we want to be, both of them, as interoperable as possible.

Fran:

To be, as a fun fact, while we were designing version three of the spec, that is, it's the current version of AsyncAPI, we were even considering if there could be a way to make it not the same as OpenAPI, because we were already convinced that we had to change certain things in the spec, but to, in coordination with OpenAPI, which we are always in constant touch, the two communities, right?

Fran:

So to tell them that, hey, we're going in this direction because of this, this, and that, we're putting operations on the root level of the spec instead of inside the channels, or like, for instance, if you're familiar with OpenAPI, they have the operations, get, put, post, and so on, inside the path, right?

Karol:

Yeah.

Fran:

Instead of at the root level.

Fran:

But there were some, already some people in the OpenAPI community saying, we should move the operations to the root level and then link them with $REF and so on, right?

Fran:

So instead of having them nested inside paths and so on.

Fran:

That's the direction we took for AsyncAPI.

Fran:

So operations are now in the root level as a first-class citizen, as people call it, right?

Fran:

And we were thinking, if we managed to convince the OpenAPI folks to do the same thing, at some point, we could even, if not converge into a single spec, we could build really close, really, really close, right?

Karol:

Right.

Karol:

But this is a philosophical problem because if you look at the days of SOA and SOAP services, SOAP had a very different philosophy because SOAP was primarily used to build business services.

Karol:

So they didn't represent an object, they represent a function.

Karol:

While if we're looking at REST, REST by nature is supposed to represent an object and functions on that specific object.

Karol:

So moving the operations down to that level would shift back to, kind of shift back to business services rather than representing objects.

Karol:

And that philosophically might rub people the wrong way when we're looking at these kinds of services.

Karol:

Of course, this would be against REST principles, right?

Fran:

That's my point.

Fran:

So OpenAPI is not a spec for REST APIs.

Fran:

It is not.

Karol:

Very true.

Karol:

But the underlying philosophy is coming from the REST specification.

Fran:

Yes.

Fran:

The thing is that it's, I will call it like it's for HTTP APIs.

Fran:

That's it.

Karol:

Sure, yeah.

Fran:

In most cases, I would say it's just a resource-based HTTP APIs.

Fran:

And in some cases, it's RPC APIs.

Fran:

Like you will do with GraphQL, but instead of GraphQL, you use your own syntax with endpoints containing the action and so on, which is pretty common as well.

Karol:

But that would be a very interesting evolution to actually see that shift back to that.

Fran:

My point with this here is that we are, we've been trying.

Fran:

We're not trying right now, but we've been trying.

Fran:

The thing is that this is a little bit like forcing the things to match together when they are not the same thing, right?

Fran:

And it's not even representing the same kind of world.

Fran:

So it's a different thing altogether.

Fran:

Now, whatever can be reused, like schema definitions and so on, they're still the same, mostly the same.

Fran:

Actually, not the same.

Fran:

You can use, so OpenAPI uses the latest JSON schema draft.

Fran:

But the most used OpenAPI version, which is 2.something or the three, I think it's still 2.something. It's still swagger.

Fran:

The most used.

Fran:

It's on JSON schema draft four.

Fran:

You can use any of these schemas versions with JSON KPI for that very reason.

Fran:

So they were interoperable, right?

Fran:

So yeah.

Fran:

So we actually recommend it because it's a really good idea because think about it like, or picture this example.

Fran:

You have a REST API or an HTTP API, you receive a request, and as a result, you publish a message to a broker, right?

Fran:

As a result, as a side effect of this request, you publish a message to the broker containing some information that was in the request body, right?

Fran:

Say, for instance, you are signing up a user or something like that.

Karol:

I mean, that's a very common use case in API led architecture where you have the channel layer, the first layer, or as in MuleSoft, they call it the experience layer.

Karol:

You basically call a REST service, and then that translates into a synchronous call forwarding that event.

Karol:

The request is actually a disguised event, and the only reason why it's done over a synchronous call is because we want to give back the information that it was accepted for processing to that system so that system can move on.

Karol:

And it's easier to consume a HTTP API than to figure out how do we connect directly to the broker from each separate team to learn that broker.

Karol:

And then you move that complexity to the integration platform to learn how to use the broker and facilitate that use.

Karol:

So that's a very common use case.

Karol:

And also a common use case is right now popping up in API managements where they offer protocol mediation to mediate from a REST call to an event or from an event to a REST call, like a webhook.

Fran:

In fact, if you are building with a mindset of microservices, you might have an API that is a REST API or an HTTP API that receives a POST call, let's say, slash sign up, whatever, sign user up or whatever.

Fran:

This microservice might have its own database where it stores the user that just have signed up right now, right?

Fran:

And as a result, either the microservice or the database triggers a change data capture event, right?

Fran:

To the broker saying, hey, there's a new user in the database for whoever is interested in this, right?

Fran:

So this is very useful.

Fran:

And it's constrained to this.

Fran:

It wouldn't even make sense for people to connect to the broker to consume this kind of events from a browser or something like that because why would you?

Fran:

You want to have immediate feedback, right?

Fran:

You want to have immediate feedback if the operation succeeded or not.

Fran:

And you have the database there, you don't have to send the message to some other system that will process this message at some point and will come back with a response.

Fran:

No, no, no, it's just here now.

Fran:

It's either saving it into the database or not.

Fran:

Cool, give me the response immediately.

Fran:

So that makes sense.

Fran:

And then post this event for whoever else, let's say, welcome email, analytics, whatever.

Fran:

Any other reason you might want to know that a user, when a user has signed up, right?

Karol:

Yeah, that's an issue of system responsiveness as an architectural characteristic.

Karol:

So it doesn't really matter if you put that in a database for sourcing later or you put that on a topic with a persistence.

Karol:

You go on with your day, but the system goes on because it gets a response or an acknowledgement that something was published.

Karol:

It doesn't matter then how it's later processed.

Karol:

And that's the lovely quality of putting the event broker as a transition between two systems to decouple them on that.

Karol:

Oh my God, time coupling, temporal coupling.

Karol:

So in that sense, it's very lovely.

Karol:

It's very useful.

Karol:

All right, Fran, we've been talking for the last one and a half hour, well, nearly 1:40.

Fran:

And if we stay here for two more hours, we can keep talking.

Karol:

Oh, we could go on and on and on and on and on.

Karol:

So dear audience, I see we still have an audience.

Karol:

That's awesome.

Fran:

That's awesome, yeah.

Karol:

That's awesome.

Fran:

Some people stay with us years.

Karol:

Yeah, I love it, I love it.

Karol:

So kudos to all of you who are staying still with us and still watching us.

Karol:

If not, you can always watch the recording.

Karol:

Before we jump into the QA, I would like to have some announcements.

Karol:

And one of the announcements is that we already have a second live stream planned.

Karol:

And the second live stream is not gonna be about tech.

Karol:

It's gonna be about recruitment, which I think it's gonna be very, very interesting.

Karol:

We're gonna be talking with Gabby Preston-Pfeiffer and Philip Poynton.

Karol:

They're really well-versed people calling out the bullshit in IT recruitment.

Karol:

So, you know, jump in on the 22nd of July to hear them out.

Karol:

And also, I'll reiterate some things.

Karol:

So if you wanna read some articles about enterprise application integration and EDA included, visit bridgingthegap.eu.com or just subscribe to our substack for the sake of it.

Karol:

And then if you wanna learn more about AsyncAPI, visit the initiative site.

Karol:

And if you got hooked on our conversation about the organisational problems or the psychological safety of people and you wanna be a better leader and you wanna actually start addressing those topics, here's a QR code for Fran's book.

Karol:

It's still in the making, but Fran is giving the early bird available so you can take a look and read it, comment it.

Karol:

I think, Fran, you would welcome all feedback, right?

Fran:

Yeah, actually, it's already happening.

Fran:

We're having discussions in Notion about, not a lot, I must say, which is normal, like reading a book and leaving feedback on a book might feel intimidating to some people, not just because of technical knowledge, but also like this guy might think that I'm here, I'm bothering him or something.

Fran:

No, no, no, like I'm used to having, to getting feedback, respectful feedback obviously can construct it.

Fran:

And we're already having some discussions there in Notion with the early readers and it's cool.

Fran:

I've only written three chapters so far.

Fran:

If everything goes well, I think there will be 23.

Fran:

So yeah, I only have to write 20 more.

Fran:

No pressure.

Karol:

No pressure.

Karol:

You're gonna lean pop the hell out of that.

Fran:

I'm gonna be like lean pop, but a notion, right?

Karol:

Pretty much the same thing, only different medium.

Fran:

Exactly.

Fran:

But yeah, I'll take off.

Fran:

I'm taking August off, like from the rest of the work, just to focus on the book and most likely September as well because I want to have it ready by October this year.

Fran:

I hope these words don't bite me in the future.

Fran:

Like you said that last year.

Fran:

I mean, if I don't publish it by October, bear with me, please.

Fran:

It's my first time writing a book.

Fran:

So I don't know how to estimate this kind of work because I've never done it.

Karol:

It's difficult.

Fran:

It's difficult.

Karol:

Yeah.

Fran:

But yeah, and especially because I'm finding things that I never expected, like having to read papers, you know, about psychology and psychology books and interviewing psychologists and so on.

Karol:

That's difficult.

Fran:

It's going completely unexpected route.

Karol:

Which is exciting because you're learning a lot while doing that, so.

Fran:

That's why I'm writing the book.

Fran:

Like I'm writing the book for me, like I did with this in AsyncAPI.

Fran:

It was like, so I can learn properly about this by writing it down, right?

Fran:

And by interviewing people and by listening to their stories and so on and then sharing with people.

Fran:

So who knows, maybe in a year or so, I'll have to write a second edition because I made a lot of mistakes.

Fran:

Who knows?

Karol:

I mean, I just looked through the lovely Fundamentals of Software Architecture by Mark Richards and Neil Ford.

Karol:

They just released a second edition.

Karol:

Completely different read.

Karol:

I have the first edition somewhere.

Karol:

Oh yeah, like right here next to me.

Karol:

I stole it.

Fran:

It was still useful there.

Fran:

The first edition was still useful, but now with experience, then you get to make a better book.

Fran:

It doesn't mean that the first edition is gonna be wrong.

Fran:

It's just that it's probably not gonna be exactly how I want it.

Karol:

Yeah, they learned a lot and they were like, yep, definitely.

Fran:

Cool, man.

Karol:

Yeah, all right.

Karol:

So that said, oh yes, the QR code for the early reader to get access to the book.

Karol:

So yes.

Karol:

How that one, sorry, should have deleted the original shipped one from the list.

Karol:

It would have been easier.

Karol:

So if you wanna be the early reader and leave friends and comments, just scan the QR, go ahead.

Karol:

Yeah, it's not a large cost to just join on the process of building that book from scratch.

Karol:

It's interesting to watch, believe me.

Karol:

That said, we're gonna be closing the session in a moment, but that leaves us open to any questions.

Karol:

Any QA questions out of the box, out of the blue.

Karol:

I mean, we do have one from Aleksandr.

Karol:

End-to-end traceability, batch message splits.

Karol:

I can take that one because I've seen that one.

Fran:

I'm not an expert in traceability, but I know some, I mean, you can take it because.

Karol:

Yeah, it's actually not that complicated as long as you have proper logging, monitoring and observability within your systems.

Karol:

So basically if you wanna trace your events and you have this kind of a batch scenario where you split it up, you need to just make up a specific pattern, which means that you have some sort of a correlation ID.

Karol:

And then when you split it up, just append that correlation ID with additional identifiers of those individual child elements.

Karol:

And that makes that traceability really pop.

Karol:

So you can still search all of those elements by using the original batch identifier, the correlation ID there, and then you can search individual child elements by the appended identifier.

Karol:

So that will be sufficiently unique because if you use UL ID, that will be very unique, very nice with a timestamp.

Karol:

And then if you append, you just append, that's not a big problem there, right?

Karol:

So that's a good one for that.

Fran:

And you can define it on AsyncAPI using the correlation ID field on AsyncAPI.

Fran:

So it's covered.

Karol:

Yeah, exactly.

Karol:

That's a good thing.

Karol:

And that's also a very standard thing to do in the OpenAPI spec as well to define those metadata and correlators.

Karol:

Usually for OpenAPI, that's within the HTTP headers, right?

Karol:

So it's workable.

Karol:

It's just a matter of figuring out what the mapping is between those, right?

Karol:

All right.

Karol:

I know we do have a little bit of a delay between what we see in the stream studio and what is out on LinkedIn and YouTube, but I think we already passed through.

Fran:

Yeah, and if not, people leave some questions after.

Fran:

Maybe people are watching the recording.

Fran:

If they want to leave some questions, ping me or ping Karol.

Karol:

Yeah.

Fran:

And if I don't get the notification, please Karol, let me know.

Fran:

And I will reply after that.

Fran:

So it doesn't have to be.

Fran:

We can make it asynchronous.

Karol:

Yeah, we can make it asynchronous, exactly.

Karol:

So for all of you wondering and willing to share the stream, or if you found it captivating, the stream will be saved in a raw form on LinkedIn.

Karol:

It will be also available on Bridging the Gap YouTube channel.

Karol:

I do plan to do a little bit of touch-ups here and there over the stream and release it as a normal video.

Karol:

But for the moment, it will be available as a live stream recording on YouTube.

Karol:

So you can always come back, re-watch it, figure out what you want to hear, and ask additional questions.

Karol:

If I find those in the comments somewhere, I'll make sure to relay those to Fran if you don't tag him, and then we'll draft an asynchronous answer to those.

Karol:

All right.

Karol:

That said, because I don't see any more questions popping in in chat.

Karol:

Thank you all for attending.

Karol:

Thank you, Fran, for coming to the first edition of Loosely Coupled.

Karol:

Absolutely amazing having you here.

Karol:

And.

Fran:

Thank you for inviting me.

Karol:

You're welcome.

Fran:

My pleasure.

Karol:

And everybody, have a lovely evening, rest of the night, wherever you are, maybe rest of the day.

Karol:

And till next time.