My intentional plan was to share a small blog about the Fall release of Business Central. Well – it turned out I had more to say than I imagined beforehand ;-).
I would like to focus on one point, where I’m not going to make myself really popular, as I notice quite a lot that people kind of disagree with me quite a lot :-). But that’s ok .. I don’t mind different opinions, as long I’m allowed to express mine ;-). Please take everything that follows as my opinion, and my opinion only.
In Fall (probably October), we’ll have yet another major release of our beloved product Business Central. And Microsoft already shared their focus points in this slide:
Two points are totally not a surprise, I guess, as I announced that already:
What I would like to do, is actually focus on the last bit. Extensions! There is going to be a strong focus for you to be able to do what you want, completely with Extensions. And even more, that last sentence:
“In the future, on-premises will follow the cloud rules”
I understand this sentence can be understood in a lot of ways. And I wasn’t at Directions ASIA, so I wasn’t able to get the context of this – so I’m just going to make my own assumptions (disclaimer ;-)).
Just look at this twitter-thread from AJ and this one from Tobias. It kind of expresses some things that I will explain going forward – but at least, might give you an idea on how other people think about it as well.
Basically, I have a few assumptions that I’m going to assume is going to be the right assumptions. Assumptions² if you will .. :
Again, just my assumptions.
We all like customizations, right? Well, to be honest, no. Some say it was the one thing that made NAV what it is today. Others say it implemented simplicity. I say: the simplicity to change the base app has kind of poisoned us. Sure, it’s easy on short term. But why-o-why are so many customers still running on old versions?
In anything I do with C/AL, NAV, … , I have had a strong focus of “upgradability”. Implementing with Hooks. Adopting Events. Adopting Extensions V1 .. all just to be able to upgrade. That’s my history. And a lot of my contributions were focused on that as well. Just take these blogposts into account:
I can tell you one thing: customizations do not facilitate upgrades in any decent way. From the moment you start customizing, you start creating upgrade-challenges. That’s the simple truth. One might not care, but we’re talking “cloud ready” here … and software with upgrade-challenges is all but “cloud ready”.
For a long time, Extensions has been the focus to solve that challenge. The feedback from some in the market though is a bit hesitant:
And you are all right, most probably. But in many (I won’t say all) occasions, those people make one crucial mistake. You try to do what you have been doing. That’s not how evolution works. With (r)evolution comes change. With change comes adaptability. You need to adapt. You need to change. And in terms of products, software (and yes, also customer customizations), that means: refactoring and reimplementation. Don’t act like the software you wrote 10 years ago, is still valid today. Cars are re-invented ever so long – but software needs to live forever? I don’t think so…
The focus in our company has been extensions for a long time. For sure, we are not able to do that for everything – and for sure, we are still doing customizations. More than I want to admit. Simply by the fact: our latest product release is still C/AL today.
But … there is a focus:
That’s our focus today .. so not in the future, but today. Our product is the only reason why we implement C/AL today. I’m not ashamed it not being converted yet. It’s a big-ass product, and we want to take the opportunity to rethink everything carefully. “Hurry” never ended up in decent software anyway ;-)). When the product is finished, the only reason we will be on C/AL in our company would be legacy customers, while all new customers will be full AL.
Let’s dive in the above points a little bit more.
Well, I know there is a txt2al tool, and there are very valid cases to use it. You won’t hear any bad word about it from my mouth. It’s just – looking at our situation – having +1000 hooks (not events) (while in extensions, I don’t want to use hooks anymore), new design patterns to be applied with extensions, … and a lot more reasons, we decided to do a rewrite with the big advantage we won’t have any legacy-stuff to solve. We will focus on one thing though – that’s trying to make sure we can upgrade data.
The good thing on this approach is that we can completely revise all functionality in terms of begin “cloud-ready”, like:
Besides our product, we are currently into a 2-year development challenge for a customer, with heavily modified NAV, many integrations, .Net, file-based automation, .. and so on. An atypical heavy customized project. This project is being turned into a (set of) extension(s). I have no intention whatsoever to turn back to customizations, just because I think that my customers need to get what they expect: a way to upgrade, a way to be future-proof.
This project brings challenges for sure – but we’re getting there. I have full confidence we will be able to redo this heavy customized customer as a cloud-ready extension.
I already kind of explained what I mean with “cloud ready” architecture. Basically, it comes down to being able to run it in the cloud. In essence, we need to apply the cloud-rules. And in terms of “rules” in AL development, we think of “compiler” and “code analysers”, right?
Well, what we have been applying for all our extension-projects, is very simple this:
Makes sense? May be not for you, but after 9 months of development, +800 objects, it still does for us :-). Thanks to this, we have found multiple unexpected parts that we needed to refactor. “Working with files ” and “working with .Net” being the most obvious ones.
Big news – Microsoft was able to convert their C/AL to AL! It has been in the news for quite some time, but now you have it – next release (Fall 2019), this is the only way Microsoft will distribute its codebase. And that’s a major thing. Even more – you will be able to do customizations.
Taking into account that in the future, we will NOT be able to do customizations, me personally, I don’t give one flying rats ass (sorry for my French). Cool for Microsoft to have a good conversion tool – but I won’t use it – may be to convert a set of objects (like reports) to copy, but I promise you now: I will never convert our product to AL. Just because – in my opinion – there is only one way forward. And that’s Extensions.
If you would go down the route to migrate your product/customers/… to AL, just imagine. How do you manage:
I’m a bit intentionally negative here – but I think you know what I mean when I say that I will never go down the route of customizing the BaseApp (as AL). Today, full C/AL or full AL Extensions. No other way for me. The only thing we need to do is make sure our product is finished (as Extensions) by the next release.
One of the things to be “cloud ready” is to not use .Net. I get feedback from people that sometimes there is just no other way. And probably they are right. But in many (if not most) cases, you can avoid .Net. Vjeko and me did a session on NAVTechDays last year, were one of the topics was exactly that. I can strongly advise to watch that section here:
So, there you have it – probably some of you think it’s time to unfollow me, unsubscribe from this blog, … . I strongly hope I didn’t offend anyone – this was merely an attempt to justify my opinion on things. Nothing more. I will never judge anyone for going down a route that I wouldn’t go to. Probably it would just mean that you are more organized (or more courageous) than me ;-).