• Skip to main content
  • Skip to primary sidebar
  • Home
  • About
  • Recommended Readings
    • 2022 Book Reading
    • 2023 Recommended Readings
    • Book Reading 2024
    • Book Reading 2025
    • Book Reading 2026
  • Supply Chain Management Guide
  • PKM
  • Microsoft Excel
  • Microsoft Copilot in Office 365
  • Public Wiki Page

Ali Raza Zaidi

A practitioner’s musings on Dynamics 365 Finance and Operations

alirazazaidi

Document Routing Installation in D365 Finance & Operations

October 28, 2026 by alirazazaidi

In Microsoft Dynamics 365 Finance & Operations (D365 F&O), Document Routing is primarily used to print documents such as warehouse labels, shipping labels, and other reports directly to network or local printers.

The main component is the Document Routing Agent (DRA), which is installed on a Windows machine that has access to the required printers.

1. Document Routing Architecture

2. Installation steps

  1. Sign in to D365 F&O with an account that has the required administration permissions.
  2. Navigate to Warehouse management → Setup → Document routing → Document routing agents.
  3. Download the Document Routing Agent installer from the available download option.
  4. Install the agent on the Windows machine or print server.
  5. Launch the agent and sign in using the appropriate Microsoft Entra ID account.
  6. Register the agent against the correct D365 F&O environment.
  7. Make sure the printers are installed and accessible on that machine.
  8. In D365 F&O, configure the printers and document routing rules, then test printing.

For warehouse label printing, also configure the relevant document routing layouts and printer selections.

3. Important prerequisites

According to Microsoft’s documentation, verify these requirements before installation:

  • .NET Framework 4.7.2 or later.
  • Adobe Acrobat Reader.
  • D365 security role: Document routing client.
  • Microsoft Entra ID authentication.
  • Printer drivers installed on the agent machine.

4. Run as a Windows service

For production environments, you can configure DRA to run as a Windows service rather than requiring an interactive desktop session.

In DRA, open Settings → Run as a Windows Service, then configure the service account in Windows Services.

The service name is:

Microsoft Dynamics 365 Finance Document Routing Service

Microsoft also specifies that the authentication token must be refreshed every 90 days. Microsoft Learn+1

5. Official Microsoft documentation

Install the Document Routing Agent – Microsoft LearnConfigure Document Routing Agent as Windows Service

Obsidian Is Addictive, but Cloud-Based Notes Are More Practical

October 12, 2026 by alirazazaidi

Obsidian is addictive in a good way. It gives you the freedom to design your own workflow, organize your knowledge, and build a personal note-taking system exactly the way you want.

But there is one major challenge I keep facing: accessibility.

I use two laptops. One is my personal laptop, where Obsidian is installed and all my notes are stored. The other is my office laptop, where software installation is restricted.

As a result, I cannot access my Obsidian notes while working at the office. This creates a gap in my workflow.

To overcome this limitation, I started using Capacities as an intermediate note-taking tool. During office hours, I capture my thoughts, ideas, and notes in Capacities. In the evening, I manually transfer those notes into Obsidian.

But this process creates unnecessary friction. Instead of focusing on capturing and connecting ideas, I spend time moving information between two systems.

This experience has made me realize something important:

The real power of a note-taking system is not just how well it organizes knowledge, but how easily you can access that knowledge when you need it.

Obsidian gives me freedom and control over my knowledge. But cloud-based tools give me accessibility and convenience.

And increasingly, I feel that accessibility matters more than customization.

After all, a perfect knowledge management system is of little value if your knowledge is unavailable when you need it.

Perhaps the best note-taking system is not the one with the most features, plugins, or customization options. It is the one that fits naturally into your daily life, with the least amount of friction.

Change Is Necessary, but Change Has a Cost: A Reflection on ERP Implementation

October 11, 2026 by alirazazaidi

Change is essential for growth. But is every change beneficial, especially in ERP implementation?

