Loosely Coupled - Navigating through API Design

Show full transcript

Karol:

Good morning, good afternoon and good evening, everybody I hope everybody has a nice beverage to enjoy this wonderful time.

Karol:

It's 7pm Central European Standard Time and I welcome you again to another episode of loosely coupled by bridging the gap.

Karol:

I'm your host, Karol Skrzymowski.

Karol:

And today we're having a, whew, that's an interesting topic and quite so in line of my work because, well, professionally I do design APIs.

Karol:

So we're gonna be navigating API design with two wonderful guests from CodeCentric from Germany, Dr. Miriam Greis and Daniel Kocot.

Karol:

Yeah, I see Daniel already on the preview laughing that I made a small mistake in pronunciation.

Karol:

Difficult last names for me always, right?

Karol:

And today they will be talking with us here about designing APIs and also a lovely topic of data interface quadrants, which is something that they worked on together in CodeCentric.

Karol:

So without further ado, hello, hello.

Karol:

Welcome to the stream.

Karol:

Hello, Miriam.

Karol:

Hello, Daniel.

Karol:

All right.

Karol:

So before we jump into the design topic, the dramas of designing a good API, it's about yourselves a little bit.

Miriam:

Yeah, I just go ahead, maybe.

Miriam:

Yeah, sure.

Miriam:

So hi everyone.

Miriam:

Great to be here.

Miriam:

I'm Miriam.

Miriam:

I'm actually working with CodeCentric for more than seven years now, seven and a half years.

Miriam:

And when I started there, I mainly started as a front end and full stack developer pretty quickly.

Miriam:

But I always, from the beginning, I was in API related projects.

Miriam:

So my first project at CodeCentric was a project where we developed an API developer portal, right?

Miriam:

So very API specific.

Miriam:

And that's how I got into the API topic.

Miriam:

And when I looked for followup projects, I somehow landed in API consulting.

Miriam:

So the last three and a half years, I mainly did API consulting, which means I'm working with teams, helping them to get the journey done from the day they need an API until it's on production, mainly like with enabling.

Miriam:

So not really doing the work, but helping them like in a driving school to not take the wrong turn and land in a desert or wherever, but to always go to the right direction and to reach their goal at the end.

Miriam:

So I saw a lot of API designs, many bad ones, I have to admit, but I think we'll get to that later as well.

Karol:

Probably, yes.

Karol:

So just to put that into perspective, because some of the audience are my fellow integration specialists, you're not working specifically with integration platforms, right?

Karol:

You're working more with the main systems exposing their functionality as APIs.

Karol:

Yes, yes.

Miriam:

I mean, as well, of course, I mean, there's always some gateway or something, but it doesn't really matter for us what it is, let's say, or for me at least.

Miriam:

There is something, right, that we need to integrate with, but it's not a specific platform or a specific tool or a specific thing, right?

Miriam:

We also spend some time with customers designing and doing concepts for integration platforms recently and all these things.

Miriam:

So we're also doing stuff like that.

Miriam:

But my main focus really for me was enablement and also automation, like a lot of automation around APIs.

Miriam:

Okay.

Karol:

Daniel, how about you?

Karol:

What do you do in CodeCentric?

Daniel:

So I'm nine years at CodeCentric right now.

Daniel:

So October was the date for being nine years with CodeCentric, and I did several things there.

Daniel:

So I started as an Atlassian consultant.

Daniel:

As Atlassian is not always on the green field, you have to really integrate the stuff.

Daniel:

So there was a lot of prospectuses in going integration stuff.

Daniel:

And before CodeCentric, I also did a lot of in the integration space.

Daniel:

So building catalogues around data and so on and so on.

Daniel:

And over the time I got in contact with a MuleSoft project.

Daniel:

So everybody has some kind of dark sides in it.

Daniel:

And I saw not how to actually use this, but I understood, okay, there is more.

Daniel:

So I read the book from Yoko about API as a product and so on and so on.

Daniel:

And the economy stuff.

Daniel:

So really thinking about the things and I got deeper into it.

Daniel:

I did a lot of consultancy in regards of API management systems by just using a gateway.

Daniel:

So Kong was one of the first things we did at CodeCentric.

Daniel:

A lot of times.

Daniel:

And over the time I really understood, okay, it's not about the tooling.

Daniel:

It's really about designing stuff, understanding things.

Daniel:

And our CTO did a lot of stuff with me then in the background really to grow up a topic where we talked about experiences.

Daniel:

This is also what Miriam knows.

Daniel:

And we ended now in API consulting and talking about API thinking.

Daniel:

And now we are moving on because we see a lot of things when we design these kinds of integration platforms out there with the customers we have.

Daniel:

And we really see, okay, there's an impact on enterprise architecture.

Daniel:

There is another meaning now in how to interact actually with systems.

Daniel:

And that's why we are actually here.

Daniel:

So that's why the data interface correlates came up.

Daniel:

So, and this is really what we are looking at.

Daniel:

So not really just, as you mentioned, to focus on tools.

Daniel:

We need to focus on really what matters on how to integrate things and really think about the integration steps there.

Karol:

Right.

Karol:

So I'm gonna name some things.

Karol:

You guys point me which is the area that you actually look at.

Karol:

So from my perspective as an integration architect, well, I mostly work with integration platforms, but that's not all the work that I do.

Karol:

There's a lot more to it, including API management, including event message brokers.

Karol:

I usually, when I look at integration practises or APIs and API design, I look at it from a perspective.

Karol:

Okay.

Karol:

Is this internal communication or is it externalised?

Karol:

Is that externalised communication productized or is it partner?

Karol:

Because these are two different topics there.

Karol:

Then internally, is it again productized service-based because sometimes it's data, sometimes it's services.

Karol:

And depending how long ago somebody started in the world of application integration, some of us may still remember something called service-orientated architecture, which is basically defining APIs as a business services.

Karol:

So verbs, always a post, never get or put or anything else in terms of the HTTP verbs, but always a verb-based name of a service, get customer, set customer, whatever that is.

Karol:

Now the difference is nowadays we use rest or try to be restful.

Karol:

And then we have access to resources and we're modifying those resources using the HTTP verbs, right?

Karol:

As actions to what we want to do.

Karol:

And then additionally, all of this is usually covered by some sort of an API management from my perspective, whether or not it's a singular system in Azure, AWS, on-premise, microservice swarm, because hard to name them otherwise than swarms at times, also often prompted by an API management.

Karol:

And I'm usually, as a architect, I'm usually the consumer of all those APIs of different domain systems.

Karol:

That's my perspective on API.

Karol:

So I see the APIs, sometimes they're easy to use, sometimes horrendous to use.

Karol:

And my job as an architect is to make them useful.

Karol:

So probably something similar but in a completely different way.

Karol:

Yeah, something, a little bit.

Daniel:

Would you like to start?

Miriam:

Yeah, I think, I mean, I mainly agree with most things you said.

Miriam:

I think I see it more from a provider perspective most of the time because I mostly work with people providing APIs right now, right?

Karol:

Okay.

Miriam:

So I more or less support them to actually get to an API that others can understand.

Miriam:

And that's hopefully intuitive to use and not just something, right?

Miriam:

So, but I also realised that lots of times it's really good if you have both sides, you actually need both sides to really understand like what does the other person on the other side really need, right?

Miriam:

It's not enough to only know one side of the game, right?

Miriam:

You always need to take in both sides, the consumer and the provider and not just one of them and think that's it, right?

Miriam:

And I think that's also quite an interesting topic that most people underestimate actually.

Karol:

Probably to a very big extent, they underestimate that.

Karol:

All right, so that said, what is the problem with designing APIs?

Karol:

Can we define that kind of a problem?

Karol:

What is that?

Daniel:

You're missing actually the experience because this is really something where all the ideas started actually because a lot of people talk about UX actually, so really user experience and this is somehow lacking because we have this technical aspect still there because this is what Mira mentioned.

Daniel:

We don't really get into the conversation with people and really asking what is needed.

Daniel:

We do this when we create UIs.

Daniel:

We ask people, we do tests and all about.

Daniel:

This was really at the point where I started to learn from Uwe actually what he did in the past was something that was really missing, this experience aspect.

Daniel:

And so we started saying, okay, we call it API experience to make clear, okay, we don't talk about the technical behaviour behind all that because this is clear.

Daniel:

This should be clear.

Daniel:

We learned over the time that still is not clear what technical to be done.

Daniel:

That's the other aspect of it, but we have to stress this experience layer more and more because when you remember MuleSoft, what is the layer above?

Daniel:

The experience layer.

Daniel:

But normally when you look at integrations built by that, they are not really experiences they provide.

Karol:

Would that tie into thinking in terms of data products then?

Daniel:

Yeah, that's the other point around because then it comes into the productisation type of thing really to stress this word.

Daniel:

For now, it's really buzz wording to say, hi, we do APIs as a product because nobody really has in mind that it's real product management.

Daniel:

It's real, the capabilities of providing a real product and not just to say, okay, this is a technical somehow thing.

Daniel:

I just throw it over the fence and it would work.

Daniel:

So it's really that I have to do the marketing aspects into that.

Daniel:

I have to build up a community inside an organisation to really make sure that everybody understands what I'm doing there.

Daniel:

So many, many perspectives there that we actually know from this classical product type marketing fluff.

Miriam:

Yeah, to also add something to the user experience thing.

Miriam:

I think, I mean, that's why I have on LinkedIn also my slogan, APIs are user interfaces too, because I think most people forget for them, they're a technical asset, right?

Miriam:

So pretty easy, you do something technical, you're done, but that's not the issue most of the time.

Miriam:

There are lots of other things that you need to know to design a really good API and it's not only technical stuff.

Miriam:

And I think most people forget, especially for an API, that there's also a user on the other side.

Miriam:

I mean, it's easy.

Miriam:

We've all been developers, right?

Miriam:

We think, oh, I know what a developer needs, right?

Karol:

Right.

Miriam:

Do I really know?

Miriam:

I mean, I worked with teams that were SAP developers on the other side, you had a mobile developer.

Miriam:

They had nothing in common from how they work, right?

Miriam:

But they just think the other person will know what to do because hell, everyone knows this function module in SAP could possibly go wrong, right?

Miriam:

Everybody knows.

Karol:

You touched a very painful memory here because I used to integrate SAP R3 back in the day.

Karol:

And that used to be with very specialised adapters that were on JMS. The RFCs were horrendous to work with and the debugging of that was horrendous.

Karol:

And understanding the interface, I mean, I get it.

Karol:

Germans wrote it for use within Germany.

Karol:

That was obvious.

Karol:

Well, that's the story I get from SAP people, all right?

Karol:

Just to be clear, I work with a colleague from SAP.

Karol:

That's usually the kind of story that I said.

Karol:

And then it sprawled all over the place, right?

Karol:

So it sprawled, but then I'm sitting there in Poland trying to integrate R3 into the ecosystem.

Karol:

And I'm looking at this interface and all I see is gibberish because these are abbreviations of German words that I have no idea what they mean.

Karol:

Only people from SAP actually knew what the hell that means.

Miriam:

So I'm like- Believe me, it's not only a language issue.

Miriam:

It's not only a language issue.

Karol:

Oh, no, absolutely.

Karol:

Not only a language issue, just using abbreviations.

Karol:

Who in their sane mind uses abbreviations in the data model of an API?

Miriam:

Yes.

Karol:

If they were, at least if they were full words in German, I would take a Google translator or something like that or a dictionary and translate them.

Karol:

That would be usable because I could actually decipher them.

Karol:

What was there, I had to just literally grab an SME and explain to me, please either give me a data set that works with this data model or explain to me what I'm doing because I have no idea.

Miriam:

Yeah, that's what the team actually told me.

Miriam:

You know what they told me?

Miriam:

If someone wants to use our API, they have to call us.

Miriam:

And I was like, well, we're trying to do intuitive APIs.

Miriam:

Please think a minute.

Miriam:

I don't think you want anyone to call you to use your API.

Karol:

That is basically the death of a product nowadays.

Karol:

At least with smaller companies because SAP is too big to die off like that.

Karol:

But I think that if a small digital product would do such a thing, they would not have any adoption.

Karol:

You touched upon an interesting thing and I pondered upon user experience as well.

Karol:

There is a lovely UX law that is, I think it's completely underestimated in software design as it is and not meaning front-end only.

Karol:

And I'm gonna just shoot a slide from my training deck on the screen for a moment.

Karol:

So there is this lovely law called Tesla's law.

Karol:

And yeah, every application must have an inherent amount of irreducible complexity.

Karol:

The only question is who will deal with that, right?

Karol:

