July 29, 2025

Episode 428: Business Central: Performance Tips & Life Beyond Work

In this episode of Dynamics Corner, Kris and Brad "dive into the pool" of Business Central with expert insights on performance tips and tricks that can transform your business operations. Microsoft Business Central MVP Stefan Šošić shares invaluable advice for developers and users alike, highlighting the importance of understanding both the technical and functional aspects of the platform. Beyond the technical talk, we are reminded that there's more to life than just business. Listen to the f...

In this episode of Dynamics Corner, Kris and Brad "dive into the pool" of Business Central with expert insights on performance tips and tricks that can transform your business operations. Microsoft Business Central MVP Stefan Šošić shares invaluable advice for developers and users alike, highlighting the importance of understanding both the technical and functional aspects of the platform. Beyond the technical talk, we are reminded that there's more to life than just business. Listen to the full episode for a blend of professional wisdom and personal stories that inspire and uplift.

Send us a text

Support the show

#MSDyn365BC #BusinessCentral #BC #DynamicsCorner

Follow Kris and Brad for more content:
https://matalino.io/bio
https://bprendergast.bio.link/

00:00 - Episode Introduction with Stefan Sosič

10:42 - Teaching Business Central at University

17:40 - The Challenges of AL Development

26:00 - PageScripting: Beyond Testing

36:12 - Performance Tips for AL Developers

49:56 - Additional Optimization Techniques

01:08:48 - Water Polo and Career Paths

01:15:30 - Closing Thoughts and Contact Information

WEBVTT

00:00:00.561 --> 00:00:03.830
Welcome everyone to another episode of Dynamics Corner.

00:00:03.830 --> 00:00:10.964
You know, brad, I've been running lately like 10k every other day and you know what I learned?

00:00:10.964 --> 00:00:14.766
A little bit about performance, and I think we're going to talk about performance.

00:00:14.766 --> 00:00:15.990
I'm your co-host, chris.

00:00:16.861 --> 00:00:17.522
And this is Brad.

00:00:17.522 --> 00:00:21.253
This episode was recorded on July 3rd 2025.

00:00:21.253 --> 00:00:26.492
Chris, Chris, Chris, 10K every other day that rhymes it does.

00:00:26.492 --> 00:00:37.371
And yes, today we did have the opportunity to talk about some performance tips and tricks for AL development, as well as some other things such as water polo, With us today.

00:00:37.371 --> 00:01:00.774
We had the opportunity to speak with Stefan Sosich all right, good afternoon are we gonna?

00:01:00.774 --> 00:01:02.115
Get it right this time.

00:01:03.256 --> 00:01:09.042
Yeah, I hope that now it's fine, it's fine, now, thankfully, it's fine.

00:01:09.042 --> 00:01:10.364
How is the?

00:01:10.444 --> 00:01:12.049
refrigerator.

00:01:12.049 --> 00:01:28.414
It's working, it was a little touch and go this morning because I had texted Chris a short while ago and I had messaged him that I may be okay, because he was finishing up Yesterday, he was not able to finish.

00:01:29.155 --> 00:01:30.677
Yeah, you know it's funny.

00:01:30.677 --> 00:01:41.495
It sounds like you got like you know this funny joke with someone prank calls you and says hey, hey, brad, is your refrigerator running, it is.

00:01:41.495 --> 00:01:43.260
You better go after it.

00:01:43.581 --> 00:01:45.445
Well you know, just to set the the stage.

00:01:45.506 --> 00:01:47.762
This is our third time trying to do the recording.

00:01:47.762 --> 00:01:53.680
The first time we had technical issues with the platform so we had to reschedule.

00:01:53.680 --> 00:02:02.688
Then we rescheduled it for yesterday and my refrigerator shorted out and they were supposed to come service it in the afternoon, but they showed early.

00:02:02.688 --> 00:02:05.272
They showed up at the exact same time we were supposed to record.

00:02:05.272 --> 00:02:12.028
So he was here, he was working on it, went through it and then said, oh, I don't have the part, I'll come back tomorrow.

00:02:12.028 --> 00:02:15.609
And I was like, are you really coming back tomorrow?

00:02:15.609 --> 00:02:17.705
So no, he goes, I'll be here first thing.

00:02:17.759 --> 00:02:19.199
So he came here first thing this morning.

00:02:19.199 --> 00:02:27.502
He replaced the part that he thought was broken and then it still didn't work.

00:02:27.502 --> 00:02:31.308
So then he goes, I have to drive to the office to get another part and I'll be back and I go.

00:02:31.308 --> 00:02:32.771
Where is your office?

00:02:32.771 --> 00:02:34.439
Like how far is it from here?

00:02:34.439 --> 00:02:43.341
I didn't think I'd see him again and, uh, sure enough, he showed up and he fixed it and it seems to be working.

00:02:43.341 --> 00:02:46.824
I don't know, because if it's a refrigerator you have to wait for it to cool.

00:02:46.824 --> 00:02:50.247
I'm more concerned about the ice maker, to be honest with you, because in order for him to fix it.

00:02:50.247 --> 00:02:51.469
He had to pull the whole ice maker out.

00:02:51.469 --> 00:02:57.116
You know how ice makers are in their refrigerators, yeah, so he just finished up a few moments ago.

00:03:00.341 --> 00:03:08.514
I was touch and go, touch and go, but now I'm better, so nearly so reschedule once more if we would have had to reschedule again, I wouldn't know what I would do.

00:03:09.425 --> 00:03:11.560
We appreciate your patience.

00:03:11.560 --> 00:03:15.180
Yes, it's a true testament.

00:03:15.602 --> 00:03:20.400
Your flexibility and your patience have been great, because we've been able to talk every single time but just not able to record.

00:03:20.400 --> 00:03:33.752
So we do appreciate you taking the time to speak with us, and congratulations on your recent mbp as well, which is a is a big and notable accomplishment.

00:03:33.752 --> 00:03:34.813
It's well deserved for you as well.

00:03:34.813 --> 00:03:38.203
And before you get into the conversation, would you mind telling everyone a little bit about yourself?

00:03:39.424 --> 00:03:43.669
Yeah, a lot of career paths, so to say.

00:03:43.669 --> 00:04:00.789
So I started in QA side working for a gaming company, something like that, and then afterwards I started with Navision back then, then early steps of Business Central.

00:04:00.789 --> 00:04:04.330
So me and my colleague started working with it.

00:04:04.330 --> 00:04:06.888
So even the bugger didn't work.

00:04:06.888 --> 00:04:09.729
So it was like first, first version of business central.

00:04:09.729 --> 00:04:19.029
We was like installing it, tweaking some things, trying to develop, but uh, yeah, at the end it was success.

00:04:19.029 --> 00:04:35.754
But uh, I'm there from beginning of the life of business central, so to to say, and committed to it from the early beginning, and that's, I think, also one of the reasons why I'm here like a professional in that part.

00:04:35.754 --> 00:04:51.572
So, yeah, generally now working only with Business Central, sometimes Navision, of course, working only with Business Central, sometimes Navision, of course, but preferring Business Central to use most of it, all of its new benefits, technologies and everything.

00:04:52.132 --> 00:04:56.276
So yeah, yeah, the technology is improving.

00:04:56.276 --> 00:05:01.742
It's great, and I know what you mean there are still.

00:05:01.762 --> 00:05:02.564
Navision customers out there.

00:05:02.764 --> 00:05:06.392
I know of a Navision 2009, but it's actually not even 2009.

00:05:06.392 --> 00:05:09.985
It's version 4 on the 2009 platform.

00:05:11.204 --> 00:05:24.908
I think we were also now at the MVP Summit and I think one of MVPs or I'm not sure somebody at the group mentioned that he still has a customer running on DOS.

00:05:26.802 --> 00:05:29.089
Oh geez Wow.

00:05:30.802 --> 00:05:34.250
So it's going far as that.

00:05:34.331 --> 00:05:34.913
It's going.

00:05:36.480 --> 00:05:38.887
I thought AS400 was bad enough.

00:05:38.887 --> 00:05:40.552
No back on.

00:05:41.680 --> 00:05:45.369
Yeah, but a lot of customers are now going to that path.

00:05:45.369 --> 00:06:00.850
Uh, I see a lot of upgrades, even with the partner I am working on now and that whole situation changed straightforward and looking forward more and more customers to get on the cloud.

00:06:00.850 --> 00:06:03.055
But still on the cloud.

00:06:03.055 --> 00:06:09.197
But still some big issues, big changes, big things to be done and some challenges to be resolved.

00:06:09.197 --> 00:06:15.591
So we will come there, but, yeah, it's a path that we need to cross.

00:06:15.891 --> 00:06:25.730
Yes, yes, I mean, I think at that point, if you're using those older versions, I think a re-implementation is the way to go, instead of trying to upgrade or something like that.

00:06:25.730 --> 00:06:27.786
Because you just have a strict challenge.

00:06:27.786 --> 00:06:32.810
You also do quite a bit from the technology side with it.

00:06:32.810 --> 00:06:36.009
You share a lot of interesting articles.

00:06:36.009 --> 00:06:39.266
You write a lot of interesting articles as well.

00:06:40.189 --> 00:06:40.990
Yeah, sure.

00:06:40.990 --> 00:06:54.755
So I'm more into developer side, also functional bit, but even more last year's, but experts, so to say, in the development area.

00:06:54.755 --> 00:07:06.839
And I started also with some AppSource, free apps to develop some add-ins, json add-ins, so there are some cool free add-ins available there.

00:07:06.839 --> 00:07:20.605
But also I wanted to step up more and got into the whole community and started writing blogs alongside with all the conferences.