We all need change in our lives. Without change, we become stagnant. Different stages of life demand different roles, and different roles require different mindsets.

Moving from a developer to a solution architect, or from an individual contributor to a project manager, requires more than learning new skills. It requires a fundamental shift in mindset.

But here is an interesting contradiction:

In personal development, we encourage change. In software development, particularly ERP implementation, change can be expensive, complicated, and sometimes dangerous.

This brings me to an important concept in project management: The Triple Constraint.

The Triple Constraint: Time, Cost, and Scope

Every project operates within three fundamental constraints:

  1. Time – How long will the project take?
  2. Cost – How much will the project cost?
  3. Scope – What exactly are we delivering?

These three constraints are interconnected.

If we increase the scope, we may need more time, more resources, or a larger budget.

If we reduce the timeline, we may need additional resources or have to reduce the scope.

If we reduce the budget, we may need to compromise on scope or extend the delivery timeline.

And at the center of this triangle lies a fourth critical element: Quality.

A successful project is not simply one that finishes on time and within budget. It must also deliver the expected business value without compromising quality.

Is Agile Really Suitable for ERP Implementation?

Sometimes, I question whether Agile, at least in its pure form, is the right approach for large ERP implementations.

Agile encourages us to welcome changing requirements, even late in development.

But ERP implementation is fundamentally different from developing a new software product.

In traditional ERP projects, we spend considerable time during the discovery and requirement-gathering phases understanding business processes, identifying gaps, and defining the scope.

Once the Business Requirements Document (BRD) is signed off, the expectation is that the agreed requirements form the baseline for implementation.

However, changes continue to emerge.

A business user discovers a new requirement. A department wants an additional approval workflow. Management requests another report. An integration requires more fields or a different process.

Individually, these changes may appear small.

But collectively, they can significantly affect the project timeline, budget, and quality.

The real challenge is not change itself. It is uncontrolled change.

Scope Creep: The Silent Threat to ERP Projects

Many ERP implementations operate under fixed-price contracts.

The implementation partner commits to delivering a defined scope within an agreed budget and timeline.

Now imagine that requirements keep changing after the scope has been finalized.

The project team must perform additional analysis, redesign existing solutions, modify configurations or customizations, retest integrations, and repeat user acceptance testing.

Yet the original deadline and budget often remain unchanged.

This creates pressure on the delivery team and increases the risk of compromising quality.

ERP implementations are also relatively slow to change because of their interconnected nature.

A small change in procurement may affect inventory, finance, workflow, reporting, and external integrations.

What looks like a minor requirement can become a significant technical and functional challenge.

That is why scope management is not merely an administrative activity. It is a critical responsibility of project leadership.

ERP Is Already a Product, Not a Blank Canvas

Another important distinction is that ERP systems are already developed products.

When implementing Microsoft Dynamics 365 Finance & Operations, SAP, or another enterprise system, we are not building everything from scratch.

The software already contains established business processes, data structures, accounting principles, and transaction flows.

Our responsibility is to understand the business requirements and align them with the capabilities of the ERP system.

Of course, customization and integration are sometimes necessary.

But there is a difference between extending an ERP system and fundamentally changing how it works.

Excessive customization introduces technical debt, increases maintenance costs, complicates upgrades, and creates long-term dependencies.

Sometimes, the better solution is not to change the software.

It is to change the business process to align with ERP best practices.

This is another form of mindset shift.

Instead of asking, “How can we customize the ERP to match every existing business process?”

We should ask, “How can we achieve the business objective using the standard ERP capabilities?”

Agile vs. Scope Control: Finding the Balance

Does this mean Agile has no place in ERP implementation?

Not necessarily.

Agile practices such as iterative delivery, frequent demonstrations, continuous feedback, and early testing can significantly improve implementation quality.

However, Agile should not become an excuse for unlimited scope changes.

We need to distinguish between:

  • Refinement: Improving our understanding of an already agreed requirement.
  • Defect correction: Fixing functionality that does not meet the agreed requirements.
  • Scope change: Introducing new functionality or changing an approved business process.

