Skip to content

Case study · Logistics

Stock that is true now, not true at 2am

A distributor was selling from a stock figure refreshed overnight, which meant overselling by day and firefighting by evening. We integrated warehouse scanning, Dynamics 365 F&O and every sales channel onto one live position.

Engagement · Integration programme

Inventory integration where the number has to be right at the moment of sale.

Industry
Logistics & distribution
Solution
Real-time inventory integration
Platform
Dynamics 365 Finance & Operations
Engagement model
Dedicated integration team
Scope
Warehouse, ERP, channels, allocation
Warehouses
Multiple, with scanning
Constraint
No downtime in the warehouse
Target
Sub-second availability

Outcomes

What a stale stock figure costs

Overselling is the visible cost. Safety stock held against uncertainty is the larger one.

  • −94% Overselling incidents

    Availability is computed from the live position with allocations reserved at order time, so the stock that is promised is stock that exists and is not already promised elsewhere.

    Measured across orders before and after integration

  • <1 sec From warehouse scan to channel availability

    Scanner movements publish as events consumed by the ERP and every channel, rather than waiting for an overnight batch.

    Measured end to end under production load

  • −37% Safety stock held

    When the position is trustworthy, buffers held purely against data uncertainty can be released — which is working capital returned to the business.

    Measured across inventory value after stabilisation

Context

Why the numbers were always behind

The systems were fine individually. The integration between them was a nightly file.

The business

A national distributor supplying trade and retail customers from multiple warehouses across several sales channels.

The starting point

Warehouse scanning wrote to a warehouse system. ERP received a nightly file. Channels received another. Every figure was a day old at best.

The trigger

Overselling was routine enough that customer service had a process for it, and buyers were holding heavy safety stock because nobody trusted the number.

What they wanted

One live stock position, allocation reserved at order time, and availability that every channel reads from the same place.

Constraints

The warehouse cannot stop scanning for a migration · channel systems vary in what they can consume · the position must stay correct under burst load · reconciliation must survive a failed integration rather than silently drift.

System

What it runs at today

The integration as it runs today.

  • <1s Scan to availability

    End to end

  • 1 Stock position

    Every channel reads it

  • −94% Overselling

    Against the baseline

  • 0 Nightly batches

    For stock

The engineering problem

Four problems with batch inventory

All of them are invisible on a quiet day and expensive on a busy one.

  1. Availability that is a day old

    Selling from an overnight figure means every sale during the day is made against a number that has already moved.

    What we did

    Event-driven publication from scanner movements, so availability reflects the warehouse within a second.

  2. No allocation at order time

    Even a live figure oversells if two orders read the same available stock before either reserves it.

    What we did

    Allocation reserved at order time against the live position, so availability reflects what is unpromised rather than what is physically present.

  3. Channels that read different numbers

    When each channel holds its own copy of availability, they diverge, and the divergence is discovered by a customer.

    What we did

    One availability service every channel reads, rather than a copy distributed to each.

  4. Integration failures that drift silently

    A batch integration that fails part way leaves two systems disagreeing, and nobody finds out until a stock count.

    What we did

    Event replay with reconciliation: the position can be rebuilt from the event log, and a continuous check flags divergence immediately rather than at count time.

Architecture

How it fits together

Simplified — the shape of the system rather than every service in it.

  1. Warehouse events

    • Scanner movements
    • Receipts
    • Picks
    • Adjustments

    Every physical movement published as an event at the moment it happens.

  2. Position service

    • Live stock
    • Allocations
    • Availability

    One computed position: physical, less allocated, per location.

  3. ERP

    • Dynamics 365 F&O
    • Costing
    • Replenishment

    Consuming the same events, so finance and operations agree.

  4. Channels

    • Trade portal
    • Retail
    • Marketplaces

    All reading the one availability service rather than holding copies.

The event log is the backbone. Because the position can be rebuilt from it, a failed integration is a replay rather than an investigation.

Solutions

What we implemented

An event-driven inventory backbone.

  • Event publication

    Scanner movements published as they happen.

  • Position service

    Physical less allocated, per location, continuously.

  • Allocation

    Stock reserved at order time.

  • Channel availability

    One service, read by every channel.

  • ERP posting

    Movements into F&O for costing and replenishment.

  • Reconciliation

    Continuous divergence detection and event replay.

Key capabilities

What it does day to day

Six capabilities across the inventory chain.