00:07:20.605 --> 00:07:45.733
And yeah, yeah, the conferences like aren't too hard, because at the faculty when I was studying, I was like teaching out of faculty like for two years and during those teaching period so there was one exam, so to say, regards information systems.

00:07:45.733 --> 00:07:59.887
So we was able to do some tweaking and changes at the faculty with other professors and so on, and we we brought the business central as a full semester like course.

00:07:59.887 --> 00:08:05.154
So now now they are like getting the course of Business Central.

00:08:07.903 --> 00:08:11.172
So this is at a university where they're teaching Business Central.

00:08:11.172 --> 00:08:13.567
Which portions are they teaching?

00:08:13.567 --> 00:08:16.264
The functional aspect of it, or are they teaching the development?

00:08:16.264 --> 00:08:16.968
No, the development.

00:08:18.480 --> 00:08:25.208
There are functional parts, but the course is regarding development.

00:08:25.208 --> 00:08:36.078
So it is like the story of information systems, air systems and so on, and then, from the practical side of that course, there is business dentro.

00:08:36.078 --> 00:08:39.447
That follows that theoretical knowledge, so to say.

00:08:40.168 --> 00:08:56.255
Yeah, we were just talking about that, brad, like you know, like here in the us, where you know there's a couple episodes ago, where can you imagine if there's actually an ERP course and just a process of implementing an ERP?

00:08:56.255 --> 00:09:02.293
Now you could use Business Central as a tool as you're teaching that class.

00:09:02.293 --> 00:09:22.469
I think it will benefit the industry, to be honest with you, because no one ever knows what is an erp, only way after, because you're using it the main challenge also is like finding good people, like good developers, and if they don't have any knowledge about erp systems, it is really hard.

00:09:23.269 --> 00:09:32.691
And at this point, now that they have, like course, the whole semester, they end up with some knowledge and it's easier.

00:09:32.691 --> 00:09:44.687
They start like junior not not not like junior in any programming language, but junior says business central and they are able to start working on it right away.

00:09:44.687 --> 00:10:03.722
So not knowing the processes, of course, and what's behind, and so on and so on, but it is still one path is still crossed and it's easier to overcome all the challenges in Business Central, so it's easier for us to train them, and so on.

00:10:03.722 --> 00:10:04.364
No, it is, I think.

00:10:04.364 --> 00:10:07.009
I do think in Business Central, so it's a new world for us to train in.

00:10:07.029 --> 00:10:12.986
It is, I do think, with Business Central and AL development, to focus on development.

00:10:12.986 --> 00:10:20.610
I have a lot of questions for development for you, but I think with AL development it's not like other languages in the sense of being able to pick it.

00:10:20.610 --> 00:10:23.105
I mean you can pick it up and develop and be able to do something with it.

00:10:23.105 --> 00:10:26.910
But to be able to pick up and develop and to do something for the application is much different.

00:10:26.910 --> 00:10:40.806
Because one of the challenges and I like the approach that you had mentioned where you learn and, chris, this goes with what we're talking about you learn basic business and ERP functionality first.

00:10:40.806 --> 00:10:43.150
Then you can develop.

00:10:43.150 --> 00:10:47.964
Because business central development you're already developing on a framework.

00:10:47.964 --> 00:10:50.354
So it's a language, it's a powerful language.

00:10:50.354 --> 00:11:03.669
You could create separate standalone functions per se right or standalone applications, but to get it to be productive with the application you have to understand that framework first, so you have to understand the relationships to it.

00:11:03.669 --> 00:11:05.413
So yep it's.

00:11:05.793 --> 00:11:14.803
It's that's one of the foundations of what I try to emphasize to someone who's new to development or someone who's looking to get into it.

00:11:14.803 --> 00:11:17.294
Because how do you say like, oh, I want to be an al developer.

00:11:17.294 --> 00:11:18.721
A lot of people want to.

00:11:18.721 --> 00:11:24.850
You know, do python c, sharp, java, you know, pick all the other languages, node.

00:11:24.850 --> 00:11:34.955
But with AL for someone to get into it, it's almost like how do you entice someone to want to come into that space outside?

00:11:36.080 --> 00:12:02.885
It's challenging, like I have a lot of developers behind me and training and being trained by me, and it's a long road, so to say, and like first three months you can determine if somebody is able to do that and if he likes it and if that matches, then you successfully continues.

00:12:02.885 --> 00:12:31.067
But then it's slow progress because, as you said, everyone can code, so the syntax is like straightforward, you can learn any programming language syntax and that's it, so that that's not so like main challenge of programming, it's programming logic abilities to solve the problems, how you you understand, how you would basically make the architecture and so on and so on.

00:12:31.067 --> 00:12:32.203
So much deeper.

00:12:32.203 --> 00:12:48.662
It goes much deeper and I think, like for most of the people, when they learn like AL as programming language, they think, okay, now I know, so now I am not a junior anymore, but that's not true.

00:12:48.662 --> 00:12:53.913
Like then then they spend like one more year learning, learning, learning.

00:12:54.092 --> 00:13:06.725
So we have like experience like even after one and a half year until two years, uh, so then they see like in the past oh, I didn't know that, so it's.

00:13:06.725 --> 00:13:15.365
But it takes time also to understand like what you didn't know, because at some point you would see yourself like I know everything.

00:13:15.365 --> 00:13:21.147
But that's because you take a look on your technical side, like programming, and that's it.

00:13:21.147 --> 00:13:24.548
But the functional side, that's like smashing you.

00:13:24.548 --> 00:13:28.287
No, that's, that's like they're like smashing you no, you're, absolutely.

00:13:28.466 --> 00:13:46.650
you're right, and that's that's the point is, I think, to be a technical developer, I mean you don't have to know every little piece of it, but I think you need to have a good understanding of the framework and the functional aspect of it, because how can you properly develop if you don't know the process?

00:13:46.650 --> 00:13:57.868
Because even adding a field to a sales order header, if you don't understand the posting process and how it flows through properly, you can find yourself in a jam quite easily with that.

00:13:57.868 --> 00:14:07.086
So, with that, you're working with a lot of developers who are coming into the AL language yeah, of developers who are coming into the AL language.

00:14:07.086 --> 00:14:10.601
What are some tips based on the experience that you have with the group that you've been working with?

00:14:10.601 --> 00:14:14.095
What are some tips that you have for someone?

00:14:14.095 --> 00:14:22.126
Or what are some suggestions that you have, or even some challenge you've seen individuals come into that will help someone on their journey of AL?

00:14:22.126 --> 00:14:26.291
And then, with that, how do you attract people to AL?

00:14:27.402 --> 00:14:28.304
I ask a lot of questions.

00:14:28.304 --> 00:14:35.567
Yeah, like I said, it's tricky, but yeah, you don't start like.

00:14:35.567 --> 00:14:49.025
I heard some stories from other partners in Serbia that their juniors usually start with reports, which isn't really too much interesting it starts with a report.

00:14:52.162 --> 00:14:54.549
Don't make them run away, just kidding.

00:14:54.639 --> 00:15:24.174
Yeah, and most of the people actually run away, or after some years they end up like knowing only reports, or like they end up like reports, or like they end up like saying to others like, oh, I had a really boring part of my career starting with reports only, and I I heard that a lot, even from developers who started before, who are now seniors and so on, that they started also their path with reports only.

00:15:24.174 --> 00:15:37.767
So we start here with some simpler functionalities, some interactions with the data and graphical interface, and so on and so on.

00:15:37.767 --> 00:15:54.210
Then we move forward and at some point I usually like to put some add-ins and so on, because they interact maybe with something which is, for them, familiar, like HTML, javascript and so on.

00:15:54.561 --> 00:15:58.568
So you're talking control add-ins, so that somebody could add a user control add-in to the application.

00:15:58.568 --> 00:15:59.985
It's actually cool.

00:16:00.059 --> 00:16:23.932
They connect those two and then it's more familiar, more interesting, they have more interaction Because when you see, like other programming languages you can change like colors and everything Like do graphical changes and UI changes, so to say, and from Business Central you do only background, like back-end development, so to say.

00:16:25.062 --> 00:16:26.027
Some people like that.

00:16:26.027 --> 00:16:33.433
They like that you don't have to worry about creating the forms or the pages, as we call them.

00:16:33.433 --> 00:16:40.011
You just put the objects or you put the fields on the page or whatever controls that you have.

00:16:40.011 --> 00:16:42.365
I call them and it does the layout for you.

00:16:42.365 --> 00:16:44.246
It resizes it, repositions it.

00:16:44.246 --> 00:16:48.666
So it does make it a little bit easier that's what I said, like on the beginning.

00:16:48.706 --> 00:16:57.947
Like you have like three months and you will see, like, if that new new guy is fitting, like in this area.

00:16:57.947 --> 00:17:06.596
So some of them don't, some of them don't, some of them, yes, they fit and you will see that across someone.

00:17:06.596 --> 00:17:45.275
So, yeah, it's not for everybody, but also I like to say that you should do what you love to do and then it's easier for you to come to work and to spend, because for Business Central you need like a lot of dedication, you know, because a lot of changes come coming, uh, in the weeks, in the months, even even, and to follow each of those on top of what is already being released is a lot and you need really, really good dedication and motivation.

00:17:46.279 --> 00:18:01.640
You're saying what everyone is saying right now it's great, the product is great, there's so many features and functionality to it, but it's, as I keep saying, we're at the point now where not only are they changing the language every month, they're changing the application every month.

00:18:01.640 --> 00:18:05.351
So it's depending upon which version you're working on.