So what happens there is if I look at it from an interoperability perspective, we're moving around complexity or adding complexity by doing bad API design.

Karol:

And if we talk about interoperability from my perspective as an integration architect, well, okay, if we talk APIs, yeah, sure.

Karol:

If I put an integration platform, I move a lot of inherent complexity of communication to the integration platform, which makes life easier for the domain system, but this still doesn't fix the quality of an API.

Karol:

So that moves the added complexity of a bad API towards the integration platform that has to consume that API and understand that API.

Miriam:

Yeah, yeah, I think if I talk to developers recently, it's always like, oh, we don't want to do that on the back end, that's so much work.

Miriam:

And I say, well, then who does it?

Miriam:

Then someone else on the front end needs to do it or on the other side.

Miriam:

I mean, if you don't do it, someone else has to do it.

Miriam:

You're just moving the work somewhere else.

Miriam:

That's exactly that.

Karol:

You're moving inherent complexity.

Miriam:

Yeah, exactly.

Miriam:

And I like that you cited UX law because I think we didn't talk about it before, but my PhD is actually in human-computer interaction.

Miriam:

So that's very much why I like API design so much.

Miriam:

And I like trying to do it in a good way because it's like in my DNA, right?

Karol:

It is user experience.

Karol:

It doesn't translate to user experiences and clickable in the front end because that's called developer experience.

Karol:

So the experience of a developer trying to connect their system to whatever array of APIs we have.

Karol:

And this is still somewhat of a user experience just from a technical perspective, not from a actual productized usage perspective as the end user, the consumer clicking on the app, right?

Karol:

That's the difference there, but it's still the same user experience in that sense.

Karol:

And as I work with integration platforms in large environments where we have a variety of systems, SaaS solutions, legacy, on-premise, in-cloud, hybrid, well, it makes sense to put that complexity to the integration platform because there's too much to handle rather than solve it on the backend.

Karol:

And of course the backend quality matters.

Karol:

So if somebody is starting to expose to the integration platform a relational database table by table, well, that's not good API design, but it differs for a domain system or a productized system when we externalise our APIs.

Karol:

Now, because I have no experience in externalising APIs to clients, that's not my scope of work, tell us perhaps how does that look like from that productized perspective?

Daniel:

Yeah, it's actually when we think about design because this is something we actually didn't spot on because what we do with API thinking is really look at the design perspectives.

Daniel:

And to really say, to go into this productisation type of thing, I think it's mostly important that we reference to Dieter Rams in regards of design.

Daniel:

So somebody who was really deep into designing good things actually like a calculator from Brown and other things, a shaver.

Daniel:

And also he has been acknowledged by Apple for the iPhone design and so on.

Daniel:

So it's really interesting that we actually had a look at it because you mentioned the UX and UI laws that are existing, there are even more.

Daniel:

So Nielsen and Muller are also there.

Daniel:

And this is what really matters in the end to build these experience to the outside world.

Daniel:

So even thinking in a productized way, because I worked or wanted to start to work with a payment company and they had a key value API and they thought it would be the best idea to productize that.

Daniel:

And this was really something that felt quite hard because it was in the beginning.

Daniel:

So it was around 2019 before Corona, I think also.

Daniel:

And it was quite hard because we were just starting with the thing.

Daniel:

So Mir was actually not onboarded into this topic.

Daniel:

And it was quite hard to make people understand that there are so many differences in there because there's no literature about it.

Daniel:

And people always reference into it.

Daniel:

So it's literature about API management systems, it's about RESTful APIs and so on and so on, but not all the things really in regards of good designing stuff.

Daniel:

Because thinking about technical stuff, so having RESTful web APIs or whatever, it's totally different than thinking about, okay, what really needs the person outside of our some kind bounded context to really understand what we provide with our data actually.

Daniel:

And this is something where I see there's still a lot of things around.

Daniel:

So you really have to go into the field and really ask the people.

Daniel:

And then bring the stuff up there.

Daniel:

So this is why we got really deep into this API thinking stuff there and really adopting things from that perspective.

Daniel:

Okay.

Daniel:

This is what I think because we strive design, but really to make it clear, because it was always the perspective on this integration platforms, you mentioned that.

Daniel:

And so we talked with a lot of people and when you go into real integrations, it's always this EDI topic.

Daniel:

Yeah, and it's quite hard to make it visible to people.

Daniel:

And then some people say, oh yeah, we have to do EDI because people actually in retail use it a lot.

Daniel:

And this is where it all goes there.

Daniel:

And in the end, there is also the principle really, and this is the principle, good design is as little design as possible.

Daniel:

So I don't have to reinvent the wheel to get things to work.

Daniel:

So I don't have to think in a new solution or build a bluster-full API when there is a need for real EDI exchange.

Daniel:

So there are still products in the space that do this and you don't have to do the things and say, okay, let's build an API up on this and have it a shiny REST interface or something like that.

Daniel:

So it's really about to really keep the focus on what the customer or the consumer on the other side really needs there.

Karol:

Because in that sense, it's all about doing proper trade-offs, which basically means that if we want to design properly or architect properly for a business problem, we're not looking for the best solution because that's gonna be over-engineering things.

Karol:

We're looking for the least worst solution.

Karol:

So the one that will be sufficient to solve the problem and nothing more.

Karol:

And if we need more, then we'll do more, but we don't know if we need more yet in that sense.

Miriam:

But I think my experience with that is, especially with REST, people are so focused on it, they don't think of anything else, right?

Miriam:

You will have people and talk to them and they say, we definitely need a REST API.

Miriam:

This is what everyone is doing.

Miriam:

We need to do it too.

Miriam:

And then if you're talking to them and you're saying, well, wait a second, what do you want to do?

Miriam:

Why do you want to do REST?

Miriam:

Most people don't even know how old it is, where it comes from, why you need it.

Miriam:

They just heard it somewhere, they picked it up.

Miriam:

They say, everyone's doing that, we need to do it too.

Miriam:

And I said, well, wait a minute, let's see what you want to do.

Miriam:

And then we can discuss whether you need REST or not, right?

Karol:

I mean, the beginnings of REST. I remember the first occurrences because REST was designed for communication back and fronted, right?

Karol:

So it wasn't designed per se for system to system interoperability.

Karol:

And when people started using REST for a system to system interoperability, it wasn't mature enough yet to do so.

Karol:

So no data validation, no support in libraries, no proper support for simple types.

Karol:

Everything was a string.

Karol:

And no support for a regular expressions, no support for enumeration, etc.

Karol:

Now it's a lot better.

Karol:

Now we can do all those things with a open API specification and RAML if somebody is using MuleSoft.

Karol:

But a few years ago, that was a nightmare to do that over REST where I was looking at a XSD and a WSDL definition of a SOAP service.

Karol:

It's like, I can do so much better in terms of the quality of an API that will be better defined, properly defined and giving me a proper service.

Karol:

And here I'm like, how am I supposed to even validate that where I don't have even the tools to do so?

Karol:

And still, okay, it's a lot better nowadays, but still in certain cases, XSD wins over anything REST related, well, JSON related per se because REST doesn't exactly mean JSON, it means verb use over HTTP with a specific data format, which also some people don't understand that REST doesn't mean JSON.

Karol:

It may mean as well, XML or well, you could put any other format for that sake.

Miriam:

I mean, most APIs that claim they are REST are not really REST because if you don't do hypermedia, you know.

Karol:

And that's a conversation I had on LinkedIn recently.

Miriam:

Yeah.

Karol:

It's actually not a true statement because there's difference in doing a REST API and doing a RESTful API.

Miriam:

That's correct.

Karol:

These are two different things.

Miriam:

Yes.

Karol:

RESTful API is, and we touched upon this just before the stream, so I think I'm gonna just Google it, the Richardson maturity model, right?

Miriam:

Yeah.

Karol:

So a RESTful API is the third level of the Richardson maturity model, but that doesn't mean that the second level or the first level are not REST. They are REST. They can be REST, but they're not RESTful.

Karol:

RESTful is hypermedia.

Karol:

And a lot of people claim or dilute this, that REST means RESTful.

Karol:

No, it doesn't.

Miriam:

Yeah.

Miriam:

I think I like most what one participant of one of our training said once.

Miriam:

And I think that's one thing we also quote in our trainings all the time.

Miriam:

And I liked it very much.

Miriam:

She said, if you're honest, we're all just doing JSON via HTTP.

Miriam:

I mean, right?

Miriam:

We're not doing REST. We're doing JSON-based HTTP APIs.

Miriam:

And that's what we actually do, right?

Miriam:

Most of the time.

Karol:

Well, again, that's REST. That's not RESTful.

Karol:

So we're doing REST. We're not doing RESTful, definitely.

Karol:

And that's the problem here.

Karol:

And people forget about that.

Karol:

I already know people that when they hear XML or SOAP, they get, why?

Karol:

It's like, these are valid formats.

Karol:

We still use XML everywhere.

Karol:

Most of the low-code tools that I use or my colleagues use, they're XML-based.

Karol:

They're defined with XMLs.

Karol:

A lot of configuration for a lot of things is defined in XMLs because it gives that rigidity that you need for those kind of definitions.

Karol:

And especially that, not sure, but I think that still there is a lacking space in using parts of a OpenAPI specification outside of an API because XSD is very much usable outside of an API.

Karol:

You can use that for data validation.

Karol:

You can use that within your code, somewhere in Java, C-sharp, whatever that is, and use it with XPaths, XSLT to transform data.

Karol:

Whereas using the same with OpenAPI spec or RAML is not exactly yet available, at least to my knowledge.

Karol:

Maybe I'm wrong because I haven't done research in that space for a longer time, but that's, again, the difference, right?

Daniel:

Yeah, this data thing, I think it's also on another part because for most people, it's not really clear what they actually share.

Daniel:

So even if they would do SOAP or whatever, it's not really clear what they're actually sharing there in regards of data.

Daniel:

That's another point.

Daniel:

That's why we put it in the methodology with API thinking, what we prefer and bring to customers we have in this perspective, because it's really relevant because most people are not really aware what is being shared actually, or don't know who is the owner of this data set actually, or if is this data set somewhere defined.

Daniel:

So when we talk about data catalogues and all the things there, so I'm not dropping this mesh thing because this opens another bottle there, but in the end it's really something that things we do are actually quite old, but it feels we are not mature enough to really use them, or we didn't understand them right.

Daniel:

So this is what we see when we go into the field.

Daniel:

There's always this tool clashing.

Daniel:

So even when we go into the perspective of REST versus events, it's always that you have a RESTful integration platform versus the event broker or something like that.

Daniel:

And this is really, really interesting in a bad way on the other side.

Daniel:

And I think with this, even when we show up this maturity model, it's always confusing for some people that there is something, and we make fun out of it because we point the date on the slide deck which we use.

Daniel:

So it's 2008.

Daniel:

And I think for most people it's not clear that this model has this mature age actually.

Karol:

Yeah.

Karol:

So Richardson maturity model, I don't know the date on that, but basically it was on Martin Fowler's blog in 2010.

Karol:

That was the link, the QR code you saw on screen just a second ago.

Karol:

The photo there, that was not Richardson, that was Martin Fowler nowadays, just to be clear.

Karol:

So it's very old.

Karol:

REST itself is very old.

Karol:

When you got here, 25.

Karol:

Yeah.

Karol:

SOAP is quite older in that sense.

Karol:

If we look at service-orientated architecture, the pinnacle of service-orientated architecture was 2000s, and SOAP is much older than that.

Karol:

XML is extremely old already from our perspectives, right?

Karol:

So people don't understand that these standards are there, but we just didn't grow into them yet in that sense.

Karol:

Just as a small segue, I literally saw a YouTube short today, just before the stream, where a girl was saying, I told a teenager today that I'm older than Google.

Karol:

And the teenager was like, that's not possible.

Karol:

Yeah, if you were born before 1998, it is possible.

Karol:

So all of us, I think are older than Google here.

Karol:

Well, it is what it is.

Karol:

So people don't know.

Miriam:

My favourite story regarding this is always then, when I went to school, I had a card for the telephone outside the school because I had no mobile phone.

Miriam:

So if the school would like, you know, I need to go home early because a teacher was ill or whatever happened, I would go to the phone box, put in my card and call my mom, you know?

Miriam:

And everyone's like, if you tell that to any young people today, they're like, what?

Miriam:

And I'm like, yeah, well, that's how it was, right?

Miriam:

There was no mobile phone that you could just call anyone.

Miriam:

You would like need to check if someone's home or if you need a key, you would need a phone card and you would go out to this one phone box in front of the school, right?

Karol:

I'm still waiting.

Karol:

I'm still waiting with my kids to show them a rotary phone, you know?

Karol:

And properly connected somewhere.

Karol:

I don't know if I even have cables to connect the phone in my house nowadays.

Karol:

But to connect it and tell them to call somebody.

Karol:

I'm curious what will happen in the few years that they will be able actually to understand how to use a phone like that.

Karol:

It's like, that's gonna be interesting.

Karol:

People have no idea.

Karol:

If we look at specification of XML, I don't know if this is, I would have to look at that W3C, but basically 1996.

Daniel:

Yeah, that was also on my mind.

Daniel:

So there they are.

Karol:

So it's extremely old.

Karol:

And if you dig in ever, try to dig into the original specification for XML one, there's plenty of things that were solved out of the box in the first specification.

Karol:

That if you look at the early stages of Jason and Swagger, not solved at all.

Karol:

Nobody thought even about these problems at the beginning of those formats.

Karol:

So it's difficult in that sense.

Karol:

We're trying to reinvent the wheel and I get bandwidth costs.

Karol:

So that's why we have Jason because it's lighter than XML.

Karol:

But it's the question of what we use that for.

Karol:

But going back to designing API.

Karol:

So just put the perspective on things.

Karol:

What would you consider a bad design of an API?

Karol:

I know, Pandora box.

Karol:

Let's open it.

Miriam:

Bad in what sense?

Miriam:

I mean.

Karol:

Okay, let's categorise what sense we can have.

Miriam:

Okay, so one bad thing.

Miriam:

I don't know whether anyone of the ones who's listening in ever tried to use the Azure DevOps API.

Miriam:

That's my favourite API to use because all the examples are wrong.

Miriam:

You don't have any example of a valid request body.

Miriam:

So you're just doing trial and error until you guess the correct request body.

Miriam:

So that's something I consider really bad quality because guessing request bodies is nothing I like to do actually.

Miriam:

I mean, it depends on the endpoints.

Miriam:

There are some that are maybe used by lots of, but if you really want to automate stuff, you need to go to many endpoints and then it gets funny.

Miriam:

So that's one thing.

Miriam:

Another really bad thing I saw was from a, I think it was a pizza delivering API or something like that.

Miriam:

And it was a real example from someone who showed it to me.

Miriam:

So the API was used for ordering the pizza in a front end.

Miriam:

And the IDs were integer, which means you could just take the next integer and then get the credit card details plus address from the person who ordered the pizza, where I say like, well, this is like, I mean, this is bad design on another level.

Miriam:

It's a security related fail, but that was interesting too.

Miriam:

So integer SIDs is usually always like bad.

Miriam:

And what else?

Miriam:

All our three APIs, basically more or less, if people don't know how to convert a Boolean to a correct Boolean, and then you get an X or an empty string and you have to guess whether this is now a Boolean or not in SAP, for example.

Karol:

Okay, okay, fair enough.

Miriam:

Microsoft date timestamps, also very nice with our three systems.

Miriam:

Timestamps that nobody can convert because nobody knows how they work, right?

Miriam:

Why are there standards for timestamps if we can invent our own, right?

Miriam:

But these are all minor things, like Daniel, you want to add something?

Daniel:

Quite interesting because it was all technical in terms of that.

Miriam:

Yeah.

Daniel:

Okay.

Daniel:

For me, this wording of good and bad really depends on the scope and actually on the type of organisation of the structure, the people involved actually.

Daniel:

So there can be a really bad design for somebody outside of the scope, but it can be the best and good design inside the scope.

Daniel:

And now we are actually touching indirectly the DIQs somehow.

Daniel:

Okay.

Daniel:

This is where it actually all came from somehow because we saw things about, okay, actually for this purpose, it's good, but it's not reusable.

Daniel:

So we really have to think about, okay, for the scope, for the bounded context, it's a good design.

Daniel:

So no discussions about that.

Daniel:

Because a lot of people are triggered by this good design.

Daniel:

They think, okay, there is some kind of guideline book, somewhere somebody wrote this, everybody adds something to that.

Daniel:

And that's why a lot of people also look at guidelines from other companies to really get a glimpse what good API design can be.

Daniel:

And this is the perspective I have on this because moving away from the technology, because it depends.

Daniel:

Yeah.

Daniel:

If I understood things good, then my design will be correct.

Daniel:

If not, my design will be not so good, but it could be right for the purpose I'm using it.

Daniel:

So this is really to think about.

Daniel:

So, and this is what we see in trainings.

Daniel:

This is what we see in discussions with people.

Daniel:

It's always that they think that we have some kind of magic book with us presenting good API designs.

Miriam:

And we're always asked for the, you know, the, how do you say in English?

Miriam:

The like solution for a task.

Miriam:

And we're saying, well, there is not the one right solution.

Miriam:

That's exactly the funny part about API design.

Miriam:

There is not the one solution is for everyone, right?

Miriam:

It depends on who are you designing for?

Miriam:

What use case?

Miriam:

What do the people want to do with it?

Miriam:

Like what's the, what are the systems involved?

Miriam:

What can they even do if they don't, if they can't do JSON and only XML, then well, you don't do J, right?

Miriam:

I mean, there's so many things that you need to take care of.

Miriam:

So people always expect that we have the one solution and we're always disappointing them saying, no, there is not the one best solution will never be, right?

Karol:

And I concur here because it, from at least architecture perspective, when I deal with different architects of different levels and kinds, because there are so many abstraction levels of architecture.

Karol:

It always is about context.

Karol:

Context is king.

Karol:

And if we just talk in an academic sense, the answer will always be, it depends.

Karol:

If we put that in a specific context of a specific problem we're solving, then we can put it in specific terms, what would be the guidelines for this kind of problem?

Karol:

But there are no universal guidelines for APIs.

Karol:

Well, maybe a few hints, few.

Miriam:

Something like don't use the wrong data type, like the basics that I just mentioned.

Miriam:

I mean, I think we agree with the basics, right?

Karol:

Or use human readable names for attributes.

Daniel:

Or free here.

Daniel:

Defined something like that.

Daniel:

So the easy parts, but what we see really is there must be one solution.

Daniel:

There must be this golden record.

Daniel:

Everybody ever thought about in data structures.

Daniel:

And this is what we then have to reflect, even in the trainings we do.

Daniel:

They always think there is this one solution.

Daniel:

The both will present at the end the solution, how it should be to solve this specific problem.

Daniel:

So we have some kind of example with us when we do this API thinking training.

Daniel:

And there is really, from the beginning, the expectation that we will present the final solution at the end.

Miriam:

That's why we have a slide at the beginning saying, we're never going to do that.

Miriam:

Don't expect that from us.

Miriam:

And the fun part is that people always like, if you give them a task to design an API, at first they think it's very easy.

Miriam:

We do a room booking API.

Miriam:

I mean, how difficult can it be, right?

Miriam:

Pretty easy example.

Miriam:

Everybody understands.

Miriam:

And when they start discussing, you know, and you're really going there, for example, it has some tasks like it should be a filter for the size, the amount of people that fit into the room.

Miriam:

And then people design a filter saying size.

Miriam:

And I come there and the first thing I say, oh, in square metres, great.

Miriam:

I need a very large room.

Miriam:

And then, no, no, no, that's a number of people.

Miriam:

And so, well, I didn't read the documentation.

Miriam:

It's the size.

Miriam:

It's clearly square metres, right?

Miriam:

Why should I read the documentation?

Miriam:

Pretty easy.

Miriam:

And they're like, well, and it starts number of seats, capacity, and they're discussing several things, right?

Miriam:

It's not only about the technical things.

Miriam:

It's also about the semantic.

Miriam:

What do you want to say with your words?

Miriam:

And it's very difficult to come up with something that you cannot trick, or you cannot come there and say, well, I agree.

Miriam:

Do you mean this?

Miriam:

And they're looking at you like, no.

Karol:

When we were researching coupling in interoperability between integration platforms and trying to define that, because we define all integration patterns with coupling definitions.

Karol:

And there are different levels of coupling.

Karol:

So if somebody doesn't know about coupling, I recommend reading balancing coupling in a software designed by Vlad Kononov.

Karol:

Absolutely amazing book.

Karol:

I'll put the QR code in a moment.

Karol:

And people treat coupling, first of all, as it is binary.

Karol:

It's not.

Karol:

Because if it were binary, we wouldn't be communicating.

Karol:

And our applications will be in the vacuum of space, which is a non-existent scenario.

Karol:

But there are different levels.

Karol:

And people don't really realise that some types of coupling we actually want in our applications.

Karol:

And this, what you mentioned here is semantic coupling.

Karol:

The semantics of understanding of the data we're trying to convey through our APIs.

Karol:

That's something that we actually need to discuss every single time, whether it's a productized API of a SaaS solution or an internal API used for a singular purpose.

Karol:

And that's a very difficult conversation because people think that they can solve it with just a technical bubble without a conversation.

Karol:

And it's not the case.

Karol:

To give you a very short example, I dug up just a moment ago, a very old WSDL file that I recreated, but I really sent this kind of WSDL file to a colleague of mine back in the day.

Karol:

Let me just find the right window.

Karol:

There we go.

Karol:

And that's obviously a joke.

Karol:

I don't know if you can read it, but I can probably make it a little bit bigger.

Karol:

So it's a very simple WSDL file.

Karol:

It's a very short one.

Karol:

It's only has 44 lines.

Karol:

Basically not a lot there.

Karol:

The story behind it is that a colleague of mine, when I was working in T-Mobile asked me for a WSDL file and I was substituting for a different colleague who was an other integration architect and she went for a vacation, but I was taking over several projects from her.

Karol:

And that particular person asking for a WSDL file covered several other systems, small domain systems.

Karol:

So he didn't tell me what kind of system he's representing in his ask.

Karol:

He didn't tell me which project he's looking for.

Karol:

So I was feeling very whimsical at that day and I gave him exactly what he asked for, a WSDL file.

Karol:

The worst part of it, there was no conversation.

Karol:

He didn't even open the WSDL file.

Karol:

He just forwarded that to the development team and they came back two weeks later asking, is that the final form of the WSDL?

Karol:

So while this is a, let's say sloppy recreation of that lovely WSDL file, it actually was something like this.

Karol:

And then again, for the purpose of defining an interface, was that a bad API for the purpose of making a joke and making a statement?

Karol:

But again, context is king because this definition was for a joke, not for you.

Karol:

So perfect.

Karol:

If you would use that for an actual API to convey something, uh-uh, well, dummy, dummy, dummy, and any type everywhere.

Karol:

So that wouldn't work, right?

Miriam:

But maybe people are used to seeing such bad things so they think it's real, you know?

Karol:

Yeah, I've seen a share of APIs, SOAP APIs that were defined some fields and then any type.

Karol:

And you put CDATA in it, because why not?

Karol:

And then you guess that CDATA.

Karol:

I've seen APIs that were interfaces written in, like REST APIs written with JSON, and then CDATA XML embedded in them because something underneath understood XML and somebody just exposed an easy JSON-based API to just get that XML inside.

Miriam:

Yeah, I also like these REST APIs that just return objects.

Miriam:

And in the object, you have the key, the value, and the data type.

Miriam:

I mean, easy in the backend.

Miriam:

You just develop it once.

Miriam:

You can easily document it, but nobody understands what this API is supposed to do, right, because you get a random number of objects with random values, with random names, and random data types.

Miriam:

I mean, how, and then I asked the team, how do you want to document this API?

Miriam:

And they were like, yeah, well, I was like, right, exactly.

Miriam:

That's the problem.

Miriam:

You can easily document it, but nobody will understand what it's doing because you can return anything in your objects, right?

Karol:

Another example of this kind of behaviour would be putting every field as optional.

Karol:

You put a array of attributes in your API, even in a flat structure as a flat JSON with one level, and all of them are optional.

Karol:

How the hell should I understand which fields do I need to actually put in or which fields should I expect for what scenario?

Karol:

It's unrealistic to use that in a timely fashion to consume.

Karol:

It's a cognitive load that the consumer just takes on.

Karol:

We're moving that complexity to the consumer.

Miriam:

Yeah, again, that's what we said before.

Miriam:

We're just moving the complexity somewhere else.

Miriam:

I had a real example with an API that had actually 120 fields in the body with nothing being required.

Miriam:

And it was like- Wow.

Miriam:

Exactly.

Miriam:

The developer sat in front of it and said, how should I use it?

Miriam:

I have a mobile application.

Miriam:

So what do I do?

Miriam:

I don't even know which field is required.

Miriam:

I cannot show a form with 120 fields.

Miriam:

I don't even know what I need to actually make this work.

Miriam:

Yeah, so because you guess what?

Miriam:

You can guess why it had 120 fields?

Karol:

No.

Miriam:

Someone took the database from my one, of course.

Miriam:

From our three, because you can.

Miriam:

Because nobody told the developer what the API was for, why it was needed, what was needed.

Miriam:

She was told, create an API for this database table.

Miriam:

Of course, I mean, you know?

Karol:

Makes sense that the API is that way then.

Karol:

Yes, exactly.

Karol:

From a logical perspective, it makes sense.

Karol:

It's a classical joke.

Karol:

What was that?

Karol:

Wife tells the programmer husband, go to the shop and buy milk.

Karol:

If there are eggs, buy six.

Karol:

And the husband comes back with six milks.

Karol:

Logical.

Karol:

That was a logical statement.

Karol:

That was how, from a perspective of logic, you would understand it exactly that way, but.

Karol:

It's dramatic at that sense.

Karol:

Another example is that there are interdependencies between attributes, optional attributes, or some are required, some are optional, but optional attributes are required based on the existence or values of other attributes.

Karol:

That's another common problem with a lot of SaaS solutions products that expose APIs, and they try to solve something because they couldn't solve it otherwise, for whatever reason, or they didn't have the time and product capacity to solve it.

Miriam:

It's a nightmare.

Miriam:

You either need to have this field, this field, or this field.

Miriam:

These are also things that you cannot really document very well with the current tools, right?

Miriam:

So if people come and say, well, there's a combination of fields, and one of them is required, that's also always kind of difficult, right, to bring across from a design perspective.

Miriam:

Like, why is it like this, right?

Karol:

And then lastly, I think that a very common mistake that happens a lot of times, and I think this is a good segue to go to the AQs in a moment, is that people don't think about what they're exposing.

Karol:

And I saw several times that instead of exposing a more complex of a structure of an XML or a JSON tree-like structure, I have an array of functions that expose flat structures as literally as the database table, relational database table shows.

Karol:

So it's fun if it's a NoSQL database, because these are already complex structures, usually not flat JSONs.

Karol:

But if it's a relational SQL database, and people start putting APIs on top of that, it's like, oh yeah, but you're gonna expose the tables directly.

Karol:

And then the consumer needs to join the tables together by calling several APIs, and that brings another set of various problems, not only from the perspective of the cognitive load of understanding those, but if this is alive somewhere in the cloud, that's a realistic cost, because data at rest costs nothing, but movement of data in cloud costs quite a lot.

Karol:

And we're now calling several APIs, so we're basically sprawling costs.

Miriam:

I think that's also something that's really underestimated by lots of people.

Miriam:

I had discussions with developers saying, well, but data transfer costs us nothing.

Miriam:

And I was like, wait a second, that's not true.

Miriam:

I think that's really underestimated by a lot of people.

Miriam:

They think it's better to always, I mean, there was a discussion where we had a table as well in R3 that they wanted to expose via a REST API.

Miriam:

And one of my favourite questions is, how often does the table change?

Miriam:

And they said twice or three times a year.

Miriam:

And they wanted to call it every time the user does an interaction.

Miriam:

And I was like, no way you're loading it every time the user does an interaction.

Miriam:

If it only changes at maximum three times a year, right?

Miriam:

But that's then data transfer doesn't cost us anything.

Miriam:

And I was like, well, not you personally, but.

Karol:

Yeah, if they own a data centre and they host that on premise, yeah, sure, do it.

Daniel:

But this is the thing.

Daniel:

People are still there.

Daniel:

This is, these are the people we meet actually a lot when we do trainings.

Daniel:

Okay.

Daniel:

They still have this perspective and they didn't get the shift into the cloud.

Daniel:

And now they're shifted again to do things.

Daniel:

So we hear a lot of things then.

Daniel:

Oh yeah, we are using MQ.

Daniel:

We have to get rid of it because of costs, blah, blah, blah.

Daniel:

Now we will do REST as an alternative.

Daniel:

This is reality.

Daniel:

This is what we see at customer side.

Daniel:

Going from asynchronous messaging stuff to RESTful APIs.

Karol:

Oh my, oh, that's painful.

Daniel:

Yeah, that's painful.

Karol:

Yeah, that's absolutely.

Daniel:

This is what we see in the field.

Daniel:

And that's why we are actually in this space of the IQs because we hadn't, we did the training a lot of times and we were struggling in this context because we had to hit somehow the backend.

Daniel:

We had to hit somehow gateway structures, middleware, whatever.

Daniel:

And it was quite hard really to illustrate what to choose actually, what data set will be transferred somewhere, how to call it actually.

Daniel:

But we started with some kind of two-way thinking but this was not explicitly because we left out back at forefront and at that point and so on and so on.

Daniel:

And this is actually what happens there because people, and this is what we see in the field, are just replacing technology by technology but not doing the upskilling to really understand what's the real integration problem.

Daniel:

Another fun fact, I always ask this question in my talks when we do trainings and when we are on customer side doing negotiations and preset or whatever.

Daniel:

The question is always, did you have ever read the book from Gregor Hohpe, Enterprise Integration Patterns because we're talking about this and you can think about what the answer is.

Karol:

Now, I do have a little bit of a beef with that particular book for one good reason.

Karol:

It was written way before we had cloud computing and integration platforms that were microservice systems which gives a completely different perspective on interoperability.

Karol:

But if we're talking system design and system interoperability, that is basically your guidebook on doing proper event-driven integrations within your system and why you need to do them.

Karol:

So that's a very valid book from a system design perspective and system architecture perspective.

Karol:

So that's something still very much applicable.

Karol:

If you look at interoperability at scale of an ecosystem, it became less relevant over the years and this is still a huge gap to be filled and that's the problem there because that gap is not yet sufficiently filled.

Karol:

And if we have materials on that, they're paywalled with specific vendors and that's a completely different problem.

Karol:

But yes, this is a very good book.

Daniel:

This book is really the starting point.

Daniel:

So when I would like to go into the integration space, this is the one I should read.

Daniel:

This was the one somebody at CodeCentric forced me to read when I got more into the integration space to really understand, to get the wording, to understand how there's things to actually present and really make it visible there.

Daniel:

And then you are totally right because the next thing is we have the Richardson book in regards of microservice patterns and so on.

Daniel:

That's the next thing.

Daniel:

Nobody, it looks like nobody is really reading these pattern books to understand the basic things around architecture.

Daniel:

As you mentioned, we have different roles, levels of architecture and it's always even for us a mess to then talk with people and hear what they're actually talking about.

Daniel:

We have trainings and it's sometimes hard that we have to resist to really tell, okay, this is not true what you are telling here.

Daniel:

Yeah, and this is not what comes up.

Daniel:

And normally in these trainings, when you have these strong characters, I would call them, it's always, I didn't learn anything.

Daniel:

Right.

Daniel:

And it's like, okay, yeah, fine.

Daniel:

We make a check mark.

Karol:

Yeah, because they came already full so they didn't have capacity to learn anything because they were convinced they are right.

Karol:

So obviously they didn't learn because they didn't listen.

Daniel:

So that's a problem.

Daniel:

Boxes, okay, this is what I think.

Daniel:

Oh yeah, they said it also, they said it also.

Daniel:

But in the end, it's more about, and this is what we're telling always in trainings about adapting things.

Daniel:

So we know when we talk about API thinking that nobody will fully adapt this way of structuring what we developed there.

Daniel:

It's really some kind of, I can take parts of it and make it work for the situation or the organisation I'm in.

Daniel:

And this is really funny that people think they have to go the whole way.

Daniel:

It's always, it's also the same with the API obstacles which we are also using.

Daniel:

And it's always to really bring up the whole space.

Daniel:

And it's sometimes just enough to go at some point, at some level and bring it into this.

Daniel:

So Miriam's I think already pointing there to the obstacles.

Daniel:

So I'm at first, Marjukka Niinioja developed 2017 or something like that.

Daniel:

And it's really bring to bring more the business side into the game to really make it understandable what we are doing with, yeah, with building APIs even if there are synchronous or asynchronous.

Daniel:

This is one of the points there.

Daniel:

So it's really, I think it's something, what we also, I think Miriam can also agree on that is really the upscaling factor.

Daniel:

Because there's this discontinuous learning we have to learn.

Daniel:

So it's not set in stone that when somebody is at university and had some kind of development courses, they are ready to go into this integration game or can be sent to an training for doing this.

Daniel:

It's really also understand and learn over time.

Daniel:

So it's really about learning.

Miriam:

But I think that's also something we didn't tackle yet when we talked about the topic, but you now touched it, Daniel, the knowledge thing.

Miriam:

I think one thing that I'm always asked as well is, isn't this a problem that you tell people stuff about API design?

Miriam:

Won't they feel offended if you try to support them with enablement and say, well, no.

Miriam:

And the reason is none of the teams that I usually work with are API experts.

Miriam:

They have no clue.

Miriam:

They're happy that there's someone who can guide them.

Miriam:

And I think this is what many people underestimate.

Miriam:

They put a lot of, whether it's whatever it is, they put a lot of integration pressure on teams that already have a backend, they already have a system, they already have a database and their job is something completely else, maintaining the system, making sure it runs, making sure the backend runs, making sure the database runs.

Miriam:

And on top, someone's coming saying, hey, we need your data.

Miriam:

Give us something we can integrate against, right?

Karol:

So- And that's also a architecture problem because a lot of those systems were designed without interoperability in the design.

Karol:

The interoperability is slapped onto those systems.

Karol:

So it's not thought through from the beginning.

Karol:

What are we actually gonna do with that data?

Karol:

Where it's gonna go?

Karol:

And nowadays, all systems are distributed.

Karol:

There are very few systems that are actually isolated and work in isolation, which basically means that most systems nowadays require interoperability to be a first-class citizen, really, right?

Karol:

So it's difficult.

Karol:

And then it goes even worse in large-scale environments,

Karol:

corporate environments,

Karol:

because some people get the lovely notions

Karol:

of the centre of enablement and citizen development,

Karol:

and then they force those domain system teams

Karol:

to also do application integration

Karol:

as an integration platforms

Karol:

and cater to the modules of the integration platforms

Karol:

and take responsibility for that

Karol:

without even knowing what that is

Karol:

and how to deal with that,

Karol:

because they're database experts.

Karol:

They're domain experts.

Karol:

They're whatever else.

Karol:

So it's the difficult part there.

Karol:

All right, let's touch upon, because we know that Daniel has to go tend to his fatherly duties.

Karol:

That's the downside of having kids at times.

Karol:

It's fun, but there are responsibilities.

Karol:

Mine are covered by my wife, luckily, this time around.

Karol:

So let's dive into the AQs.

Karol:

And I already took the liberty of taking the diagram earlier from the side.

Karol:

So let me just bring that up.

Karol:

Where do I have this?

Karol:

This is this one.

Karol:

So I have this for my convenience in Draw.io, because I do have some drawings on this in different tabs.

Karol:

So the AQs, data interface quadrants.

Karol:

Tell us, what are we looking at here?

Karol:

Because this is probably quite foreign to a large number of people.

Karol:

I mean, for me, the concept was very foreign when I read the article.

Karol:

Now I'm quite a fan, because it's very useful.

Karol:

So walk us through, what are we looking at right now at this particular diagram?

Karol:

And just for those who want to read the article, this is the lovely QR for said article on the code-centric side.

Miriam:

Yeah, let me start.

Miriam:

So basically, this came out of a bit of all the discussions that we had before, right?

Miriam:

We have just discussions with people regarding what is good API design?

Miriam:

What is actually a good API design?

Miriam:

How do I know?

Miriam:

And we realised that most people don't know what they actually build their API for, right?

Miriam:

If you ask them, they don't really know, what are we actually building?

Miriam:

Like, so we tried to put it in a picture to make people clear, where you are is not where everyone is, right?

Miriam:

There are different people who are building different things.

Miriam:

And depending on what they're building, there might be different requirements for those things, right?

Miriam:

So basically, on the horizontal axis, we put raw data and aggregated or transformed data.

Miriam:

So raw data doesn't really mean unreadable names, right?

Miriam:

I think we agree to that.

Miriam:

There are standards, I mean, because some people said, yeah, then I just use the database names and say, well, this is not what raw data means, right?

Miriam:

Raw data means at least like, it has to be readable, right?

Miriam:

But aggregated and transformed data means the data is nicely packaged and put together right in a good way, right?

Miriam:

And then we have the vertical axis, which is product internal and use case specific and external and reusable on the top, right?

Miriam:

