
Dynamics Corner
About Dynamics Corner Podcast "Unraveling the World of Microsoft Dynamics 365 and Beyond" Welcome to the Dynamics Corner Podcast, where we explore the fascinating world of Microsoft Dynamics 365 Business Central and related technologies. Co-hosted by industry veterans Kris Ruyeras and Brad Prendergast, this engaging podcast keeps you updated on the latest trends, innovations, and best practices in the Microsoft Dynamics 365 ecosystem. We dive deep into various topics in each episode, including Microsoft Dynamics 365 Business Central, Power Platform, Azure, and more. Our conversations aim to provide valuable insights, practical tips, and expert advice to help users of businesses of all sizes unlock their full potential through the power of technology. The podcast features in-depth discussions, interviews with thought leaders, real-world case studies, and helpful tips and tricks, providing a unique blend of perspectives and experiences. Join us on this exciting journey as we uncover the secrets to digital transformation, operational efficiency, and seamless system integration with Microsoft Dynamics 365 and beyond. Whether you're a business owner, IT professional, consultant, or just curious about the Microsoft Dynamics 365 world, the Dynamics Corner Podcast is the perfect platform to stay informed and inspired.
Dynamics Corner
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 full episode for a blend of professional wisdom and personal stories that inspire and uplift.
#MSDyn365BC #BusinessCentral #BC #DynamicsCorner
Follow Kris and Brad for more content:
https://matalino.io/bio
https://bprendergast.bio.link/
Welcome everyone to another episode of Dynamics Corner. You know, brad, I've been running lately like 10k every other day and you know what I learned? A little bit about performance, and I think we're going to talk about performance. I'm your co-host, chris.
Speaker 2:And this is Brad. This episode was recorded on July 3rd 2025. Chris, Chris, Chris, 10K every other day that rhymes it does. 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. We had the opportunity to speak with Stefan Sosich all right, good afternoon are we gonna? Get it right this time.
Speaker 3:Yeah, I hope that now it's fine, it's fine, now, thankfully, it's fine. How is the?
Speaker 2:refrigerator. 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.
Speaker 1:Yeah, you know it's funny. 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. You better go after it.
Speaker 3:Well you know, just to set the the stage.
Speaker 2:This is our third time trying to do the recording. The first time we had technical issues with the platform so we had to reschedule. 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. They showed up at the exact same time we were supposed to record. 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. And I was like, are you really coming back tomorrow? So no, he goes, I'll be here first thing.
Speaker 2:So he came here first thing this morning. He replaced the part that he thought was broken and then it still didn't work. So then he goes, I have to drive to the office to get another part and I'll be back and I go. Where is your office? Like how far is it from here? 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. I don't know, because if it's a refrigerator you have to wait for it to cool. I'm more concerned about the ice maker, to be honest with you, because in order for him to fix it. He had to pull the whole ice maker out. You know how ice makers are in their refrigerators, yeah, so he just finished up a few moments ago.
Speaker 3: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.
Speaker 1:We appreciate your patience. Yes, it's a true testament.
Speaker 2:Your flexibility and your patience have been great, because we've been able to talk every single time but just not able to record. 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. It's well deserved for you as well. And before you get into the conversation, would you mind telling everyone a little bit about yourself?
Speaker 3:Yeah, a lot of career paths, so to say. 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. So me and my colleague started working with it. So even the bugger didn't work. So it was like first, first version of business central. We was like installing it, tweaking some things, trying to develop, but uh, yeah, at the end it was success. 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. 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.
Speaker 2:So yeah, yeah, the technology is improving. It's great, and I know what you mean there are still.
Speaker 3:Navision customers out there.
Speaker 2:I know of a Navision 2009, but it's actually not even 2009. It's version 4 on the 2009 platform.
Speaker 3: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.
Speaker 1:Oh geez Wow.
Speaker 3:So it's going far as that.
Speaker 2:It's going.
Speaker 1:I thought AS400 was bad enough. No back on.
Speaker 3:Yeah, but a lot of customers are now going to that path. 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. But still on the cloud. But still some big issues, big changes, big things to be done and some challenges to be resolved. So we will come there, but, yeah, it's a path that we need to cross.
Speaker 2: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. Because you just have a strict challenge. You also do quite a bit from the technology side with it. You share a lot of interesting articles. You write a lot of interesting articles as well.
Speaker 3:Yeah, sure. 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. 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. But also I wanted to step up more and got into the whole community and started writing blogs alongside with all the conferences. 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. 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. So now now they are like getting the course of Business Central.
Speaker 2:So this is at a university where they're teaching Business Central. Which portions are they teaching? The functional aspect of it, or are they teaching the development? No, the development.
Speaker 3:There are functional parts, but the course is regarding development. 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. That follows that theoretical knowledge, so to say.
Speaker 1: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? Now you could use Business Central as a tool as you're teaching that class. 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.
Speaker 3:And at this point, now that they have, like course, the whole semester, they end up with some knowledge and it's easier. 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. 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. No, it is, I think. I do think in Business Central, so it's a new world for us to train in.
Speaker 2:It is, I do think, with Business Central and AL development, to focus on development. 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. I mean you can pick it up and develop and be able to do something with it. But to be able to pick up and develop and to do something for the application is much different. 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. Then you can develop. Because business central development you're already developing on a framework. So it's a language, it's a powerful language. 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. So yep it's.
Speaker 2: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. Because how do you say like, oh, I want to be an al developer. A lot of people want to. You know, do python c, sharp, java, you know, pick all the other languages, node. 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?
Speaker 3: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. 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. So much deeper. 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. Like then then they spend like one more year learning, learning, learning.
Speaker 3: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. 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. But that's because you take a look on your technical side, like programming, and that's it. But the functional side, that's like smashing you. No, that's, that's like they're like smashing you no, you're, absolutely.
Speaker 2: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? 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. 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. What are some tips based on the experience that you have with the group that you've been working with? What are some tips that you have for someone? 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? And then, with that, how do you attract people to AL?
Speaker 3:I ask a lot of questions. Yeah, like I said, it's tricky, but yeah, you don't start like. 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.
Speaker 1:Don't make them run away, just kidding.
Speaker 3: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. So we start here with some simpler functionalities, some interactions with the data and graphical interface, and so on and so on. 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.
Speaker 2:So you're talking control add-ins, so that somebody could add a user control add-in to the application. It's actually cool.
Speaker 3: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.
Speaker 2:Some people like that. They like that you don't have to worry about creating the forms or the pages, as we call them. You just put the objects or you put the fields on the page or whatever controls that you have. I call them and it does the layout for you. It resizes it, repositions it. So it does make it a little bit easier that's what I said, like on the beginning.
Speaker 3:Like you have like three months and you will see, like, if that new new guy is fitting, like in this area. So some of them don't, some of them don't, some of them, yes, they fit and you will see that across someone. 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.
Speaker 2: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. So it's depending upon which version you're working on. Sometimes it's challenging to say, ah, did they introduce this new development? Uh, you know data type, for example. Oh, this came out in 26.2, not 26.0. 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.
Speaker 3:It will. 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. So imagine that in a few years, everybody opening some pull requests to fix some issues, some functionalities. So it will grow even faster.
Speaker 2:I like the ability for contributions for functionality and again, I'm repeating myself here, but you and I haven't spoken about this. I know, chris, and I have. 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. 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? 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.
Speaker 3:But there is a line like each new feature like which is getting in base app is approved by Microsoft. So if it is fully new feature like, then it needs to gather some votes from the community. So is that really something that whole community will benefit from? So if that functionality is only for yourself, that doesn't make sense. So the main point basically of the contribution is to bring new functionality which whole community will benefit from. And then that's the important part that the first that functionality idea gets support by whole community. And then that's the step where we continue with that idea and develop it.
Speaker 1:Yeah, certainly.
Speaker 2:No, it is. I still hope that it doesn't get too complicated. I just remember the old days of it. 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? A lot of new features come out within the language. What are some of the recent changes that many may not be aware of? 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. Even if you're online, you may not be out with the latest release because you can delay those updates several months now.
Speaker 3: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. I I did compile on the latest version but but at the end it was breaking on older versions. It had to be done on two implementations for now. But I think that part at this point is mostly used by me at least.
Speaker 2:Yeah, and then also, I follow some of the stuff that you write as well. 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. Um, I'd like to do an article on the test. The hdp test calls that we can do now as well.
Speaker 3:Uh, yeah, that, uh, that's, that's also one of the thing, and also, like, uh, mocking of the tests.
Speaker 2: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.
Speaker 1:I mean I swear it's. It could be every episode, because we love it so much but.
Speaker 3: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. So there is a full background and on the after the faculty, I cooperated with one of the professors there and we there are. There is like course about application testing and we've written the whole book for the students, which is also available. 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. 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. It came like on top top because all the experience from Selenium tests and so on, that was now. I was able to do that same with Business Central.
Speaker 2: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. 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.
Speaker 3:So even now, now, since it was on the conferences, even on the tech days. So, uh, page scripting is getting more, more capabilities and new features. So that part is not anymore under nda.
Speaker 2:So okay then you can tell us now? Right, it was at bc tech days. Can you tell us about some of the new features that are planned and released?
Speaker 3: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. I think one thing I liked the most, but I cannot remember what was it without looking on my notes.
Speaker 2:The BC Tech Days videos. I think they're starting to come out now. I think they're starting to publish them.
Speaker 3:There is a change from the past years. This time, videos are already out, but only for ticket holders.
Speaker 2:Oh, wow.
Speaker 3:After a few months from now I think that's what I heard at least. So it will be publicly available. So this is just to protect somehow the ticket holders and to gain most of the benefit at first ticket holders, then everybody else.
Speaker 2:I understand that that makes sense. 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. 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.
Speaker 3:Yeah, exactly, and then you don't have, like me, to remember all the stuff. I attended that session. 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.
Speaker 2: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.
Speaker 2: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. Sometimes I think there's too much knowledge, but I agree with you. 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. Go back to page scripting. It's a question. I wanted your opinion on this.
Speaker 2:I get asked this question a lot, a lot. I've done several sessions on page scripting and I've even talked with individuals professionally about page scripting. How do you determine? 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. Yeah, what should someone do to determine? Or how should someone determine what needs to be a page script, for example? Or like how to determine how to structure the page scripts or how to start and finish their page scripts? 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.
Speaker 3:Okay, like, uh, the page scripting is methodology wise. When you take a look, it is black box, black box texting, uh testing. So you are testing something, what you don't know, what is the code behind? 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. So you you test only one pad, but based on the input. So what is black box testing? You have some inputs, you they, they go through the box and there is an output. 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. So you compare only those two.
Speaker 3: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. You know each process and everything and to do that with page scripting it's not possible. Like, not always. You are controlling some inputs like you.
Speaker 3: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. 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. That's what I'm also speaking about with other members of the community, so to say. It's also a really good tool to reproduce bugs, to capture some scenarios and even for learning certain processes. 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.
Speaker 2: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. I do see it used for training, for repro and even correction. 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. 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. Or if they have to change some data or fix some data. So it's clever. 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? 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.
Speaker 2: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. 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. Again, it's one of those questions. It's this great tool. A lot of people use it for testing point of view. Uh, again, it's, it's one of those questions. It's this great tool. A lot of people use it for a lot of different things. But okay, so now I want to run actual tests because now, even within pipelining, you can run these page scripts.
Speaker 3:Uh, so not only do you have your unit test?
Speaker 2:a good feature yeah, so now we can do that as well too. And with replay you can do a whole batch of tests uh, as well, instead of having do that as well too. And with replay you can do a whole batch of tests as well, instead of having them individual as well too. So your book covers that, so we'll have to read We'll have to get it translated and read it right.
Speaker 3: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.
Speaker 2:Yeah, yeah and then. Yeah, see, now my mind's going with the PageScript and so many things.
Speaker 2: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. So also now to go back. So, with the development point of view from you, what are some things with the? We talked about some tips and tricks or some tips for getting somebody into AL. How do you think we could attract more talent to come into working with Business Central and AL development?
Speaker 2:Yeah, that's really you have the class that you teach. So how do you draw? People to want that.
Speaker 3:Those are like students, those are juniors. 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. But there isn't easy way to attract them. There isn't easy way to attract them.
Speaker 1: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? 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. I'm curious about what your perspective would be If you're attracting somebody. Would it make sense for someone that maybe knows the business process or functional side of things going into development?
Speaker 1:Because, there's plenty of functionals out there right, yeah.
Speaker 3: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.
Speaker 3:But from for developers like, uh yeah, no luck to to get like functional and then to switch to development. Because in order to do like programming you need to understand. 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. And you know, my sessions like lately was everything regarding performance and AL and so on. 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. If we mention SQL, yeah, SQL here and there, but the whole architecture of Business Central, Azure and everything that becomes challenging.
Speaker 1:That's an interesting take, yeah.
Speaker 2:Well then you can also say someone who goes from division to business central. 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. Uh, it's still the wild wild west, but it's getting a little tamer. Individuals are realizing it's not the Wild Wild West anymore.
Speaker 1:Well it is. You just can't go to the street and just whip out and shoot.
Speaker 2:Well, I see some people try to do that. You can publish the extensions and I think create some havoc. Extensions and I think create some havoc. You had mentioned some performance, and performance is another topic that I see quite often is exactly as you mentioned. It's either from someone who came from Cal and thought that you could write code the same way. The syntax is similar, there's a lot of similarities, but again the platform is different. 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. 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.
Speaker 2:Well, I mean that mindset's a little challenging because you're moving. You're taking one technology and moving it into another technology and assuming that it's going to work the same way. It's almost like putting hay into a gas car. 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. And now you have gas or electric cars right. They still kind of work the same. They do the same thing. That's a better analogy. You don't put gas in an electric car, you put electricity for it to work and become efficient. So what are some of I've seen some of your performance articles as well uh, and what are some of the performance tips? Like if you can think of some of the top performance tips that you have uh can relay. Like if you the mistakes that people have made or things that you realized uh can work to. I know it's a very vague question, I understand.
Speaker 3:Yeah, the question will answer from itself when this Tech Days video come out. There. 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. But the people who work with the performance are very little part of this community, so you can count them on two hands.
Speaker 3:Yes, you can, you can so it's really, really challenging area and you need a lot of experience in that area. And, yeah, so, even for for some optimization patterns which you will see like they work from certain version, even on BC. Well, you mentioned already nav. 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. And the simplest example is set load fields which can limit your queries and so on. So that's one little thing which can a lot improve your queries and so on. But that has not been existing. 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. And then that's the benefit.
Speaker 3: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. So the tests are conducted on those two versions. So even if you're using, like BC 22, 23, you may not have those platform optimizations. 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. 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.
Speaker 2: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. You can, if you're doing a query or you're looking to retrieve records, you can determine which fields you bring back. So if you have a table with 100 fields with set load fields, you can pick that. 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. So you can get some performance because you're not retrieving the entire record. You're only retrieving the specific fields that you need, which is a slight improvement. 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.
Speaker 3: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. So when the video comes up, everything will be available and with a lot of examples. But also one more popular example is like uh when I've written the blog. 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? Yeah, is empty true am I right?
Speaker 2:am I right? Yes, I read that. I followed that whole conversation.
Speaker 3: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. And I did more examples and show full sequel background on the tech days and that was also my first example which I show. So basically what you are doing is repeating is empty before, fine set because of platform optimization. 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. 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.
Speaker 2:And that's where platform optimization comes up. So that's another tip is empty. That was an interesting conversation. It was a period of time I was following it. I was confused Should I use is empty or should I not use is empty? That was an interesting conversation. It was a period of time I was following it. I was confused Should I use is empty or should I not use is empty?
Speaker 3:But I think, like you said, is it filtered through? 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
Speaker 3: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. And we did define set. You will just put everything in data set. 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.
Speaker 3: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. 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. So how is certain record type stored in the memory of Business Central? 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. 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.
Speaker 2:A lot of little tricks so I want to just jump back. 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. Yeah, so there are. 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.
Speaker 2:Find set would be more performant. See, that's the big thing. I talk with individuals about that. 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.
Speaker 2:So I had a big discussion with them and explained to them there is a difference to what's happening. 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. So there's a big difference there. Chris, Did you know that?
Speaker 3:But everything is dependent on the rest of the code and the whole logic. So there are use cases for each scenario and even slight change in the code can result that you need to write it differently. So it really depends from the lot. But these things which we are speaking about are like AL patterns, and that's one thing also. Which I am trying to do now is also to spread word about AL guidelines, because those are important for a lot of reasons. First, I will mention AI, that you will be able to use AL guidelines.
Speaker 3: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. 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. So that is one thing. And second thing is contribution wise and your project side wise, that everybody should write most performant, most standardized code. 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. 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.
Speaker 2:Yes, and that's well. You said that's Microsoft, but some of that Microsoft code needs to be refined too. To be honest, I know yeah, it's very well. You said to write it like Microsoft. I mean some of it is. It's very difficult to every release with changes of language and platform and architecture to replace all of the code, I know. But so there are some areas that could lead a little attention as well too.
Speaker 3:Yeah, of course. 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. So that's being covered also. Yes, but slowly. Like BaseApp is really big, oh it's huge. 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.
Speaker 2:So now it's. I like what they're doing with it. 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. So there's a lot of people using the application and you can't just shift it all up like that. So we talked about Find first and excuse me. We talked about fine set and find minus. We talked about the use of is empty. We talked about the text builder with the pointers.
Speaker 2:So many people I talk with don't understand the benefits of using text builder. 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. Is that when you really start to notice the, the impact on it. Do you have any other tips for us? I know the video will be out of your session, hopefully at some near point in the future, but is it? Do you have another to round out some of these performance tips, some other big performance tips that you've encountered or you have?
Speaker 3: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. 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. 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. You know, because that's that, uh, that autocalc fields is sent, uh set before fine set and then you do the fine set. So the platform itself can do basically optimization and craft into the one query and you don't cause any more sql overload.
Speaker 2:So that's, that's also one big one big ones, the auto calc fields versus the calc fields individually within each call yeah.
Speaker 3:So then we have like also some examples. 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. So if not insert, then modify. You may be seeing.
Speaker 2:Yes, I saw that article too.
Speaker 3: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. 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.
Speaker 2:That takes some time and then yeah, so the use of if not insert, then modify, is non-performant. What should somebody do instead?
Speaker 3:Well, checking if the right operation. 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. 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. So if you have get got that record you can modify it, else you just insert. So you will do one additional query.
Speaker 3:But you see, like that query is at this point really optimized so it returns a really fast response versus handling of the error. So you are not having one additional query in case of error. But that error handling takes more time than having one additional query. 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. 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.
Speaker 2:See, that's a good one too. 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. And if you do it repeatedly I've seen people do this repeatedly and it works, it can add up. It can add up over time. That's what ends up happening. 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. It could potentially slow everybody else down too, depending upon what you're doing.
Speaker 3: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. But if you combine those performance optimizations you can get really really much better results. 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. So it can get really really bad yes, yes, I can get there.
Speaker 2:Yeah, that's another interesting one. Let's round it out with one more so we can have our five.
Speaker 2: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. 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. Yes.
Speaker 3:But from the performance side I covered also two examples uh, which are like delete uh, delete all uh and is empty before it. And uh modify all and is empty before modify all. And if you take on the, take a look on those examples like uh, even for delete all uh, you will get better performance. Like just triggering it delete all. So delete all will get you like it's good until it isn't Delete all is good Until it isn't.
Speaker 2:Until it isn't.
Speaker 1:Someone's going to take that snippet, by the way and just repeat delete, all is good.
Speaker 2:I always go with until it isn't because my saying is until they don't like it's a factual saying. I say to people all the time like, oh, they're my best friend or everybody likes me. Somebody actually said that to me. I said everybody likes me.
Speaker 1: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.
Speaker 3: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. Uh, because, yeah, and then with is empty, the delete all will not lock. 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. 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. So there are some patterns. So even that the performance in some cases is better. You should not sacrifice that to the locking because it can cause more, more issues in in some cases.
Speaker 2:So yeah, that's good. That's good. We have a tip, a lot of tips here.
Speaker 3: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.
Speaker 3:Not that much. 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. 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.
Speaker 2:No, no, it is. I. 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. Well, you have the short video snippets to learn, right? So it's now. People don't like to read to learn, they like to watch a video of a distinct point.
Speaker 3:I think we are missing some short videos on the YouTube, that is true, there's not a lot of them.
Speaker 1:How can you do that in 60 seconds or less? That's hard.
Speaker 2:Well.
Speaker 3:I think, yeah, focusing on the most important part, I still think you need to get the good 5 to 10 minutes.
Speaker 2:5 to 10 minutes is a sweet spot, maybe 7. So we'll have to see. Well, stefan, thank you very much for taking the time to speak with us. Thank you again for your flexibility in rescheduling. Several times we appreciate you your flexibility. We appreciate you taking your time to speak with us. Time truly is the currency of life. When you spend it, you can't get back. So any time that anybody spends with us, we greatly appreciate Thank you no, thank you.
Speaker 2:And I'd like to schedule a follow-up that we can. Maybe, once you, once the video is out we know it's out we could touch back on some performance. 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.
Speaker 3: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. 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.
Speaker 2:Water polo is extremely impressive because that's what I'm saying, your feet. 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.
Speaker 3: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. It's taking four months until it's good weather and the pool is active outside. So the most common question is how do you get up? Your swimsuit is visible when you get up and you shoot. And that's the most common question. 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.
Speaker 2:You put me in there treading water for five minutes. I'd drown, Never mind having people jump over me and having to swim back and forth and then jumping up to. I mean they just like jump in the water.
Speaker 1:Yeah, it's. Impressive, man, very impressive.
Speaker 3:I'm having my wife like trying to drown me on the sea but not succeed.
Speaker 2:I'm having my wife like trying to draw me on the sea but not succeed.
Speaker 3:Listen, I don't think you want to record that because if it really happens, then she can say he told me to try.
Speaker 1:Oh man, impressive.
Speaker 3:Have you had any scary experiences playing water polo? I mean serious, no, no, no, no, basically not. 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.
Speaker 3: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. 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? When I blow the whistle, he doesn't play. 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. Oh, my goodness.
Speaker 2: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. When I watch it, I'm just in awe. 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?
Speaker 3: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. So even there it's like good, but uh, not overpaid, like football and everything basketball and so on.
Speaker 2:It's not like overpaid sport. Well, it's impressive that you're doing it. It's impressive that you're going back to it too. 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.
Speaker 3: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. I also got into the police academy something, something like that you've done everything differently called in serbia.
Speaker 3:You become like a policeman, so not not maybe inspector or something like that. You say here because you can go to the police with academy and this is faculty. So you end up something like in your side like detective, something like that. You get more wrong, so I ended up there and then after a few months I returned to IT.
Speaker 2:I can probably tell you why. Understand it's not as easy as people think. And it's not easy. It's not saying it's not easy because it's just not easy. It's not easy mentally as well. Uh, anybody who does those types of jobs, uh, I commend them because it takes a lot of not not one of the reasons.
Speaker 3:One of the reasons was also that uh, the salaries like, uh, salary-wise like yeah, it's much, much, much lower there. And uh, there was some also some changes uh from the payments side, like those in those years. So I decided like let's go different path. 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.
Speaker 2: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.
Speaker 3: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. No, no, I don't think you're replacing.
Speaker 2:I think you do help with the performance. I do help. If you think it can help with productivity. Excuse me, excuse me, jeez, I'm tongue-tied right now. We're not at that state, but I think that's what I'm saying. I'm interested to see where it ends up, uh, with some of these functions. Uh, as well to see. So it's, it's, it's a whole new world, as they say. Uh, it was well, sir. Thank you again for taking the time to speak with us. 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.
Speaker 3:What's the best way to get in contact with you? Yeah, I think the easiest one is the contact form on the blog. But uh, there is also the email, like stefansaucitts at facilitycom. So I'm following also that mail actively, actively. So, yeah, through email, and then we will see where it leads us.
Speaker 2:Great, great. Thank you again. We appreciate it and I look forward to seeing some of your water polo adventures too. Throw some of those on your blog every now and then too. Yeah, you should. We get to see what you do outside of all of the great things that you're doing for the community. Again, thank you again, sir. Talk with you soon. Ciao, ciao, thank you Bye, bye. Thank you, chris, for your time for another episode of In the Dynamics Corner Chair, and thank you to our guests for participating.
Speaker 1:Thank you, brad, for your time. It is a wonderful episode of Dynamics Corner Chair. I would also like to thank our guests for joining us. Thank you for all of our listeners tuning in as well. 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. Via Twitter, d-v-l-p-r-l-i-f-e. You can also find me at matalinoio, m-a-t-a-l-i-n-o dot I-O, and my Twitter handle is matalino16. And you can see those links down below in the show notes. Again, thank you everyone. Thank you and take care.