00:18:05.351 --> 00:18:09.336
Sometimes it's challenging to say, ah, did they introduce this new development?

00:18:09.336 --> 00:18:11.221
Uh, you know data type, for example.

00:18:11.221 --> 00:18:13.946
Oh, this came out in 26.2, not 26.0.

00:18:13.946 --> 00:18:23.770
So it's uh, it is tough and it does take a lot of dedication, but if you have fun with it, like you mentioned, then it doesn't become work, as they say, it becomes fun.

00:18:24.852 --> 00:18:25.232
It will.

00:18:25.232 --> 00:18:53.589
From the functional side it will become even, so to say worse, but actually better, because I'm actively working with Microsoft product team with contributions for Microsoft apps, so they're mostly from my side, and we are seeing more and more partners, developers, joining for some pull requests.

00:18:53.589 --> 00:19:01.749
So imagine that in a few years, everybody opening some pull requests to fix some issues, some functionalities.

00:19:01.749 --> 00:19:03.567
So it will grow even faster.

00:19:04.279 --> 00:19:13.573
I like the ability for contributions for functionality and again, I'm repeating myself here, but you and I haven't spoken about this.

00:19:13.573 --> 00:19:14.740
I know, chris, and I have.

00:19:14.740 --> 00:19:30.146
I like the ability for community members, partners or individuals to be able to create pull requests to, to add functionality and to also correct functionality that may not be working quite properly.

00:19:30.146 --> 00:19:46.952
My only fear is there will be too much, because how many things can you add into an application where it becomes very difficult to configure, whereas you have so many setup options?

00:19:46.952 --> 00:20:13.047
And from a user perspective and an implementation point of view, we add all these features and functionality and I hate to bring up AI or something, but we almost need some sort of dynamic wizard to help somebody set up all of these new configurations that get added as well, because that functionality can vary quite a bit and I don't know, to me sometimes it could be a point where it's too much Maybe I'm just getting old and it's overwhelming.

00:20:14.020 --> 00:20:22.519
But there is a line like each new feature like which is getting in base app is approved by Microsoft.

00:20:22.519 --> 00:20:29.700
So if it is fully new feature like, then it needs to gather some votes from the community.

00:20:29.700 --> 00:20:35.487
So is that really something that whole community will benefit from?

00:20:35.487 --> 00:20:40.644
So if that functionality is only for yourself, that doesn't make sense.

00:20:40.644 --> 00:20:50.844
So the main point basically of the contribution is to bring new functionality which whole community will benefit from.

00:20:50.844 --> 00:20:59.768
And then that's the important part that the first that functionality idea gets support by whole community.

00:20:59.768 --> 00:21:05.003
And then that's the step where we continue with that idea and develop it.

00:21:05.023 --> 00:21:08.651
Yeah, certainly.

00:21:09.472 --> 00:21:09.933
No, it is.

00:21:09.933 --> 00:21:13.810
I still hope that it doesn't get too complicated.

00:21:13.810 --> 00:21:15.125
I just remember the old days of it.

00:21:15.125 --> 00:21:27.748
So, from the development point of view and you work with the technical point of view, what are some of the latest improvements in the language that had come out recently that you you appreciate and they, like I know?

00:21:27.748 --> 00:21:30.599
A lot of new features come out within the language.

00:21:30.599 --> 00:21:34.575
What are some of the recent changes that many may not be aware of?

00:21:34.575 --> 00:21:46.304
That you like I know, because it's very difficult, even from the partner point of view or from the customer side point of view, if you're an internal developer, to keep up with it because you're working with a version that may not be quite current.

00:21:46.304 --> 00:21:52.006
Even if you're online, you may not be out with the latest release because you can delay those updates several months now.

00:21:52.046 --> 00:22:19.005
Yeah, I I think like uh from my experience and in the past weeks so I had used the most mostly like the json parsers, like get text from the json uh token and so on, so those build in now uh features and also the date features like get date, get the month and so on, so that that has been like pretty handy and uh for some apps.

00:22:19.005 --> 00:22:26.134
I I did compile on the latest version but but at the end it was breaking on older versions.

00:22:26.134 --> 00:22:31.182
It had to be done on two implementations for now.

00:22:31.182 --> 00:22:40.005
But I think that part at this point is mostly used by me at least.

00:22:40.224 --> 00:22:48.199
Yeah, and then also, I follow some of the stuff that you write as well.

00:22:48.199 --> 00:22:58.207
You write some very uh good articles and everyone, I think, will have a link to to your blog in there and should read it too, but I do some interesting things.

00:22:58.207 --> 00:23:01.080
Um, I'd like to do an article on the test.

00:23:01.080 --> 00:23:03.606
The hdp test calls that we can do now as well.

00:23:04.648 --> 00:23:12.452
Uh, yeah, that, uh, that's, that's also one of the thing, and also, like, uh, mocking of the tests.

00:23:12.472 --> 00:23:29.903
So but whole story behind, also like for page scripting oh, you're gonna go down a road that you're gonna send me on a tangent I think everyone loves that I'll be quiet and anytime we talk about bc and we talk about page scripting.

00:23:29.983 --> 00:23:30.986
I mean I swear it's.

00:23:30.986 --> 00:23:35.741
It could be every episode, because we love it so much but.

00:23:35.842 --> 00:23:50.523
But there is story behind, like um, like I said, like I started my career as qaA, then moved to development JavaScript, php, java for automated test in selenium and so on and so on.

00:23:50.523 --> 00:24:00.659
So there is a full background and on the after the faculty, I cooperated with one of the professors there and we there are.

00:24:00.659 --> 00:24:12.125
There is like course about application testing and we've written the whole book for the students, which is also available.

00:24:12.125 --> 00:24:26.491
I think I put it also one part I translated on english and put on the blog, because the methodology which is described in that book is basically what is page scripting based on.

00:24:26.491 --> 00:24:41.407
So, yeah, the, if you understand the methodology, you will be able to uh, to understand better page scripting itself like uh, and uh page scripting itself like uh.

00:24:41.407 --> 00:24:49.049
It came like on top top because all the experience from Selenium tests and so on, that was now.

00:24:49.049 --> 00:24:56.351
I was able to do that same with Business Central.

00:24:57.294 --> 00:25:09.412
No, it's a wonderful feature and I'm looking forward to it being enhanced and officially released, hopefully in the future, in a future version.

00:25:09.412 --> 00:25:22.826
It's still in the preview, the preview tag, which means many things, but I think, with everyone's interest in it and some of the things I've seen at some of the conferences, there's a good future for it.

00:25:22.846 --> 00:25:27.523
So even now, now, since it was on the conferences, even on the tech days.

00:25:27.523 --> 00:25:33.259
So, uh, page scripting is getting more, more capabilities and new features.

00:25:33.259 --> 00:25:36.707
So that part is not anymore under nda.

00:25:36.727 --> 00:25:38.851
So okay then you can tell us now?

00:25:38.851 --> 00:25:40.314
Right, it was at bc tech days.

00:25:40.314 --> 00:25:44.326
Can you tell us about some of the new features that are planned and released?

00:25:44.386 --> 00:26:25.692
because, again, as you had mentioned, if they, if they present it at the conference, then it's no longer secret, I call it secret, I call nda secret true, true, because this was disclosed and then, since it was on conference, like you said, it's not not disclosed anymore, but the features like now, from what I remember, some variables, dynamic variables I'm not sure like I forgot fully, I have to refresh myself, but there are some big improvements, I think, also with the properties which you can like on the right click, choose and so on.

00:26:25.692 --> 00:26:32.328
I think one thing I liked the most, but I cannot remember what was it without looking on my notes.

00:26:34.541 --> 00:26:35.747
The BC Tech Days videos.

00:26:35.747 --> 00:26:37.467
I think they're starting to come out now.

00:26:37.467 --> 00:26:39.385
I think they're starting to publish them.

00:26:40.060 --> 00:26:42.588
There is a change from the past years.

00:26:42.588 --> 00:26:49.700
This time, videos are already out, but only for ticket holders.

00:26:50.542 --> 00:26:51.807
Oh, wow.

00:26:52.700 --> 00:26:56.691
After a few months from now I think that's what I heard at least.

00:26:56.691 --> 00:26:58.846
So it will be publicly available.

00:26:58.846 --> 00:27:10.048
So this is just to protect somehow the ticket holders and to gain most of the benefit at first ticket holders, then everybody else.

00:27:10.901 --> 00:27:12.468
I understand that that makes sense.

00:27:12.468 --> 00:27:21.549
It does make sense because it's often when you go to these conferences that there's many sessions and something like BC Tech Days that has a lot of good technical content.

00:27:21.549 --> 00:27:29.900
You can't be in two places at once, so to be able to go back and reference the videos and have some time to digest them before they're released is good as well.

00:27:31.603 --> 00:27:37.132
Yeah, exactly, and then you don't have, like me, to remember all the stuff.

00:27:37.132 --> 00:27:40.961
I attended that session.

00:27:40.961 --> 00:27:56.099
I know what it's about, so when I need to refresh what's new, what will be coming, I can just jump to that video and then watch that part that is the world of 2025, I tell everyone.

00:27:56.480 --> 00:28:03.022
You can understand something and just be aware of it, but you have to know how to find it, and I think that's becoming easier and easier.

00:28:03.904 --> 00:28:18.457
Uh, with yes yeah, not to mention that with the ai, I saw that even now they have the mcp server for learn that they released the other day, uh, so that you have all these, um, just ways to get knowledge.

00:28:18.457 --> 00:28:20.483
Sometimes I think there's too much knowledge, but I agree with you.