These are not the same thing, and they should not be managed in the same way.

A practical approach may be to establish a clear scope baseline while allowing flexibility in how the solution is designed, developed, tested, and delivered.

Significant changes should go through impact assessment and formal change control, with transparent decisions about their effect on time, cost, and quality.

In other words:

Be Agile in execution, but disciplined in scope management.

Quality: The Center of the Triangle

Returning to the Triple Constraint, we have three competing dimensions: time, cost, and scope.

But the fourth dimension, quality, is what ultimately determines whether the project delivers a sustainable result.

A project delivered on time but with unstable integrations is not successful.

A project delivered within budget but with incomplete business processes is not successful.

And a project that delivers every requested customization but becomes difficult to maintain may not be successful either.

Project leadership is about balancing these constraints while protecting the quality of the final solution.

Final Reflection: Change Needs Direction

This brings me back to where I started.

In life, we need change to grow.

In projects, we need change to improve.

But not every change creates value.

Personal growth requires the courage to change. Project delivery requires the wisdom to control change.

A good solution architect understands the technical and business impact of change.

A good project manager understands its impact on time, cost, resources, and commitments.

And a good delivery leader knows when to accept change, when to defer it, and when to say no.

Perhaps that is the real mindset shift required to move from being a developer to becoming a solution architect and project leader.

Success is not about delivering every change. It is about delivering the right outcome, with the right quality, within realistic constraints.

The Email I Almost Missed — and What It Taught Me About Inbox Zero

October 5, 2026 by alirazazaidi

A few days ago, I learned a small but important lesson about email management.

I was busy working on a Solution Design Document when an email arrived about an upcoming Teams meeting. I quickly glanced at it, understood that it was related to a meeting, and returned to my work.

I thought, I’ll check it later.

But later never came.

I completely forgot about the email.

When the meeting time arrived, a notification popped up during my daily meeting. I tried to join, but I couldn’t find the Teams meeting link.

I asked others for the link, but no one forwarded it. Everyone naturally assumed that if I had been invited, I should already have the meeting invitation and link.

Fortunately, the meeting was short, and I didn’t miss anything critical.

But it taught me an important lesson:

Reading an email is not the same as processing an email.

I had seen the email, but I had never decided what to do with it.

My Inbox Zero Experiment

After this incident, I decided to improve the way I handle email.

My goal is not simply to have zero unread emails. My goal is to have zero undecided emails.

Whenever an important email arrives, I want to make a decision about it instead of reading it and trusting myself to remember it later.

I simplified my email workflow into three actions:

1. Reply

If an email requires a response and I can handle it immediately, I reply.

In the meeting example, I should have replied within a few minutes:

“Thanks for the invitation. I can’t see the Teams meeting link. Could you please share it?”

That simple reply would probably have prevented the entire problem.

Once the conversation is complete, I can archive the email.

2. Archive

If an email doesn’t require any action from me, I archive it.

I have created folders based on projects and common categories such as HR, attendance, notifications, and administrative communication.

The important information doesn’t need to remain in my inbox just because I might need it someday.

My inbox should represent things requiring my attention, not become a permanent storage area.

3. Defer

Sometimes an email requires action, but I cannot handle it immediately.

Instead of leaving it in my inbox and hoping I remember it, I defer it deliberately.

I create a task in OneNote and give it a deadline.

For example:

Task: Review integration document
Source: Email from project team
Deadline: Tuesday, 3:00 PM

Now I don’t have to keep remembering the email. The task is captured in a system I trust.

Turning Emails Into Knowledge

There is another category of email that is particularly important in project work: information that I may need later.

Instead of keeping these emails sitting in my inbox, I capture the important information in my OneNote project notes.

I call these Keynotes.

For every project, these notes contain important decisions, updates, pending items, risks, and current status.

So an email doesn’t remain just an email.

Email → Decision → Task or Knowledge

This has started changing the way I think about my inbox.

