Through the community, I’m constantly talking to and chatting with the very people who have shaped Dynamics 365 into what it is today. I see pride and passion, and I also recognize their personal investments in making Dynamics 365 better and implementing it for customers. They invest deep thought, teamwork, and long hours to create the best ERP offering on the market. I often hear comments like, “I created that feature many years ago.” This applies both to consultants and to past and present Microsoft employees.
In many cases, I recognize that, for those working with Dynamics 365, it’s more than a job; it’s a lifestyle, a passion, and a community. We love to create!
We can all agree that not everything is perfect, and more than 25 years of code have accumulated to form what we have today. Each new piece of code added value from an isolated perspective. But with each new feature introduced, the combinatory complexity has increased, making performance more challenging. Often, I see people searching for the proverbial needle in the haystack—a query, index, or loop that could improve performance. But the problem isn’t the “needle”—it’s the haystack. We have layer upon layer of code added over the years, plus numerous customer extensions.
Microsoft does have a process for phasing out code, known as deprecation.
It’s important to understand the definitions Microsoft uses:
- Removed feature: No longer available in the product.
- Deprecated feature: Not in active development and may be removed in a future update.
When Microsoft deprecates features, they publish the information here (for Finance, Supply Chain Management, Commerce, Human Resources, Project Operations, and Platform features):
We typically see a few elements per area per release, but the process of phasing out, replacing, and refactoring old code is slow. Microsoft also has guidelines for how deprecations are carried out. However, the amount of new code added is dramatically greater than the amount removed. More code means increased compute requirements and more pressure on performance. I understand that removing something is risky—there is always a customer who relies on a particular piece of code—making the deprecation process difficult and slow. We all have a closet filled with items we think might be valuable someday, but most often they aren’t and just occupy valuable space.
Now, to the essence of this blog post: what I hope to see deprecated. I’m sure many will disagree with my opinions, but I believe I have a few valid points. Remember, these are my personal opinions.
Record Templates
A great idea, but with current limitations, you cannot change a template if a DirParty/AddressBook is part of the entity. Additionally, when inserting records, code checks whether a default record template is assigned. In reality, this means record templates for Customers, Vendors, and Workers cannot be easily maintained—you must always recreate the template from scratch. The code that checks for record templates consumes precious milliseconds. Let’s thank record templates for their service over the years and rethink how this should work.
Database Log
This feature is often for micromanagers who want to track every action and assign blame. Its value is low, as enabling database logging on transactions generally isn’t advisable. Why not remove it from the X++ stack and consider using SQL system-versioned temporal tables instead?
Alerts
I think there are other technical ways of notifying changes.
Telex and Fax Numbers
I doubt these will be missed in contact information. Maybe replace them with modern contact methods like Snapchat or TikTok. 😊
Task Recorder
Great for presales, but as scenarios grow more complex, its value diminishes. Perhaps this could be replaced or supplemented by a Copilot agent?
Workflow
It works and is widely used, but this area should embrace newer technologies like Power Automate. At the very least, a refactoring of the concept would help.
Financial Reporting
Thank you for your service. Hopefully, Business Performance Analytics can replace it in the future.
Document Management
This is required, but some refactoring would be nice.
Attributes
Desperately needed in eCommerce, Unified Pricing, and as metadata for Copilots. However, a complete refactoring would be best.
Business Events
They generate too much “chattiness.” The feature is needed, but are there better ways to notify event subscribers?
If you have any opinions on what is ready for deprecation, please share them with the community. I hope I provoked some thought. 😊 Also, keep in mind that customers should evaluate their own extensions and deprecate those no longer needed to reduce system load.
Good list. Just one more thing to Task recorder. We are also using it for custom security roles creation. So in this way, replacement with better funcionality would be nice.
LikeLike
If I remember correctly MS had an idea (I don’t know what happened to that) to replace batch framework with Power Automate. I believe its just a matter of time when D365FO monolith codebase will start being split into different Power Platform solutions.
LikeLike
We are using Database Log for our Data Management solution to populate data from master to child companies. I know that there are other similar solutions on the market from other vendors.
Task Recorder is heavily used in test case automation.
Not sure why Alerts are in your list. What would you use instead?
LikeLike
The point of the blogpost if not necessary feature deprecation but reducing the number of checks/if/query code that happens at every insert and update. Basically, ensuring that transactions are on a highway with no speed limits and no waiting for checks and validations. And also move more into async patterns.
LikeLike
Great list in general. Towards the end I started seeing quite a bit of work required to adjust existing customer solutions, if those features were to be deprecated. But cannot disagree with the fact that those features could work better.
What about Transfer orders and the underlying Output orders? Those are coded differently than Sales/Purchase orders, and miss a lot of fields and functionalities.
LikeLike
Interesting selection 🙂 , I would like to comment on two
Database log… is useful for sensitive stuff like bank accounts. With the limited access customers have to the SQL layer… customers would miss it.
Task recorder… not only presale, but also documentation, training and testing… I would miss this one 🙂
LikeLike
Great! The main idea here is that things may need refactoring into a way that minimizes number of SQL calls happening when performing transactions. Basically, ensuring that that Dynamics 365 have a “highway” into SQL, without all the platformlayer/kernel checking if databaselog, alerts, record templates should be created. More could also be done async and in parallel ensuring maximum transactional speed.
LikeLike