00:28:20.483 --> 00:28:35.796
You know, understanding what's available and then knowing just knowing that sometimes can help you so you can figure out what you need to get and where you need to find the information, which is good.

00:28:35.796 --> 00:28:37.523
Go back to page scripting.

00:28:37.523 --> 00:28:38.468
It's a question.

00:28:38.468 --> 00:28:39.505
I wanted your opinion on this.

00:28:41.340 --> 00:28:44.067
I get asked this question a lot, a lot.

00:28:44.067 --> 00:28:51.511
I've done several sessions on page scripting and I've even talked with individuals professionally about page scripting.

00:28:51.511 --> 00:28:54.146
How do you determine?

00:28:54.146 --> 00:29:09.775
All right, so we have unit tests that we can create and code from a development point of view, and the idea of page scripting was, again, it's not replacing the unit development test, it's just to give you another user acceptance testing mechanism.

00:29:09.775 --> 00:29:16.071
Yeah, what should someone do to determine?

00:29:16.071 --> 00:29:20.869
Or how should someone determine what needs to be a page script, for example?

00:29:20.869 --> 00:29:26.288
Or like how to determine how to structure the page scripts or how to start and finish their page scripts?

00:29:26.288 --> 00:29:43.207
Like what approach if someone wants to start using page scripts and should they take to use that feature to give them user acceptance testing or provide them user acceptance testing or provide them user acceptance testing yeah, that's like exactly point of my book.

00:29:44.809 --> 00:29:49.194
Okay, like, uh, the page scripting is methodology wise.

00:29:49.194 --> 00:29:54.330
When you take a look, it is black box, black box texting, uh testing.

00:29:54.330 --> 00:30:00.205
So you are testing something, what you don't know, what is the code behind?

00:30:00.205 --> 00:30:13.545
So that's like, when we take a look from the front and side, you are testing the functionality, you click around, you execute, but you don't see subscribers, you don't see the procedures and everything.

00:30:13.545 --> 00:30:21.575
So you you test only one pad, but based on the input.

00:30:21.575 --> 00:30:23.041
So what is black box testing?

00:30:23.041 --> 00:30:28.839
You have some inputs, you they, they go through the box and there is an output.

00:30:28.839 --> 00:30:40.865
So basically, you know the output which you want, want to have, and you know the inputs, but the whole functionality which is in the middle, it's not, uh, not visible to you.

00:30:40.865 --> 00:30:43.029
So you compare only those two.

00:30:43.490 --> 00:31:08.112
And when you have the unit tests, that's whole different story because you are writing them either with uh test driven development, where you first do the test, then development, or you do the development, then see the test coverage, like to cover the test, the function and the test pads as most as possible.

00:31:08.112 --> 00:31:15.173
You know each process and everything and to do that with page scripting it's not possible.

00:31:15.173 --> 00:31:17.858
Like, not always.

00:31:17.858 --> 00:31:23.048
You are controlling some inputs like you.

00:31:23.190 --> 00:31:35.708
Some some variables are differently calculated in the background or dynamically like retrieved, and you cannot do it everything like that with page scripting and with the unit tests.

00:31:35.708 --> 00:31:59.012
You can like set up, initialize, initial setup variables, then run the tests and then cover like the parts that you want and then tweak it out, tweak it out and then you will have like really good test coverage but on black box, like so the page scripting, I would not see it as a tool only for testing.

00:31:59.012 --> 00:32:05.313
That's what I'm also speaking about with other members of the community, so to say.

00:32:05.313 --> 00:32:18.136
It's also a really good tool to reproduce bugs, to capture some scenarios and even for learning certain processes.

00:32:18.136 --> 00:32:29.449
So if you record it then you can easily transfer to another developer, say you do this process and this and this will be created, for example, and so on.

00:32:29.980 --> 00:32:48.913
So there are multiple functions of it and one of it is like testing itself, but it's totally different methodology from the testing I laugh and I chuckle because that is the case, that with the page scripting that I do see it used a lot more than for testing.

00:32:48.913 --> 00:32:53.704
I do see it used for training, for repro and even correction.

00:32:53.704 --> 00:33:03.951
I've seen cases where someone's updated data, like on a setup or something, and sent it to someone and said, here, run this script and it will update Really, yes, yes.

00:33:03.951 --> 00:33:22.487
So if you think from the customer point of view, where if you're supporting and you're doing support for a customer and they may have a problem and you realize the problem is, let's just say, they don't have something enabled on the purchase and payable setup and they may or may not know it, you can record the script for them to go back and enable that feature and send them the script and let them run it.

00:33:22.487 --> 00:33:24.961
Or if they have to change some data or fix some data.

00:33:24.961 --> 00:33:26.785
So it's clever.

00:33:26.785 --> 00:33:41.894
It's also good for repro, as Steph mentioned, is you can, if you're giving support for somebody, if they have a process that's not working properly or they have an error message that pops up, you'd say, hey, can you just show me what you did to get to that point?

00:33:41.894 --> 00:33:45.759
So now you just have them send you the script and you can run the script and see what they're doing outside of the training.

00:33:45.880 --> 00:34:05.039
So, to go back to what you're saying, so the unit testing, you have more control because you can do the initialization of the data or anything else within the system that you need, anything else within the system that you need, and then go through the tests where the page scripting is black box testing, which you know the inputs and you know the outputs, and there's going to be some assumptions that there's going to be some certain setup already there.

00:34:05.039 --> 00:34:14.472
We're just going to test these inputs with our setup for these outputs and that's what we could use it for testing point of view.

00:34:14.472 --> 00:34:16.480
Again, it's one of those questions.

00:34:16.480 --> 00:34:17.121
It's this great tool.

00:34:17.121 --> 00:34:17.581
A lot of people use it for testing point of view.

00:34:17.581 --> 00:34:17.981
Uh, again, it's, it's one of those questions.

00:34:17.981 --> 00:34:18.400
It's this great tool.

00:34:18.400 --> 00:34:20.465
A lot of people use it for a lot of different things.

00:34:20.465 --> 00:34:28.094
But okay, so now I want to run actual tests because now, even within pipelining, you can run these page scripts.

00:34:28.856 --> 00:34:30.842
Uh, so not only do you have your unit test?

00:34:31.202 --> 00:34:34.230
a good feature yeah, so now we can do that as well too.

00:34:34.230 --> 00:34:37.451
And with replay you can do a whole batch of tests uh, as well, instead of having do that as well too.

00:34:37.451 --> 00:34:40.746
And with replay you can do a whole batch of tests as well, instead of having them individual as well too.

00:34:40.746 --> 00:34:47.929
So your book covers that, so we'll have to read We'll have to get it translated and read it right.

00:34:50.364 --> 00:35:02.259
Yeah, it's important to understand also those two methodologies and not to mix it up, like to determine, based on your needs, what you want to accomplish, and also those two methodologies and not to mix it up, like to determine, based on your needs, what you want to accomplish.

00:35:02.860 --> 00:35:04.302
Yeah, yeah and then.

00:35:04.302 --> 00:35:09.184
Yeah, see, now my mind's going with the PageScript and so many things.

00:35:09.244 --> 00:35:17.768
I would love for it to do, but I'm going to hold off until everything comes out in the next release to see what's there and to see where my wishlist goes with that as well too.

00:35:17.768 --> 00:35:21.023
So also now to go back.

00:35:21.023 --> 00:35:28.342
So, with the development point of view from you, what are some things with the?

00:35:28.342 --> 00:35:32.172
We talked about some tips and tricks or some tips for getting somebody into AL.

00:35:32.172 --> 00:35:42.349
How do you think we could attract more talent to come into working with Business Central and AL development?

00:35:43.840 --> 00:35:47.927
Yeah, that's really you have the class that you teach.

00:35:47.927 --> 00:35:49.980
So how do you draw?

00:35:49.980 --> 00:35:51.164
People to want that.

00:35:52.541 --> 00:35:55.820
Those are like students, those are juniors.

00:35:55.820 --> 00:36:09.875
But if we are speaking about juniors like it's nothing, it's easier than from seniors who want to change, like the language where they work on and so on.

00:36:09.875 --> 00:36:13.469
But there isn't easy way to attract them.

00:36:13.469 --> 00:36:15.074
There isn't easy way to attract them.

00:36:20.199 --> 00:36:31.739
Is it better to have someone coming from a functional side and then going into development or bringing in somebody, somebody into the development that has no prior knowledge of even other programming languages?

00:36:31.739 --> 00:36:50.545
Because I think that's one of the things that I've noticed, that the people that have those experience with other programming language, they try to replicate some of the things that they could do, and then I realized that I can't do it here, and so they get a little bit of frustration because they have that expectation of what it can do for you.

00:36:50.545 --> 00:36:56.510
I'm curious about what your perspective would be If you're attracting somebody.

00:36:56.510 --> 00:37:02.556
Would it make sense for someone that maybe knows the business process or functional side of things going into development?

00:37:03.157 --> 00:37:05.940
Because, there's plenty of functionals out there right, yeah.

00:37:06.981 --> 00:37:26.780
So from the functional side we look for the totally different candidates, Like the ones who know finance, accounting and so on, and then business central for them and it's easier to attract like new consultants than developers.

00:37:27.561 --> 00:37:38.074
But from for developers like, uh yeah, no luck to to get like functional and then to switch to development.

00:37:38.074 --> 00:37:43.969
Because in order to do like programming you need to understand.

00:37:43.969 --> 00:37:56.474
It's not just typing the code and at some point you are ending like writing blindly some of the statements but not understanding what happens behind.