So the idea is not to say, left is bad and right is good or bottom is bad and top is good, because I think that's what most people think, but it's more about to say, where are we actually at a team, right?

Miriam:

What type of interface are we building and what are we aiming for, right?

Miriam:

And we mainly use this then in discussions with people like developers and architects, for example, to say, or also product owners to say, where are you and where do you need to be and why, right?

Miriam:

Because sometimes architects, product owners, business people have a very different understanding of what they want or what they're aiming for than the developers, for example.

Miriam:

And it's easiest to put it in a picture and say, please position yourself.

Miriam:

Where do you think you are?

Miriam:

What do you think where you should be?

Miriam:

What does it need to get there, right?

Karol:

Okay, so if we could define the quadrants.

Daniel:

One thing maybe to think about is, Miri already mentioned, is this black and white thinking there.

Daniel:

So people are really, oh yeah, where I have to be directly in the middle of the composition service.

Daniel:

So it's really hard to, or I want to be on the highest top.

Daniel:

It's just put yourself somewhere.

Daniel:

Maybe you're on the cross.

Daniel:

It's totally fine, but it gives direction.

Daniel:

It makes clear where all the things are actually moving somehow and make it also clear for non-technical people what is actually happening.

Daniel:

So when we look at back and forefront and stuff and everything involved there.

Miriam:

Yeah, let's go to the quadrants quickly, Daniel.

Miriam:

So I think you started with the top, no, bottom right now.

Miriam:

Maybe go ahead.

Daniel:

And that we can move it to a composition service, which is more fruitful than just having this technical back end for front end type of thing.

Daniel:

So it's really something to move on.

Daniel:

And to be honest, we started with the two things above.

Daniel:

That was the starting point because we needed for a project because the idea of the project we did was to deliver core services.

Daniel:

So platform data products somehow.

Daniel:

The people were not at that time talking about data products.

Daniel:

So it was called core services.

Daniel:

What happened was over time, we built a lot of composition services and then somebody asked, did we actually reach the goal?

Daniel:

So we had to find something and this was actually the start.

Daniel:

And then Miri came and built this whole diagram or the quadrants out of it.

Daniel:

This is really where it all came from.

Karol:

Okay, so what would be the definitions for the quadrants then?

Miriam:

Okay, so let's start bottom right, back end for front end.

Miriam:

I think most people know what it is, but basically we expect there's a team.

Miriam:

They have a front end and a back end.

Miriam:

Maybe it's in the same team.

Miriam:

Maybe it's the neighbour team that we know very well.

Miriam:

We build our interface exactly for the front end.

Miriam:

We don't do raw data.

Miriam:

We transform the data exactly in the way the front end needs it.

Miriam:

We design it very nicely so that the front end developers have it very easy.

Miriam:

Nobody else will ever use our API, right?

Miriam:

We use it internally, that's it.

Karol:

So single purpose, very, very fine, strictly defined and not reusable at all.

Miriam:

Exactly.

Miriam:

And you can make, for example, you can make breaking changes anytime because the front end developer sits right next to it.

Miriam:

You say, hey, I'm making here a breaking change.

Miriam:

Please change.

Miriam:

You may be changing even the front end in the same much request, right?

Miriam:

No problem.

Miriam:

You can do that, right?

Karol:

Yeah.

Miriam:

Then we have on top of that, the composition service.

Miriam:

So let's go that way.

Miriam:

The composition service is also with aggregated and transformed data.

Miriam:

So very well-defined data, very curated data, but it is designed in a way to be external and reusable, right?

Miriam:

So I need to pay more attention to who wants to use it.

Miriam:

Why do they want to use it?

Miriam:

What do I need to do to make it actually usable for them?

Miriam:

And also I cannot do as much changes, right?

Miriam:

I cannot change it tomorrow and say, well, all my lovely external users, now I have a version three of my API.

Miriam:

And if you don't migrate, version two will be not working anymore tomorrow, right?

Miriam:

I cannot do that, right?

Miriam:

So I have lots of implications I have to take care of if I'm in that space, right?

Miriam:

I cannot just say, well, I change it tomorrow.

Miriam:

I don't care, right?

Miriam:

And that's also something that many people don't get at the beginning, right?

Miriam:

And I have a very funny story of a team that I talked to who actually had a backend for frontend.

Miriam:

That's what they thought, right?

Miriam:

But the product owner decided to put their API in the internal API catalogue because it was there, right?

Miriam:

It was a nice API.

Miriam:

So what happened?

Miriam:

Other teams started using it and they didn't know.

Miriam:

And when they made a breaking change, suddenly three teams dropped them a message saying, hey, you broke your API, why?

Miriam:

We use it.

Miriam:

And they were like, wait, this is our API, you know?

Karol:

That was actually- Why are you using it?

Miriam:

If you would have talked about it with the IQs, you would have known that someone thinks it's there and others think it's there, right?

Miriam:

So there was a different perception in the team.

Miriam:

And then the left side, maybe Daniel, you can go ahead.

Daniel:

Yeah, and then we have actually on the left side when we start on the low ground, this data link type of thing.

Daniel:

It could be a database API, but it shouldn't.

Daniel:

It's really bringing this raw data up to be used by composition services or even then by the platform data product.

Daniel:

And this platform data product is really meant in type of productisation to really think about in data products to really say, okay, this is what we deliver internally, somehow externally then also, and we make things reusable.

Daniel:

So we can build then composition service out of this platform data products because they provide the real value because this is what we actually want to share with people inside the organisation or even also external because this internal external thing is it's a quite complicated thing there.

Karol:

Okay, so I do have my take on this for integration platform.

Karol:

So we'll do that in a moment, but I'm looking at this also from a perspective of domain driven design.

Karol:

And I'm just trying to find the right image in Vlad Kononov's book, Learning Domain Driven Design, and I think I got it.

Karol:

So I'm just gonna paste it right here.

Karol:

So if I look at these layers, this is an overall picture of different types of context mapping within domain driven design, right?

Karol:

So in context mapping, we have different relationships.

Karol:

So if I would look at data link, that would be probably either shared kernel or partnership.

Karol:

So very tight connection between them.

Karol:

Then if we look at back and forefront, then that would be probably also partnership because there are separate pieces of code connected and non-reusable, etc.

Karol:

Then composition service would be then probably open host service in that sense.

Daniel:

I have to leave you now.

Daniel:

Have fun and see you all, bye.

Karol:

Thank you, Daniel.

Karol:

Thank you for joining us.

Karol:

You're welcome, you're welcome, bye.

Karol:

All right.

Karol:

So correct me if I'm wrong, but I'm looking at this from this particular perspective, that this would be like composition services is our open host service with these published languages that we cater to that are specific use.

Karol:

And then they are basically conveying a specific functionality, right?

Karol:

Yeah.

Karol:

Data products might also land in the part of being an open host service because we don't, in terms of ACLs, we don't really expose them, the ACLs as APIs.

Karol:

The ACLs are within the software itself, whether we're consuming or providing an API.

Karol:

So that's a different thing.

Karol:

And then back and forefront, and it's also, it's a conformism pattern because the front end is conforming to the back end.

Karol:

Yeah.

Karol:

Right?

Karol:

Yeah.

Karol:

So does that aligns with the thinking for the- Okay.

Karol:

Totally, yeah.

Miriam:

All right, so- It's a good perspective to look at as well, yeah.

Karol:

Okay, fair.

Karol:

All right, so if we can map these things to good, bad designs or example, real world, very real world examples of what we would use.

Karol:

So let me see, let me have a go at it.

Karol:

So if I would do a data link, that would be, literally could be a database link, DB link between two databases replicating data.

Karol:

A data link could be also a batch or an ELT process running somewhere, right?

Karol:

Because it just moves raw data.

Karol:

Yes.

Karol:

ETL, somewhere probably in the data link space as well, but probably closer to the middle of the whole thing because it's acting a little bit as a composed service, a little bit in that direction, but still in the data link part.

Karol:

Back and forefront, I think that's self-descriptive here.

Karol:

Composition service, any SaaS solution with an API array externalised, that would be pretty much it.

Karol:

So any CLI of any tool would be in the composition service, I guess.

Karol:

Any API of AWS, Azure as products.

Karol:

Yeah, Salesforce API, Microsoft Dynamics API, these would be all composition services.

Karol:

Then in that sense, what would be the data products?

Karol:

Okay, so if we have Salesforce, for example, as in CRM, Salesforce as a platform gives us composition services, but if we implement it in a specific context of our own organisation and start exposing specific data in a productized way from Salesforce, from that organisation, that would be then in the direction of the data products.

Miriam:

Yeah, I see it more in a way like how close is the data still to the raw data, right?

Miriam:

A platform data product would be more, let's say, less data from different sources.

Miriam:

A composition service can also have very different data, right?

Miriam:

A composition service could also have data from Salesforce, but data also from a completely different source, theoretically, right?

Miriam:

So it's more like about where do you get your data from, like how close is the data to each other, right?

Miriam:

If it's a very, I would say, a very bounded context with very, like data is from the same place everywhere, like, right, it's more on the data product side for me, while if we have data that we aggregate, we transform, we take other data that we mix in, right, from somewhere else, that would be more on a composition side.

Miriam:

So it depends a bit on how, where do you get the data from, right?

Miriam:

How restricted are you in the data you present, right?

Karol:

Okay, I'm gonna counter that because if I look at ecosystem architecture from perspective of domain-driven design, I mean, it's a holy grail of domain-driven design to have a bounded context and the functionalities of a specific subdomain containerised in a singular system.

Karol:

That's like the holy grail.

Karol:

The reality of things is that usually a singular domain system implements several bounded contexts, not one, but a few.

Karol:

So if we look at, again, Salesforce, a CRM system as an example, okay, we have the customer domain, but the moment an opportunity is won, we're going into the order domain, right?

Karol:

So we're already from that perspective, functional perspective of a business, we're already having at least two bounded contexts in a CRM, right?

Karol:

So if I'm looking at the distribution of systems and bounded context in an ecosystem, also from a perspective of an integration platform, the data product can be on an API of an integration platform, but the data can originate from multiple systems, right?

Karol:

Because if I have a order domain, okay, I have some sort of an ERP or order fulfilment system beneath, but part of that data originates from a CRM.

Karol:

So I combine the two as a singular purpose of a data product, which is not exactly transformed because I don't transform the data on an integration platform, I just merge it as a, join that into a singular, not data model, but a singular instance of a model, right?

Karol:

So that is then, that could also, from my perspective, be raw data without transformation.

Miriam:

Right, yes.

Miriam:

Depending on how much you do with the data, right?

Miriam:

It also depends a bit, what do you really do with it?

Miriam:

How difficult is it to put it together?

Miriam:

Do you just take the fields and throw them in one, right?

Miriam:

Or do you really do more with it?

Miriam:

I think it's really a fine, it's not so, it's not black and white as well here, right?

Miriam:

Most of the things will probably be somewhere in the middle, right?

Miriam:

Some will be clearly left or right, but most will be somewhere more to the middle, right?

Miriam:

That's also what people always ask.

Miriam:

Do I need to pick one of the quadrants and then I'm there?

Miriam:

And we said, no, you can say I'm more in the middle, I'm more to the edge.

Miriam:

I mean, if I have two consumers, where am I?

Miriam:

Am I already, am I external or am I internal?

Miriam:

I said, well, you can still say we're internal because the second consumer is our neighbour team or whatever, right?

Miriam:

You can still draw your thought there and say, well, we technically have more than one, but it's still like internal, right?

Miriam:

So it's not really about the maximum or I always have to be on one clear end, right?

Miriam:

I can be somewhere in the middle as well.

Miriam:

This is more to keep the conversation going.

Miriam:

And actually one of the reasons why we designed it as well was that we had the training with the customer where the architects were very keen on having the training with the developers because they said, well, they need to learn how to build reusable APIs, right?

Miriam:

And then we talked with the developers and they said, well, I have a back end for front end, I don't care about any reusable API, right?

Miriam:

Very true because it depends on the use case.

Miriam:

And then it's good to pick up this picture and say, well, your architect wants you to build a red or blue thing.

Miriam:

You're telling me you're only building green things.

Miriam:

So where are you really and why?

Miriam:

And what do you need to go there?

Miriam:

Or does it even make sense to go there, right?

Miriam:

It doesn't make sense for every interface to be a composition service or a platform data product, right?

Miriam:

Every quadrant has their strength and their place to be in our opinion, right?

Miriam:

So I really need to know where am I and where do I want to be and where do I have to be and why, right?

Karol:

It's always the only plausible and correct answer in all cases it depends because we first need to understand the context of things rather than jump into universal truths because those universal truths are not really universal in that sense.

