Loosely Coupled - Collaborative Modelling and API definitions in the age of AI
Karol:
Good morning, good afternoon, and good evening, everybody.
Karol:
I hope you have a nice cup of something to drink or a glass or whatever.
Karol:
I have a whole jug for me of coffee.
Karol:
And I welcome you to another episode of Loosely Coupled by Bridging the Gap.
Karol:
My name is Karol Skrzymowski, and I'll be your host tonight.
Karol:
And today, today we're taking a little bit of a different approach.
Karol:
We're still going to be having a very nice conversation, but this conversation will be very much hands-on.
Karol:
So we'll be basically doing some work after work.
Karol:
Well, I had a whole day of writing documentations and whatnot, and now I'm going to be now collaboratively modelling.
Karol:
Okay, a bit tiring, but let's see where that gets us.
Karol:
I suppose this part is going to be actually fun instead of being work.
Karol:
So, without further ado, joining me today in our studio is Annagret Junker, Dr. Annagret Junker from CodeCentric AG in Germany.
Karol:
Welcome, Annagret.
Annagret:
Thank you for being here.
Annagret:
Thank you for the invitation, Karol.
Karol:
Well, I'm happy that you could make it.
Karol:
Annagret, tell us a little bit about what you do, what's your background, and yeah.
Annagret:
Yeah, I hold a PhD.
Annagret:
I'm really proud of.
Annagret:
As an electro-engineer, long time ago, but because I did software my whole life, I'm more a soft worker than some kind of an electro-engineer.
Annagret:
I do architecture, and I'm really passionate about software architecture and all its slightly different aspects.
Annagret:
Usually, I come from the enterprise level and then to the solution level, but I even discuss about certain infrastructures, etcétera, etcétera.
Annagret:
I'm not so interested indeed in certain network technologies and those things and topologies, but I'm really interested in how to tailor a software so that it really works, technically, socially, etcétera.
Karol:
So from a high-level perspective down rather than from bottom up.
Annagret:
Exactly, exactly, exactly.
Karol:
Yeah, I think this is a very common thing for enterprise architects looking from top down and into the details rather than from technology, infrastructure, and networks because that's very, very detailed.
Karol:
I don't remember when was the last time I actually did something with networks and infrastructure other than say, I need a Kubernetes cluster or OpenShift cluster or something like this.
Annagret:
Yeah, these days, there's so much automation and those things that you even don't know what really happens behind.
Annagret:
There's that add character behind, yeah, and so forth.
Karol:
Well, yeah, that's true.
Karol:
We can automate literally everything other than human beings.
Annagret:
Yeah, exactly, exactly.
Karol:
And even sometimes it seems like some of us are quite automatic.
Annagret:
Yeah, I mean, but it's great.
Annagret:
I mean, you see, I'm not as young as I used to be.
Annagret:
I really started writing assembler code.
Annagret:
And I knew every registr by heart and which ones and O's were in there.
Annagret:
And MIMA is so, so much better because you really can express functionality almost in a natural language.
Karol:
Right.
Karol:
You know, we actually share educational background because I'm a bachelor in electrical engineering.
Karol:
So my background from university is also logic gates, assembler, PLC, all that lovely stuff.
Karol:
And the common joke was that, well, we as electrical engineers, we're not scared of electricity.
Karol:
The electronics department is scared of everything more than 15 volts.
Karol:
We deal with one kilovolt quite often.
Karol:
So that's nothing.
Karol:
But, yeah, there is an interesting hop from electrical engineering to IT.
Karol:
This is actually a very interesting way to get into that from the machine perspective, from the logic gates perspective, assembler, where you actually have to very carefully think about what you're doing and why you're doing it.
Karol:
Otherwise, you'll run out of memory, run out of space.
Karol:
It's a, I would say, an amazing mindset if you also adapt the typical engineering, lazy engineering mindset to automate everything and make it as simple as possible.
Annagret:
Yeah.
Annagret:
In the end, it's software engineering, isn't it?
Annagret:
So engineering principles are not too different in the end.
Karol:
Yes, but I would also argue, as Barry O'Reilly does argue, that IT as a discipline as a whole is a lot younger than the majority of scientific disciplines.
Karol:
And at certain times, we still have a lot to learn to be a proper engineering discipline, because we went a little bit too far into art form rather than actual scientific science based engineering.
Annagret:
Well, I completely agree to us and probably will show that it's not so much engineering.
Annagret:
I'm an engineer by heart.
Annagret:
I'm really an engineer.
Karol:
Yes.
Annagret:
But I think it's insofar art, because with each software system we do, we do some kind totally new, which was not there before.
Annagret:
We don't, as we repeat ourselves, of course, often enough.
Annagret:
But in the end, there is a teeny thing which is different and the teeny thing makes a new system.
Annagret:
And I think to have the idea, what can I do that I fulfil the requirements that I can do really that new thing that is art.
Karol:
Yeah, there is a little bit of art of it.
Karol:
I would argue that we're constantly recreating stuff.
Karol:
Sometimes reinventing the wheel.
Karol:
And you could have solved that already if you knew.
Karol:
Other times we're actually building on top of the old things and making something a new, better, more performant, more whatever the requirement would be.
Annagret:
I mean, the problem is that we have a long way to go from the real requirement, from the very first idea up to the real code.
Annagret:
And doing that way to recognise that the problem at hand is already solved is really difficult because you have to search a lot.
Annagret:
And you have to think, is it really the same problem or is it not a completely different problem, etcétera.
Annagret:
And when you have said, and I think as long when you do so much research and I have programmed it by myself.
Annagret:
Yeah.
Annagret:
And therefore, and here is, by the way, something where I think where our LLMs really can help.
Karol:
Okay.
Annagret:
Yeah, because they are fed with already solved problems.
Karol:
Okay.
Annagret:
And they can give you a reasonable solution to your problem.
Annagret:
But they do all this, of course, but sometimes it's reasonable, sometimes even not.
Annagret:
Then you can use it.
Annagret:
Yeah.
Annagret:
But when you have a really new problems and the LLM can't solve it for you, then you have to think by yourself.
Karol:
That's true.
Karol:
There's a lot of problems we don't have to solve because they're already solved.
Karol:
It's just a lookup.
Karol:
Other problems we have to actually think and solve for ourselves.
Karol:
I think a lot of that solving is on the structural level of architecture.
Karol:
Right.
Karol:
Because this is very contextual.
Karol:
Logically, if you look at functional requirements, a lot of them are already solved.
Karol:
There's a lot of them that are not really new.
Karol:
They're just repetitive for a lot of companies, a lot of businesses.
Annagret:
Definitely.
Annagret:
But you don't know and you even don't get touch of that knowledge.
Annagret:
Therefore, you have to reinvent it somehow.
Annagret:
And then you have always a teeny bit which is different.
Karol:
Always.
Annagret:
I'm really convinced that we can't solve problems in a generic way.
Annagret:
It's simply too expensive.
Karol:
I totally agree in that because if we could, everybody would be using Salesforce, SAP, Microsoft Dynamics, etc.
Karol:
without any changes.
Karol:
We wouldn't need specialists in customising these platforms because all of the problems would have been solved already.
Annagret:
Luckily, it's not like that.
Annagret:
So we can live on it.
Karol:
Yes.
Karol:
That's our bread and butter to take those platforms and do the magic that is required for each business in the context of the service.
Karol:
That said, today we're going to be chatting about modelling, collaborative modelling, precisely.
Karol:
Modelling is one thing.
Karol:
You can just be a business analyst or architect, sit down and start modelling.
Karol:
Take a viso, enterprise architect, whatever other tool, or just a piece of paper and start modelling.
Karol:
But collaborative modelling is a tiny bit different.
Karol:
So would you mind telling us what are we going to do today?
Annagret:
First, let me define what is a model.
Annagret:
Because I think it's quite interesting what models we have and when you think about what is a model.
Annagret:
A model doesn't live to represent reality as precise as possible.
Annagret:
A model lives so that you can leave out things.
Annagret:
And it needs intelligence to leave out things.
Annagret:
We have the atom model from Bohr.
Annagret:
He left out things intentionally and it works quite well.
Annagret:
We have Schrodinger's equation.
Annagret:
By the way, I love Schrodinger's equation and I still am able to solve them for certain things.
Annagret:
And it's pure math.
Annagret:
It's wonderful math.
Annagret:
And then we have our typical boxes and errors where we describe our software systems.
Annagret:
And we leave out things as well there because we don't know.
Annagret:
Probably when I only want to describe the logical architecture of some things and I leave out API gates, firewalls, etc.
Annagret:
And I want to do more of the network topology, of course.
Annagret:
And I need all those gateways and things which are necessary to run a successful and secure network.
Annagret:
And the bridge behind you, all those nice bridges.
Annagret:
When you draw them, of course, those drawings are just models.
Annagret:
And when I put in 3D things on a 2D surface, of course, it's a model.
Annagret:
And now we need to ask ourselves.
Annagret:
One has an idea and the other one has to bring that idea to reality.
Annagret:
I have the business expert and I have the IT specialist.
Annagret:
And usually both don't speak the same language.
Karol:
That's true.
Karol:
So I would just pitch in a summary, just a quick summary of what the model is.
Karol:
And I think this quote from George E.P. Box sums it up very nicely.
Karol:
All models are wrong, but some are useful.
Annagret:
Exactly.
Annagret:
One of my favourites.
Karol:
It's a universal truth about modelling.
Karol:
And this, I think, also ties down to the psychology of humans in essence.
Karol:
Because our brains simplify things so we can comprehend them.
Karol:
So our brains live on models.
Karol:
And those models are wrong because we cannot know everything because that's impossible.
Karol:
But for us to cope with reality, it's essential to have those models.
Annagret:
And we don't need to be totally precise or 100% true.
Annagret:
It's not necessary.
Karol:
We need to be precise only as much as we need to solve the current problem that we're facing.
Annagret:
Exactly.
Annagret:
And the current problem we are facing is that business experts and IT specialists don't speak the same language and don't understand each other.
Annagret:
And what we try with collaborative modelling techniques is that we come step by step from the business requirements to the IT solutions, but with both on the same level.
Annagret:
It's always something business experts and IT specialists are doing together.
Annagret:
Because they need to find their common language.
Annagret:
And during the whole process, they are able to find their common language.
Annagret:
And then in the end, even the business expert understood what the IT guys are doing and the IT guys understand what the business experts are talking about.
Karol:
So this is the essence of collaborative modelling then?
Annagret:
My point of view, yes.
Karol:
So where does collaborative modelling come from, you would argue?
Karol:
What's the origin?
Annagret:
Oh, I don't know.
Annagret:
Interesting question.
Annagret:
My point of view is that you have five guys in a room with 20 opinions and in the end they need to come out with one.
Karol:
The common joke?
Annagret:
The thing is that software development is people business and people have to work together.
Annagret:
And my point of view is the origin of collaborative modelling because you have to work together.
Karol:
Fair enough.
Karol:
My usual joke is if you have four architects in the room, you'll have five different opinions.
Annagret:
Sometimes it's more, definitely.
Annagret:
I think we have our architects need to be multiple personalities.
Karol:
Multiple personalities, disorder would be useful.
Annagret:
Sometimes it should be useful as an architect, I think.
Karol:
Oh, okay.
Karol:
So that said, let's set the stage.
Karol:
What are we going to be doing today in terms of collaborative modelling?
Annagret:
My idea was that both of us want to establish a rental bike shop where people can rent a bike.
Karol:
Okay.
Annagret:
And first we need to set up a little bit of the business meetings and we have some kind of a canvas.
Annagret:
We do it collaboratively together because the two of us need to come to one opinion.
Annagret:
And then we need to create something where we can collect together the business requirements and we use a visual modelling for it.
Annagret:
It's called domain storytelling.
Annagret:
And then we need to find somehow how our software environment, our software landscape should look like.
Annagret:
Which services we need, etcétera, etcétera.
Annagret:
And we use event storming for it.
Annagret:
And in the end, we have the AI and the AI can generate the APIs.
Annagret:
More or less.
Karol:
Sounds about great.
Karol:
And how are we going to do this today?
Karol:
So introduce us to the process.
Annagret:
I have prepared something, obviously.
Annagret:
I have here a nice micro board.
Annagret:
So let me share the screen.
Annagret:
I hope it works.
Annagret:
So you should be able to see my screen.
Karol:
There we go.
Annagret:
And here is a nice...
Annagret:
Here is a nice advertising for our rental shop.
Annagret:
And we already have discussed how the business should look like.
Annagret:
And the business should look like we can do it with a so-called business model canvas.
Annagret:
It was introduced in the early 2000s by Strategizer.
Annagret:
And what you collect here are your key partners and your key customer segments.
Annagret:
Can you read that?
Annagret:
As customer segments, we have commuters and tourists.
Karol:
Before you jump in, a few things.
Karol:
So if you're following us live, this is the mirror board.
Karol:
You can scan the QR, get in there, follow us live and follow Annegret as she talks about this.
Karol:
I'm going to paste this on YouTube as well.
Karol:
Right now, I'm going to drop it in the comments in LinkedIn.
Karol:
So if you would like to follow us, just use the link, pop into Miro.
Karol:
Everybody has a viewer and I believe commenter rights, yes?
Karol:
And that way you can actually probably follow a lot easier if you just follow Annegret's cursor.
Karol:
And that way we can make it a little bit more precise and easier for everybody, I suppose.
Annagret:
Thank you very much, Karol.
Annagret:
I've already hopped into it.
Annagret:
When you are on the mirror board following the link and you click on these, then you can see in the same zoom as me where I am and following my cursor.
Annagret:
What I said, we have as customers, we have here commuters and tourists who want to ride a bike.
Annagret:
And we have some kind of partners, the public transport and hotels.
Annagret:
And then we have your key resources with bicycle and riders.
Annagret:
And as usual in English, we even have resources as people, the mechanics who take care of our bicycles.
Annagret:
And what we promise our customers is that we have bikes easy to book, easy to pick up, easy to return.
Annagret:
And we hope that the tourists, okay, they are only occasional rent-a-bike, so the prices must be a little bit higher.
Annagret:
But commuters use the bike regularly, probably twice a week otherwise the other days of a week they are at home.
Annagret:
And so whole things can be done via app.
Annagret:
And then we have your one-time fees and flat rates, which are paid by the customer so we can get a little bit money out of it.
Annagret:
We need to have a living.
Annagret:
And what we have for costs are the bicycles, the racks, there's a bicycle steward, the mechanics of course want to pay as well and the app needs to be developed and maintained as well.
Annagret:
And here, what I really like with such a business model canvas, as I said, I'm an electrical engineer.
Annagret:
I'm not a marketing thingy or economist or something like that.
Annagret:
It's easy to understand.
Annagret:
You have everything on one page.
Annagret:
You don't need to read those 30 pages of business models or business programmes with lots of sheets and Excel, etcétera.
Annagret:
Here you see everything which is needed.
Annagret:
And that is what I really like because you get really the focus of the business.
Annagret:
When you do it together, this business expert, you really get an idea of what they are talking about.
Annagret:
And now we know that is our business.
Annagret:
So you know what to do.
Annagret:
You are now my business expert.
Annagret:
And now I need to get out from you what you want as a commuter from the bicycle shop.
Annagret:
So you have the role of a commuter and you need to tell me what you do as a commuter when you want to rent a bike.
Annagret:
And that we can do by domain storytelling.
Karol:
Okay.
Annagret:
Domain storytelling is indeed a collaborative methodology to gather business requirements.
Annagret:
And the trick here is that the business expert tells his story really as a story.
Annagret:
The story has a beginning and has an end and has some kind of a climax in the middle.
Annagret:
And you tell me the story and I, as a moderator, draw literally the story for you.
Annagret:
And because I use a completely different language, you use natural language and I use a visual language, this visual language you can see if I understood you completely correctly or if I misunderstood you.
Karol:
Okay.
Karol:
For everybody watching, I want to make a disclaimer.
Karol:
I did peek into this board before the stream.
Karol:
I have no idea because I didn't read through any of those diagrams, just to be clear.
Karol:
So I have no idea what Annegret has here for me stored.
Karol:
So as a business specialist, I'm completely, let's say, unprepared.
Karol:
But let's make it my best.
Karol:
I do ride a bicycle.
Karol:
I did maintain the bicycle.
Karol:
I did rent the bicycle.
Karol:
So that shouldn't be that difficult of a case this time around.
Annagret:
It was my intention that I have no preparation with you, since it's really lively.
Annagret:
Let us try if it works.
Annagret:
Now let's...
Annagret:
And you know how to tell stories because you have two small kids, so you know how to tell a fairytale in the evening.
Annagret:
And now I'm your kid and you need to tell your fairytale to me.
Annagret:
So imagine you are a commuter.
Annagret:
And two times a week or so you need to go to the office.
Annagret:
But from your home to the public transport station you can't walk.
Annagret:
You want to go by bicycle.
Annagret:
But it's too expensive for you to buy a bicycle because you do it only two times a week.
Annagret:
And therefore you want to rent a bicycle.
Annagret:
So have that picture in mind what you are doing when you have a normal work day and you want to go to the office.
Annagret:
What you are doing.
Karol:
Well, given that I live in the Netherlands, there is more bikes here than people.
Karol:
That's a normal thing.
Karol:
But yes, okay.
Karol:
So my commute scenario is that I basically have a bus stop next to my home but that's true that I don't have my office next to where I get off my bus.
Karol:
So this is where I would either get into a different bus or a train or ride a bike.
Karol:
And yes, given that I go to the office once a week it's not feasible for me to drag that bike anywhere there and leave it somewhere in the city where I can actually rent a bike.
Karol:
So yes, where to begin from that sense?
Annagret:
My imagination was that you as a commuter are at home and now take the bus to drive to the bus station.
Annagret:
At the bus station you rent a bike which you have booked before you left the bus.
Annagret:
And then you can drive to the office.
Karol:
Okay.
Karol:
Completely not a scenario that would happen in the Netherlands in that sense because there are public transport bikes.
Karol:
But let's assume that there is a company...
Annagret:
I'm from Germany so we have not so much bikes.
Karol:
Yeah, you don't have that much of a bike infrastructure there.
Annagret:
Let's assume we want to set up our...
Karol:
All right.
Karol:
But let's assume that we don't have those publicly available bikes to rent from the stalls.
Karol:
Yes.
Karol:
Okay.
Karol:
Yeah.
Karol:
So I basically would be probably on the bus with my phone in my hand.
Karol:
And I was like, okay, I'm getting close to Utrecht.
Karol:
So I need to check which bike place, bike stall has bicycles available and then lock one for myself.
Karol:
Right.
Karol:
So go to the app and check availability on the local bike stalls.
Karol:
And if there's a bicycle available, I would probably reserve it.
Annagret:
What you see now on the screen is that I try, as I said before, I try to draw the story you tell me.
Annagret:
Uh-huh.
Annagret:
So and what you can see here is that I really draw it sentence by sentence.
Karol:
Uh-huh.
Annagret:
And the sentence is created from an actor.
Annagret:
As in our example, it's a commuter.
Annagret:
And first, as you said, he logs in into the bike app.
Annagret:
Uh-huh.
Annagret:
And searches for a bike.
Annagret:
So that's what you told me.
Annagret:
And I can hear, and you see here, I really can read those sentences.
Annagret:
Yeah, commuter searches for a bike.
Karol:
And you even added a bearded actor.
Annagret:
Yeah, it was intentional.
Karol:
Uh-huh.
Karol:
That's nice.
Karol:
Okay.
Karol:
So yes, so I would search for a bike.
Karol:
And then if a bike is available in one of the racks, bike racks, near the train station that I get off to, then I would reserve it.
Karol:
And then after I get off the bus, I would pick it up.
Annagret:
So wait a moment.
Annagret:
So you can reserve it.
Annagret:
Uh-huh.
Annagret:
It's a rack.
Karol:
Uh-huh.
Annagret:
And then, and as you can see, it's even an electric bike here.
Annagret:
So you don't have to do much work before you go to work.
Karol:
Yeah, they don't want to arrive in a sweaty shirt, you know.
Karol:
That's a good thing.
Annagret:
A question from my side.
Karol:
Uh-huh.
Annagret:
When you have, you said you reserve the bike.
Annagret:
Uh-huh.
Annagret:
And I said you book the bike.
Annagret:
What do you think, which word would be better?
Annagret:
Reserves or books?
Karol:
I would say reservation is a better word.
Karol:
Because booking is, like, if I put it from a language perspective, how we use the word to book something, it's usually associated with booking a room, booking hotels.
Karol:
So this is more of a permanent action.
Karol:
And in booking, you also have a reservation before you book.
Karol:
But booking is, you already pay for it.
Karol:
So that implies paying.
Karol:
Here, I wouldn't pay.
Karol:
I would reserve the bike.
Karol:
And then when I pick it up and when I probably leave it, I would pay for it, for the actual time I use it.
Karol:
So that would be, that's why I would say reserve is probably better as a word.
Annagret:
Okay.
Annagret:
Beforehand, I go back here to our model canvas.
Karol:
Uh-huh.
Annagret:
We said that the commuters usually pay a flat rate.
Annagret:
Uh-huh.
Annagret:
For a month or something like that.
Annagret:
But even then, it would be better to write reserves because you don't pay for a single ride.
Annagret:
You pay a flat rate.
Annagret:
And then you reserve the bike and not book it.
Karol:
That would mean that we probably then have another revenue stream, which is pay-per-use.
Annagret:
Exactly.
Annagret:
And that is what it's really, I like it, what really happens quite often when you now go more into the deeper side.
Annagret:
Uh-huh.
Karol:
Uh-huh.
Annagret:
That we have here a pay-for-use, even for...
Karol:
Yeah.
Karol:
You know, that is actually a model that used to, I don't know if it's still there, but it used to work in Poland.
Karol:
Oh.
Karol:
I think we lost Annegret.
Karol:
Not sure if it's on my side or...
Karol:
No, it's Annegret's side, unfortunately.
Karol:
So, yeah, there we go.
Karol:
Annegret is back.
Karol:
Hello, hello, you're back.
Karol:
Yes, we lost you for a second.
Karol:
We lost you for a second there.
Karol:
All right.
Karol:
I think you're still...
Karol:
Yes, you're still screen sharing, so there we go.
Karol:
Glad you have your back.
Karol:
Glad that it was just a hiccup.
Annagret:
Yeah, it was some kind...
Annagret:
But I really like here.
Annagret:
We see we need an additional revenue stream, which is, in the end, even an additional requirement.
Annagret:
And we discuss words.
Karol:
Uh-huh.
Annagret:
And because we discuss words and decide for a certain word, we understand better what is meant.
Annagret:
Reserve, books, etcétera.
Karol:
Yeah.
Karol:
And I took it just from the model that was...
Karol:
The way it worked in Poland, because I used to actually rent bikes in Warsaw when I was living in Warsaw.
Karol:
There were plenty of publicly available bike stations with a, well, some sort of a booth where you could click through and get a bike that was currently locked in.
Karol:
And the lock just opened when you paid.
Karol:
If you had an app, had some sort of a flat rate, that was different.
Karol:
But usually you just paid as you went.
Karol:
And I'm very much used to that.
Karol:
And because my usage is random, and once a week, let's say, then this wouldn't make sense for me to pay a flat rate.
Annagret:
Mm-hmm.
Annagret:
Yeah, exactly, exactly.
Annagret:
So, and now we have...
Annagret:
So, you have to reserve the bike.
Karol:
Yes.
Annagret:
At a certain rate.
Karol:
Uh-huh.
Annagret:
So, and then we have here the system.
Annagret:
And the system then sends you some kind of...
Annagret:
Oh, I need a nicer icon for it.
Annagret:
Sends you some kind of a code.
Karol:
Mm-hmm.
Annagret:
Yeah, no?
Karol:
As in a reservation code or something like that?
Annagret:
After the reservation, sends a code to your app.
Annagret:
Mm-hmm.
Annagret:
So, and when you then are at the train station, Mm-hmm.
Annagret:
or wherever you leave the whole public transport, you can unlock the bike, and then you can ride the bike, right?
Karol:
Right.
Annagret:
So, and what you see here, it's really a story in the sense of a story, and it's really drawn somehow, yeah?
Karol:
Yes, very much so.
Annagret:
So, and because I draw as a story, the business expert can really see if I understood him correctly or not, because it's a completely different language I use here, yeah?
Annagret:
Okay, now...
Annagret:
I listen to a natural language.
Karol:
Yeah, now the question would be, in this kind of modelling, how would you approach variations?
Karol:
Because we already identified the different revenue stream, that basically somebody would act differently, right?
Karol:
Is this like use case per use case modelling, or we can actually build variations on the same model?
Annagret:
It depends.
Annagret:
Good answer, right?
Karol:
Only always.
Annagret:
To be honest, such a story should not contain more than 12 to 15 sentences, because otherwise you can't read them anymore.
Karol:
Okay, fair enough.
Annagret:
It's always a good idea to model different user groups in different stories.
Annagret:
As we add here, we have the commuters and we have the tourists, which are completely different requirements, usually.
Karol:
Okay, yes, fair enough.
Annagret:
Usually, in my experience, I did those workshops a lot of times, you have a lot of business experts, and the business experts are mostly like architects, each has his own opinion and sometimes multiple opinions.
Karol:
Yes.
Annagret:
But really, when they see how those stories appear, they come together to a common understanding.
Annagret:
It's really the dynamic in the workshop which makes those things so valuable.
Annagret:
As you can't prepare it, you need to be seen to start with a white canvas and see what happens.
Annagret:
As I did this evening.
Annagret:
And you see, even if you were not prepared, even so, we could draw a story.
Karol:
Yes.
Karol:
And now imagine if you take an unprepared, let's say, product owner or a business owner or a director or anyhow, we assume that they do know and understand their business on a certain level of abstraction, which basically means that they will be able to model this way.
Karol:
Because they'll be just telling you about their business.
Annagret:
Exactly.
Annagret:
And because you need to draw, you need to listen.
Annagret:
Listen quite carefully.
Annagret:
And then you get really a common picture for both of us, for both of them.
Annagret:
You asked me about variations.
Annagret:
What you usually don't do is that you model error paths.
Annagret:
You only model the happy path in that situation.
Annagret:
What can you do is that you use it as a threat modelling.
Annagret:
Because here you can say, okay, probably the rack could be hacked by gangsters.
Annagret:
And steal all the bicycles.
Annagret:
And that you can see here, you can model it a little bit.
Annagret:
But usually you don't only do the happy path and do variations only by user groups.
Annagret:
When you have different business experts, you need two or three of them telling the same story.
Annagret:
And then you have really a good and valuable and strong story for your business.
Karol:
Okay, this reminds me about a technique I learned.
Karol:
That was this and the previous Monday.
Karol:
And I'm going to struggle finding it in the book because that's business analysis.
Karol:
And of course, I'm not yet familiar enough with the book.
Karol:
So even the name doesn't pop up in my head.
Karol:
But basically, oh, that was BAM.
Karol:
Business activity model.
Annagret:
Yeah, it goes in that direction, definitely.
Karol:
It resembles the business activity model because these are the steps that are...
Annagret:
Exactly.
Karol:
Business activity model is something a little bit different because it's planning, then enablement, then doing something.
Karol:
So the actual business thing that we're doing and then monitoring and then corrections.
Karol:
But this is a little bit in that direction as well.
Annagret:
It goes in the direction because you have the actors, you have the activities, you have the objects.
Annagret:
You have work items which the actors are doing.
Annagret:
I really like the icons.
Annagret:
And I can give those model everyone and everyone who is a little bit in the domain understands it.
Annagret:
And that is what I really like.
Annagret:
And of course, I prepared here a certain story I want to show you because it's not so much different from what you told me.
Karol:
Just to comment on this, what we're doing right now with the main storytelling is nothing related to IT per se.
Karol:
It's understanding the business.
Karol:
It's building our understanding of the problem domain we're going to be tackling from perspective of an IT system.
Annagret:
Exactly. I mean
Annagret:
Let me come to our example.
Annagret:
Let me show you what I prepared.
Annagret:
Here's a mechanic brings a bicycle to the rack and the community registered in the app pays a monthly fee.
Annagret:
Here it's a nice computer.
Annagret:
He pays a monthly fee via the app, searches for a bicycle at the public transport station, then books the bicycle.
Annagret:
Here I use books, for example, via the app, gets the code, unlocks the bicycle, gets the code at the rack, and then the commuter drives home with a bicycle and then returns the bicycle at the rack near his home and confirms the return via code.
Karol:
Okay.
Annagret:
When you see here the first image, it's not so different from what you told.
Annagret:
But you can see here, and I want to stop you with your problem domain, what you really can do even here is that you see here we have different roles and different work items.
Annagret:
And when you have a step inside of the work items or in a changed role, then usually it's a hint that there are different business contexts.
Annagret:
And then we are already in the solution domain.
Annagret:
For not so complex problems, you really can do and define the business context even with the domain storytelling.
Annagret:
You don't need to go in the events domain because it's a nice methodology as well.
Annagret:
But you don't need it for easy problems and when you have probably even an already existing system, then you can do it just out of the domain storytelling.
Annagret:
You can define your bounded context, as I did here.
Annagret:
Here we have the risk management, etcétera.
Annagret:
And then you can even define already your bounded context on your server landscape.
Karol:
Now I'll just comment one thing because you said we're already going to the solution.
Karol:
Just to make clear, the solution here is not meant as solution architecture.
Karol:
We're not dealing with an actual design of a system understood as IT system.
Karol:
We're solutioning for the problem.
Karol:
So we're still in the abstraction of a business problem and solutioning that business problem.
Karol:
To a large extent.
Karol:
That's still that high level of abstraction.
Annagret:
It's a high level of abstraction.
Annagret:
I completely miss you.
Annagret:
But when you go in the direction that a bounded context as a team is a service, then I already defined here my services.
Annagret:
On a very high level, completely agreed.
Annagret:
But I'm already in so far in the solution design because I already defined the service borders.
Karol:
Yes.
Karol:
As every word in our dictionaries when we work on different problems, it's going to be different because I try to explain to people what's the difference between architecture and solutioning.
Karol:
And that's always a bit of a conversation that we're having with different architects, especially those that are fresh out of a team lead, dev lead role.
Karol:
When I ask them to show me their architecture, they show me their solution.
Karol:
So it's not an architecture.
Karol:
It's an instantiation of an architecture.
Karol:
That's why I'm making that remark about the solution because it's, again, a different solution.
Karol:
We're logically solving the problem.
Karol:
We already have a logical dissemination of services, but it has nothing to do with implementation or technology underneath.
Annagret:
Definitely not.
Annagret:
It's about logical tailoring.
Karol:
Yes.
Karol:
That's the remark I'm making because we're not jumping yet to any implementation and we'll probably not be jumping to anything related to implementation here at all during this session.
Annagret:
Let's see.
Karol:
Let's see.
Karol:
Okay.
Karol:
You'll surprise us.
Annagret:
I mean, it's midnight, but probably we'll come to it.
Karol:
Let's not take it to midnight.
Annagret:
Another one of my most loved technologies is so-called visual glossary.
Annagret:
What you do here is that you took here, we have certain terms.
Annagret:
Here's a mechanic.
Annagret:
We have the bicycle.
Annagret:
We have the rack.
Annagret:
We have a fee, etcétera, etcétera.
Annagret:
Here we have, even without going into the details, a different story from a tourist.
Annagret:
With the tourists, we even have the hotel because there we don't have the rack.
Annagret:
We have the hotel.
Annagret:
All those terms you collect together and then you bring them, you explain them not by sentence.
Annagret:
You explain them by their relationship to each other.
Karol:
Okay.
Annagret:
When you see here, we have the hotel.
Annagret:
The hotel charges owe to undefined fees.
Annagret:
Yeah.
Karol:
That's very close to, well, basically a class diagram.
Annagret:
Exactly.
Annagret:
When you're used to draw domain models as class diagram, it's very close to it.
Annagret:
What I like first, I can do it quite nicely with sticky notes on Miro.
Annagret:
I do it definitely during workshops and discuss it with the business guys.
Annagret:
Then I can discuss all the terms with the business guys.
Karol:
Right.
Annagret:
Yeah.
Annagret:
When you are used to work in enterprise environment like me, then you have business guys who speak their native language as in Germany, it's quite usual that you have an enterprise environment.
Annagret:
You have German terms, but you don't want probably to have all those German terms in your code because you want to be a nationalised etcétera, etcétera.
Annagret:
Then you can do those things even in two languages.
Annagret:
Fee in German would be Gebühr, nice German word, even with a German umlaut.
Annagret:
Then you can do it even in two languages when needed.
Karol:
Yes.
Annagret:
What you do here, what you see here, I don't have those usual relationship of a class diagram with aggregate or composite.
Annagret:
Since I always have here strong verbs as a hotel charges fee, tourist pays fee, hotel, stores, bicycle, etcétera.
Annagret:
Because I use those strong verbs, the whole diagram is more expressive than a simple class diagram.
Karol:
Right.
Karol:
Because the class diagram doesn't have those verbs on the transition between classes.
Annagret:
Of course, you can do it with just a relationship arrow.
Annagret:
I mean, yeah.
Annagret:
Because we use not so strange arrow forms like we know them from our nice UML diagrams.
Karol:
Yes.
Annagret:
The business guys understands even that diagram.
Karol:
Yeah.
Karol:
Otherwise, it would be very confusing for a lot of people and that would be problematic.
Annagret:
As a visual glossary, it's not so confusing.
Karol:
No.
Karol:
But if we would start using UML notation in this kind of a diagram, it would be very, very problematic for a lot of people.
Annagret:
Therefore, I really like a visual glossary because it's really expressive.
Annagret:
And you can draw it with everything.
Annagret:
You can draw it with Draw.io, with Miro as I did here or whatever.
Karol:
Or just whiteboard it.
Annagret:
And just a whiteboard.
Annagret:
And it really helps the understanding.
Annagret:
And to be honest, I really use it almost every day in discussion.
Annagret:
When I feel something goes wrong in a discussion, then I open a whiteboard and say, let us define our terms.
Annagret:
And not with words.
Annagret:
Just with relationships to each other.
Annagret:
And it really is a strong method.
Annagret:
Unfortunately, there is only one book that explains and that book is only in German from Stefan Zörner.
Annagret:
But for me, it's one of the most powerful techniques we have.
Annagret:
And you can do it collaboratively.
Annagret:
You collect collaboratively all the terms and then you put what is really the relationship to each other.
Karol:
Right.
Karol:
I'll try to remember to post all the links to all the relevant books.
Karol:
Sometime later in the description.
Karol:
But if I can, I'll post them as well as soon as I have the links.
Karol:
I just need to put them as QR codes.
Karol:
So you'll be seeing those QR codes soon enough on screen.
Karol:
All right.
Karol:
What next?
Annagret:
What next?
Annagret:
Now, let us assume we have all our business requirements we collect together.
Annagret:
And I showed you that even at that stage, you can define some kind of logical structure of your services.
Annagret:
But you are not sure and you even don't know really which data need to be exchanged between the services.
Annagret:
And therefore, we can do an event storming.
Annagret:
Event storming, probably the one or the other had already heard of it.
Annagret:
It's quite common in the area of software development.
Annagret:
What you do here is that we do a so-called overview event storming to find our bounded context.
Annagret:
And we collect first all the events in our story.
Annagret:
We have already our domain story.
Annagret:
And then we collect the event happening there.
Annagret:
So probably, let me show you.
Annagret:
And the events are already orange.
Annagret:
So which event you would see in our story or in the story you told me?
Karol:
Let's see.
Karol:
Well, one event on beginning my commute.
Annagret:
Yeah.
Annagret:
So an event is already something with an object.
Annagret:
Here we have the commute.
Annagret:
And then a verb in the past, started.
Annagret:
And what you do in the event storming, therefore it's called storming.
Annagret:
You have that storming phase.
Annagret:
And everyone in the room is collecting those events.
Annagret:
It's really nice when you do it with really physical sticky notes.
Annagret:
But you can do it on a Miro board as well.
Annagret:
And it's not as dynamic.
Karol:
True.
Annagret:
But you can do it on a whiteboard as well.
Annagret:
And then everyone is collecting those events for her or himself.
Annagret:
And it's an idea of the brainstorming technique developed in the 60s last century.
Annagret:
Where you first create quantities and then out of the quantities you get the quality.
Karol:
Okay.
Karol:
Just for people to get an idea of how extensive event storming is, here's a picture of a wall.
Karol:
After event storming.
Karol:
This is the full event storming of some sort of a situation.
Karol:
I just took it from Google.
Karol:
But basically if you run event storming sessions in a room, you need quite a few metres of a wall.
Karol:
Lots of whiteboards or lots of paper or lots of glass panes to be able to do that.
Karol:
Because we're now dealing with a very simple exercise.
Karol:
So our event storming will be very short.
Karol:
But in general, most event stormings are very detailed and very long.
Karol:
Because business processes are far more complex than what we're modelling today.
Annagret:
Far more.
Annagret:
There are even more simple examples.
Karol:
Of course.
Annagret:
We have here the commute started.
Annagret:
What other events did you come up with?
Karol:
Let's see.
Karol:
Commute started.
Karol:
I'm back at the main storytelling right now on my screen.
Karol:
I would say probably user, as a commuter, I'm logged into the app.
Karol:
So, yes.
Annagret:
I thought logged in.
Karol:
Logged in.
Karol:
Yeah, I suppose.
Karol:
Commuter logged in.
Karol:
Yeah.
Karol:
Then possibly bicycles found.
Karol:
Bikes found.
Karol:
Then bike chosen.
Karol:
And bike reserved.
Annagret:
Is there really a difference between bike chosen and bike reserved?
Karol:
In this case, probably not.
Karol:
But, you know, I have ADHD.
Karol:
If I, during my time on the app, I will just look at it, choose the bike.
Karol:
And then notification pops up.
Karol:
And I'm like, oh, what's that?
Karol:
I'm out of the app instantly.
Karol:
So it remains chosen, but it's still not reserved.
Annagret:
And that is exactly what one can, when you do such an event storming, the guys in the room come up with different ideas.
Annagret:
And then you discuss, when I have here bike reserved, bike chosen, the guys can discuss, is that the same?
Annagret:
Is it not the same?
Annagret:
And what you see here even is that I order the events from the left to the right.
Annagret:
And the sequence appear or occur.
Karol:
Yeah.
Karol:
But basically in event storming, the timeline flows from left to right.
Karol:
So if we have parallel actions, they would be on top of each other.
Karol:
Or parallel events.
Annagret:
Exactly.
Annagret:
We can hear bike reserved.
Annagret:
And then we can see bike ridden.
Annagret:
So, and probably when he logged in, he first has to, let me see, monthly fee paid.
Karol:
Hmm.
Karol:
Especially if it's their first time logging in.
Annagret:
Yeah, exactly.
Annagret:
And then we can probably even say that would be optional, and we can even mark it here with arrows.
Annagret:
So everything is allowed in the end.
Karol:
Hmm.
Annagret:
So in the next step, what you do in the next step, I need to copy something.
Karol:
Yeah, sure.
Annagret:
Is that you give each event a certain command.
Annagret:
So which command will trigger that event?
Annagret:
So when we said commute started, what is the event starting that event?
Karol:
Probably my wife telling me go to work.
Annagret:
Yeah, probably.
Karol:
I'm joking.
Karol:
She wouldn't say go to work.
Karol:
She would want me not to work.
Annagret:
Leave the house.
Karol:
Yeah.
Annagret:
So I think here we would have start commute and it would be here log in.
Annagret:
It's sometimes, or it's more the rule that you have for those commands that they are just a repeating of the event.
Karol:
Hmm.
Annagret:
Only in imperative, whereas event is in the past.
Annagret:
That is indeed some kind of a thing.
Annagret:
So let me put it here a little bit more.
Karol:
Hmm.
Annagret:
So as a bike's found.
Karol:
Found bike.
Annagret:
Exactly.
Annagret:
And what you see here is that you even start to be careful with the plural and singular.
Annagret:
Yeah.
Annagret:
Do I find several bikes?
Annagret:
Probably I want to have several bikes because I want to ride with my family.
Annagret:
But then you can discuss it with the business guys.
Annagret:
Do you allow to find more than one bike?
Karol:
Hmm.
Annagret:
Probably yes.
Karol:
Probably.
Annagret:
So and then choose bike.
Karol:
Hmm.
Annagret:
So and then you'll see who is doing that.
Annagret:
You put a role to the event.
Annagret:
And what you can see even here is that I use a lot of different colours that are not standard colours.
Annagret:
But that are the, yeah, almost standard colours for event storming, you find by Alberto Bandolini.
Annagret:
That's the events are orange, commands are blue.
Annagret:
And those roles are dark yellow.
Annagret:
So commute starters, of course, would be the computer.
Annagret:
And we have now, we have an easy, easy part because we don't have different things here.
Annagret:
So we left out, for example, the code.
Annagret:
So and here we have that bike.
Annagret:
Thank you for going further.
Karol:
No problem.
Annagret:
Because when we said that a code must be sent.
Karol:
Hmm.
Annagret:
So that we can unlock the bike at the rack.
Karol:
Mm hmm.
Annagret:
At the rack.
Karol:
Yeah.
Annagret:
So and then the code is sent when you remember our story.
Karol:
Mm hmm.
Annagret:
It's sent by some kind of a system.
Karol:
Yes.
Karol:
So the actor then is different.
Annagret:
The actor is different.
Annagret:
The actor is not an actor anymore.
Annagret:
It's some kind of a system.
Annagret:
And then it's modelled as a thing.
Annagret:
So then we have here our bicycle distribution or whatever we want to call it.
Karol:
Mm hmm.
Annagret:
So now we have even a nice, a nice overview of our process.
Annagret:
And then we give the process, we need the data for the process.
Annagret:
So let me copy it here.
Karol:
Mm hmm.
Annagret:
We have the data.
Annagret:
And now we need to define which data we need.
Annagret:
And we need data which we change that are probably our aggregates of our bounded context.
Annagret:
And which data we need but which are not changed, which are used in a so-called read model.
Karol:
Okay.
Annagret:
So when the commute started, we probably have here as an aggregate to compute.
Annagret:
Usually those things I won't model because that's a commute started.
Annagret:
Yeah, it's a trigger for the whole process, obviously.
Annagret:
But I don't have that information as my system.
Annagret:
So usually I won't model anything.
Karol:
Right.
Annagret:
So therefore we start with the login.
Annagret:
And even with the login, no new things is created.
Annagret:
Mm hmm.
Annagret:
But obviously we need somehow the user who is logged in to check.
Annagret:
To check is it, is it the correct user who is, who is logged in.
Annagret:
And then now, then I would model an IDM system.
Annagret:
Yeah.
Annagret:
Then I would do here much more.
Annagret:
Yes.
Annagret:
And I have users and I have to log in user who is created probably etc.
Annagret:
But I don't want to model that.
Annagret:
Therefore, for me, it's a user.
Annagret:
And afterwards, a commuter is locked in and I don't need to.
Karol:
We're simplifying.
Karol:
We're assuming for this process that the user already has an account.
Annagret:
Exactly.
Annagret:
Exactly.
Annagret:
And that is what I mentioned in the very beginning, that especially when you start with those modelling, you need to be careful what all things you model because it makes a whole model quite complex.
Karol:
Mm hmm.
Annagret:
And gives you no useful information.
Karol:
It's, it's like with communicating architecture.
Karol:
If you leave on a diagram too many, too many abstraction layers.
Annagret:
Exactly.
Karol:
It's going to overcomplicate the diagram and make it not readable.
Karol:
So if we're talking about the specific process, we leave out the details of other processes just to make the diagram readable to understand that particular process.
Karol:
And of course, this goes to be able to log in, you have to be registered or somebody has to make an account for you and give you credentials.
Karol:
So, yeah, that's, that's the obvious part.
Karol:
And we're not going to go into that registration flow at this point because that makes no sense for modelling.
Annagret:
When we go further and we have that monthly fee paid, as input, we need some kind, let me call it fee structure.
Annagret:
As in someone needs to define what is a monthly fee, probably you can get certain discounts, whatever.
Annagret:
And you get here out of it, obviously.
Annagret:
A paid fee.
Annagret:
So then we found the bicycle here.
Annagret:
There we have then probably the bicycle in our hand.
Annagret:
And here it becomes tricky.
Annagret:
In my point of view, at least, because when I found something in my point of view, then I haven't changed it yet.
Annagret:
Therefore, I always would model a suite model.
Karol:
Yeah.
Annagret:
But then when you have chosen it.
Karol:
Then I have it.
Annagret:
Then you have changed the bicycle.
Annagret:
Then you have here the bicycle in the rig.
Annagret:
And now it's chosen.
Annagret:
It's not reserved yet.
Annagret:
And the other one can choose as well the same bike.
Annagret:
And now it comes who is faster.
Annagret:
As we have done the bikes with her.
Annagret:
And what you can do here even, is that you even model so-called invariants.
Annagret:
As an invariant in the sense, set up business rules which don't change when the object is changing.
Annagret:
And you can implement them quite nicely in your domain model, when you implement your services.
Annagret:
So here we would have some.
Annagret:
And then we have here the state model of the bicycle.
Annagret:
We have here a chosen one.
Annagret:
As a state.
Annagret:
And here we would have the state of reserved.
Annagret:
And now we know that when a bicycle is reserved and it's in the rig, then it can't be chosen by others.
Annagret:
Now we have some kind of business rules behind.
Annagret:
You can detect this with the events domain.
Karol:
Yeah, chosen would mark it as not choosable, not reservable for the duration of the life of the app we're using or for a moment.
Annagret:
Exactly.
Karol:
And reserved would make it not pickable for a longer period of time till we get to that rack, take it out, and it will drop the reservation, let's say, in half an hour.
Annagret:
For example.
Annagret:
Exactly.
Annagret:
And then we have...
Annagret:
And that are exactly the business rules.
Annagret:
And those you can define here as business rules.
Annagret:
I don't know.
Annagret:
Let me here.
Annagret:
And that you really can discuss with the business people.
Annagret:
As a lot...
Karol:
So the purple...
Annagret:
Not selectable for others for 15 minutes.
Karol:
Probably less in terms of chosen.
Annagret:
Yeah, doesn't matter.
Annagret:
You need to discuss it.
Karol:
Yes.
Annagret:
And then after 15 minutes, it's free again also.
Annagret:
And those eight models, you definitely can then discuss quite easily and visualise with the business people.
Karol:
So as far as I remember my theory, and given that I've never done event storming myself, the purple one is policy or reaction.
Annagret:
Exactly.
Karol:
So the state that we are is the reaction then.
Annagret:
Exactly.
Annagret:
And not selectable for 15 minutes would then be...
Karol:
The policy.
Annagret:
Exactly.
Karol:
Okay.
Annagret:
So and then be here for the code sent, of course.
Annagret:
We need some kind of input data.
Annagret:
We need to know for which bicycle the code is sent.
Karol:
Probably a little bit more context, like which rack, etcétera.
Annagret:
Yeah, yeah.
Karol:
But that would be the context of the chosen bicycle, basically.
Annagret:
That would be the context of the chosen bicycle, because when you remember, we have here our visual glossary, and we know we have the bicycle, and the bicycle is stored in a rack.
Karol:
Yes.
Annagret:
Yeah.
Annagret:
And we even know, and probably the rack, we have the location of the rack as some kind of GPS that we have modelled so far.
Karol:
Yeah.
Annagret:
As when you go then deeper, you would model even those things.
Annagret:
So that you have for the bicycle and the rack, so that you have the GPS data in it, and you have certain searching radios where you can see when you can search bikes, etcétera.
Karol:
Mm-hmm.
Annagret:
The nice thing is even, and I think it comes out even of our discussion, we don't anymore discuss the whole flow, how the bicycle is, and do we need higher wheels, or do we need electro, and do we need distinguish between heavy bicycles or not so heavy bicycles, etcétera.
Karol:
Mm-hmm.
Annagret:
We really discuss the things at the event, and that makes a whole discussion so easy, not easy, easier than it would be because you can concentrate on a certain problem and don't need to discuss a whole problem at once.
Annagret:
I did my past event stormings with 40 or more people, which is really horrible.
Annagret:
Usually you should not do it more than 15 people, to be honest.
Karol:
Fair enough.
Annagret:
But what comes out of it is that we really could come to the core of our problems, and that is really great.
Karol:
Just on the organisational side of such a session, from what is taught in business analysis frameworks, this is basically stakeholder management at this point because for this session, we need to manage our stakeholders.
Annagret:
For event storming, you need, I think you should organise those sessions as diverse as possible.
Karol:
Diverse as possible, yeah.
Annagret:
You definitely need the architects, you definitely need the developers who will implement the whole thing.
Annagret:
You need the business experts.
Annagret:
It's even nice when you have some kind of security guys in it because they came up with ideas you never thought to think of.
Karol:
Yeah, but this is important from the perspective of ubiquitous language, so building a shared understanding of the problem domain between all those abstraction layers of different people working on the same problem domain so that we have the same language, not have dilution of language.
Karol:
But I would ask you, going back for a second to the stakeholder management part, and of course we'll have different stakeholders.
Karol:
If we look at stakeholder management from a business analysis perspective where we want to be efficient and effective over our business analysis, especially if we run a workshop, the usual discourse is that, well, you should not invite to such a workshop stakeholders that have strong opinions that are very much opposing each other and might come into an argument.
Karol:
Now, what's your opinion on that in terms of event storming?
Karol:
Because this is, to an extent, a tool for business analysis.
Karol:
And I would fall into that category and if I would be like one time a successful event storming, I would probably not invite these people.
Annagret:
I would invite them.
Annagret:
I would invite them.
Karol:
Okay.
Annagret:
Because the methodology leads to a certain process.
Annagret:
And you can put them out of the room always.
Karol:
All right, you would just, out!
Annagret:
For example, yeah.
Annagret:
Or just mute them.
Karol:
Okay, yes.
Annagret:
And usually I prepare those discussions with some domain storytelling.
Annagret:
And because I'm the door of the domain storing and the moderator, I can really moderate everything in a part so that those strong-headed guys are not taking over the whole discussion.
Karol:
Okay.
Annagret:
Yeah.
Annagret:
And here with the event storming, the nice thing is, when you have that prepared, the nice thing is that the events are collected from everyone in the room, even the guys, which are usually more silent than the others.
Annagret:
Yeah.
Karol:
Okay.
Annagret:
And then you can discuss the words, you can discuss what is.
Annagret:
I'm not so with you that it's only business because what we are doing here, when we put those data in the end set, our input data and output data more or less, we really do some kind of architectural decisions already.
Annagret:
Yeah.
Annagret:
As we know which data are belonging to which event, we even do here those invariants and do some kind of state modelling.
Annagret:
That is, in my point of view, is architectural work.
Annagret:
It's hard on the business side.
Annagret:
I'm completely with you.
Annagret:
But it goes in, we are already designing things.
Karol:
Yeah, that's basically outlining the data architecture to an extent.
Annagret:
Exactly.
Annagret:
And when you have here in the domain storytelling, we are really doing business requirement gathering.
Annagret:
That is a tool for that, yeah.
Annagret:
But here we are already, we do data architecture.
Annagret:
And when we then, the next step when we have all those data together, the next step then will be that we define the bounded context.
Annagret:
So I need to zoom out a little bit so that you'll see the whole process.
Annagret:
And you'll see it becomes longer and longer.
Annagret:
It's not as complex as you showed from Google, but it becomes things.
Annagret:
So what we do here, when I go a little bit out into it, as we have here, the bicycle is distributed in the bicycle distribution bounded context.
Annagret:
We have here the member management.
Annagret:
When I register myself as a member, I pay my fee.
Annagret:
Then I have here the bicycle distribution, etcétera.
Annagret:
And the bounded context, you'll see here that either the role is changing and or the aggregate is changing.
Annagret:
And that is a strong hint that you have a border of a bounded context.
Annagret:
And then you can circle around and give them a sensible name.
Annagret:
As I hear we have the bicycle distribution and what you can see here is that because it's a process, that bounded context can appear several times over the process.
Annagret:
Because it's not a static view, it's a process view.
Annagret:
And then it's quite normal that things appear several times over the time.
Karol:
Yeah, so if we would map it to a more traditional approach in outlining that as diagrams, a bounded context would be possibly a swim lane in a BPMN diagram.
Annagret:
Exactly, exactly.
Karol:
We can translate one-to-one.
Karol:
Not one-to-one, but very close between two formats.
Annagret:
Yeah, I mean, there's a problem.
Annagret:
What we do is that we really do it together.
Annagret:
Drawing a BPMN diagram in a workshop format is possible, but I wouldn't recommend it.
Karol:
No, that would be a lot harder to do.
Karol:
I would treat BPMN as a documentation form of the output of such an event storing session.
Annagret:
Exactly, that is quite nice.
Annagret:
That is quite nice.
Karol:
Because we can translate this nicely and this will form a very nice documentation of what we've done, which would be probably more readable than an event storming output.
Annagret:
And now, here you can see we have those different bounded contexts.
Karol:
Yes.
Annagret:
And what you can see here, probably we have here the bicycle returned.
Annagret:
And I have here the hotel and the rack.
Annagret:
And I have as roles the commuter and the tourist.
Annagret:
What we do in the event storming is that we even try to model the whole picture.
Annagret:
I said before that we have in the domain storytelling, we do different models for the different user groups, for the tourists and the commuters.
Annagret:
Probably even one, I haven't shown, but probably even one for the mechanics, for example.
Annagret:
But in the event storing, we try to model the whole domain and even more generalising the things from the different user groups.
Annagret:
But still, it's a happy path.
Karol:
It's a happy path, yes.
Karol:
Exceptions will need to be modelled separately but, yeah.
Annagret:
Exactly.
Karol:
That's always the case.
Annagret:
In my experience, it's normally when you need exceptions that they are inside of a bounded context, inside of a service.
Annagret:
And what we model here is an overview model over several services.
Annagret:
My exceptions of course are there.
Annagret:
But in my opinion, usually when you really want to go into detail, then you can detail a model in one bounded context.
Annagret:
There are even things where you can model this event storming in detail.
Annagret:
It's a different aspect of it.
Annagret:
Then you go much deeper into policies and business rules because usually those are the domain rules you implement in one service and not over several services.
Annagret:
And therefore, you do it then in the detail model.
Annagret:
Here we have an overview model.
Karol:
Okay.
Karol:
All right.
Karol:
Annegret, so we have our bounded context.
Karol:
We have our events.
Karol:
We know what's going on on the happy path.
Karol:
What can we do then with this to take us closer to actual architecture?
Annagret:
Yeah.
Annagret:
I want to do it with you together but I think we are running a little bit out of time.
Karol:
We might not be able to do context mapping together given the time that we want to talk about it.
Annagret:
So I give you here the whole...
Annagret:
By the way, I have a question for the guys outside.
Karol:
Okay.
Annagret:
I have a book for you.
Annagret:
It's called Crafting Great APIs with Domain Driven Design.
Annagret:
You see it here?
Karol:
Yes.
Annagret:
One of the guys attending, I can give you a free PDF version of it.
Karol:
Giveaway.
Annagret:
And I want...
Annagret:
They can answer in the chat, right?
Karol:
Yes.
Annagret:
Yeah.
Annagret:
To answer the question.
Karol:
Okay.
Karol:
So before you give the question, let me outline the rules.
Karol:
So Annegret has one PDF to give.
Karol:
Annegret has a question.
Karol:
The first person to answer this to show up in our studio chat and we're gathering the chat feed from LinkedIn and from YouTube simultaneously in our studio chat will get that PDF and we'll contact you after the stream to outline details.
Karol:
Okay?
Karol:
All right, Annegret, then.
Annagret:
Okay.
Karol:
Let's see what's going to happen in chat.
Karol:
This is the first time we're doing a giveaway on this stream.
Karol:
This is going to be interesting.
Annagret:
There are several team patterns already outlined by the DDD guys.
Annagret:
Here you will see two ACL and conformist.
Annagret:
And I want to know what is the most bad pattern one can use.
Karol:
So we're asking about what is the worst context mapping pattern one can use.
Annagret:
Exactly.
Karol:
I have my type, but I'm not playing the game.
Karol:
So we'll see who answers.
Annagret:
Probably it's too complex a question.
Karol:
No, I mean, okay.
Karol:
Let's give some small hints.
Karol:
Okay.
Karol:
So what you're looking for is context mapping.
Karol:
Context mapping has, I believe, six patterns.
Annagret:
Exactly.
Karol:
Yes.
Karol:
So out of those six patterns, and if you're with us in Miro or watching, two of them are visible on screen.
Annagret:
Exactly.
Annagret:
But out of six patterns, there are nine patterns I meant.
Karol:
Oh, nine patterns.
Karol:
Okay.
Karol:
Which one would be the worst?
Annagret:
They are defined by DDD crew.
Karol:
That's a good hint.
Karol:
All right.
Karol:
Let's leave people with this.
Karol:
We'll see in the chat later if there is an answer to this question.
Karol:
I'll leave the question on screen for the moment.
Karol:
All right.
Karol:
Context mapping.
Annagret:
What I do as a context mapping was original introduced by Eric Evans.
Karol:
Yes.
Annagret:
In his book, Domain Driven Design, published in 2004 already.
Annagret:
And what he did is that he wanted to show in the context team dependencies.
Annagret:
And team dependencies means that one team delivers something to another team.
Annagret:
Both teams are using it, etcétera, etcétera.
Annagret:
And nowadays I use it more for data stream picture because that are more or less interesting things one has, which data need to be exchanged by the different services.
Annagret:
And to do so, I put out the bounded context.
Annagret:
I detected inside of the event storming and put in rectangle for each of those bounded context.
Annagret:
But only once.
Annagret:
As I said before, they can appear several times.
Karol:
Yes.
Annagret:
Here you find only.
Annagret:
So it's more aesthetic models and dynamic model.
Annagret:
And then you put the events you found in the event storming inside of the bounded context.
Annagret:
And then you can discuss for one bounded context with synchronous communication you need only for that bounded context.
Annagret:
So here for the bicycle distribution with the aggregate bicycle, we have a get, a post, and a put.
Annagret:
And for member management, I think it's quite easy.
Annagret:
We have the member registered event.
Annagret:
We have the member and we need to get a post, a put, and a delete.
Annagret:
And then here you can see that we have here the accounting.
Annagret:
And the accounting has event monthly fee paid with a fee.
Annagret:
And that event then is published to the member management.
Annagret:
So here we have a data exchange between two bounded contexts.
Annagret:
And what you see, we have here the event which needs to be published by the accounting and then is consumed by the member management.
Annagret:
And what you see here even is that we have here a conformist for the accounting with an anti-corruption layer.
Annagret:
Why?
Annagret:
Because usually you will buy an accounting system and a member management system.
Annagret:
You won't implement it completely for yourself, but not to stain your own models.
Annagret:
You need probably for your monthly fee and for your member management, you build an anti-corruption layer for it.
Annagret:
And then the other things are accepted.
Annagret:
And the other thing we have here, we have the reg management.
Annagret:
And the reg management, you buy as well.
Annagret:
Therefore, you need here the anti-corruption layer as well.
Annagret:
And when a bicycle is unlocked or locked, then the event is published to the bicycle distribution.
Annagret:
So what you can see here is in the end is really the service overview.
Annagret:
As a bicycle distribution, we even have the data to be exchanged here from the reg management to the bicycle distribution.
Annagret:
And then you can define all the APIs.
Annagret:
Here we have the sync APIs, even this we need.
Annagret:
And we have the other APIs for the exchanges between the services.
Annagret:
As I said, it's logical architecture we are doing here.
Annagret:
We don't do some kind of internal solutioning, which database is used, which adapter pattern is used, etcétera.
Karol:
No, that's completely outside of any implementation yet.
Karol:
We have a first answer to the question.
Karol:
I would deem wrong one, but let's have it.
Annagret:
Maxime is totally right.
Annagret:
That is what I want to hear here.
Annagret:
Don't use it.
Karol:
A big ball of mud, I would say it's a consequence of using certain patterns.
Karol:
You will accept this as an answer?
Annagret:
Yes, I want to hear.
Karol:
That's the one.
Karol:
Oh, yes, you're right.
Karol:
Because that's actually one outlined as an anti-pattern by the DDD crew.
Annagret:
I want to hear it because the anti-pattern of a big ball of mud is exactly what we want to avoid when we do collaborative modelling.
Karol:
See, dear viewers, I did not know the answer because Annegret made this question without telling me the question and without telling me the answer.
Karol:
So my brain is like, what are the correct patterns of context mapping?
Karol:
Big ball of mud is not the correct pattern in that sense.
Karol:
It's an anti-pattern.
Karol:
I was like, which one would be the worst?
Karol:
I'm sitting here like, hmm.
Annagret:
But you can't do inverse.
Karol:
Yes, that's very true.
Annagret:
So Maxime has really deserved his copy?
Karol:
Yes, that's true.
Karol:
I would deem that the wrong answer, but that was the answer you were expecting.
Karol:
So that's actually great.
Karol:
And if you want to read more about context mapping as outlined by the DDD crew, this is a link here for context mapping of their GitHub.
Karol:
It's all explained there.
Karol:
I just didn't scroll far enough down to see the cheat sheet where that big ball of mud is outlined.
Annagret:
Yes, the cheat sheet is big ball of mud is outlined.
Karol:
Yes, that's true.
Karol:
But just to be fair, this is not exactly a pattern we should be thinking about when we're designing.
Karol:
This is an anti-pattern we should avoid at all costs.
Annagret:
Yes.
Karol:
Annegret, you're showing us Claude.
Annagret:
Yes, I'm showing you Claude, because you said we are far away from implementation.
Annagret:
And I want to show that it's not so far away from implementation.
Karol:
All right.
Annagret:
What we can do is that we can now really design based on that information we have here.
Annagret:
We can design our APIs.
Annagret:
And because I'm really a lazy guy, the AI can do it for me.
Annagret:
So I have here a prompt that the AI is an AsyncAPI.
Annagret:
An AsyncAPI expert.
Annagret:
And for bicycle distribution we have here, the AI should generate the AsyncAPI for me.
Annagret:
So let me put it here in my cloud.
Annagret:
So what we need now more is there are certain information needed, and we need the visual glossary.
Karol:
I'm curious, because if I'm building anything using AI, any generative AI engine, I usually write a lot of context.
Karol:
So I did not ever use images to convey the context.
Karol:
So I'm very curious what will happen.
Annagret:
So I can now paste the context in here.
Annagret:
Now I need a little bit to show that I can see my screen, right?
Karol:
You know what?
Karol:
While you're doing this, I'll open a Gemini, which is my default LLM that I use.
Karol:
And I'm going to try and do the same, and we'll compare results.
Annagret:
That would be great.
Annagret:
So I only need to screenshot it.
Karol:
Mm-hmm.
Karol:
All right, I'm going to do exactly the same as you do.
Annagret:
I lose my mouse.
Annagret:
I'm on the wrong side.
Annagret:
So I'm screenshot here the visual glossary.
Karol:
Yes, all right.
Karol:
I also have a screenshot of the visual glossary, which is going to save it now under the name visual glossary.
Annagret:
Yeah, but you can put this copy and paste there.
Annagret:
So I have here the visual glossary.
Annagret:
Then we need here the context map.
Karol:
Mm-hmm.
Annagret:
There I am.
Karol:
All right, doing the same.
Annagret:
And now comes a little bit of a trick.
Annagret:
As I said, you need to give them extremely much of context, yeah?
Karol:
Mm-hmm.
Annagret:
To be more precise, what is the expected results, you can use so-called one-shot prompts, where you give them an example of the expected results.
Karol:
Yes.
Annagret:
And that I do with a good Async API I created.
Karol:
Mm-hmm.
Annagret:
I have it here.
Annagret:
Let me put – I have it in my local thing, but I give you – when you can get a moment, I can give you the GitHub link.
Karol:
Either GitHub or just paste it into Miro as text.
Annagret:
Ah, so that I can
Karol:
Or as a file. Either works because
Annagret:
Also, that is a good idea, yeah?
Annagret:
I can put it on the Miro.
Karol:
That would be probably quicker.
Annagret:
Voila.
Annagret:
I only need to find my file.
Karol:
See, people, nothing scripted.
Karol:
We're doing this live as we go.
Karol:
That's what I love about these streams in general.
Karol:
It's an unscripted conversation.
Karol:
We have an idea to talk about.
Karol:
Let's talk about it.
Karol:
Some speakers prepare in details like you did.
Karol:
Others just come and start talking.
Karol:
That's a lovely, spontaneous part of doing loosely coupled.
Annagret:
I have here – It's from – The file type is not supported, yeah?
Karol:
Ah.
Karol:
Just please copy the text in a text field.
Karol:
That should work as well.
Annagret:
I will do – So, I have it now here with me.
Annagret:
There's a text field.
Annagret:
Ah, I think it's too long.
Annagret:
Yeah.
Annagret:
No, it doesn't work.
Annagret:
Barma, I give you the GitHub link.
Annagret:
I think that's – Yeah, okay.
Karol:
Well, you created a very long AsyncAPI spec then.
Annagret:
Yeah, it's really long, yeah.
Annagret:
And by the way, in the repository I put the link out of, there are AI comparison I did.
Annagret:
And in that API also now.
Annagret:
Here is the link.
Annagret:
Yes.
Annagret:
But it's only here.
Annagret:
You see the link, yeah?
Annagret:
You can use it.
Karol:
Yes, yes, yes.
Karol:
Got it.
Karol:
Got it.
Annagret:
And there I put some kind of API comparison and AI comparison, which is the best when you create those API things.
Annagret:
So, where's my clothes?
Annagret:
My clothes is back.
Karol:
Okay.
Karol:
So, I have everything uploaded to Gemini already.
Karol:
And I copied your prompt from Miro.
Annagret:
That's great.
Annagret:
So, now let us see what comes out of it.
Karol:
All right.
Karol:
And I'm clicking play.
Annagret:
Now we have the fight who is faster, right?
Karol:
All right.
Karol:
Let's see.
Karol:
Gemini has already given me a yaml.
Annagret:
And how does it look for you?
Karol:
Let's see.
Karol:
I don't know AsyncAPI that well.
Karol:
So, for the moment, while yours is generating, I'm going to hijack the screen myself then.
Annagret:
Yeah.
Annagret:
Would be nice.
Karol:
Let's see.
Karol:
Chrome tab with Gemini.
Karol:
There we go.
Karol:
So, let's take a look.
Karol:
I'll just zoom in a little there.
Karol:
There we go.
Karol:
Let's see.
Karol:
Bicycle distribution version one description.
Karol:
Events produced by the bicycle distribution service for bike sharing system.
Karol:
So, it's a nice description.
Karol:
Distributed booked.
Karol:
Contact.
Karol:
It puts your information there.
Annagret:
That is out of the example I used.
Annagret:
That is mine.
Annagret:
That is how it should look done.
Karol:
Tags.
Karol:
Core domain.
Karol:
All right.
Karol:
Servers.
Karol:
Even broker bike share.
Karol:
Whatever the broker is.
Annagret:
Yeah.
Karol:
Kafka.
Annagret:
Even those Kafka bindings come out of the example.
Annagret:
That is what I meant.
Annagret:
When you give them a really good example, you really get good answers.
Annagret:
Yeah.
Annagret:
Because for those you won't get when you just put in a zero short prompt.
Karol:
Yeah.
Karol:
It's not about prompt engineering.
Karol:
It's about context engineering, right?
Annagret:
Right.
Karol:
If you don't provide the right context, it will be horrendous.
Annagret:
So, here we have the bicycle distributed channel for the bicycle distributed thing.
Annagret:
And we have the bicycle book channel for the bicycle.
Karol:
Books event.
Annagret:
Yeah.
Annagret:
So, it's nice.
Annagret:
So, when you now looked here, we have bicycle distributed, bicycle search and return.
Annagret:
So, we see only you.
Annagret:
Can you go a little bit to the schemas?
Karol:
Yeah.
Karol:
Let's see.
Karol:
Schemas.
Karol:
We have the right schema.
Annagret:
Fine.
Annagret:
The problem here is what you can see here is we want only to have bicycle distribution.
Annagret:
And in the context map, we had only bicycle locked and bicycle unlocked as event to be received by bicycle distribution.
Karol:
I think it went overboard with the model.
Annagret:
Exactly.
Annagret:
And that's the point, yeah?
Annagret:
Usually, one must be quite careful with the LLMs because they know too much.
Karol:
Yes.
Annagret:
And they can't leave out.
Annagret:
It works quite well when you don't have the events inside of the bounded context in the context map anymore.
Annagret:
Then it works really well.
Annagret:
But when you have too much information, then they are too overwhelmed and don't know anything anymore.
Annagret:
And here you have the bicycle.
Annagret:
It's not bad.
Karol:
ID, serial number is e-bike.
Karol:
That's good.
Karol:
Motor, that's the reference to that earlier.
Annagret:
Motor, which was hallucinating, which we don't have modelled.
Karol:
Yeah.
Karol:
It's irrelevant.
Karol:
So, basically, at this point, I would already write a prompt, please remove motor from…
Annagret:
But it's really helpful when you see how much you spare and time to write those things.
Karol:
Oh, yeah.
Annagret:
And probably you haven't simply not thought of it, yeah?
Annagret:
The view diameter was modelled, so it's nice.
Annagret:
But it's even come up with certain ideas of the enum of the sizes, yeah?
Annagret:
It's really nice.
Karol:
Yes.
Annagret:
And so far…
Karol:
It would be nice.
Annagret:
Yeah.
Annagret:
It's really helpful.
Annagret:
I use it meanwhile almost every day.
Karol:
Mm-hmm.
Annagret:
Yeah.
Annagret:
And then you look into the link, which is now…
Karol:
This is already nice, because it already provides proper metadata for the communication, which is something a lot of people forget when designing an API.
Karol:
It's not only about the business payload.
Karol:
You actually need to provide specific metadata so that it's operatable, and it's a problematic thing later.
Annagret:
That is exactly those meta things you need in an API.
Annagret:
You can really put into your example.
Annagret:
That message header comes out of the example, yeah?
Karol:
Mm-hmm.
Annagret:
And therefore, you spare so much time just in writing infrastructure in the end.
Karol:
Mm-hmm.
Annagret:
Yeah?
Annagret:
And there are gold plate things that you can spare much time in it.
Karol:
All right.
Karol:
Let me kill my feed, and let's see what did you get from Claude.
Annagret:
Oh, and that is here even in Claude.
Annagret:
What you can see, we have here the bicycle distributed, which means we have all the events inside of the bounded context, which we don't want to publish.
Annagret:
We want only to have that book and look.
Annagret:
And here we have even bicycle picked up that was not modelled, but Claude thinks we wouldn't need it.
Annagret:
Yeah?
Annagret:
That's nice.
Karol:
And Claude is not wrong, because we would need that event from the rack to start billing somebody if they're on a paper use.
Annagret:
So until you see the Kafka bindings are there, it's fine, yeah?
Annagret:
We have then here the distributed channel, we have the book channel, the search channel, etcétera.
Annagret:
And it's in the same, you see here even the binding version, so that we have already the binding even to Kafka, it's here even more.
Annagret:
That comes out of the example, so it's really nice.
Annagret:
Yeah, but there's a problem here.
Annagret:
You have to put out a lot of things.
Annagret:
Therefore, when you do those pictures and you want to create something out of it, it's always a good idea to put all those things you don't want to have generated.
Karol:
The usual problem with generative AI, if you tell it not to do something, it'll explicitly do something.
Annagret:
Exactly, exactly.
Annagret:
It doesn't work.
Karol:
It's like talking to people, don't think about pink elephants.
Annagret:
Yeah, yeah, exactly.
Karol:
Obviously, now you're thinking about pink elephants, right?
Annagret:
But for me, it's really, really helpful because as a starting point, it's amazing.
Annagret:
You create more than an 80% starting point.
Karol:
Yes.
Karol:
For me, as a neuroatypical with ADHD, my biggest problem in writing literally anything is a blank page paralysis.
Annagret:
Exactly.
Karol:
For me, it's a lot easier if I have something to start with and having generative AI doing even a wrong answer, but just doing something to start with so I can start just editing it instead of writing it from scratch.
Karol:
That makes it so much easier.
Annagret:
But you can see here, because we said we are not at the code at all.
Annagret:
I only want to show that out of the pictures, you are so fast to the code page.
Karol:
Yes.
Annagret:
That you don't need to start with it.
Annagret:
You can start in the end, in the discussion, felt quite late with code.
Annagret:
Usually, I want to start quite early with code as well, so I know the stuff.
Annagret:
But it's really helpful to do those discussions.
Annagret:
As I said in the very beginning, you can start with certain things already after the domain storytelling.
Annagret:
Especially for those things where you know they are quite clear, like accounting, like a lock-in, when you need an IDM, you can all set up those things already.
Annagret:
Because it's not to the business core.
Annagret:
But when you want to model the business core, then you need a business and event storming together with your business guys.
Karol:
Again, this would be picking on semantics.
Karol:
If you say close to code, not close to code.
Karol:
It depends how you define what an API specification is.
Karol:
Because for me, that's not code, that's a specification.
Karol:
But it's already very close.
Karol:
Yes, we can often generate some code of an API implementation, etc.
Annagret:
I'm completely with you.
Annagret:
YAML is not code.
Karol:
But this is a lot closer to code, from that perspective.
Karol:
And it also gives you another abstraction layer, because you're moving from this abstraction of bounded contexts and their relationships.
Karol:
So ACLs, conformist, partnership, customer-supplier.
Karol:
And we're moving towards more details.
Karol:
So we're basically, through the whole process that we did today, we moved from an abstraction of a story, like a user story, which is the domain storytelling.
Karol:
We're looking at this from the perspective of a specific actor.
Karol:
Then going through event storming and visual glossary to outline what happens from our business process perspective and the relationships between different aggregates or objects in our business process.
Karol:
Down to context map, where we actually define bounded contexts.
Karol:
And those bounded contexts already can be overlaid to actual application systems, which are implemented or to be designed.
Karol:
And then we're going even deeper towards actual entities.
Karol:
So actually defining attributes as if we would be doing a class diagram.
Karol:
Because might as well, instead of generating an async API, we might as well ask the LLM to generate a class diagram based on this discussion.
Annagret:
Sure, sure.
Annagret:
Here, the class diagram is more or less what we have put in for the visual glossary.
Karol:
Yeah.
Annagret:
We could have here generated even the OpenAPI.
Annagret:
Then you can work close with the OpenAPI and can generate in a sense of a contract first approach, can generate your controller from it.
Annagret:
Based on that, you can then generate probably your database model.
Annagret:
Yeah.
Annagret:
And then you are really close to the things which make the job interesting.
Annagret:
Because then you have to build up the business logic.
Annagret:
And there it becomes interesting.
Annagret:
There you can't so much generate.
Annagret:
There you have to think.
Annagret:
But my point of view, all those modelling techniques help you to think and helps you always up to the database design in your language and in your thinking to be close to the business.
Karol:
That's the lovely part because over all of these abstraction levels, we were very consistent about the language.
Karol:
We kept using exactly the same language.
Karol:
Just also on the note in terms of generating the class diagram, because there are different types of abstractions for class diagrams.
Karol:
You have conceptual, logical, physical, right?
Annagret:
Exactly.
Karol:
So visual glossary is more on a conceptual level of class diagram, right?
Karol:
And when we go deeper through even storming context map and on the level that we generated the AsyncAPI specification, we could actually generate a class diagram that would be the physical model, which is rich in information such as attributes, enumerations, regular expressions, examples, etc.
Annagret:
Of course, there's examples and even regular expression.
Annagret:
And so you have to work on and you have to think about.
Annagret:
But you get really a good starting point, as I said.
Karol:
Yes.
Karol:
And this in terms of modelling of communication, I would say this is a very good start.
Karol:
If somebody is working on a specific domain system just to get going with proper interoperability from start before we start building.
Karol:
Exactly.
Karol:
Because that's a very important aspect that we think about that interoperability beforehand rather than as an afterthought, which is, in my experience, something that happens quite a lot, unfortunately.
Karol:
But this is just the tip of an iceberg because there's so much more to interoperability than just building a good API.
Karol:
And then what is a good API?
Karol:
Because then we need to have a discussion about the purpose.
Karol:
And we actually had a discussion about that on Loosely Coupled some time ago with your colleagues from CodeCentric, Daniel Kocot and Miriam Greis.
Annagret:
Greis.
Karol:
Greis, yeah.
Karol:
And I'm having trouble with that particular sound.
Karol:
Daniel was laughing at me for mispronunciations earlier.
Karol:
So then we go into the purpose of it.
Karol:
And if we align on the purpose and then start using context mapping to properly define that against data interface quadrants, we're already going way further.
Karol:
And then, and here a little bit of a shameless advertisement, if you want to learn more about looking at interoperability on an ecosystem layer, we're actually running a two-day training with DDD Academy in January about strategic integration design with domain-driven design, which is combining ecosystem architecture.
Karol:
So integration platforms, message brokers, and all those patterns on the ecosystem level to talk about interoperability at a large, large scale.
Karol:
So the system that we look at, its API, async API, open API, whatever is the definition there, is just a small component of that conversation then.
Karol:
So there is a lot more to talk about in that sense, but this is very, this session today and this modelling today is a very important starting point for anybody designing a system, whatever that system may be.
Annagret:
Right.
Karol:
All right.
Karol:
Did we miss anything?
Karol:
Do we need to put anything else here?
Karol:
Links I'll try to include in the description after.
Karol:
Of course, the recording is on YouTube always, so this will be visible.
Karol:
People can find that in QR.
Karol:
So anybody watching the recording can find the QRs over the whole stream.
Karol:
One more thing, another book by Annegret here about the topic.
Karol:
So modelling using domain storytelling, even storming context maps.
Karol:
That's an older book, right?
Karol:
Not the one that we showed earlier about crafting APIs.
Karol:
Crafting APIs we just did a moment ago, but the whole process of the collaborative modelling is in more details explained in this book.
Karol:
So if anybody would like to have a jump into details, this is where you can find more details on the topic.
Karol:
All right.
Karol:
So I think we'll be slowly closing, but before we jump into the actual closing and anything else, a few words of advertisement.
Karol:
Next week, we're diving into a completely different topic, looking at symptoms and problem solving and identifying the problems.
Karol:
So my guest next week will be Woody Zuill, coming to us, I believe, from US, as far as I remember, a Lean and Agile guide and coach, and we'll be diving into identifying things, looking at what are the actual problems, what are the actual symptoms, how can we dig into what the problem actually is, instead of just skimming over the surface and putting a Band-Aid on a gaping wound.
Karol:
So that's next week at 7 p.m. Central European Time.
Karol:
And if you're new to the stream, if you haven't been with us before, you can find more information.
Karol:
You can find the recordings of previous streams on bridgingtheGap.eu.com
Karol:
You can find also all sorts of articles about ecosystem interoperability.
Karol:
You can also subscribe to our Substack and, of course, subscribe to the YouTube channel to get notifications about the upcoming live streams.
Karol:
And as far as my memory serves, we already have live streams outlined to January.
Karol:
So still about four of them coming up this year.
Karol:
And January is starting to fill up in my pipeline.
Karol:
So that's going to be interesting.
Karol:
So more of them will show up soon.
Karol:
Now, that said, it's been a lovely conversation.
Annagret:
Thank you.
Annagret:
It was really fun with you.
Karol:
We can definitely do this some more.
Karol:
If we would dive into edge cases and specifics of different notations, different exercises, we could probably be going for the next two hours.
Annagret:
Yeah, definitely.
Annagret:
Definitely.
Annagret:
We will, I hope.
Karol:
We will.
Karol:
All right.
Karol:
I think we'll discuss this later as to how to put that to good use and have some sessions in more details about specific techniques because all those collaborative techniques are a really good way to start a conversation, especially if we don't have a common language.
Annagret:
So I think Maxim can contact me via...
Karol:
I'll arrange all of that.
Karol:
Don't worry.
Karol:
We'll get that sorted.
Karol:
So I'll arrange that with Maxim.
Karol:
Maxim, please ping me on LinkedIn.
Karol:
If not, I'll ping you tomorrow.
Karol:
And ladies and gentlemen, for those still watching, and I see on both YouTube and LinkedIn that there are still people watching, so that's amazing.
Annagret:
Oh, great.
Annagret:
Thank you.
Karol:
Super.
Karol:
Thank you for being with us and have a lovely, I assume, night being in Europe or afternoon or whatever is the time zone that you're watching us at.
Karol:
And see you next stream.
Annagret:
Thank you very much, Karol.
Annagret:
Thank you for having me.
Karol:
Always.