00:37:56.474 --> 00:38:05.034
And you know, my sessions like lately was everything regarding performance and AL and so on.

00:38:05.034 --> 00:38:37.052
So you need deeply to understand, like after you get like your path from junior to major, then to senior, then you need to understand how business central in the background works, that on the SQL part, on the platform part, and then combine all the knowledge knowledge and with the candidates which are really just functional for them, it was really challenging to understand anything which goes beyond Business Central background.

00:38:37.052 --> 00:38:52.088
If we mention SQL, yeah, SQL here and there, but the whole architecture of Business Central, Azure and everything that becomes challenging.

00:38:54.181 --> 00:38:55.447
That's an interesting take, yeah.

00:38:58.184 --> 00:39:01.726
Well then you can also say someone who goes from division to business central.

00:39:01.726 --> 00:39:10.269
So yeah, exactly, I'm not even going down that road because, as we always talk about with everybody, it was the wild wild west at one point.

00:39:10.269 --> 00:39:13.503
Uh, it's still the wild wild west, but it's getting a little tamer.

00:39:13.503 --> 00:39:17.851
Individuals are realizing it's not the Wild Wild West anymore.

00:39:19.173 --> 00:39:19.534
Well it is.

00:39:19.534 --> 00:39:24.152
You just can't go to the street and just whip out and shoot.

00:39:26.403 --> 00:39:29.172
Well, I see some people try to do that.

00:39:29.172 --> 00:39:36.114
You can publish the extensions and I think create some havoc.

00:39:36.114 --> 00:39:37.922
Extensions and I think create some havoc.

00:39:37.922 --> 00:39:47.704
You had mentioned some performance, and performance is another topic that I see quite often is exactly as you mentioned.

00:39:47.704 --> 00:39:54.893
It's either from someone who came from Cal and thought that you could write code the same way.

00:39:54.893 --> 00:39:59.389
The syntax is similar, there's a lot of similarities, but again the platform is different.

00:39:59.389 --> 00:40:11.048
So sometimes the code that was I summarize this loosely sometimes code that was good in Cal is not good in AL and a lot of individuals don't accept that.

00:40:11.048 --> 00:40:23.927
And I see a lot of people who are doing migrations of code from Cal to AL and they're like well, in Cal it just worked, perfect and it was fine, and now it doesn't work and again it's Brute force.

00:40:25.581 --> 00:40:27.887
Well, I mean that mindset's a little challenging because you're moving.

00:40:27.887 --> 00:40:34.380
You're taking one technology and moving it into another technology and assuming that it's going to work the same way.

00:40:34.380 --> 00:40:36.628
It's almost like putting hay into a gas car.

00:40:36.628 --> 00:40:44.849
I tell everybody, right, you had horse and buggy used to feed hay to the horse right To eat, so that the horse would have fuel to move.

00:40:44.849 --> 00:40:46.920
And now you have gas or electric cars right.

00:40:46.920 --> 00:40:48.103
They still kind of work the same.

00:40:48.103 --> 00:40:48.907
They do the same thing.

00:40:48.907 --> 00:40:49.989
That's a better analogy.

00:40:49.989 --> 00:40:53.690
You don't put gas in an electric car, you put electricity for it to work and become efficient.

00:40:53.690 --> 00:41:03.773
So what are some of I've seen some of your performance articles as well uh, and what are some of the performance tips?

00:41:03.773 --> 00:41:09.675
Like if you can think of some of the top performance tips that you have uh can relay.

00:41:09.675 --> 00:41:14.827
Like if you the mistakes that people have made or things that you realized uh can work to.

00:41:14.827 --> 00:41:17.072
I know it's a very vague question, I understand.

00:41:19.228 --> 00:41:23.748
Yeah, the question will answer from itself when this Tech Days video come out.

00:41:23.748 --> 00:41:26.146
There.

00:41:26.146 --> 00:41:35.391
It was a really popular session and the whole room was filled the biggest room so I was really glad to see a lot of people.

00:41:35.391 --> 00:41:46.547
But the people who work with the performance are very little part of this community, so you can count them on two hands.

00:41:46.907 --> 00:41:59.550
Yes, you can, you can so it's really, really challenging area and you need a lot of experience in that area.

00:41:59.550 --> 00:42:12.423
And, yeah, so, even for for some optimization patterns which you will see like they work from certain version, even on BC.

00:42:12.423 --> 00:42:15.009
Well, you mentioned already nav.

00:42:15.009 --> 00:42:36.385
So nav from one version to business central, even if a full procedure will work the same, there is a high chance that now you can do optimization at business central part so you can go beyond, like the, the performance which you had.

00:42:36.385 --> 00:42:44.471
And the simplest example is set load fields which can limit your queries and so on.

00:42:44.471 --> 00:42:51.155
So that's one little thing which can a lot improve your queries and so on.

00:42:51.155 --> 00:42:54.237
But that has not been existing.

00:42:54.237 --> 00:43:06.614
And if you have a simple procedure which was working in an nav and is working now in business central, you can go beyond and beyond to optimize it more and more.

00:43:06.614 --> 00:43:09.648
And then that's the benefit.

00:43:09.889 --> 00:43:28.568
And then, from the session where I mentioned that, there is actually some platform optimization, those platform optimizations happen from a certain version of Business Central and I was focusing on the session from Business Central 25 and up.

00:43:28.568 --> 00:43:30.056
So the tests are conducted on those two versions.

00:43:30.056 --> 00:43:37.550
So even if you're using, like BC 22, 23, you may not have those platform optimizations.

00:43:37.550 --> 00:44:00.621
So basically, the platform looks for your patterns, uh, based on your code, not the code, but the, the queries which are exchanged between business central and sql, and then analyze it and changes slightly those queries, that your queries are now more optimized, so to say.

00:44:00.621 --> 00:44:13.851
And then, even though the code is same but more times repeated, if you're running into the loop, platform itself will change slightly your code without you knowing it, so to say.

00:44:13.871 --> 00:44:27.309
Okay, so one of the tips that you said that someone could look at is set load fields, and set load fields just for those that may not be familiar with it is on the record that you have.

00:44:27.309 --> 00:44:33.108
You can, if you're doing a query or you're looking to retrieve records, you can determine which fields you bring back.

00:44:33.108 --> 00:44:38.003
So if you have a table with 100 fields with set load fields, you can pick that.

00:44:38.003 --> 00:44:42.007
You only may need to have five of these fields come back because you're not going to look at any of the other fields.

00:44:42.007 --> 00:44:46.429
So you can get some performance because you're not retrieving the entire record.

00:44:46.429 --> 00:44:51.146
You're only retrieving the specific fields that you need, which is a slight improvement.

00:44:51.146 --> 00:45:09.724
But if you do it, like you said, over and over again, or if you have large data sets, it can give you a little boost in performance yeah, when, when the video comes up, like you will see, like real example, like with uh, also queer, uh, queries, uh, which are made in both calls.

00:45:10.264 --> 00:45:25.697
It is like uh one query because setLoadField contains already reduced number and the time which needs to be pulled is also shown in the graph.

00:45:25.697 --> 00:45:32.273
So when the video comes up, everything will be available and with a lot of examples.

00:45:32.273 --> 00:45:38.251
But also one more popular example is like uh when I've written the blog.

00:45:38.251 --> 00:45:49.440
So the one example took like uh, community attention, so to say, and it was like uh can I guess, can I guess, can I guess?

00:45:49.440 --> 00:45:52.626
Yeah, is empty true am I right?

00:45:53.007 --> 00:45:53.387
am I right?

00:45:53.387 --> 00:45:55.751
Yes, I read that.

00:45:55.751 --> 00:45:57.295
I followed that whole conversation.

00:45:59.442 --> 00:46:21.847
So at the end there was like five more blogs, but yeah, so my point that that blog was just that that you should not use isempty before, just that that you should not use use is empty before.

00:46:21.847 --> 00:46:26.262
And I did more examples and show full sequel background on the tech days and that was also my first example which I show.

00:46:26.262 --> 00:46:34.786
So basically what you are doing is repeating is empty before, fine set because of platform optimization.

00:46:34.786 --> 00:46:52.083
So then I captured all the events and then loop through and at some point the query changed like to optimize one, and then you had like is empty and then checking automatically is empty before fine set it.

00:46:52.083 --> 00:47:04.576
Uh, it wrapped whole, whole query with it, wrapped call query with if exist, and then if you do is empty in front, you will be just doubling the same thing.

00:47:09.960 --> 00:47:12.184
And that's where platform optimization comes up.

00:47:12.184 --> 00:47:13.226
So that's another tip is empty.

00:47:13.226 --> 00:47:14.588
That was an interesting conversation.

00:47:14.588 --> 00:47:16.931
It was a period of time I was following it.

00:47:16.931 --> 00:47:20.056
I was confused Should I use is empty or should I not use is empty?

00:47:20.056 --> 00:47:20.836
That was an interesting conversation.

00:47:20.836 --> 00:47:21.777
It was a period of time I was following it.

00:47:21.777 --> 00:47:23.139
I was confused Should I use is empty or should I not use is empty?

00:47:23.519 --> 00:47:25.327
But I think, like you said, is it filtered through?

00:47:25.327 --> 00:47:55.269
I also got a lot of feedback from the community because I was doing some other sessions on days of knowledges regarding performance, but in different parts from bc tech days, and the one one thing which was used more in nav was fine minus I was just going to ask that the fine set versus the fine minus, fine plus and the fine first and the fine last yes, yes, so that's