My New Email Rule

My rule is now simple:

Never read an important email without deciding what happens next.

Every email should eventually lead to one of three actions:

Reply → Archive → Defer

The objective isn’t to answer every email immediately or allow email to interrupt deep work continuously.

The objective is to avoid leaving emails in an undefined state.

If I can handle it quickly, I reply.

If nothing is required, I archive it.

If it requires work later, I defer it and create a task with a deadline.

It is a small change, but it has already helped me become more organized, respond more reliably, and reduce the chance of important things getting lost in my inbox.

Inbox Zero, for me, is not really about having zero emails. It is about having zero emails waiting for a decision.

Importing a Collection in Postman 2026

September 24, 2026 by alirazazaidi

Whenever I install a new version of Postman, I notice changes in its look and feel. The application continues to evolve, which is good, but finding the Import Collection option has often been a challenge for me.

In 2026, I installed a newer version of Postman on my laptop and faced the same challenge again: Where is the option to import a collection?

Step 1: Create a Workspace

I found a simple way to do it.

First, I created a new workspace in Postman. After opening the workspace, the Import option appeared prominently in the center of the screen.

Step 2: Click Import

Click the Import button. Postman will display the available options for importing your collection.

Select the collection file from your computer.

Step 3: Open the Collection File

After selecting the required collection file, click Open.

Postman will process the file and import the collection into your workspace.

Step 4: Collection Successfully Loaded

Once the import is complete, the collection appears in the Collections section of your workspace.

That’s it. The collection is now successfully imported and ready to use.

Quick Tip

If you install a newer version of Postman and cannot immediately find the Import option, try creating or opening a Workspace first. In my case, this made the Import option much easier to find.

Performance-First Coding Best Practices for D365 Finance & Operations

September 19, 2026 by alirazazaidi

Writing code that works is only the first step in Dynamics 365 Finance & Operations development. In enterprise implementations, customizations must also be efficient, maintainable, scalable, and aligned with D365 F&O best practices.

Some performance-oriented practices may initially appear to require additional development effort. However, the objective should not be to write the shortest possible code. The objective is to write code that performs efficiently when processing real production volumes.

This article focuses on two areas that frequently affect code quality and performance:

  • Variable declarations and scope
  • Database access using X++ select statements

1. Variable Declaration and Scope

Older Dynamics AX development commonly followed the pattern of declaring most variables at the beginning of a method. In modern X++ development, variables should generally be declared closer to where they are actually required.

Keep Variables Close to Their Usage

Avoid declaring every variable at the top of a method when it is only required much later.

For example, instead of:

public void processOrder()
{
    SalesTable salesTable;
    SalesLine salesLine;
    AmountCur totalAmount;
    boolean isValid;

    // Other processing...

    totalAmount = salesTable.SalesBalance;
}

prefer declaring variables where they become relevant:

public void processOrder()
{
    // Other processing...

    AmountCur totalAmount = salesTable.SalesBalance;
}

This makes the code easier to read and reduces unnecessary variable scope.

Limit the Scope of Variables

A variable should exist only within the scope where it is required.

Smaller scopes provide several benefits:

  • Improved readability
  • Reduced accidental reuse
  • Easier debugging
  • Clearer ownership of values
  • Better maintainability

This applies to primitive types, extended data types, enums, classes, and table buffers.

Declare Table Buffers Only When Required

Table buffers should not be created simply because they might be needed later.

Declare them when they are actually required and, where appropriate, reuse an existing buffer rather than introducing unnecessary additional buffers.

Instead of maintaining multiple buffers for the same purpose, first consider whether the existing buffer can safely be reused.

Be Careful with Variables Inside Loops

If the same variable or object is required repeatedly during loop processing, consider whether it should be declared outside the loop.

For example:

AmountCur lineAmount;

while select SalesLine
    where SalesLine.SalesId == salesTable.SalesId
{
    lineAmount = SalesLine.LineAmount;

    // Process amount
}