Karol:

If we just look at the relationships of context mapping in domain-driven design, we can identify that these actually map to the data interface quadrants very nicely.

Karol:

By the way, if somebody wants to find this lovely diagram that I posted in Draw.io, this is the book I'm referencing it from, that's by Vlad Kononov, Learning Domain-Driven Design.

Karol:

It's a book a lot easier to digest than the books of Eric Evans, not that they are bad, they're just written in a different language that might be a little bit harder to grasp.

Karol:

So if you don't have experience with domain-driven design and you're just starting with that, I recommend reading this one first and then going to Eric's books would be a better basis to get the grasp on what Eric Evans is saying in his.

Karol:

So the relationships are there and if we look and map our relationships and understand those relationships between teams, between systems, we can then have that conversation over quadrants and then everybody will say, well, it depends, what are the use cases?

Karol:

And that is very helpful in my opinion to have these kinds of conversations because it's all about building those relationships and those relationships, according to Conway's law, trickle from between teams to systems anyway.

Karol:

So it's always worth having that discussion in that sense of classification, right?

Miriam:

And I think it helps just to get everyone on the same page because mostly people don't talk about the topic.

Miriam:

So everyone has their thing in mind, but nobody pins it down and then it goes to the opposite directions.

Miriam:

And I think the hope, if you talk to companies who want to be, call it API first, call it whatever, API is a product, they hope that people only build the red and blue things, but then teams don't understand why and teams don't understand when this is needed and teams don't, you can't only say, now we're API first, so, right?

Miriam:

We do API as a product now, but then you also need to tell teams why this is necessary and why this makes sense for their case that they're building, right?

Miriam:

If the team says, no, we're building a backend for frontend, then someone has to go there and explain to them why they should write about the composition service or something else than a backend for frontend and why this is the right way to go, right?

Miriam:

So these are the interesting discussions that happen then because people need to get into that and discuss really like, what are we building and why are we building it like that and what implications does it have if we suddenly build something else?

Miriam:

And it's also something we always say, if a team build a backend for frontend for years, they would not magically know how to build a composition service and what applies to that, right?

Karol:

Absolutely.

Miriam:

Training and enablement and stuff, you cannot just expect them to jump there in every quadrant and know exactly what they're building, especially as we discussed, they're not expert for interfaces, APIs, integration, any of that, right?

Miriam:

They're just a team building a backend or maintaining their database or whatever, right?

Karol:

So just putting that in a perspective of ecosystem interoperability, I literally was in a situation where a company composed their integration team based on former DBAs, former DBAs and database administrators, and they were expecting them to provide a decent integration platform.

Karol:

Now, if you look at mindsets of these people, well, no, that's not gonna happen because the mindset of interoperability is persist nothing.

Karol:

The mindset of a DBA is persist everything.

Karol:

So what they did, they did basically an MDM solution covered around with Azure functions to feed the data into the MDM and then redistribute the data from the MDM.

Karol:

That was their integration platform.

Karol:

Was that anywhere near a composition service?

Karol:

No, that was all data links, basically, right?

Karol:

So it is a difficult topic to tackle in terms of skillset and mindset over the design and working on things.

Karol:

So if, again, another topic that I discussed today

Karol:

and scheduled for a later stream somewhere in November,

Karol:

migrating, for example, from Mule platform

Karol:

as a MuleSoft integration platform to just pure Java,

Karol:

I mean, okay, the cost of licences are high,

Karol:

but companies still don't think about the cost of retraining

Karol:

or rehiring the whole teams, the cost of lost knowledge,

Karol:

because if they start-

Miriam:

The migration cost.

Karol:

Oh, the migration cost, yeah, that's another thing.

Karol:

But there are other implied costs other than the OPEX of licences, and that's the difficult part as well, because if they suddenly drop a low-code integration platform, their developers will go away to a different company to continue doing a low-code platform.

Karol:

So they will lose all knowledge.

Karol:

They will have to rehire the whole team.

Karol:

They'll get probably Java developers or something like that, and they'll have to retrain them in thinking about interoperability, because those Java developers will be set to back-and-forth front-end or data link.

Karol:

That's just not feasible in that sense.

Karol:

So, yeah, so that's the difficulty there.

Karol:

Right, here we have Tom Donker referring other books about DDD.

Karol:

Yes, we have also Vernon with a red and green book, also a nice read if you're learning DDD.

Karol:

So, yeah, okay, you know what?

Karol:

I do have also, somewhere here in the tab, I did some playing around thinking about the quadrants.

Karol:

I think I showed you that when we chatted about the livestream earlier.

Karol:

I actually tried to map even-driven architecture and different patterns from even-driven architecture into the quadrants.

Karol:

I must say mapping async to this is quite a challenge.

Karol:

At least that's my take of how I would use those certain patterns in terms of various options.

Karol:

So this, again, depends on what you wanna achieve and why you wanna do it, and those patterns are various, and people understand them also differently.

Karol:

But just looking at the data link, content-based routing went into the data link straight away, right?

Karol:

Because in pure EDA, you shouldn't do content-based routing because that introduces additional complexity.

Karol:

And I was like, hmm, yeah, we're pulling, even sourcing from legacy systems that cannot do events.

Karol:

That feels like the data link.

Karol:

I know that I asked Daniel about mapping EDA to the quadrants, and he said he never tried it.

Karol:

What's your perspective on that?

Miriam:

I think in general, I mean, I think it's great to also bring it more to the architecture and ecosystem perspective, right?

Miriam:

We never did that because we didn't require it, let's be honest.

Miriam:

We develop tools if we need them right now, right?

Miriam:

Of course.

Miriam:

With people, mainly.

Miriam:

So this was really interesting what you brought up.

Miriam:

I never traded myself media, but I think this is a really interesting thing that you came up with, and I really like it because I think it gives it another layer, right, on top of it.

Miriam:

We also discussed other topics, like on an architectural ecosystem level that we never thought of when we designed it the first time, right?

Miriam:

Because we just needed something to discuss with developers and architects.

Miriam:

That was the need we had at the time where we came up with it, right?

Karol:

So I think- The key difference is that I'm a researcher and I do research, so I ponder on things that I'm not pragmatic in them because I just start thinking about them and then see if they apply to anything practical.

Karol:

So that's the difference there.

Miriam:

I did a lot of research too, especially during my PhD.

Miriam:

But I think, as I said, most of the times right now we develop things that we really need based on what we discuss with people, right?

Miriam:

We come up with solutions for problems we already see just because this is interesting.

Miriam:

But I think also, I mean, we work on different things, right?

Miriam:

That's also what you see here because I mainly work with teams, right?

Miriam:

I have lots of different- If I would come with that, they would be completely overwhelmed, right?

Miriam:

So just a whole different level of people to discuss, right?

Karol:

Yeah, this is basically taking Gregor Horst's book, Enterprise Integration Patterns and just throwing it on the quadrants.

Karol:

Some of those patterns are literally taken from that book.

Miriam:

Yeah.

Karol:

Others are redefined.

Karol:

And it just pops up patterns and there are different flavours to pops up.

Karol:

And we have them, the pops up we have as a broadcast with a rich event, with broadcast with anaemic, multicasts, and waiter pattern, which is a completely different way of broadcasting, right?

Karol:

And these are all certain types of data movement and application integration that is completely different than traditional synchronous APIs, right?

Karol:

So that makes quite a difference in thinking.

Karol:

And then I'll go back to the raw image here.

Karol:

Then I was pondering on this from a perspective of an enterprise application integration from that ecosystem perspective that I do research on.

Karol:

And basically, oh, well, maybe I'll shift here.

Karol:

Basically we have in the research, we have four different architectural styles for interoperability on an ecosystem level.

Karol:

Ignore the spaghetti architecture because it's just for reference.

Karol:

That's not an architectural style.

Karol:

That's a consequence of unmanaged point to point.

Karol:

So if we're looking at DIQs from a perspective of a system, we're looking from a perspective of point to point in ecosystem styles.

Karol:

That's basically just client server relationship, right?

Karol:

But then I tried to map it as event driven.

Karol:

Broker, yeah, you can do through broker, which is most parts is batch ETL, ELT, but you can do single record processing as well.

Karol:

It depends how you build that integration flow.

Karol:

The fun part is when you go into API led architecture, which is an offshoot of a service orientated architecture with three distinct layers.

Karol:

And this is where the fun part began for me because I looked at the diagram and basically I'm looking like, oh, okay.

Karol:

I would probably rename the quadrants a little bit for that perspective.

Karol:

But in API led architecture, I do not see data links at all because I'm on an ecosystem level.

Karol:

So they're not relevant.

Karol:

So if I'm looking at this from API led, so this here backend for frontend, this is the exposure of data in certain way.

Karol:

Okay, so that would be in MuleSoft nomenclature, my experience layer.

Karol:

In my nomenclature, that's the channel.

Karol:

So this is the layer that is consumed by the main systems.

Karol:

Then the data product layer is the access to raw data, the raw services, unfiltered, generic.

Karol:

So that's my adapter layer or the system layer in MuleSoft, right?

Karol:

And then the composition service, quite funny enough, is the exact same naming that I use for the middle layer, which is the composition layer.

Karol:

And we have composition services in there, which is the layer where we take the data products and the raw data from different systems from the adapter layer and create services from them.

Karol:

So create some sort of generic products that we can offer as reusable services.

Karol:

And then we offer those reusable services to the channel layer.

Karol:

And that channel layer is specialised towards a specific consumer.

Karol:

There is a single API per consumer.

Karol:

They do not reuse API between one another.

Karol:

So if I have a Salesforce instance, that Salesforce will be consuming Salesforce channel API.

Karol:

If I have a SAP, SAP will be consuming SAP channel, etcétera, etcétera, right?

Karol:

So this is a tailored, specific, non-reusable API.

Karol:

And that made it very interesting because this is very applicable and a very nice way to explain the layers of API-led architecture and their purpose when designing APIs for people that are not integrators.

Karol:

Because some people think that, oh, putting that iPaaS, that's an overkill.

Karol:

That's too much.

Karol:

I mean, yes, if you put an API-led architecture in a company that has five systems total, that's definitely an overkill.

Karol:

They don't probably even need an iPaaS.

Karol:

They could do well with even driven architecture and they'll be fine.

Miriam:

Yes.

Karol:

But if you have a company, a corporate environment that has a hundred domain systems, good luck doing that point-to-point or EDA without any capacity for transformations and protocol mediation, etcétera, etcétera.

Karol:

Not feasible at all.

Miriam:

I found it very interesting because I recently talked to some people that said, well, all these API-led, we decided we don't need it.

Miriam:

We go back to point-to-point.

Miriam:

That was something that I already heard, which was very interesting because I thought actually what was missing and that's what you touched before is the mindset shift, right?

Miriam:

That's what you're saying.

Miriam:

You need to shift the mindset.

Miriam:

Even if you want to do something like that, you need to completely understand that's a different mindset.

Miriam:

And I think that some companies that don't really manage to do this mindset shift are actually going back because it costs them a lot of money and they don't see the benefits.

Miriam:

So did you already hear about something like that or can you imagine that as well?

Miriam:

Because I heard that and I was really surprised that the mindset shift is so difficult for some people, right?

Karol:

I'm not surprised because that's literally the consequence of Conway's law.

Miriam:

Yeah.

Karol:

Literally.

Miriam:

Yeah, exactly.

Karol:

I'm not surprised by this to the extent that this was literally the problem of, in a lot of cases, of the early adoptions of ESBs.

Miriam:

Yes.

Karol:

Because companies think they can solve their interoperability problems by throwing technology at them.

Miriam:

Of course, always.

Miriam:

Yeah.

Karol:

That's not the case.

Karol:

Technology doesn't solve the problems.

Karol:

If you just throw technology at it without the underlying organisational change with it, the technology will fail.

Karol:

No matter how good that technology is.

Karol:

And it's not the fault of the technology because the technology without proper implementation and governance will solve no problems.

Karol:

That's just the case it is.

Karol:

That's why we don't use the term ESB anymore in general conversation about interoperability because too many companies have burned on ESBs, burned a lot of money, a lot of effort with very little return on investment because they just did technology without changing the way they work, without changing the processes, without changing the governance.

Karol:

And they expected magical miracles.

Karol:

This is one of the problems we face as integration architects that we need to go in and have a conversation about the organisation rather than technology.

Miriam:

Yeah.

Miriam:

Daniel and me wrote actually an article on the code centric block, which is when your API platform lacks the desired impact, because that's exactly what we see, right?

Miriam:

When we talk to customers, they would say, well, we bought the tool, we're done.