00:47:55.289 --> 00:48:24.431
reading my mind when, when people saw, like what is the difference, they they realized oh there, there is a difference, because with five minus you are just pulling like uh, 50 records each time, like and uh, you need, when you have more than 50 records and you are looping through, you are executing next and then crafting the full, fully new query to pull rest of the records.

00:48:24.431 --> 00:48:26.105
And we did define set.

00:48:26.105 --> 00:48:29.188
You will just put everything in data set.

00:48:29.188 --> 00:48:48.802
So I made some visualization for the tech days so you will be able to see, like the communication wise, how that happens, like the statement, then sql server, then again that another query comes to sql, then fills the buffer additionally.

00:48:49.282 --> 00:49:03.757
And then we also need to speak about memory relocation, because that also has is existing at business central background on the platform and even though that you don't see it, it is existing.

00:49:03.757 --> 00:49:22.411
You cannot control it, as in C, sharp and so on, but it does some things automatically and there are also some few examples during the busy tech days, like for the memory side and also from the pointer side.

00:49:22.411 --> 00:49:30.855
So how is certain record type stored in the memory of Business Central?

00:49:30.855 --> 00:49:47.791
So the biggest difference was with text and text builder, where the text is just stored in the memory and then you need to relocate and everything because you have just a certain amount of the space.

00:49:47.791 --> 00:50:16.380
But whereas with text builder you have the pointer in the memory and everybody who worked with pointers knows that that's easier to expand, like, yeah, it's not working like that, that you already allocated the memory so and that was like a big difference into the performance and so really, really a lot of interesting.

00:50:16.965 --> 00:50:18.862
A lot of little tricks so I want to just jump back.

00:50:18.862 --> 00:50:33.481
So, between the fine set and the fine minus, fine minus retrieves a finite number of records and if you need to use more than the records retrieved then it will keep continuing to do the queries, whereas fine set will return the entire result to you.

00:50:33.481 --> 00:50:34.240
Yeah, so there are.

00:50:34.240 --> 00:50:47.072
So if you will return the entire result to you, so if you maybe similar to like find first, find last, if you need to use only a few records, then find minus may be more performant, whereas if you need to go through everything.

00:50:47.172 --> 00:50:48.653
Find set would be more performant.

00:50:48.653 --> 00:50:49.655
See, that's the big thing.

00:50:49.655 --> 00:50:51.197
I talk with individuals about that.

00:50:51.197 --> 00:50:59.206
There are different cases where you'll still need it, because I was talking with somebody who looked at code and there was a fine minus in there and they said, wow, you're supposed to use fine set now.

00:50:59.760 --> 00:51:04.927
So I had a big discussion with them and explained to them there is a difference to what's happening.

00:51:04.927 --> 00:51:13.742
One is just using block sizes, and that's back from the old Nav days as well, where you could actually specify the cache size of the records that you're retrieving.

00:51:13.742 --> 00:51:16.028
So there's a big difference there.

00:51:16.028 --> 00:51:16.750
Chris, Did you know that?

00:51:19.612 --> 00:51:24.876
But everything is dependent on the rest of the code and the whole logic.

00:51:24.876 --> 00:51:36.550
So there are use cases for each scenario and even slight change in the code can result that you need to write it differently.

00:51:36.550 --> 00:51:39.309
So it really depends from the lot.

00:51:39.309 --> 00:51:47.443
But these things which we are speaking about are like AL patterns, and that's one thing also.

00:51:47.443 --> 00:51:58.914
Which I am trying to do now is also to spread word about AL guidelines, because those are important for a lot of reasons.

00:51:58.914 --> 00:52:06.715
First, I will mention AI, that you will be able to use AL guidelines.

00:52:06.815 --> 00:52:28.514
As a memory where I have been speaking with Microsoft, that copilot in the GitHub is now working on pull request review and it's not working great because it doesn't have too much context about best practices and everything.

00:52:28.514 --> 00:52:46.068
But now, if we have a whole community to work on AL guidelines, we will be able to give Copilot context of what are the best practices, so we'll get more accurate pull requests and so on.

00:52:46.068 --> 00:52:47.811
So that is one thing.

00:52:47.811 --> 00:53:00.213
And second thing is contribution wise and your project side wise, that everybody should write most performant, most standardized code.

00:53:00.213 --> 00:53:13.744
So your way of writing the code should not differ much as the code from microsoft, and that's that's also one of the challenges for me and the rest.

00:53:13.744 --> 00:53:25.672
Reviewing base app pull requests because you end up like reviewing a lot of things which are repeating always and not according to best practices.

00:53:25.900 --> 00:53:27.005
Yes, and that's well.

00:53:27.005 --> 00:53:30.679
You said that's Microsoft, but some of that Microsoft code needs to be refined too.

00:53:30.679 --> 00:53:34.286
To be honest, I know yeah, it's very well.

00:53:34.286 --> 00:53:36.028
You said to write it like Microsoft.

00:53:36.028 --> 00:53:37.831
I mean some of it is.

00:53:37.831 --> 00:53:45.726
It's very difficult to every release with changes of language and platform and architecture to replace all of the code, I know.

00:53:45.726 --> 00:53:50.891
But so there are some areas that could lead a little attention as well too.

00:53:52.443 --> 00:53:53.126
Yeah, of course.

00:53:53.126 --> 00:54:04.507
No, no, I didn't thought that the code is flawless and it is also receiving a lot of attention each time, Like there are a lot of bugs and so on.

00:54:04.507 --> 00:54:06.567
So that's being covered also.

00:54:06.567 --> 00:54:08.583
Yes, but slowly.

00:54:08.583 --> 00:54:11.851
Like BaseApp is really big, oh it's huge.

00:54:11.851 --> 00:54:20.847
As you said, like you cannot change everything like that, and they're pulling it out too, with the foundation layer, with the system app with the base app.

00:54:21.119 --> 00:54:21.742
So now it's.

00:54:21.742 --> 00:54:23.509
I like what they're doing with it.

00:54:23.509 --> 00:54:30.708
It just takes time and it's not easy to do, and also it's not easy to do while you have a large customer base as well.

00:54:30.708 --> 00:54:35.550
So there's a lot of people using the application and you can't just shift it all up like that.

00:54:35.550 --> 00:54:39.563
So we talked about Find first and excuse me.

00:54:39.563 --> 00:54:41.268
We talked about fine set and find minus.

00:54:41.268 --> 00:54:44.418
We talked about the use of is empty.

00:54:44.418 --> 00:54:46.266
We talked about the text builder with the pointers.

00:54:46.467 --> 00:54:50.362
So many people I talk with don't understand the benefits of using text builder.

00:54:50.362 --> 00:55:02.534
They say I could just concatenate all these strings together or build things and it works fine, but it's, it's the little things that add up over time and it's when you start repeating a lot of these calls.

00:55:02.534 --> 00:55:05.565
Is that when you really start to notice the, the impact on it.

00:55:05.565 --> 00:55:06.907
Do you have any other tips for us?

00:55:06.907 --> 00:55:13.597
I know the video will be out of your session, hopefully at some near point in the future, but is it?

00:55:13.597 --> 00:55:19.188
Do you have another to round out some of these performance tips, some other big performance tips that you've encountered or you have?

00:55:21.030 --> 00:55:42.697
well, yeah, we can like, uh, dig deeper and deeper, like I like digging deeper there there is, uh, there is basically a lot uh and uh, yeah, these are like the most most popular, uh, popular ones, but uh, yeah, uh.

00:55:42.697 --> 00:56:03.179
So which which would be like more more interesting is also let me take outfield and autocult field, because also number of queries which are sent to the SQL, it can cause the SQL overload.

00:56:03.179 --> 00:56:26.311
So with calc field you will be sending, if you are doing repeatedly in the loop on some set of the records, you will be for each loop sending one SQL query, versus when you do the autocalc fields, that additional calculation will be included into fine set.

00:56:26.311 --> 00:56:34.188
You know, because that's that, uh, that autocalc fields is sent, uh set before fine set and then you do the fine set.

00:56:34.188 --> 00:56:48.170
So the platform itself can do basically optimization and craft into the one query and you don't cause any more sql overload.

00:56:48.331 --> 00:57:01.224
So that's, that's also one big one big ones, the auto calc fields versus the calc fields individually within each call yeah.

00:57:01.465 --> 00:57:03.849
So then we have like also some examples.

00:57:03.849 --> 00:57:14.498
We had, like uh with um, with errors on the sequel, so there was some pattern, uh which is, which can be used, but for the singleton tables.

00:57:14.498 --> 00:57:16.925
So if not insert, then modify.

00:57:16.925 --> 00:57:17.909
You may be seeing.

00:57:18.440 --> 00:57:19.987
Yes, I saw that article too.

00:57:21.019 --> 00:57:40.909
So what it does it basically, if the insert doesn't succeed, it will return the error and you have the handling of the business central, then some events triggering and everything until another query for modify is crafted and then sent to the SQL.

00:57:40.909 --> 00:57:51.065
And that takes time, not basically the sending of the insert query, but the error which is returned by the SQL and then has to be parsed.

00:57:51.405 --> 00:58:00.304
That takes some time and then yeah, so the use of if not insert, then modify, is non-performant.

00:58:00.304 --> 00:58:01.487
What should somebody do instead?

00:58:03.199 --> 00:58:05.568
Well, checking if the right operation.

00:58:05.568 --> 00:58:25.679
So if you check like if the table is empty beforehand or even with the get, because get happens almost instantly, so you will, even though you are sending the query, it will be like fully optimized query, you will get a really fast response.

00:58:25.679 --> 00:58:41.126
And then so we either checking both ways, so if it is empty, so not existing record, you will choose proper action, in this case insert, else you will modify, and similar to the get.