The important point is not simply “inside versus outside” the loop. The declaration should reflect the required scope and avoid unnecessary repeated initialization of objects or expensive resources.

Remove Unused Variables

Unused declarations should always be removed.

They increase code noise, make reviews more difficult, and can create confusion about whether a variable has a purpose that is no longer obvious.

A clean method should contain only the variables required by its current implementation.


2. Optimize Database Access

Database access is one of the most important performance considerations in D365 Finance & Operations.

Poorly designed queries may work perfectly with a small development database but become expensive when executed against millions of production records.

The basic principle is simple:

Retrieve only the data you need, and minimize unnecessary database round trips.

Select Only the Required Fields

Avoid retrieving an entire record when only a small number of fields are required.

Instead of:

select firstonly custTable
    where custTable.AccountNum == _accountNum;

consider selecting only the required fields:

select firstonly AccountNum, Name
    from custTable
    where custTable.AccountNum == _accountNum;

This makes the intention of the query clearer and avoids retrieving unnecessary data.

This practice becomes particularly valuable for large tables and performance-sensitive processing.


Avoid Unnecessary find() Calls

Standard table find() methods are convenient and have legitimate uses. However, they should not automatically be the default choice in performance-sensitive code.

For example:

custTable = CustTable::find(_accountNum);

If the customization requires only one or two fields, an explicit query may communicate the requirement more clearly:

select firstonly AccountNum, Name
    from custTable
    where custTable.AccountNum == _accountNum;

The important consideration is understanding what the underlying method does and whether it retrieves or processes more information than the customization actually requires.


3. Reduce Database Round Trips with Joins

A common performance problem is executing multiple database queries when the required information can be retrieved through a single joined query.

For example, code may first retrieve a sales order and then execute another query to retrieve related customer information.

Instead, consider combining the operations:

select firstonly SalesId, CustAccount
    from salesTable
    join AccountNum, Name
        from custTable
    where salesTable.SalesId == _salesId
       && custTable.AccountNum == salesTable.CustAccount;

The general principle is:

Prefer one well-designed query over several sequential database calls when the data can naturally be retrieved together.

Reducing database round trips becomes increasingly important in batch processing, integrations, reports, and high-volume transactions.


4. Use exists join When You Only Need to Check Existence

Sometimes a related table is required only to determine whether a matching record exists.

In such cases, there is no reason to retrieve fields from that table.

Instead of retrieving unnecessary related data, use an exists join:

select firstonly AccountNum
    from custTable
    exists join salesTable
    where salesTable.CustAccount == custTable.AccountNum
       && salesTable.SalesStatus == SalesStatus::Backorder;

An exists join is particularly useful when:

  • No fields are required from the related table.
  • The related table is used only as a filter.
  • You only need to confirm that a matching record exists.

Choose the join type based on the data requirement rather than automatically using join or outer join.


5. Understand Table Methods Before Calling Them

Table methods can improve encapsulation and reuse, so they should not be avoided simply because they are methods.

However, developers should understand the cost of the methods they call.

A method that appears simple may internally:

  • Execute additional SQL queries
  • Call another table’s find() method
  • Perform calculations
  • Traverse related records
  • Execute business logic that is unnecessary for the current scenario

This becomes especially important when a method is called repeatedly inside a loop.

For example:

while select salesLine
{
    value = salesLine.someMethod();
}

If someMethod() performs a database query, processing 10,000 sales lines could potentially generate thousands of additional database operations.

Before using such methods in performance-critical processing, review their implementation.

If the method contains important business logic, reuse it appropriately. If it merely retrieves simple data that can efficiently be included in the main query, consider retrieving that information as part of the original query.


6. Use Guard Clauses Before Expensive Operations

Validation should happen as early as possible.

Before executing a database query, determine whether the input already tells you that processing should stop.

Instead of:

select firstonly salesTable
    where salesTable.SalesId == _salesId;

if (!_salesId)
{
    return;
}

validate first:

if (!_salesId)
{
    return;
}