Miriam:

And then they realise, oh no, we're not.

Miriam:

And it's not working as expected, but why, right?

Miriam:

And that's exactly what you're saying.

Miriam:

Most people think that technology is enough, but as you stated at the beginning, or we stated all at the beginning, the technical aspect is not the most important one.

Miriam:

I mean, you can solve that clearly, but the other aspects, right?

Miriam:

The aspects like how do we communicate?

Miriam:

How do we build up our teams?

Miriam:

How do we organise governance?

Miriam:

All these things.

Miriam:

How do we shift people's mindset from we're just building our back end for front end and we don't care about anything else, right?

Miriam:

I had in a training, a guy who said, well, I don't care if anyone likes my APIs.

Miriam:

I built them the way I want them.

Miriam:

And if nobody likes them, that's it.

Miriam:

They're like, yeah, well, you can think like that, but if your company wants to be like design APIs as a product and be API first, you need to change your mindset.

Miriam:

And it's very difficult to reach these people and change their mindset, right?

Miriam:

You need, it needs a lots of time.

Miriam:

It needs special effort.

Miriam:

You can't just put a tool there and assume people will love it and know what to do with it and how it works and why they need it, right?

Karol:

It's about applying the value, showing the value of these tools and where they bring help and value to the conversation.

Karol:

That's one of the biggest challenges there, because a lot of the times, if we look at companies that are not digital, right?

Karol:

They see IT as just a syphon of cost.

Karol:

It's just draining money, right?

Karol:

Explaining this in these kinds of companies is already a nightmarish challenge.

Karol:

And then while you can still justify the ownership and the alignment here on the business around the main systems that have front-ends and people use directly, this is easy.

Karol:

But if you try to justify that for an integration platform where that integration platform does not have a direct impact on the business, well, doesn't, it does have a direct impact on the business.

Karol:

But business does not see that because they don't see a front-end for an integration platform.

Karol:

They don't use an integration platform.

Karol:

They don't know they're using the integration platform.

Karol:

So for them, an integration platform is just a cost.

Karol:

It's just infrastructure.

Karol:

And from that perspective, when we start treating interoperability as infrastructure, well, we don't design for it.

Karol:

We don't think about it.

Karol:

We don't care about it.

Karol:

We don't design our domain systems for it.

Karol:

And it gives, oh, so many problems.

Karol:

The moment we start thinking of an integration platform and our interoperability capabilities as the heart pumping the blood of the business, the shift becomes something real.

Karol:

And then the understanding is brought in.

Karol:

But that's, to achieve that, that's very difficult.

Karol:

That maturity happens in organisations that are very technically driven because they have that understanding.

Karol:

So telco, that's one industry where this is just the golden standard.

Karol:

Sometimes happens in banking, not always.

Karol:

I recently saw a implementation of a MuleSoft platform in a bank.

Karol:

And I was surprised because they even thought about proper domain partitioning over each layer.

Karol:

I was like, I need to talk to the architect that figured this out because that's just the most mature implementation of an API-led architecture I have saw in my life.

Karol:

And I saw many, I saw really plenty of implementations of API-led.

Karol:

None of them were this mature.

Karol:

I was literally like, give me the person that designed this, that figured this out because I wanna know how he achieved that in an organisation.

Karol:

I don't care about the technical part because I know how to do this properly.

Karol:

But to convince an organisation to follow that and go through with that, it's like, tell me how.

Karol:

I wanna know.

Karol:

It differs from company to company.

Karol:

It's gonna be, yeah, we're gonna tell the same story over and over again and try to explain interoperability.

Karol:

It will land or will not land.

Karol:

It depends on the, oh, on so many aspects.

Karol:

The first live stream on Loosely Coupled we talked, I talked with Fran Mendes about adoption of EDA in organisations.

Karol:

Like I said in our conversation just before the stream, the conversation shifted to mental health because mental health of your employees in your IT of the organisation impacts the adoption of architecture.

Karol:

If those people do not feel psychologically safe, they'll be resistant to change.

Karol:

So I think that translates very well to the people that come to your trainings.

Karol:

If they're not psychologically safe, they are not able to learn.

Karol:

So they come out of the trainings being opinionated and saying that they didn't learn anything.

Miriam:

Yeah, I think you always have one or two of those.

Miriam:

Usually most people want to learn, that's my experience.

Miriam:

But also I think sometimes it's also the underestimated pressure on people.

Miriam:

What I also tell a lot of times, and that's also a real story, a developer that I work with who needed to do an API, she told me, if I don't finish this until tomorrow, I'm dead.

Miriam:

That's a quote, you know?

Miriam:

And if you're in an enterprise context where people are so much under pressure that they need to finish something in no time, what type of good solutions do you expect, right?

Karol:

I mean- Oh yeah.

Miriam:

That's always the problem because people are so much under pressure to finish stuff in no time with no experience for it.

Miriam:

So they're trying to get it done fast.

Miriam:

And the faster people work, the less time they have to shift their mindset or to learn something new because they're just trying to get it finished as quickly as possible.

Miriam:

It's just lots of pressure on them.

Miriam:

So I think this is also an important aspect of that mindset.

Miriam:

People need time to change their mindset.

Miriam:

They won't do it overnight.

Karol:

That's a horrendous situation to be in.

Karol:

If I need to just finish things and output things, this will never be quality.

Karol:

This will be just done just to be done.

Karol:

That's like, I find that this is quite often in certain organisations, especially in certain consulting organisations, that's quite often it's, we need to output.

Karol:

It doesn't matter if it's shitty, as long as the client signs off, we're good.

Karol:

And that contradicts my standards.

Karol:

And I literally had to refuse signing off on things and releasing them to the client because they were not up to par.

Karol:

And I didn't care that we're gonna lose money on that.

Karol:

Somebody screwed up along the way.

Karol:

We cannot produce quality.

Karol:

I'm not gonna sign it with my name because that says something about me.

Karol:

I have the moral integrity to say no, but a lot of people will just sign it because they're scared about their job, their position.

Karol:

They have mortgages.

Karol:

They have families they need to feed.

Karol:

Oh, so many things.

Karol:

And these are all impacts on everything, right?

Karol:

And it's a difficult puzzle to see, especially if you're in certain places in an organisation, you don't see that at all.

Karol:

In the end, we are all human and we have our troubles and this will impact the business one way or another.

Miriam:

Of course.

Miriam:

In that way, it was good because I was as an external in a good position.

Miriam:

So I said, well, I can talk to your product owner.

Miriam:

I have nothing to do with him or your product manager.

Miriam:

I will never see this person again and I will tell them why you won't finish tomorrow.

Miriam:

No problem, right?

Miriam:

Yeah.

Miriam:

And if you have a certain knowledge, you can also argue, right?

Miriam:

But if you're a developer who never did that before, who doesn't know how long it takes, who doesn't know why it takes longer than expected, it's very difficult to explain yourself, right?

Miriam:

You just don't have the arguments.

Miriam:

And that's what I think what's really great about like the enablement aspect, right?

Miriam:

If I'm in an enabling team, like according to team topologies, if anyone knows that I can easily step in and say, well, dear manager of this person, nice that you want to see tomorrow, but you know, we have to do all these steps and they are complicated because, and that's why it will need time, right?

Miriam:

No matter how, when your deadline is tomorrow, I'm sorry, but we won't do that, right?

Miriam:

So I think if you have that layer, you can at least support people in finding the right arguments and give them the arguments that they need to convince someone that they can't be done tomorrow, but alone they are lost, right?

Miriam:

That's my experience because- Absolutely, yes.

Miriam:

Where do you get the arguments from if you don't know them or you never use them, right?

Miriam:

And you're not like an expert on these things, where do you get them from?

Karol:

Exactly, and then if you think of it from even the perspective of cognitive load, which is something team topologies touches upon very strongly, think about how little germane cognitive load those people have when they, what's that, intrinsic load?

Karol:

Yeah, extraneous and intrinsic, right?

Karol:

They're the other two.

Karol:

The intrinsic load is so high on them because their own emotions, their own psychological safety, the pressure that's put on them, the stress just completely blocks their capacity to think in that sense, right?

Karol:

And if we put it in the way that often management sees that, management often sees this lovely triangle, right?

Karol:

Which is a fake, this is not the actual thing.

Karol:

It's time, cost, quality.

Karol:

No, that's not how it is.

Miriam:

You can only pick two of them, right?

Karol:

That's what they say, right?

Miriam:

Yeah, exactly, that's the story behind it if someone doesn't know, right?

Karol:

But this is the actual thing.

Karol:

It's cost, time and scope, which impact quality.

Karol:

If we don't have time, we close this up.

Karol:

We can do it also at low cost, but the scope will, well, be the same.

Karol:

The quality will be squished, will be bad.

Karol:

So if that's the case, it's gonna be always a problem.

Karol:

We have to keep the quality the same.

Karol:

We have to adjust, when we change one, we have to adjust some others, right?

Karol:

To see if that keeps the quality.

Karol:

The quality should be looking at maintaining the quality.

Karol:

And if we squish the time to so little with remaining scope, and also try to compress the cost not to add to it, well, impossible to achieve the same quality.

Karol:

Impossible to achieve something that is more than the exposition of a relational database.

Miriam:

That works today and maybe not tomorrow, right?

Karol:

Exactly, it's not gonna be reusable.

Karol:

It's not gonna be anything that will bring business, that will bring further development of the business, right?

Karol:

It will just serve the purpose for now.

Karol:

It's a workaround, it's a tactical choice.

Miriam:

And next time someone needs it, they will do the same again, build it again, and again, and again.

Karol:

And then we go into the problem of API federation, API management federation, and repeated implementations of APIs that we have 10 APIs do exactly the same thing because they didn't even know that these things exist because they didn't have time to discover those.

Karol:

They didn't have time to think about them.

Karol:

They didn't have time to ask anybody.

Karol:

They were just like, you need to deliver.

Karol:

Okay, boom.

Karol:

API, a 10th API that does exactly the same thing that already the nine other teams figured out and did the same because they were pressured into.

Miriam:

And two are maybe not used anymore, but nobody knows about them.

Miriam:

So they're still there, right?

Karol:

But they're still burning air in the server room and they still cost.

Karol:

Yeah.

Miriam:

And they might still be a security risk, right?

Miriam:

Because nobody remembers that they're there.

Karol:

Oh yeah, yeah, definitely.

Karol:

That's 100%, that's already.

Karol:

So this way we build technical depth, we build security risks, we build low IT maturity, we contribute to, what's that?

Karol:

Not employee retention, the other way around, churn?

Karol:

No, that's client churn.

Karol:

What's the word?

Karol:

Just employees leaving the company, right?

Karol:

So we lose valuable knowledge about our ecosystem.

Karol:

There's so many downsides to this kind of behaviour, but it's a normal behaviour in a lot of companies.

Karol:

Well, normal is a bad word.

Karol:

Normalised behaviour in so many companies.

Karol:

And that's horrendous in that sense.

Karol:

That's a huge problem.

Miriam:

And then, I mean, there are other things related to that that I just had to think of when we discussed it.

Miriam:

For example, the fact that people integrate an API and then their developer's leaving and after half a year it stops working and then they're complaining.

Miriam:

And you're like, well, I mean, you need to maintain this.

Miriam:

And if you don't have the credentials anymore or they run out, what should the provider do, right?

Miriam:

I mean, you have to know how to use the API and how you integrated it.

Miriam:

If you don't have any developer anymore, and that's what I see also very often, all those things, APIs and also API consumption are handled as a project.

Miriam:

When they're done, all developers leave and it will work forever.

Miriam:

We never touch it, it will work forever.

Miriam:

And half a year later, a year later, the credentials run out or a certificate runs out or you don't know what.

Miriam:

And then there's a big disaster because nobody knows anymore, right?

Karol:

That's very true.

Karol:

Like Eric here says, it's like a shower.

Karol:

We expect nice warm water, but don't know or want to understand how it gets there.

Karol:

It's a problem.

Karol:

I had a very clever thought on the APIs.

Karol:

Oh yeah, that's one of the lowest software architecture in general.

Karol:

Software architecture and trade-off analysis is not something we do once, it's a iterative effort.

Karol:

And this goes to maintaining APIs, this goes to evaluating APIs.

Karol:

Are they still bringing us value?

Karol:

Are they still used?

Karol:

Are they still secure?

Karol:

Are they still providing what they should be providing or should they be replaced, changed, modified, whatever that may be.

Karol:

It's an iterative effort because everything we do is an iterative effort.

Karol:

And if we look at IT that was 20 years ago, that wasn't changing that fast.