00:58:41.126 --> 00:58:46.840
So if you have get got that record you can modify it, else you just insert.

00:58:46.840 --> 00:58:49.784
So you will do one additional query.

00:58:50.487 --> 00:59:00.126
But you see, like that query is at this point really optimized so it returns a really fast response versus handling of the error.

00:59:00.126 --> 00:59:05.081
So you are not having one additional query in case of error.

00:59:05.081 --> 00:59:10.460
But that error handling takes more time than having one additional query.

00:59:10.460 --> 00:59:23.907
So there is like not logical when you say, say it's everything regards uh sql statement counts and or something like that, it is not always uh the clear situation like that.

00:59:23.907 --> 00:59:41.632
So even even uh, in this case you can have like more sql calls but better performance, because there is nothing like handling of error, it is just straightforward and those SQL statements are already optimized.

00:59:42.661 --> 00:59:43.626
See, that's a good one too.

00:59:43.626 --> 00:59:53.208
It's like again it's all these little things that everybody's used to writing and thinks that, ah, if not insert, then modify that end up causing some problems.

00:59:53.208 --> 01:00:02.157
And if you do it repeatedly I've seen people do this repeatedly and it works, it can add up.

01:00:02.157 --> 01:00:03.766
It can add up over time.

01:00:03.766 --> 01:00:04.670
That's what ends up happening.

01:00:04.670 --> 01:00:12.110
People think one time yeah, one time you may be okay, but if you start to do this repeatedly in the course of the action, anything that you have that takes time.

01:00:12.110 --> 01:00:16.050
It could potentially slow everybody else down too, depending upon what you're doing.

01:00:17.713 --> 01:00:30.983
Yeah, and combining all of this, because in my tests I have been isolating each of the examples to have clear performance of each example separately.

01:00:30.983 --> 01:00:40.262
But if you combine those performance optimizations you can get really really much better results.

01:00:40.262 --> 01:00:57.940
And also, if you are doing everything wrong, it can pile up like you said, like even though it's not repeated, but with repeat, repeating it in the loops and more users and more users, more sessions and so on.

01:00:57.940 --> 01:01:02.159
So it can get really really bad yes, yes, I can get there.

01:01:02.641 --> 01:01:03.867
Yeah, that's another interesting one.

01:01:03.867 --> 01:01:06.355
Let's round it out with one more so we can have our five.

01:01:06.394 --> 01:01:17.090
So we have yeah, I'm not going to repeat them all we went on, let's do one more uh, yes, one thing I would love to get into, but I don't know if we have time for the conversation.

01:01:17.090 --> 01:01:41.277
Is locking of the tables yes, so, but we don't have to but you can go on to your other, fifth highest, but at some point, and then even with the new functionality that they added to the language to be able to pick up within the database, yeah, basically locking got really improved with free state locking.

01:01:41.277 --> 01:01:41.617
Yes.

01:01:41.789 --> 01:01:51.798
But from the performance side I covered also two examples uh, which are like delete uh, delete all uh and is empty before it.

01:01:51.798 --> 01:01:56.472
And uh modify all and is empty before modify all.

01:01:56.472 --> 01:02:04.896
And if you take on the, take a look on those examples like uh, even for delete all uh, you will get better performance.

01:02:04.896 --> 01:02:07.402
Like just triggering it delete all.

01:02:07.402 --> 01:02:16.976
So delete all will get you like it's good until it isn't Delete all is good Until it isn't.

01:02:18.099 --> 01:02:18.702
Until it isn't.

01:02:19.851 --> 01:02:23.601
Someone's going to take that snippet, by the way and just repeat delete, all is good.

01:02:25.391 --> 01:02:30.563
I always go with until it isn't because my saying is until they don't like it's a factual saying.

01:02:30.563 --> 01:02:33.418
I say to people all the time like, oh, they're my best friend or everybody likes me.

01:02:33.418 --> 01:02:34.284
Somebody actually said that to me.

01:02:34.284 --> 01:02:35.210
I said everybody likes me.

01:02:35.230 --> 01:02:47.585
I said until they don't no, no, no, that's what I'm saying someone's gonna take the snippet of this recording and just repeat it and then omit the other part so when using delete all, a modify all you shouldn't use.

01:02:47.650 --> 01:03:01.860
An is empty before yeah, if you are not using uh, if the table is empty and you are doing, for example, delete all, you will actually lock the table and uh, then it's much slower.

01:03:01.860 --> 01:03:08.208
Uh, because, yeah, and then with is empty, the delete all will not lock.

01:03:08.208 --> 01:03:22.298
Obviously, because if no records, delete all won't be triggered and in that case when you take a look on the table which is not always is empty, it is not fully optimized.

01:03:22.298 --> 01:03:33.949
Like you can get better performance if you are using the delete all, but you will have like downside that the records will be locked when the table is empty.

01:03:33.949 --> 01:03:36.509
So there are some patterns.

01:03:36.509 --> 01:03:40.376
So even that the performance in some cases is better.

01:03:40.376 --> 01:03:50.190
You should not sacrifice that to the locking because it can cause more, more issues in in some cases.

01:03:50.632 --> 01:03:54.300
So yeah, that's good.

01:03:54.300 --> 01:03:54.701
That's good.

01:03:54.701 --> 01:03:57.367
We have a tip, a lot of tips here.

01:03:57.807 --> 01:04:23.740
I could talk about tips with you for days, probably a lot longer than the session that you had, and uh also I I think I I rushed a bit also the session there and I think he has like uh 30, 40 examples like uh first, so to say I'm not sure no, it's good a lot of examples the examples are good, and you have a lot of examples on your blog as well, too.

01:04:25.003 --> 01:04:25.704
Not that much.

01:04:25.704 --> 01:04:41.023
I'm thinking about writing it from the tech days, what I have been speaking about, not in one, because I try to keep the blogs a certain size to be readable.

01:04:41.023 --> 01:04:51.936
A few examples per blog and so and that's it, and if you do like, uh, 20 examples, it will be like too much yeah, you need a small bite.

01:04:52.436 --> 01:04:53.217
No, no, it is.

01:04:53.217 --> 01:04:53.539
I.

01:04:53.539 --> 01:05:04.440
I do think now, I think I think society, I think with the, the tiktok generation and the, the 30 second snippets and the instagram reels and all these, I think everybody likes the, the short, that's all you need.

01:05:04.440 --> 01:05:07.489
Well, you have the short video snippets to learn, right?

01:05:07.489 --> 01:05:08.632
So it's now.

01:05:08.632 --> 01:05:16.402
People don't like to read to learn, they like to watch a video of a distinct point.

01:05:18.552 --> 01:05:25.534
I think we are missing some short videos on the YouTube, that is true, there's not a lot of them.01:05:26.090 --> 01:05:28.211


How can you do that in 60 seconds or less?01:05:28.211 --> 01:05:28.795


That's hard.01:05:30.211 --> 01:05:30.291


Well.01:05:30.311 --> 01:05:37.418


I think, yeah, focusing on the most important part, I still think you need to get the good 5 to 10 minutes.01:05:37.469 --> 01:05:39.237


5 to 10 minutes is a sweet spot, maybe 7.01:05:39.237 --> 01:05:41.096


So we'll have to see.01:05:41.096 --> 01:05:46.398


Well, stefan, thank you very much for taking the time to speak with us.01:05:46.398 --> 01:05:48.777


Thank you again for your flexibility in rescheduling.01:05:48.777 --> 01:05:52.759


Several times we appreciate you your flexibility.01:05:52.759 --> 01:05:54.637


We appreciate you taking your time to speak with us.01:05:54.637 --> 01:05:56.983


Time truly is the currency of life.01:05:56.983 --> 01:05:57.849


When you spend it, you can't get back.01:05:57.849 --> 01:06:04.757


So any time that anybody spends with us, we greatly appreciate Thank you no, thank you.01:06:06.289 --> 01:06:07.476


And I'd like to schedule a follow-up that we can.01:06:07.476 --> 01:06:12.215


Maybe, once you, once the video is out we know it's out we could touch back on some performance.01:06:12.215 --> 01:06:22.391


I see a lot of performance, uh conversations, and I think, yeah, we could expand upon that uh in a few months, I think would be great, and we could talk about your water polo.01:06:23.253 --> 01:06:48.280


Um, you know, stint the one, yeah, the one thing which you missed, like yesterday when you it was with a mechanical guy with a fridge, so I was training water polo like 10 years ago, really so, but for the 10 years, until 10 years, yeah, and I stopped and now I started it again.01:06:48.280 --> 01:07:03.903


So nearly every day, like five times a week, I do like from 8 pm I go now, since it is summer on the pool outside and we do play a game and so on.01:07:04.231 --> 01:07:08.632


Water polo is extremely impressive because that's what I'm saying, your feet.01:07:08.632 --> 01:07:34.596


Your feet aren't on the ground like you have to tread water and you like to to shoot, or I don't know what they call it, but I I don't know the only time I watch water polos in the olympics and I love it because I'm just impressed at what the individuals, the athletes, can do when they're playing water polo because, like, they just get up out of the water and shoot with such force but there's nothing holding them.01:07:34.896 --> 01:07:46.458


They have to like they're floating in water and then like I think that's that's also most asked question when I get, because this is is not professional.01:07:46.458 --> 01:07:53.864


It's taking four months until it's good weather and the pool is active outside.01:07:53.864 --> 01:07:57.719


So the most common question is how do you get up?01:07:57.719 --> 01:08:05.003


Your swimsuit is visible when you get up and you shoot.01:08:05.003 --> 01:08:09.596