select firstonly SalesId
    from salesTable
    where salesTable.SalesId == _salesId;

This pattern is commonly known as a guard clause.

Guard clauses are useful for checking:

  • Missing parameters
  • Invalid enum values
  • Empty record identifiers
  • Unsupported statuses
  • Disabled functionality
  • Conditions that make further processing unnecessary

The principle is straightforward:

Do not query the database when you already know that no processing is required.


7. Be Especially Careful with Queries Inside Loops

One of the most important areas to review in X++ code is database access inside loops.

Consider:

while select salesLine
{
    custTable = CustTable::find(salesLine.CustAccount);

    // Processing
}

If thousands of records are processed, this pattern may result in a large number of database calls.

Where possible, redesign the query using joins, set-based processing, caching, or preloaded data.

When reviewing code, always pay particular attention to:

while select
for
do while
while

and check whether database queries or expensive methods are being executed repeatedly inside them.


8. Performance Should Be Considered During Development

Performance optimization should not be treated only as a final activity after development is complete.

During implementation and code review, developers should continuously ask:

  • Am I retrieving fields that I do not need?
  • Can multiple queries be combined?
  • Is this query running inside a loop?
  • Does this method execute another database query internally?
  • Can an exists join be used?
  • Can processing stop earlier?
  • Is there a set-based alternative?
  • Will this approach still perform well with production-scale data?

A customization that works with 100 records may behave very differently with 1 million records.

Final Thoughts

Good D365 F&O development is not just about producing technically correct X++ code. It is about producing code that remains reliable and efficient as transaction volumes grow.

The key principles are:

  1. Keep variable scope small and intentional.
  2. Remove unused declarations and unnecessary buffers.
  3. Retrieve only the fields you actually need.
  4. Reduce database round trips by using appropriate joins.
  5. Use exists join when related records are required only for filtering.
  6. Understand what table methods do before using them repeatedly.
  7. Validate conditions early with guard clauses.
  8. Avoid repeated database access inside loops wherever possible.
  9. Design and review customizations with production data volumes in mind.

In D365 Finance & Operations, a few milliseconds of unnecessary processing may appear insignificant during development. When the same logic runs thousands or millions of times in production, however, those small inefficiencies can become significant performance problems.

Performance should therefore be part of the design—not an afterthought.

D365 Finance and Operations Technical Training Day 6, 7 and 8

August 9, 2026 by alirazazaidi

While writing this post the couplet of Ghalib came into my mind

بازیچۂ اطفال ہے دنیا مرے آگے
ہوتا ہے شب و روز تماشا مرے آگے

ہوتا ہے نہاں گرد میں صحرا مرے ہوتے
گھستا ہے جبیں خاک پہ دریا مرے آگے

مت پوچھ کہ کیا حال ہے میرا ترے پیچھے
تو دیکھ کہ کیا رنگ ہے تیرا مرے آگے

ایماں مجھے روکے ہے، جو کھینچے ہے مجھے کفر
کعبہ مرے پیچھے ہے، کلیسا مرے آگے

So what is contribution

D365 Technical Training Day 2 to Day 5

July 22, 2026 by alirazazaidi

Let’s revisit the fundamentals! I’m planning to create a 28-video technical training series on Microsoft Dynamics 365 Finance & Operations (D365 F&O). The goal is to build a strong foundation for beginners and aspiring D365 developers by covering core technical concepts step by step.

🎉 The first 4 videos are now completed and available on YouTube!

Current Playlist:

  • ✅ Day 2 – Download and Configure the D365 F&O OneBox VM
  • ✅ Day 3 – Visual Studio, Models & Packages
  • ✅ Day 3 – Primitive Data Types, Extended Data Types (EDTs) & Base Enums
  • ✅ Day 4 – D365 Technical Training Day 5 How to create table in D365 Finance and operations

I’ll continue uploading the remaining videos regularly, covering topics such as tables, forms, classes, queries, data entities, integrations, debugging, best practices, and much more.