CapabilityRunsRefreshWhat it does
Scanner events Warehouse Real time Every movement published as it happens
Position service Automatic Continuous Physical stock less allocations, per location
Allocation Automatic At order Stock reserved when the order is taken, not when it is picked
Channel availability All channels Sub-second One service read by every channel
ERP posting Automatic Continuous Movements into Dynamics 365 F&O for costing and replenishment
Reconciliation Automatic Continuous Divergence detected immediately, position rebuildable from the log

Integrations

How the moving parts plug in

From a scanner in the aisle to availability on a channel.

Warehouse

  • ScanPick, receipt or adjustment
  • Event publishedImmediately
  • Location recorded

Position service

  • Physical updated
  • Allocations appliedWhat is already promised
  • Availability computedPer location

Channels & ERP

  • Trade portal
  • Retail & marketplaces
  • Dynamics 365 F&OCosting and replenishment

Allocation at order time is what actually stops overselling. A live figure alone is not enough when two orders can read it simultaneously.

Security & data

What keeps the position trustworthy

A real-time system that drifts is worse than a batch one, because people believe it.

  • Event replay

    The position can be rebuilt from the event log, so a failure is recoverable rather than investigated.

  • Continuous reconciliation

    Divergence between systems is detected as it happens rather than at stock count.

  • Burst tolerance

    The pipeline is designed for peak scanning load, not for the average.

  • Ordered processing

    Movements are applied in order per item and location, so concurrent activity cannot corrupt the position.

The brief

Real time without allocation still oversells

The distributor initially framed this as a speed problem: make the nightly sync more frequent. More frequent batches would have reduced overselling without eliminating it, because the actual failure is two orders reading the same availability before either reserves stock.

We built event-driven movement publication and allocation at order time together. Either alone would have been a partial fix.

  • Warehouse movements published as events
  • Allocation reserved at order time, not at pick
  • One availability service read by every channel
  • Position rebuildable from the event log

What the integration had to survive

  • 01A warehouse that cannot stop scanning
  • 02Channel systems with different integration capabilities
  • 03Burst load at peak picking
  • 04Failures that must be recoverable, not silent

Process

We ran the new pipeline alongside the old one

You cannot test an inventory position by inspection. You test it by running both and comparing.

  1. Stage 1

    Event publication

    Scanner movements published in parallel with the existing batch, changing nothing downstream.

  2. Stage 2

    Shadow position

    The new position computed alongside the old, with divergence measured daily until it was explained.

  3. Stage 3

    Allocation model

    Reservation at order time designed and tested against historical order patterns including peak days.

  4. Stage 4

    Channel cutover

    Channels moved to the availability service one at a time, smallest first.

  5. Stage 5

    Batch retirement

    The nightly sync switched off only after a full peak period on the new pipeline.

Technology

Dynamics 365 F&O with an event backbone

The ERP stays the system of record; events keep everything in step.

ERP

  • Dynamics 365 Finance & Operations
  • Costing
  • Replenishment

Events

  • Movement events
  • Ordered processing
  • Replay

Position

  • Availability service
  • Allocation
  • Per-location stock

Integration

  • Channel adapters
  • Reconciliation
  • Burst handling

Business impact

What changed for the distributor

Three outcomes, one of which was worth more than the project.

  • Overselling effectively ended

    Down 94%, and with it a customer service process that no longer needs to exist.

  • Working capital released

    Safety stock down 37% once the number could be trusted.

  • Evenings stopped being firefighting

    The reconciliation work that filled every evening disappeared.

The result

One number, everywhere, now

Overselling fell 94% because availability is live and allocation happens when the order is taken rather than when it is picked.

Safety stock fell 37% once buyers trusted the position, which returned more working capital than the integration cost.

  • Overselling incidents down 94%
  • Sub-second scan to channel availability
  • Safety stock down 37%
  • No nightly batch for stock

What we hold to in inventory integration

  • 01Real time without allocation still oversells
  • 02Make the position rebuildable from the event log
  • 03Run the new pipeline in shadow until divergence is explained
  • 04Retire the batch only after a full peak period

Verified reviews

What clients say about our Dynamics work

Verified reviews from clients of ours on similar work, published on Clutch. They are not from this project.

5.0 27 verified reviews

Free discovery call

Have an idea? Let's turn it into AI-powered software.

Book a free discovery call with our experts. Share your idea and we will help you shape the scope, timeline and budget, under NDA.

  • Free consultation
  • NDA before we talk
  • Transparent estimate