And that's the most common question.01:08:09.596 --> 01:08:26.582


And uh, yeah, for my side I was like playing in the first team, like, uh, when I was back then training that's impressive, though I don't know your cardiovascular strength has to be amazing to do that, and just even your your physical strength, because I would drown.01:08:27.210 --> 01:08:29.077


You put me in there treading water for five minutes.01:08:29.077 --> 01:08:34.481


I'd drown, Never mind having people jump over me and having to swim back and forth and then jumping up to.01:08:34.481 --> 01:08:36.837


I mean they just like jump in the water.01:08:37.289 --> 01:08:37.652


Yeah, it's.01:08:37.652 --> 01:08:39.880


Impressive, man, very impressive.01:08:40.911 --> 01:08:44.720


I'm having my wife like trying to drown me on the sea but not succeed.01:08:44.911 --> 01:08:48.484


I'm having my wife like trying to draw me on the sea but not succeed.01:08:54.711 --> 01:09:00.466


Listen, I don't think you want to record that because if it really happens, then she can say he told me to try.01:09:00.487 --> 01:09:02.094


Oh man, impressive.01:09:08.432 --> 01:09:09.796


Have you had any scary experiences playing water polo?01:09:09.796 --> 01:09:10.717


I mean serious, no, no, no, no, basically not.01:09:10.717 --> 01:09:22.051


Uh, you get some cramps and so on I figured you get cramps, yeah when, when you work, when you train, uh, you get used to it because, uh, you keep swimming to survive.01:09:22.072 --> 01:09:28.176


Yeah, no, basically like when you're playing a game like we had some scenarios like you keep swimming To survive, yeah, no, basically when you're playing a game.01:09:28.176 --> 01:09:49.952


We had some scenarios like playing a game in another country where it was colder and the pool was like five meters because of the high jumps and so on, and the water was ice cold and the trainer said before the game like who doesn't, uh, jump in?01:09:49.952 --> 01:09:53.060


When I blow the whistle, he doesn't play.01:09:53.060 --> 01:10:04.500


The similar thing is when you, when you stand and you get the cramp, like you have to swim further or you won't play again.01:10:04.500 --> 01:10:06.003


Oh, my goodness.01:10:07.591 --> 01:10:15.097


Well, I think anyone who any athlete for any of these sports, I think it's a lot of work and a lot of dedication, and water polo is one of those.01:10:15.097 --> 01:10:16.710


When I watch it, I'm just in awe.01:10:16.710 --> 01:10:26.711


That and synchronized swimming is another one I watch and I'm like how do they do that, Because they're mostly underwater and how do you get it to where your your level?01:10:26.810 --> 01:10:58.831


so any of those aquatic sports um are impressive so but yeah, like 10, 10 years ago it was like uh, either professionally water polo or just career so studies, so like yeah those are your options yes it's good that you it's good that you came back like uh, well, paid only if you got into representation and the first team and everything.01:10:58.831 --> 01:11:06.564


So even there it's like good, but uh, not overpaid, like football and everything basketball and so on.01:11:11.291 --> 01:11:12.311


It's not like overpaid sport.01:11:12.311 --> 01:11:13.673


Well, it's impressive that you're doing it.01:11:13.673 --> 01:11:15.256


It's impressive that you're going back to it too.01:11:15.256 --> 01:11:21.024


It's good that you get out and do that, chris, I need to go play pickleball or something I have to start you got to pick something.01:11:21.064 --> 01:11:46.564


man, I know it's going to be hard for you, like running wise, like I've been running myself um, I think I've been doing 10k a day, every other day but when you speak about the running, also one interesting also crossroad which could also potentially lead me onto another side is like when I was like choosing the which studies I want to go.01:11:46.564 --> 01:11:57.552


I also got into the police academy something, something like that you've done everything differently called in serbia.01:11:57.573 --> 01:12:04.037


You become like a policeman, so not not maybe inspector or something like that.01:12:04.037 --> 01:12:10.402


You say here because you can go to the police with academy and this is faculty.01:12:10.402 --> 01:12:15.706


So you end up something like in your side like detective, something like that.01:12:15.706 --> 01:12:24.944


You get more wrong, so I ended up there and then after a few months I returned to IT.01:12:25.489 --> 01:12:26.073


I can probably tell you why.01:12:26.073 --> 01:12:27.871


Understand it's not as easy as people think.01:12:27.871 --> 01:12:28.573


And it's not easy.01:12:28.573 --> 01:12:32.042


It's not saying it's not easy because it's just not easy.01:12:32.042 --> 01:12:33.512


It's not easy mentally as well.01:12:33.512 --> 01:12:41.536


Uh, anybody who does those types of jobs, uh, I commend them because it takes a lot of not not one of the reasons.01:12:41.697 --> 01:12:50.635


One of the reasons was also that uh, the salaries like, uh, salary-wise like yeah, it's much, much, much lower there.01:12:50.635 --> 01:12:58.953


And uh, there was some also some changes uh from the payments side, like those in those years.01:12:58.953 --> 01:13:01.796


So I decided like let's go different path.01:13:01.796 --> 01:13:27.136


And it it was growing like a shining star and since I had like experience previously with the it it was like getting into the faculty was like pretty easy, like uh knowing the the exams, like uh to pass and so on, so it was really easy to pass.01:13:27.310 --> 01:13:34.956


I'll be interested to see where IT goes with all this AI in the future, the salaries with all these agents and everybody else doing a lot of these tasks.01:13:36.189 --> 01:13:49.801


But I think until this point it's like a helper tool and I think everybody can use it, but we are still not talking about replacing fully jobs.01:13:49.801 --> 01:13:51.130


No, no, I don't think you're replacing.01:13:51.210 --> 01:13:53.259


I think you do help with the performance.01:13:53.259 --> 01:13:54.192


I do help.01:13:54.192 --> 01:13:55.617


If you think it can help with productivity.01:13:55.617 --> 01:13:57.876


Excuse me, excuse me, jeez, I'm tongue-tied right now.01:13:57.876 --> 01:14:01.573


We're not at that state, but I think that's what I'm saying.01:14:01.573 --> 01:14:06.081


I'm interested to see where it ends up, uh, with some of these functions.01:14:06.081 --> 01:14:07.422


Uh, as well to see.01:14:07.422 --> 01:14:10.555


So it's, it's, it's a whole new world, as they say.01:14:10.555 --> 01:14:12.942


Uh, it was well, sir.01:14:12.942 --> 01:14:14.556


Thank you again for taking the time to speak with us.01:14:14.556 --> 01:14:34.657


If anyone would like to get in contact with you, uh, to learn more about your sessions learn, learn more about your information or maybe even learn more about water polo.01:14:34.676 --> 01:14:36.600


What's the best way to get in contact with you?01:14:36.600 --> 01:14:38.543


Yeah, I think the easiest one is the contact form on the blog.01:14:38.543 --> 01:14:40.207


But uh, there is also the email, like stefansaucitts at facilitycom.01:14:40.207 --> 01:14:42.876


So I'm following also that mail actively, actively.01:14:42.876 --> 01:14:48.537


So, yeah, through email, and then we will see where it leads us.01:14:49.219 --> 01:14:49.659


Great, great.01:14:49.659 --> 01:14:50.362


Thank you again.01:14:50.362 --> 01:14:55.636


We appreciate it and I look forward to seeing some of your water polo adventures too.01:14:55.636 --> 01:14:57.360


Throw some of those on your blog every now and then too.01:14:57.360 --> 01:14:57.981


Yeah, you should.01:14:57.981 --> 01:15:04.899


We get to see what you do outside of all of the great things that you're doing for the community.01:15:04.899 --> 01:15:06.012


Again, thank you again, sir.01:15:06.012 --> 01:15:06.635


Talk with you soon.01:15:06.635 --> 01:15:08.661


Ciao, ciao, thank you Bye, bye.01:15:08.661 --> 01:15:17.738


Thank you, chris, for your time for another episode of In the Dynamics Corner Chair, and thank you to our guests for participating.01:15:18.072 --> 01:15:19.550


Thank you, brad, for your time.01:15:19.550 --> 01:15:23.060


It is a wonderful episode of Dynamics Corner Chair.01:15:23.060 --> 01:15:26.560


I would also like to thank our guests for joining us.01:15:26.560 --> 01:15:29.569


Thank you for all of our listeners tuning in as well.01:15:29.569 --> 01:15:42.314


You can find Brad at developerlifecom, that is D-V-L-P-R-L-I-F-E dot com, and you can interact with them via Twitter D-V-L-P-R-L-I-F-E.01:15:42.314 --> 01:15:44.216


Via Twitter, d-v-l-p-r-l-i-f-e.01:15:44.216 --> 01:15:59.073


You can also find me at matalinoio, m-a-t-a-l-i-n-o dot I-O, and my Twitter handle is matalino16.01:15:59.073 --> 01:16:01.179


And you can see those links down below in the show notes.01:16:01.179 --> 01:16:02.521


Again, thank you everyone.01:16:02.521 --> 01:16:04.091


Thank you and take care.

Stefan Sosic Profile Photo

Stefan Sosic

MVP & CEO @ BCILITY

Stefan is a Microsoft MVP, Business Central expert and the Co-Founder and CEO of BCILITY, where he leads innovative solutions for Business Central users. He actively contributes to the Microsoft Dynamics community, sharing his knowledge and enhancing the platform through open-source Microsoft projects. As a frequent speaker at Business Central conferences, Stefan captivates audiences with his deep expertise and passion for the subject. His dedication to continuous learning and community collaboration sets him apart as a leader in the field.