If you’re starting your journey as a D365 F&O Technical Consultant or X++ Developer, this series is designed to help you learn from the ground up.

Don’t forget to Like, Share, and Subscribe to stay updated with every new lesson!

D365 Technical Training Day 2 : How to download and configure One Box VM on your laptop

D365 Techical Training Day 3 | Visual Studio, Model, packages

D365 F&O Technical Training – Day 4 | Primitive Data Types, Extended Data Types (EDTs) & Base Enums

D365 Technical Training Day 5 How to create table in D365 Finance and operations

Embedding Websites in Microsoft Dynamics 365 Finance & Operations (D365FO)

July 1, 2026 by alirazazaidi

esterday, I worked on a small proof of concept (POC) to embed an external web page inside Microsoft Dynamics 365 Finance & Operations.

Initially, I thought the solution would require using an iframe. However, after some research, I discovered that WebsiteHostControl provides a much cleaner and more suitable approach.

The implementation is straightforward:

  1. Create a custom form.
  2. Apply the appropriate form pattern.
  3. Add a Tab control with a Tab Page.
  4. Add a Group control inside the Tab Page.
  5. Set the Group control’s Width Mode and Height Mode properties to Size to Available.

From there, you can add the WebsiteHostControl to the group and configure it to display the required external web page within the D365 Finance & Operations form.

Overall, it turned out to be much simpler than I initially expected, and WebsiteHostControl is the recommended approach for hosting external web content inside a D365 F&O form.

Then add a website host
Set its properties auto declaration to true
and Height mode and Width Mode to size to available

Inside form Initialize method just give url

public class FormTest extends FormRun
{
    /// <summary>
    ///
    /// </summary>
    public void init()
    {
        super();

        WebsiteHostControl1.url("https://www.tech.alirazazaidi.com");
    }

}



On running the form it will look like this

Thriving in the Age of AI: Strengthening Human Skills

June 17, 2026 by alirazazaidi

To thrive in the age of AI, we need to learn how to work effectively with both humans and machines.

Most importantly, we must focus on the human side of work.

According to one estimate, success at work has traditionally been 75% communication and relationship-building, and only 25% technical expertise.

With the rise of AI, that balance is shifting even further. In many roles, human skills now account for 85% of success, while technical skills make up only 15%.

To succeed in this new era, we must adapt to the changes brought by AI and strengthen our soft skills.

The challenge is that while technology has made communication easier, it has not necessarily improved connection.

AI is growing rapidly, and it is here to stay. Yet our connections with other human beings are becoming more fragile. We are losing the ability to build meaningful relationships.

Connection is a skill. Like any skill, if we do not practice it, it weakens over time.

So, how do we navigate disagreements and work better with others?

Here are four principles to improve your human skills in the age of AI.

1. Seek Understanding, Not Just Agreement

Imagine you are participating in a debate competition. Based on a coin toss, you might have to argue either for or against a topic.

Life works the same way.

When someone challenges your point of view, try to understand their perspective rather than immediately defending your own.

The goal is not to agree with every opinion. The goal is to understand it.

We are often taught to win arguments and convince others. Instead, we should focus on understanding how others see the world.

When we do that, we become more persuasive, more empathetic, and more effective collaborators.

Approach conversations with curiosity rather than judgment.

AI can help with this. Whenever you disagree with someone, ask AI to explain the other person’s perspective. It can help you see the issue from different angles.

2. Expand the Pie

Think beyond win-or-lose situations. Look for win-win outcomes.

I once negotiated with a shopkeeper, and we could not agree on the price. Instead of continuing to bargain, I asked myself, “What else is possible?”

I offered to recommend his shop to my friends if he could lower the price. He agreed.

I bought the product at a fair price, and later I brought my friends to his store.

We both benefited.

Too often, we approach life with a win-lose mindset. But most successful relationships are built on mutual value.

Expanding the pie means creating opportunities where everyone gains.

This mindset transforms competition into collaboration.