Karol:

Nowadays, everything is changing a lot faster.

Karol:

20 years ago, we didn't live in a distributed world.

Karol:

We had data centres for each company that had the tech, perfect, fantastic, everything is there, it's running.

Karol:

Now, everything is everywhere.

Karol:

Now, everything is moving faster than we can catch it.

Karol:

If we look at the problems of architecture and applying architecture to specific topics, the moment I design something, it's already irrelevant.

Karol:

It will serve a purpose, but it will be not as good as the actual need is because the need already drifted away.

Karol:

It's called the model drift.

Karol:

That's why concepts like residuality theory from Barry O'Reilly gained so much traction because they exactly address the problem of the model drift and exactly address the problem of this, that anything we model is already out of date.

Karol:

And it's a huge problem in that sense.

Miriam:

I also listened to a very good keynote on actually complexity.

Miriam:

That was what it was about in a conference last year.

Miriam:

And the actual take was, or what I liked most that afterwards in a conference, everybody discussed the topic that how can we really reduce complexity?

Miriam:

Because the theory was that everyone believes that now that there is AI, it will reduce the complexity.

Miriam:

But in reality, if we look at all the last years, every new thing that came up to reduce complexity increased the speed, which again increased the complexity.

Miriam:

So that was the theory.

Miriam:

And I liked that a lot because if you talk to the people on a conference that was really resonating with a lot of people because they said, yeah, it got very complex and it even gets more complex.

Miriam:

And because it's getting faster, this means we're trying to reduce complexity by making things faster, which again introduces complexity.

Karol:

It's horrendous.

Miriam:

And that's what was troubling me because it was a good discussion on the conference as well.

Karol:

But this again touches Tesla's law, right?

Karol:

If we look at the problem domain, there is an inherent irreducible complexity.

Karol:

We cannot go around it.

Karol:

We need to address it.

Karol:

And then we go to UX, fully blown.

Karol:

And I love this book.

Karol:

So I'm just gonna throw in another lovely slide from my training deck.

Karol:

Complexity is not bad.

Karol:

It's confusion that's bad.

Karol:

So long live well-managed complexity.

Karol:

And this is Don Norman, the designer of Everyday Things.

Karol:

This has nothing to do with IT per se.

Karol:

It's about design principles.

Miriam:

Yes, I actually have that book.

Miriam:

I mean, I did my PhD in human computing.

Karol:

Obviously.

Miriam:

Don Norman is a very important person you need to know, right?

Karol:

Especially if you're doing front-end and you're doing UX, absolutely mandatory read.

Karol:

But it trickles down to everything.

Karol:

It's not only relevant for user experience.

Karol:

It's relevant for architecture.

Karol:

It's relevant for interoperability.

Karol:

We're here not to reduce complexity because the complexity is already, we know it's irreducible.

Karol:

We're about to manage complexity.

Karol:

So if we're looking at interoperability, if we do point to point at a scale of 100 domain systems in the corporate environment, that's adding complexity to the mix because that's not readable.

Karol:

That's spaghetti architecture.

Karol:

If we add an integration platform to the mix and streamline everything through an integration platform with proper abstraction layers, we're managing that complexity because we add monitoring and auditability to it and observability.

Karol:

We can actually understand what relates to what because we see those relationships through different elements that are in the platform.

Karol:

And by adding the abstraction layers, we can actually manage the change and manage dependencies better.

Karol:

So it's a very hard problem to explain because people still live in the notion that we can reduce complexity forever.

Karol:

It's a fairy tale.

Karol:

It doesn't exist.

Miriam:

We should, we just shifted around in the end, right?

Miriam:

That's what

Karol:

Yeah. It's a matter of who's going to take that complexity and solve it.

Miriam:

I also like Eric's statement.

Miriam:

He just wrote that maybe the problem is that application is still in the age of API.

Miriam:

I think this is a whole another thing.

Miriam:

Like, discuss with people the definition of what an API is and have fun, really.

Miriam:

I don't know if you did that already.

Miriam:

But- Several times.

Miriam:

We did that with clients and even if you are there for a long time, believe me, not everybody is on the same page.

Miriam:

What an API is, even if you discussed it 100 times before, it's always a good discussion if you want to like, you know.

Karol:

And companies that offer products around APIs, they don't help.

Karol:

And I'm pointing towards MuleSoft right now and the bullshit that marketing from MuleSoft pressed onto us and it's stick with people.

Karol:

They started naming whole integration applications APIs.

Karol:

No, they're not APIs, they're applications.

Karol:

They have APIs.

Karol:

It was just a nightmare every single time.

Karol:

It's like, no, it's not a system API.

Karol:

It's a system application representing a specific system with a standardised API that is a REST API, blah, blah, blah.

Karol:

And then people have the notion, oh, API is just a, it's REST. No.

Miriam:

No.

Miriam:

Exactly, that's one of the perceptions.

Karol:

Yeah, SOAP is an API.

Karol:

You can have an API implemented with JMS, no problem.

Karol:

You can have, JDBC is a protocol for an API of a database.

Karol:

My tongue is, my ears are an API, if you want to talk to me.

Karol:

If you consider me a programme, right?

Karol:

Or an application.

Karol:

It's difficult for people to comprehend that just throwing around acronyms like API doesn't contribute to anything.

Karol:

It's a very difficult aspect there.

Miriam:

Yeah, I have another good one, for example, SAP API management, the list where you can see the proxies, it says APIs.

Karol:

What?

Miriam:

Yeah.

Miriam:

Some people believe the proxy is the API, and I'm like, well, no, it's a proxy.

Miriam:

Because it really, it says APIs as the name of the top.

Miriam:

So in the UI, so people see these are the APIs, I mean, clearly, right?

Miriam:

No.

Miriam:

So, you know, you have to be careful what you name API because it's misused a lot, I agree, mainly in Python, but also by other people, so.

Karol:

If you put it this way, if we talk about API management, nothing on the API management layer, well, precisely API gateway layer, nearly nothing is an API.

Karol:

All of these are proxies.

Karol:

So, to be very, very rigid and specific, some of them may be APIs if there is actual logic involved and implementation over the API gateway.

Karol:

So for example, if the API gateway offers protocol mediation, you can consider that being an API because it has a specific function.

Karol:

But this is being very rigid.

Karol:

It's still a proxy.

Karol:

But this is where things get lost because we have so many different types of appliances, types of applications that do things technically, and everybody has their own marketing, nomenclature.

Karol:

Every part of the industry has its own jargon.

Karol:

Greatest example, a few streams back, we were talking about data mesh.

Karol:

Here in the studio, there were two data architects, and we really got lost in the lingo from time to time, and that created hilarious misunderstandings.

Karol:

We were talking about contracts, and I had a completely different notion of a contract than my guests in the live stream.

Karol:

It's completely different.

Karol:

If I look at a feedback from DDD Europe when I ran a workshop this year, we had a feedback that, oh, this was a missed opportunity because you didn't talk about data mesh when you were talking about interoperability.

Karol:

It's like, sorry, what?

Karol:

We were talking about ETL batch and ELT.

Karol:

That's basically the key of a broker architecture.

Karol:

That's the most common use case for a broker architecture.

Karol:

Again, lingo.

Karol:

It's not that we didn't talk about it.

Karol:

We did, but somebody didn't know the terms and words that are used by integration architects.

Karol:

They knew the words that were used by data architects, and if you say application integration to a data architect, they don't understand that this is data movement.

Karol:

That's a different term.

Miriam:

And they knew that.

Miriam:

Application integration and data integration, there we have the next topic on how to define it and what that means.

Miriam:

I think it's already too late to discuss this today.

Karol:

What I can do is drop an article because I literally wrote, one of my first articles is the differentiation between data integration and application integration.

Miriam:

But still, you need to explain it to a lot of people and still a lot of people don't get it, right?

Miriam:

The same with what is an API.

Miriam:

As I said, you can always start a discussion and see where it leads to, but you will see that if you usually start a discussion, people are not on the same page, no matter where you try it, right?

Miriam:

In any company, you can usually try.

Miriam:

And if you ask what is an API, people will disagree with each other.

Miriam:

If you're in a room with multiple people, it's pretty, you can be pretty sure.

Miriam:

And it's really interesting to watch and see.

Karol:

Yes.

Karol:

And from my perspective as an integration architect, this is the role of an architect, any architect, not only the integration architect, to sit down with those people and establish a common dictionary.

Miriam:

Yes.

Karol:

This is the most important part of the role when you come into a client and start working with clients.

Karol:

To just, first of all, learn their lingo and then check if everybody understands it the same way.

Karol:

Because 99% of the times, they don't.

Karol:

So it's a matter of going there, understanding, looking where the discrepancies are and start aligning people with one another, even using their own nomenclature, not using the actual proper terms.

Karol:

I don't care about the proper terms when I'm in a client.

Karol:

They can use their terms.

Karol:

As long as everybody understands those terms the same way, I can make myself a translation table and I'll be fine.

Miriam:

Yeah, in our last project, the first thing we did was a glossary because everybody was talking about things and nobody was talking about the same thing.

Miriam:

So it was like, well, we need a glossary.

Miriam:

So, oh, depressing.

Miriam:

What's depressing?

Miriam:

Hopefully not our conversation.

Karol:

Rather the problems we're discussing that people are facing or us as architects are facing.

Miriam:

I guess to sum it up, I think that's also a good point to sum it up.

Miriam:

I think my perception is most people think APIs are easy and in reality, they're not.

Karol:

No, they're absolutely not.

Karol:

There's a lot more to it.

Karol:

There are various angles we can take.

Karol:

The answer is always, it depends.

Miriam:

Yes, the consultant answer, the typical consultant answer, right?

Miriam:

It depends.

Karol:

Yes, it depends, but it's about explaining, depends on what and what we want to achieve and having that honest conversation, cross layers from the business to implementation.

Karol:

What do we want to achieve?

Miriam:

And then pick the- Why are we doing this?

Karol:

Why?

Karol:

Yes, to have the rationale, to have the why.

Karol:

And then from that, we pick the tools that are suited for the job, not just implement an API.

Karol:

We implement that with intent.

Miriam:

Why, what, and who is involved?

Miriam:

These are the most important things to figure out.

Karol:

Pretty much.

Karol:

All right, to end it off, a few announcements before we switch off completely.

Karol:

So for those who still are with us, hopefully a few people, this time around, it's very interesting that we have another live stream so close by because it's literally in two days and it's going to be a very special edition.

Karol:

You'll learn why when you join on Saturday.

Karol:

I'm going to be having Mark Richards on the live stream and we're going to be talking about the human condition, the problems, exactly what we're just ended on a note here, the different problems that architects need to navigate from the human perspective, not from the technical perspective, not from architecture.

Karol:

We're not going to jump into microservice sagas.

Karol:

We're going to talk about the human condition.

Karol:

So on Saturday, 8 p.m. Central European summertime, Mark Richards and I, we're going to have a nice conversation.

Karol:

And if you're new to the stream, you can scan any of those QR codes, go to bridgingthegap.com, which is the open source site where I, with my colleagues from Bridging the Gap, write articles about enterprise application integration and integration architecture.

Karol:

You can subscribe to Substack, although I neglected that one a little bit recently, so I need to get back to it.

Karol:

And of course, subscribe to the YouTube channel to get notified about the upcoming streams.

Karol:

All the streams are scheduled both on LinkedIn as events and on YouTube.

Karol:

So if you want to be notified about these, just hit subscribe.

Karol:

And I think that's the bell icon somewhere there to get the notifications or something like that.

Karol:

Not really that well-versed in YouTube, to be honest.

Karol:

So that's it for the record.

Karol:

Thank you, Daniel, for joining.

Karol:

Hope you're having fun with your kids.

Miriam:

And- I hope they're already sleeping.

Karol:

Hopefully, right?

Karol:

Yeah.

Miriam:

Let's hope for it.

Karol:

Let's hope for it.

Karol:

I guess sometimes it takes time.

Karol:

I mean, I spent often more than two hours trying to put them to sleep and- That's why you say, let's hope.

Karol:

Let's hope, let's hope.

Karol:

Let's hope that Daniel has a peaceful end of the day with the kids sleeping.

Karol:

And Mirjam, thank you so much for joining and having this discussion.

Karol:

It was amazing to go through data interface quadrants.

Karol:

It's an interesting way of explaining APIs.

Karol:

And I think this would be very useful for every consultant to learn if they do any type of interoperability to be able to have that conversation with their clients just to align and put things into perspective so that we avoid those crazy wonky definitions of APIs that could be disastrous later on.

Karol:

Thank you everybody for joining.