Supply Chain Management & Logistics

Managing the flow of goods from raw material to customer. Learn supply-chain structure and drivers, the bullwhip effect and its causes, information sharing and VMI, risk pooling and network design, facility location (centre of gravity, load–distance), transportation modes and costs, warehousing and order picking, sourcing and supplier selection, logistics KPIs, resilience and sustainability — with Python simulating the bullwhip effect in a 4-stage chain.

A supply chain links suppliers, manufacturers, distributors, retailers and customers. Decisions at each stage affect the others: a retailer's ordering policy can make the factory's demand wildly unstable; a new warehouse location changes transport cost and delivery speed for everyone.

Supply-chain engineering balances cost, speed, reliability, flexibility and — increasingly — resilience and sustainability, using forecasting, inventory models, network optimisation and data sharing.

An analogy

The bullwhip effect is like the children's game of 'telephone' combined with over-reaction: each stage passes on a slightly exaggerated version of the demand signal it received, so a small ripple at the customer becomes a huge wave at the factory.

Supply-chain structure and drivers

Flows: materials (downstream), information and cash (both ways). Drivers: facilities (where), inventory (how much), transportation (how), information (what's shared), sourcing (who), pricing (demand shaping). Strategy fit: efficient chains for stable functional products; responsive chains for innovative products with uncertain demand.

The bullwhip effect

Causes and remedies:

Network design and logistics

Fewer warehouses pool risk (less safety stock, √n law) but raise outbound transport distance and delivery time; more warehouses do the opposite. Location models range from centre of gravity to mixed-integer network optimisation. Transport modes trade cost against speed: sea < rail < road < air. Warehouses use slotting, zone/batch/wave picking and increasingly automation (AS/RS, AMRs).

Sourcing, risk and sustainability

Supplier selection with weighted scoring and total cost of ownership; single vs multiple sourcing; nearshoring. Resilience: map tier-n suppliers, hold strategic buffers, dual-source critical parts, stress-test with scenarios (pandemics, canal blockages, chip shortages). Sustainability: scope-3 emissions, circular supply chains (reverse logistics, remanufacturing). Digital supply chains use control towers, IoT tracking and optimisation.

Formulas

Worked example: Risk pooling

Given: 4 regional warehouses, each σ = 100 units/week (independent), z = 1.65

Find: Safety stock separate vs pooled.

Answer: Pooling halves safety stock

Worked example: Centre of gravity

Given: Demand points (0,0) w 100, (10,0) w 300, (0,10) w 100

Find: Location.

Answer: (6, 2) — pulled toward the big customer

Worked example: Cash-to-cash

Given: DIO 45, DSO 30, DPO 40 days

Find: C2C.

Answer: 35 days of working capital tied up

Simulating the bullwhip effect

import random, statistics
random.seed(7)
# Bullwhip effect in a 4-stage chain with order-up-to policies and moving-average forecasts
weeks = 200
customer = [100 + random.gauss(0, 10) for _ in range(weeks)]
def stage(demand, L=2, n=4):
    orders, hist = [], []
    inv_pos = demand[0] * (L + 1)
    for d in demand:
        hist.append(d)
        f = statistics.mean(hist[-n:])
        target = f * (L + 1)
        order = max(0.0, d + (target - inv_pos))
        inv_pos += order - d
        orders.append(order)
    return orders
flows = [customer]
for name in ("retailer", "wholesaler", "distributor", "factory"):
    flows.append(stage(flows[-1]))
base = statistics.pvariance(customer)
for name, f in zip(("customer", "retailer", "wholesaler", "distributor", "factory"), flows):
    print(f"{name:11s} order variance ratio {statistics.pvariance(f[20:])/base:6.1f}")
# customer    order variance ratio    1.0
# retailer    order variance ratio    3.7
# wholesaler  order variance ratio   17.2
# distributor order variance ratio   71.5
# factory     order variance ratio  175.5

Each stage forecasts from its incoming orders and adjusts its order-up-to level, amplifying variability roughly 4× per stage: the factory sees 175× the customer's demand variance even though customers are steady. Sharing point-of-sale data, shorter lead times, smoother forecasts and stable pricing tame the bullwhip.

Common mistakes

Applications

Key takeaways

Going further