Instead of asking, “How can I win?” ask, “How can we create more value together?”

3. Diversify Your Circles

Surround yourself with people who think differently from you.

Build relationships with people from different backgrounds, cultures, professions, beliefs, and experiences.

Diverse teams create stronger ideas and better solutions because they bring multiple perspectives to the table.

There is a saying: “Show me your friends, and I’ll show you your future.”

Actively seek new connections, especially with people outside your usual circles.

Find common ground despite your differences. Those shared interests become the foundation for meaningful relationships.

4. Show That You Care

People remember how you make them feel.

Offer a helping hand. Listen carefully. Support others, even when it requires extra effort.

If someone is preparing a presentation, help them. Understand their goals and encourage their ambitions.

Show genuine interest in their success.

At the end of the day, people want to feel heard, understood, and appreciated.

When people feel valued, teams thrive. When they feel ignored, teams break apart.

Reach out to someone. Check in on them. Make time to connect.

In the age of AI, technical skills will continue to evolve, but human connection will always matter.

Build the muscles that allow you to work effectively with both people and machines.

Next Page »

Primary Sidebar

About

I am Dynamics AX/365 Finance and Operations consultant with years of implementation experience. I has helped several businesses implement and succeed with Dynamics AX/365 Finance and Operations. The goal of this website is to share insights, tips, and tricks to help end users and IT professionals.

Legal

Content published on this website are opinions, insights, tips, and tricks we have gained from years of Dynamics consulting and may not represent the opinions or views of any current or past employer. Any changes to an ERP system should be thoroughly tested before implementation.

Categories

  • Accounts Payable (2)
  • Advance Warehouse (2)
  • AI (3)
  • Asset Management (3)
  • Azure Functions (1)
  • Books (6)
  • Certification Guide (3)
  • ChatGPT (3)
  • Claude (1)
  • Customization Tips for D365 for Finance and Operations (65)
  • D365OF (60)
  • Data Management (1)
  • database restore (1)
  • Dynamics 365 (59)
  • Dynamics 365 for finance and operations (140)
  • Dynamics 365 for Operations (176)
  • Dynamics AX (AX 7) (134)
  • Dynamics AX 2012 (274)
  • Dynamics Ax 2012 Forms (13)
  • Dynamics Ax 2012 functional side (16)
  • Dynamics Ax 2012 Reporting SSRS Reports. (31)
  • Dynamics Ax 2012 Technical Side (52)
  • Dynamics Ax 7 (65)
  • ERP implementation (1)
  • Exam MB-330: Microsoft Dynamics 365 Supply Chain Management (7)
  • Excel Addin (1)
  • Favorites (12)
  • Financial Modules (6)
  • Functional (8)
  • General Journal (1)
  • Implementations (1)
  • Ledger (1)
  • Lifecycle Services (2)
  • Logseq (4)
  • Management Reporter (1)
  • Microsoft Excel (4)
  • MS Dynamics Ax 7 (64)
  • MVP summit (1)
  • MVP summit 2016 (1)
  • New Dynamics Ax (19)
  • Non Defined (9)
  • Note taking Apps (2)
  • Obsidian (5)
  • Personal Knowledge Management (3)
  • PKM (17)
  • Postman (1)
  • Power Platform (6)
  • Procurement (5)
  • procurement and sourcing (6)
  • Product Information Management (4)
  • Product Management (6)
  • Production Control D365 for Finance and Operations (10)
  • Project Management (2)
  • Sale Order Process (10)
  • Sale Order Processing (10)
  • Sales and Distribution (5)
  • Soft Skill (1)
  • Supply Chain Management D365 F&O (5)
  • Team Lead tips (1)
  • Team Management (1)
  • Tips and tricks (278)
  • Uncategorized (165)
  • Upgrade (1)
  • Web Cast (7)
  • White papers (4)
  • X++ (12)

Wiki

  • SCM

Copyright © 2026 · Magazine Pro On Genesis Framework · WordPress · Log in