Upgrading software is hard. Not because merging software is hard. It’s hard because people are creatures of habits.
Let me give you an example. We recently upgraded from NAV 2016 to NAV2018. This means big changes to the Customer Card. I’m fine with that. While in the process I moved my customizations to a Page Extension and I was a happy IT manager/developer.
Few days/weeks later one of our users comes to our service desk with a posted sales invoice in a currency code we’ve never used before. After some investigation the guy handling the support call figures out that since the upgrade new customers are created wrongly.
Someone at Microsoft (I love saying that) decided it was a great idea to move the Currency Code to another tab or a promoted field, I can’t remember what it was.
The person who creates new customers could not find the field and just thought not to care anymore. However it turns out that in the old version she would always change the currency to euro. When “we” were implemented 12 years ago my predecessor decided to create customer templates with currency codes and they were wrong. Nobody ever reported it. Changing to Euro was just part of the procedure.
Business Central is a monolithic application and therefore hard to upgrade. It has more than 5.000 C# files that are created from C/Side or AL Extensions. The way this all works behind the scenes is pure genius.
Ok, if you are not familiar with these terms you should read at least this article and probably a few more. It’s by Martin Fowler so you cannot go wrong.
The idea behind Microservices is that you break up your architecture into individual components that communicate using API’s. There you go in a nutshell.
Even though Business Central has a brilliant API it is not used by Microsoft itself. When a Production Order needs to post something to the General Ledger it does not use the API but everything internally is written tightly connected.
It makes a lot of sense if you consider that Business Central is based on Navision which was designed 30 years ago.
One of the fundamental design principles of Business Central is transaction integrity. As a developer you should not be able to break that. Well, not unless you put COMMIT everywhere in your event subscribers.
On top of that Business Central has transaction isolation to prevent users to post to the General Ledger at the same time.
All of this is fine until you want to grow with the application and this is where Microservices get interesting.
With microservices you can create several applications that all work together. These applications can be existing software that you buy or subscribe to.
At the company I work for we decided to stop trying to put everything in NAV several years ago. Back then I was against that decision but now I am a big fan.
Because different departments use different software they can all individually upgrade, have small changes done (Extensions in Business Central are brilliant for that) as long as they respect the API.
Most of the API’s I work with respect versioning. If a new version of the software is released the old API works for quite a while until you get notified that it will be depreciated. Giving you time to upgrade.
If you’ve used NAV as a development platform you’ve probably created your own monolithic application and you should reconsider that architecture.
I would encourage every partner if possible to investigate if it is possible to use the API and seperate your IP from Business Central.
In the next set of blog posts I am going to explain how to connect the bits together. Personally I’ve decided to replace NAV with other Microsoft Tech. We’ve chosen Asp.Net Core II with Angular giving us a C# server and a TypeScript front end. So far it is an interesting journey and I’ve created a strategy that will allow us to move bit by bit.
Since I am not yet sure what will happen with CDS/CDM we’ve decided not to choose a database yet. Uncle Bob has learned us never to start with choosing a database. Always make sure you can switch databases.
Don’t miss interpret me. We are NOT moving away from NAV or Business Central. In fact, part of the bigger strategy is to move to the Microsoft hosted option so we can benefit from continuous upgrades and interesting apps from AppSource, CDS, CRM etc.
I just want to move away from Monolithic design into Microservices and Business Central is my financial Microservice of choice every day of the week.