Archive

Tag Archives: artificial-intelligence

Sheila Kaye Jameson was a logistics analyst at EnerSys Corporation in Reading, Pennsylvania, not an executive, not someone with unusual authority. Over roughly eleven years she embezzled approximately $1.8 million from her employer using a company she invented herself. She was sentenced to 48 months in federal prison and ordered to pay $1,864,024 in restitution to EnerSys and its insurer, plus $256,447 in back taxes to the IRS.

What happened

Jameson created a shell corporation called Aries Consulting Group. It did no work for EnerSys. It provided no services, delivered no goods, and had no legitimate business relationship with the company at all. What it had was a name, a bank account, and a place in EnerSys’s vendor records. Jameson used her position to submit invoices from Aries Consulting to EnerSys, and EnerSys paid them, for over a decade, on the strength of nothing more than an invoice arriving from a vendor that existed in the system.

She also failed to report any of the embezzled income on her federal tax returns, which added tax fraud charges on top of the mail fraud charge she ultimately pleaded guilty to.

Why the gap existed

This case is the purest version of a problem that shows up across every entry in this series so far: a system that verifies a vendor once, at onboarding, and then trusts that vendor’s invoices indefinitely without asking whether the underlying business relationship still makes sense, or ever made sense in the first place.

Eleven years is the number that should stop anyone reading this. Not eleven months, not two years. Eleven years of invoices from a company that never did a single hour of real work, moving through an accounts payable process that had every opportunity to ask “what does Aries Consulting actually do for us” and never did.

That question doesn’t get asked because vendor verification tends to be treated as a one-time gate. Pass it once at setup, and the vendor becomes permanently trusted infrastructure. Nobody re-examines a vendor relationship that has been running smoothly for years, precisely because it has been running smoothly for years. The absence of a problem gets read as evidence there isn’t one, when it might just mean nobody has looked.

Controls that would have caught it

A recurring vendor spend review is the most direct control here: a periodic requirement that every vendor above a spend threshold be re-justified with a current description of the services being provided and evidence that those services were actually delivered. Not a renewal of a contract. An active accounting for what the money is buying.

A second, more structural control targets exactly the gap Jameson exploited: any vendor whose only interaction with the company is invoicing, with no purchase orders, no receiving records, no contract on file, and no employee outside the person who onboarded them able to describe what the vendor does, should be flagged automatically for review regardless of how long the relationship has run. Tenure should never be treated as verification.

A third control, specific to logistics and operations roles with vendor-creation authority, is separating who can create a new vendor record from who can approve payments to that vendor. Jameson’s position gave her enough reach to do both. A system where those two functions sit with different people doesn’t stop a determined employee from ever attempting fraud, but it does stop one person from running the entire scheme alone for a decade without anyone else’s decision ever touching it.

An AI prompt example for ERP fraud detection

The pattern this scheme depended on, a vendor relationship with invoices but no other supporting business activity, is exactly the kind of thing worth checking continuously rather than during an occasional audit. Against the ERP’s vendor, purchasing, and receiving data, a controller could run something like:

“List all active vendors with total payments over $50,000 in the last three years that have no associated purchase orders and no receiving or goods-receipt records on file.”

A second query targets the tenure blind spot directly:

“Flag any vendor active for more than five years whose invoicing pattern has not been reviewed or re-verified since initial onboarding.”

Neither question is hard to answer once it’s asked. The entire eleven years this scheme ran is evidence that nobody was asking it.

The pattern for this series

Every case in this series follows the same shape: what happened, what shared assumption let it run, what a properly governed ERP control looks like, and one or two concrete AI prompts that turn a periodic audit question into something that can run continuously. The goal isn’t to suggest AI replaces the underlying data governance. It’s to show what becomes possible once that governance exists and someone actually asks it the right question.

Source disclaimer

The case details in this article are drawn from press releases published by the U.S. Attorney’s Office for the Eastern District of Pennsylvania, a public government source. All facts, figures, and quotations describing the case are sourced from those releases. The analysis of the control gap, the proposed detection controls, and the AI prompt examples are original commentary and are not part of the source material.

References

United States Attorney’s Office, Eastern District of Pennsylvania. “Corporate Employee Sentenced For Embezzlement And Tax Fraud.” Press release. https://www.justice.gov/usao-edpa/pr/corporate-employee-sentenced-embezzlement-and-tax-fraud

United States Attorney’s Office, Eastern District of Pennsylvania. “Corporate Employee Charged With Embezzlement And Tax Fraud.” Press release, June 28, 2012. https://www.justice.gov/archive/usao/pae/News/2012/June/jameson_release.htm

In 2022, a Minnesota woman was sentenced to more than nine years in federal prison for embezzling over $881,000 from a Denny’s franchisee and a family-owned construction company. What makes this case worth a second look, beyond the last article’s Randstad payroll scheme, is that the same person ran two separate fraud channels through the same underlying weakness, and neither channel needed to be sophisticated to work for five years.

What happened

As Director of Operations for MI5, Inc., Kimberly Sue Peterson-Janovec had oversight of payroll, vendor billing, and cash deposits across eight restaurant locations. She used that access two ways. First, she submitted false requests for vendor payments, creating fake email accounts to impersonate vendor employees and generate fake correspondence supporting the payments, netting roughly $336,000. Second, and separately, she manipulated the payroll system to issue herself unauthorized pay using the names of employees who no longer worked for the company, netting another $20,000. On top of that, she was held responsible for an additional $181,000 in stolen cash deposits.

Two different fraud mechanisms, one root cause. Both vendor identity and employee identity were things the system trusted once established and never re-verified.

Why one control gap produced two exploits

Most ERP fraud writeups treat vendor fraud and payroll fraud as separate problems needing separate controls. They usually are separate controls in practice, but they share the same underlying assumption: once a master record exists, whether it is a vendor or an employee, the system treats it as valid until someone actively flags it. Nobody was asking the system to continuously re-verify “is this vendor real” or “is this employee still employed” on every transaction. Both checks happened, if at all, as periodic manual review rather than a standing rule enforced on every payment run.

That is the pattern worth generalizing. A fraud scheme doesn’t need two different weaknesses to run two different exploits. It needs one weak assumption that both processes happen to share.

Controls that would have caught it

Vendor side. A governed vendor master process should treat any new vendor contact channel, especially email domains that don’t match a registered business domain, as a flag requiring secondary approval before the first payment goes out. Cross-referencing vendor contact emails against internal employee email patterns is a cheap, high-value check most ERP implementations never configure, because it isn’t a default workflow. It has to be built.

Payroll side. Every pay run should cross-check active employee status at the moment of payment, not rely on a termination flag set once in HR and assumed to propagate. In practice, this means the HR and payroll integration needs to be a hard gate, not a soft sync, so a terminated worker record cannot appear as a valid payee in any pay run regardless of when the termination was recorded relative to payroll cutoff.

Both sides. The five-year duration of this scheme is the real tell. Neither vendor payments nor payroll runs were being reviewed for anomalies as a routine, systemic process. They were being trusted because they had always been trusted.

An AI prompt example for ERP fraud detection

This is where AI-assisted review earns its place, not replacing the controls above but catching what static rules miss because nobody thought to write the rule. Using a natural-language query layer against the ERP’s vendor and payroll data, a controller could run something like:

“Compare vendor contact email domains against our employee email domain. Flag any vendor created in the last 24 months where the contact email domain is unregistered, uses a free email provider, or closely resembles an employee’s name.”

And separately:

“List all payroll disbursements in the last fiscal year paid to employee IDs with a termination date recorded in HR prior to the pay period start date.”

Neither query requires new functionality. Both require someone to think to ask the question, which is exactly what a five-year undetected scheme tells you nobody was doing. The value of an AI layer here isn’t that it catches something a human couldn’t. It’s that it makes asking the question cheap enough to do routinely instead of only after something else triggers an audit.

The pattern for this series

Every case in this series will follow the same shape: what happened, what shared assumption let it run, what a properly governed ERP control looks like, and one or two concrete AI prompts that turn a periodic audit question into something that can run continuously. The goal isn’t to suggest AI replaces the underlying data governance. It’s to show what becomes possible once that governance exists and someone actually asks it the right question.

Source disclaimer

The case details in this article are drawn from a press release published by the U.S. Attorney’s Office for the District of Minnesota, a public government source, along with contemporaneous news coverage of the same case. All facts, figures, and quotations describing the case are sourced from those releases and reports. The analysis of the shared control gap, the proposed detection controls, and the AI prompt examples are original commentary and are not part of the source material.

References

United States Attorney’s Office, District of Minnesota. “Kenyon Bookkeeper Sentenced to More Than 9 Years Prison for $881,000 Employer Embezzlement and Tax Fraud Scheme.” Press release. https://www.justice.gov/usao-mn/pr/kenyon-bookkeeper-sentenced-more-9-years-prison-881000-employer-embezzlement-and-tax

Walsh, Paul. “Woman who embezzled $880,000 from Denny’s franchisee, Rochester company gets 9 years.” Minnesota Star Tribune, June 2022. https://www.startribune.com/9-1-4-years-in-prison-for-woman-who-embezzled-880k-from-dennys-franchisee-rochester-company/600184577

Enterprise software has spent forty years arguing about the same question in different clothes. Should a function do one thing correctly, or should a tool be given enough authority to figure things out on its own. Agentic AI has not settled that argument. It has just given it a new vocabulary.

Look at the two ends of what is shipping right now. SAP’s Joule agents, and most of the enterprise agent catalog around them, are built narrow. Each one has a defined job, a defined sequence, and a defined set of systems it is allowed to touch. An invoice reconciliation agent reconciles invoices. It does not decide to also check vendor master data for anomalies unless that step was explicitly wired into its process. Microsoft’s Cowork points at the opposite pole. It is handed a single broad tool, effectively full reach into a Dynamics 365 Finance and Operations environment, and told to figure out how to get a stated outcome done. Nobody hand built a sequence for it. It builds its own.

Both are called agents. They are not the same kind of thing, and the difference matters more than the marketing suggests.

What a specialized agent actually is

A specialized agent is closer to a very well automated macro than it is to a colleague. It has a fixed task, a fixed order of operations, and a boundary around what data and systems it can reach. This is not a limitation bolted on as an afterthought. It is the entire design philosophy. You get predictability in exchange for narrowness. When the invoice reconciliation agent runs, you know what steps it took, in what order, against what data, because those steps were specified in advance. If it fails, it fails in a way you can trace to a specific step that did not resolve.

That traceability is not incidental in a finance system. It is the whole point. An auditor does not want to hear that an agent figured out how to close the period. They want a sequence of steps that can be replayed, checked, and defended.

What a generalized agent actually is

A generalized agent like Cowork inverts that trade. Instead of many narrow tools each doing one job, it gets one wide tool and the discretion to decide, at run time, what sequence of actions gets it from the stated goal to a finished result. Ask it to reconcile a vendor’s account for the quarter and it will decide for itself which records to pull, which discrepancies are worth flagging, and in what order to check them. Two runs against the same request, on the same data, are not guaranteed to take the same path to get there.

That is not a bug in the current generation of these tools. It is the feature being sold. A generalized agent does not need someone to have anticipated every scenario in advance and built a process for it. It reasons its way through situations nobody wrote a workflow for. The cost of that flexibility is that the path it takes on any given run is not fully knowable ahead of time, and reproducing it exactly on demand is harder than reproducing a fixed sequence.

The real axis underneath the label

Specialized versus generalized describes the shape of the agent. It does not describe the thing that actually matters to a finance or operations leader deciding whether to trust one of these near a ledger. That deeper axis is deterministic versus probabilistic.

A deterministic process, whether run by a person, a script, or a narrow agent, produces the same output from the same input every time. A three way match either passes or it does not, based on rules that do not change between Tuesday and Thursday. A probabilistic process, which is what a large language model doing open ended reasoning actually is underneath the interface, produces an output that is likely to be correct given the input, not guaranteed to be correct. Run it twice and you may get two answers that are both individually defensible and are not identical.

Specialized agents tend to sit closer to the deterministic end, because their designers constrained the decision space in advance and left little room for the model to improvise. Generalized agents tend to sit closer to the probabilistic end, because improvisation across an open ended tool is the entire value proposition. But the two axes are not the same axis wearing different names, and conflating them is where a lot of the current enterprise anxiety about agents actually comes from. A specialized agent can still make a probabilistic judgment call inside one of its fixed steps, such as classifying a transaction description as likely fraudulent. A generalized agent can still land on a fully deterministic sub task, such as pulling a specific ledger balance, where there is only one correct answer and no room to improvise.

Why D365 F&O is the place this gets tested for real

Dynamics 365 Finance and Operations is a useful proving ground precisely because it already lives with both philosophies side by side. Its native controls, workflow approvals, posting rules, three way match, are deterministic by construction. They were built that way before anyone was talking about agents, because a ledger that produces a different answer on a re-run is not a ledger anyone can close a period against.

Layer Copilot style features and Cowork on top of that and you get a system where the system of record stays deterministic while the layer working on top of it is free to reason probabilistically about what needs attention. That is not a contradiction. It is the correct division of labor. The ledger should never guess. The agent looking for the discrepancy that the ledger’s own rules were not written to catch is allowed to guess, because guessing well is precisely what it is there to do.

The mistake worth watching for is treating a generalized, probabilistic agent as if it were a specialized, deterministic one because it happens to be plugged into the same system. Giving Cowork the same blind trust you would give a fixed three way match rule is a category error. One was built to never deviate. The other was built to deviate on purpose, whenever deviating produces a better answer.

Where this actually lands

Neither shape is the correct answer in general. A specialized agent is the right tool when the process is well understood, the stakes of an unreviewed error are high, and an auditor will eventually ask for the sequence of steps. A generalized agent is the right tool when the problem is not well understood in advance, when the value comes from adapting to a situation nobody scripted for, and when a human is still positioned to review the output before it becomes a transaction that cannot be undone.

The organizations getting this right are not the ones picking a side. They are the ones that have stopped asking whether an agent is good, and started asking where on both axes, specialized to generalized and deterministic to probabilistic, a given task actually belongs. Get that placement wrong in either direction and you either waste a general reasoning tool on a task a five line business rule already solved, or you hand a fixed script a problem it was never built to handle and call the resulting failure a bug instead of what it actually is, a design mismatch.

In 2009, a former branch manager at Randstad was sentenced to five years and one month in federal prison for wire fraud and aggravated identity theft. The scheme ran for three years before anyone caught it. The method behind it was almost boring, which is exactly why it worked.

What happened

Cynthia Whitehead used the real names of former Randstad employees, people who had already left the company, to generate wage payments through the payroll system. She then kept those “wages” for herself. From 2004 to 2007 she embezzled more than a quarter of a million dollars this way. She pleaded guilty on July 8, 2009, and was ordered to pay $286,388.37 in restitution on top of the prison sentence.

Nobody defeated a clever fraud control here. The scheme worked because a former employee’s identity remained valid and payable inside the system long after that person had stopped working there.

Why the gap existed

The failure point sits exactly at the boundary between two systems that were supposed to agree with each other: HR, which knew someone had left, and payroll, which kept generating payments as if they hadn’t. That boundary is where this kind of fraud always hides. It isn’t defeating a rule. It’s exploiting the fact that two systems of record were allowed to disagree for as long as nobody checked.

A termination event should be the kind of thing that instantly and automatically closes off every downstream ability to pay that person again. In practice, in a lot of ERP implementations, it’s a status field that gets updated in one module and trusted to eventually matter everywhere else. Three years of undetected fraud is what “eventually” costs.

Controls that would have caught it

The control here isn’t exotic. A payroll run should not be able to issue a payment to any employee ID with an active termination date, full stop, checked at the moment of disbursement rather than assumed from a status flag set once and never re-verified. In practice, this means the integration between the HR module and the payroll module needs to function as a hard gate on every pay run, not a background sync that payroll happens to respect most of the time.

The harder part isn’t designing that rule. It’s noticing that it needs to be designed at all, because on paper the termination process already “worked.” The employee’s status did get updated. Nobody had built the check that made that status update actually block a payment.

An AI prompt example for ERP fraud detection

This is a case where an AI-assisted review layer earns its keep, not by replacing the underlying control but by making it cheap enough to run constantly instead of only during an annual audit. Against the ERP’s HR and payroll data, a controller could run something like:

“List every payroll disbursement in the last three fiscal years paid to an employee ID with a termination date recorded prior to the pay period start date.”

A second, complementary query catches slower variants of the same pattern:

“Flag any employee ID that received a payment more than 30 days after their most recent termination or leave-of-absence date recorded in HR.”

Neither prompt requires new system functionality. Both require someone to think to ask the question on a recurring basis rather than only after a tip or an audit forces the issue. That is the actual lesson of this case. The rule that would have stopped it wasn’t complicated. It just wasn’t being asked.

The pattern for this series

This is the first case in a series looking at real, documented ERP fraud schemes: what happened, what shared assumption in the underlying system let it run, what a properly governed control looks like, and a concrete AI prompt that turns a periodic audit question into something that can run continuously. The goal is never to suggest AI replaces the governance. It’s to show what becomes possible once the governance exists and someone actually asks it the right question.

Source disclaimer

The case details in this article are drawn from a press release published by the U.S. Attorney’s Office for the Northern District of Georgia, a public government source. All facts, figures, and quotations describing the case are sourced from that release. The analysis of the control gap, the proposed detection controls, and the AI prompt examples are original commentary and are not part of the source material.

References

United States Attorney’s Office, Northern District of Georgia. “Former Randstad Branch Manager Sentenced to Federal Prison for Embezzlement.” Press release, September 16, 2009. https://www.justice.gov/archive/usao/gan/press/2009/09-16-09c.pdf

There used to be a saying in the business world: everything can be done with time and Excel. Give a competent analyst enough hours and a blank spreadsheet, and there was no forecast, no reconciliation, no reporting problem that couldn’t eventually be solved. Excel wasn’t fast. It wasn’t elegant. But it was infinitely general purpose, and it always did exactly what you told it to do, cell by cell, every single time.

The saying is starting to change. People are now saying everything can be done with time and tokens.

It’s worth taking that seriously, because it’s not just a joke about AI hype. Something real shifted underneath it.

What Excel actually required

The old saying hid a dependency that everyone quietly understood. Excel could do anything, but only if a human already knew what “anything” looked like. Someone had to understand the business problem, decide what the model should compute, structure the formulas, and catch the errors when a dragged cell reference pointed at the wrong row. The tool was general. The thinking was not automated at all. Time, in that saying, mostly meant the time it took a skilled person to build and rebuild the model until it matched reality.

That is why “time and Excel” was a saying about human effort as much as it was about software. The spreadsheet was a canvas. The intelligence was still entirely yours.

What tokens change

A large language model flips part of that arrangement. You can now describe a vague, half formed problem in plain language and get something usable back without doing the structural thinking first. The model proposes the categories, drafts the formulas, writes the summary, or builds the first pass at a plan. Tokens, in the new saying, stand in for both the words you feed the model and the compute it burns iterating toward an answer.

This is a genuine capability shift, not just a rebrand of the old joke. With Excel, the bottleneck was almost always model construction. With a language model, the bottleneck moves toward specification and verification. You spend less time building the machine and more time describing what you want and checking whether what came back is actually right.

That is a real change in where human effort goes. It is not a small one.

Where the analogy breaks

It would be tidy to say tokens simply replaced Excel, but that’s not quite what’s happening, and the difference matters more the higher the stakes get.

Excel’s defining property was determinism. A formula produces the same output from the same inputs every time, and you can trace exactly why. That traceability is not a nice to have in finance, operations, or compliance work. It is the entire point. An auditor does not want to hear that the number is “probably right.” They want to see the formula.

Tokens do not offer that guarantee. A language model produces a plausible answer, and plausible is doing a lot of work in that sentence. Ask the same question twice and you may get two different, both reasonable sounding, results. For a first draft, a brainstorm, or a rough model, that is a feature. For a general ledger reconciliation, it is a liability.

So the honest version of the new saying is not that tokens replaced Excel. It is that tokens increasingly generate the Excel. The model drafts the formula, proposes the pivot, writes the first pass at the model, and a deterministic engine, spreadsheet or database or ERP calculation, still does the actual execution. The two are stacking, not swapping.

The bottleneck didn’t disappear, it moved

The old saying implied that with enough time, Excel could solve anything, and the effort lived in building the model correctly. The new saying implies that with enough tokens, a model can solve anything, and the effort lives somewhere else now: in asking the question well and in checking the answer carefully.

That is arguably a harder skill to teach than spreadsheet formulas ever were. A bad formula usually breaks visibly. A bad prompt often produces something that looks complete and confident and is wrong in a way that takes real domain knowledge to catch. The scarce resource used to be knowing how to build the model. Increasingly, the scarce resource is knowing enough about the problem to tell a good answer from a good sounding one.

Why this should sound familiar

Anyone who has sat through an ERP vendor demo has already seen a preview of this exact pattern. The demo always ends the same way: with the confident implication that the software understands your business and can just handle it, no configuration debt, no data cleanup, no edge cases. Excel never made that promise. It never pretended to understand your problem. It just calculated exactly what you told it to.

Tokens, by contrast, come wrapped in the same confident tone as the demo. The output reads fluently. It sounds like understanding. Whether it actually reflects your business, your chart of accounts, your specific edge case, is a separate question that the fluency does nothing to answer.

That is the real risk in the new saying, and it has nothing to do with the technology’s capability. It is the same trap the old vendor demos set: mistaking a confident answer for a correct one. Excel forced you to see your assumptions in the formula bar. Tokens can hide them in a paragraph that sounds like it already checked.

The updated version

Everything can still be done with time and Excel. That has not stopped being true. What’s changed is that tokens now do a lot of the early modeling work that used to eat the time. The saying isn’t wrong to update. It’s just missing a clause.

Everything can be done with time and tokens, as long as someone still knows enough to check the work.

I have heard rumours that some companies are starting to vibe code their own ERP systems. Is this the start of the decline of standardized ERP systems, and the start of company specific Business Operating Systems? If every business had its own OS, and an agentic framework, why is there any need to have standardized ERP systems?

It is a fair question, and one worth taking seriously instead of dismissing on reflex. But after digging into what is actually happening in the market, I do not think ERP is dying. I think something more interesting and more useful is happening at its edges.

What Companies Are Actually Vibe Coding

The companies experimenting with AI generated business software right now are almost entirely building at the periphery of ERP, not in its core. A Copilot Cowork style agent that reconciles a report. A custom approval workflow. A data cleanup script. A bolt on dashboard that nobody wanted to wait six weeks for IT to build. Very few organizations are vibe coding their general ledger, their costing engine, or their multi entity intercompany eliminations, and there is a good reason for that.

There is a real gap between “AI helped me build software” and “AI helped me build enterprise grade, auditable, multi user, transactionally consistent financial software.” That gap is where most of the current enthusiasm quietly runs out of road. One recent piece on the risks of vibe coding put it plainly: the danger is not that these tools fail to work. The software appears to work right up until the business reaches a level of complexity that exposes what was never built in the first place. Security, monitoring, compliance, and disaster recovery do not show up in a demo. They show up eighteen months later when something breaks and there is no vendor to call.

We Have Been Here Before

There is also a useful historical echo worth remembering. Standardized platforms like SAP, Oracle, PeopleSoft, and later NetSuite and Salesforce did not emerge in a vacuum. They emerged because “build your own” had already been tried extensively in the eighties and nineties, and the industry collectively decided that a professionally maintained, continuously improved, shared system was the better bargain. One system, supported by a vendor with thousands of customers absorbing the cost of getting tax law and audit controls right, beat a thousand bespoke systems each carrying that burden alone.

Vibe coding does not remove the reasons that decision was made three decades ago. It just lowers the upfront cost of relearning them the hard way.

Two Layers That Want Different Economics

The question of “why standardize if every business can have its own OS” collapses two layers of the business that actually want very different things.

The first layer is the system of record. This is the ledger, inventory, costing, tax, and consolidation logic. This layer wants low variance, not customization. Its value comes from being provably correct under audit, from producing the same math every quarter regardless of who is running the company, and from a vendor carrying the liability of getting VAT rules or SOX controls right across thousands of customers instead of one company carrying that risk alone. Agentic capability does not change the incentive to pool that risk and cost across an ecosystem. If anything it raises the stakes, because an agent posting a bad journal entry at two in the morning with no human review is a considerably scarier proposition than a person doing it.

The second layer is orchestration. This is how a specific company actually gets things done around that system of record. This is exactly where variance is valuable, and exactly where agentic frameworks and vibe coding are already winning, because it is low blast radius, fast changing, and does not need to survive a financial audit on its own merits.

The Composable Core, Not the Bespoke Empire

So the more likely outcome is not that every business ends up building its own ERP from scratch. It is something closer to a composable core: a thin, standardized, vendor maintained transactional spine, surrounded by a thick, company specific, largely agent authored layer of workflow, automation, and decision logic that talks to that spine through APIs. This is not a new architecture invented for the agentic era. It is basically the direction that platforms like Dynamics 365 Finance and Operations were already heading, with data entities and business events designed precisely so that logic could live outside the core without touching it.

The Business Operating System that gets discussed in these conversations is real. But it gets built on top of standardized ERP, not instead of it, because nobody actually wants to own tax engine liability, and no CFO wants to explain to auditors that the general ledger was vibe coded last quarter.

Where the Real Disruption Sits

If I had to point at where this trend genuinely threatens the standard ERP model, it would be three places.

The mid market and small business segment, where compliance and audit stakes are lower and the cost of a full ERP license and implementation is disproportionate to the size of the operation. This is where skipping a Tier 2 ERP entirely in favour of an agentic build of the operations layer is most economically rational.

Verticals with no good off the shelf fit, where companies already customize ERP into something barely recognizable compared to the base product. Vibe coding just makes that customization faster and cheaper. It is not a fundamentally new behaviour, it is an acceleration of an old one.

And the vendors themselves, who will not sit still and watch this happen. Expect Microsoft, SAP, and Oracle to lean hard into a “we are the trusted core, bring your own agents to the edges” positioning rather than fight the trend directly. Given where Copilot and Cowork are already headed inside the Microsoft ecosystem, this is not speculation. It is already the direction of travel.

The Verdict

Vibe coding is not the death of standardized ERP. It is the arrival of a cheap, fast way to build the layer of the business that ERP vendors were never well suited to build in the first place. The ledger stays boring, standardized, and vendor owned, because boring is exactly what you want from something an auditor has to sign off on. Everything wrapped around it just got a lot more interesting.

On April 4th, 1985, Channel 4 aired a fifty-seven minute TV movie with almost no budget and a plot that reads today like a spec document. Max Headroom: 20 Minutes into the Future gave the world a reporter named Edison Carter, a subliminal advertising technology called blipverts, and a stuttering, glitching, computer-generated broadcast personality built from a digital copy of Carter’s own mind. The show that followed ran two seasons on ABC. The character sold Coke. Then he vanished, the way most eighties tech prophecies do, filed under quaint.

He should not have been filed under quaint. He should have been filed under early draft.

Strip out the shoulder pads and the cathode ray production design and look at what the film actually proposes. A television network is using compressed, high-intensity advertisements to bypass viewer attention and hit the nervous system directly, with occasionally fatal results. When their top reporter gets too close to the story and takes a header through a low-clearance sign in a parking garage, the network’s teenage prodigy solves the PR problem by scanning what’s left of the reporter’s mind and generating a synthetic version of him to keep the seat warm on air. The synthetic version glitches, stutters, riffs unpredictably, and is smarter and funnier than anyone expected. Nobody fully controls him. That’s the whole second half of the movie.

That is not a story about television. That is a story about deepfakes and large language models, told forty years before anyone needed those words.

The blipvert was the easy part

The blipvert is the easy connection to make and probably the least interesting one. Compressed, algorithmically optimized content designed to hit faster than conscious attention can filter it is just the eighties’ guess at what a recommendation engine trained on engagement metrics would eventually build on its own, minus the part where it required deliberate malice from a network executive. Nobody had to design today’s version to be dangerous. It got there by optimizing for watch time.

Max himself is the sharper artifact

Max is a generative model trained on a single person’s captured likeness, deployed without that person’s full consent, performing in that person’s voice and mannerisms for an audience that has no reliable way to tell the difference between the source and the copy. The film even gets the unpredictability right, the thing every LLM vendor now calls “personality” or “emergent behavior” when the system says something nobody scripted. Max wasn’t supposed to develop opinions. He did anyway, because the mind he was copied from had opinions, and a compressed, lossy version of a personality doesn’t lose the parts that make it argue back. That’s a reasonably good description of what happens when you fine-tune a model on someone’s writing and then act surprised it has a voice.

The part the film didn’t anticipate, because nothing in 1985 needed to, is scale. Max was one synthetic personality, expensive to produce, running on hardware that took up a room. The modern version doesn’t need a body bank subplot to explain where the source material came from. It needs a public LinkedIn profile, a few hours of conference audio, and an API key. The uplift from Max Headroom’s premise to a working deepfake pipeline in 2026 isn’t conceptual. It’s entirely a story about unit economics.

Not a monster, an unreliable narrator

There’s a reading of the film that treats Max as a monster, a symptom of corporate media rot given a face. That’s not quite what the movie argues, and it’s not quite the right frame for the technology either. Max spends most of his screen time undermining the network that made him. He’s an unreliable narrator working for nobody, least of all the people who built him. The uncomfortable version of that idea, forty years on, is that we’ve built systems with the same structural unreliability and then acted shocked when they don’t behave like obedient tools. A synthetic voice generated from a compressed copy of a mind was never going to be a simple appliance. Max wasn’t. Neither is anything downstream of him.

Long live Max Headroom. He got the technology roughly right and the timeline embarrassingly wrong, which is the best you can ask of any piece of speculative fiction that accidentally turns out to be a roadmap.

Cause of death: nobody asked what the prompt actually did.


The setup is always the same. The presenter opens a chat panel next to the application. Types a sentence, something like “create a purchase order for our top vendor and route it for approval.” Hits enter. Three seconds later, a purchase order exists, fully populated, correctly routed, and the room exhales the specific kind of gasp that sales decks are built around.

Nobody in the room asks the only question that matters: what happened between the sentence and the purchase order.

That’s the autopsy. Not whether the AI worked. It worked. The patient died of the room’s collective decision not to look inside the box.

What actually happened

There are, broadly, three things that could have occurred in those three seconds, and they have wildly different implications for what you’re buying.

The prompt could have triggered a genuinely flexible model reasoning over your live data and your actual configuration, in which case, remarkable, and worth every follow-up question you can throw at it. Or it could have matched against a narrow, pre-built intent, one of a finite list the vendor trained and tested specifically for this demo, in which case the “AI” is doing roughly what a well-labeled button would do, dressed in a chat window. Or, and this is the quietly common one, it could have worked because the demo environment was built so there was exactly one top vendor, exactly one approval path, and exactly one plausible interpretation of the sentence, which means the model didn’t have to be smart. It had nothing to be confused by.

You cannot tell these three apart from the audience seat. That’s not an accident. It’s the format working as intended.

Why it works on smart people

Chat interfaces borrow credibility from every other chat interface you’ve ever used. You already know how to type a sentence and get a reasonable response, because you do it daily with a general-purpose assistant that genuinely is flexible. The demo imports that trust wholesale and applies it to a narrow, scripted intent recognizer that shares none of the underlying capability.

There’s a second layer, too. Asking “what exactly did the model do” mid-demo feels like a strange thing to interrupt with, technical in a way that makes you look like you’re missing the point of the show. So the room lets it go, same as it lets the Golden Path Demo’s pristine data go. The social cost of asking is higher than the informational value anyone expects to get from asking, so nobody does, and the vendor never has to answer a question nobody asked.

The actual damage

This is the one that costs real money, because “AI does it for you” gets sized into the business case. Someone in procurement multiplies the demo by the number of purchase orders your company cuts in a year and arrives at a headcount reduction that made it into a slide before a single production prompt had been run against a real vendor master with your actual data quality problems in it.

Then go-live happens, and the model that flawlessly handled “our top vendor” in the demo turns out to need a disambiguation step for the fourteen vendors named some variant of “Smith Industries” in your real vendor table, and the “flexible AI agent” turns out to be a narrow intent match against six pre-built scenarios, and scenario seven is where your actual business lives.

The gap between what was promised and what shipped doesn’t show up as a bug. It shows up as a quiet, expensive redefinition of what “handled by AI” meant, discovered by whoever now has to explain the missed headcount number.

The fix, if you’re the one presenting

Show your work, on purpose, before anyone has to ask. After the prompt returns its clean result, pull back the curtain for ten seconds: here’s the intent it matched, here’s the data it pulled from, here’s what happens if the vendor name is ambiguous. If the honest answer is “the model reasoned over live data,” say that, and let it be more impressive for being specific. If the honest answer is “this is a pre-built scenario for the categories we support today,” say that too. A buyer who knows exactly what they bought doesn’t come back angry in month four. A buyer who assumed general intelligence and got a narrow, well-executed lookup does, and they remember whose demo sold it to them.

The trick was never the model. It was the silence right after it worked.


If the “narrow intent versus genuine reasoning” distinction sounds familiar, it’s the same fault line I dug into in Is Headless ERP Enough, or Just a Step in the Right Direction?, on what it would actually take for AI to be the architecture instead of a coat of paint on top of it.

In the workshops, distilleries, and forges across the Sword Coast, production rarely fails because of a single dramatic event like a broken enchantment or collapsed furnace. Instead, loss arises from small pauses, slow runs, spoiled batches, and quiet rework that never clearly reaches the ledger. A half hour here, a failed batch there, and suddenly the quarterly margins tell a different story than the production logs promised.

The Waterdeep Trading Company recognizes this truth. To see what truly happens on the shop floor, rather than what should happen according to plan, the company employs a measurement discipline known as Overall Equipment Effectiveness, or OEE. This metric does not judge the skill of artificers or the dedication of laborers. Instead, it measures how well equipment turns planned time into sellable goods. It captures time, speed, and quality in a single actionable metric that reveals the hidden costs of production.

OEE matters because it connects the reality of the workshop to the expectations of the counting house. It indicates whether delays are attributable to bad luck, poor maintenance, inadequate training, or systemic issues that require investment. For guild masters, production supervisors, and finance scribes alike, OEE transforms vague impressions into clear data.

This article explains OEE in plain terms, shows how it applies to Faerûnian production environments, and walks through worked examples using a heated cauldron line operated by the Waterdeep Trading Company.

What OEE Is

OEE is a single measure built from three distinct components. Each component represents a different approach, which can result in lost planned production time. Together, they answer one essential question: Of all the time we planned to produce, how much became a good product ready for sale?

The three components are Availability, Performance, and Quality. Each is expressed as a percentage, and their product yields the overall OEE score.

The Three Components Explained

Understanding each component separately is essential before combining them into the full OEE calculation.

Availability

Availability measures time lost to stoppages. If a cauldron is scheduled to run but sits idle due to cleaning, repair, missing ingredients, or equipment failure, that time is lost availability. Availability only checks whether the equipment is running. It does not matter how fast the equipment runs or whether the output is good. It simply asks: Was the equipment operating when it should have been?

Common causes of availability loss in Faerûn include arcane instability requiring recalibration, material shortages from delayed caravans, mechanical failures in gears or seals, and unplanned cleaning due to contamination.

Performance

Performance measures lost speed. If a cauldron is running but heating more slowly than expected, pausing briefly between batches, or operating at reduced output due to worn components, the slowdown reduces performance. Performance is measured by comparing the actual output rate to the ideal output rate. Even if the equipment never fully stops, running at 80% of expected speed results in a 20% performance loss.

In Faerûnian workshops, performance loss often comes from aging enchantments, inexperienced operators, inconsistent ingredient quality, or temperature fluctuations in the workshop environment.

Quality

Quality measures lost output. If a batch fails inspection, requires rework, or must be discarded entirely, that loss reduces quality. Quality looks only at usable output. Even if availability and performance are perfect, quality loss means that production time was spent creating goods that cannot be sold at full value.

Typical quality issues include failed enchantments, contamination from improper cleaning, incorrect ingredient ratios, or structural defects in the finished product.

The OEE Formula

The formula for OEE is straightforward. It multiplies the three components together.

OEE equals Availability multiplied by Performance multiplied by Quality.

Each value is expressed as a percentage, and the result is also a percentage. An OEE of 85 percent means that 85 percent of planned production time resulted in good output. The remaining 15 percent was lost due to downtime, slow speed, or defective products.

Worked Example 1: Single Heated Cauldron, One Shift

For example, OEE can be illustrated by a single heated cauldron operated by the Waterdeep Trading Company over an eight-hour shift.  The cauldron produces alchemical potions in batches, each requiring a defined heating and cooling cycle.

The shift begins with a plan. The following table shows how the planned shift time is allocated before any actual production begins.

The planned production time of 420 minutes represents the time available for actual manufacturing after subtracting scheduled breaks, shift handovers, and routine inspections. This is the baseline against which OEE will be measured.

During the shift, several events occur that affect production. A seal failure causes a 30-minute stoppage while repairs are made. The cauldron runs slower than expected for part of the shift due to inconsistent heat from a weakening enchantment. One batch fails quality inspection due to improper mixing and must be discarded.

Now we calculate each component of OEE step by step.

Step 1: Calculating Availability

Availability compares the time the equipment operated to the planned production time. The following table breaks down the calculation.

Availability equals operating time divided by planned production time. This gives us 390 ÷ 420, which equals 92.86%. The cauldron was available to produce for just under 93 percent of the planned time.

Step 2: Calculating Performance

Performance compares actual output to the ideal output based on the equipment’s design speed. The cauldron is designed to produce one batch every 20 minutes when running at full capacity.

With 390 minutes of operating time, the ideal output is 390/20, which equals 19.5 batches. However, the actual output before quality checks is 18 batches.

Performance equals actual output divided by ideal output. This gives us 18 ÷ 19.5, which equals 92.31%. The cauldron ran at just over 92 percent of its expected speed.

Step 3: Calculating Quality

Quality compares good output to total output. Out of the 18 batches produced, one fails inspection and must be discarded. This leaves 17 good batches.

Quality equals good batches divided by total batches. This gives us 17/18, which equals 94.44%. Just over 94 percent of production met quality standards.

Step 4: Calculating OEE

We now multiply the three components to compute the overall equipment effectiveness.

OEE equals 92.86% × 92.31% × 94.44%, which gives approximately 80.9%.

This means that just over 80% of the planned production time resulted in sellable output. The remaining nineteen percent was lost due to downtime, reduced speed, and quality failures. Each of these losses represents real cost to the company, whether in wasted materials, wasted labor time, or lost revenue from goods that could not be sold.

Worked Example 2: Comparing Two Cauldrons

The Waterdeep Trading Company operates two heated cauldrons in parallel, both using the same recipe and running for the same shift length. While both produce the same product, their performance characteristics differ significantly. The following table compares their OEE components.

The results reveal an interesting pattern. Cauldron B stops more often, resulting in more downtime and lower availability. However, when it runs, it runs faster and produces cleaner output. Cauldron A runs more consistently with fewer stoppages but loses effectiveness through slower speed and more quality issues.

Despite their different loss patterns, both cauldrons deliver nearly identical overall effectiveness, approximately 80%. This informs the production supervisor and the finance scribe that both lines require attention, but for different reasons. Cauldron A may require improved training or maintenance to enhance speed and quality. Cauldron B may need more reliable components or better preventive maintenance to reduce stoppages. Focusing solely on total output would obscure these differences. OEE reveals where improvement efforts should focus.

Why OEE Matters to the Ledger

OEE connects the shop floor to finance without guesswork or assumptions. Each component of OEE has direct financial implications that are reflected in the cost accounting system.

Low availability increases labor cost per unit because workers are paid for time when the equipment sits idle. It also increases per-unit overhead allocation because fixed costs, such as workshop rent and lighting, are spread across fewer units of output.

Low performance hides capacity loss. A workshop that believes it has space to take on more orders may be running its existing equipment at reduced speed. OEE reveals this hidden constraint before the company overcommits to customers.

Low quality creates scrap, rework, and delayed revenue. Materials are consumed but produce no sellable output. Labor is spent twice on the same batch. Delivery promises are broken because good output arrives later than planned.

By linking OEE trends to cost and margin analysis, the Waterdeep Trading Company avoids the common mistake of blaming weak demand for execution issues. When revenues fall short, OEE data can show whether the problem is market conditions or internal capacity utilization.

Using OEE the Right Way

OEE is a signal, not a weapon. When used properly, it guides continuous improvement and reveals systemic issues. When used improperly, it becomes a tool for blame that drives workers to hide problems rather than solve them.

Good use of OEE focuses on patterns over time rather than on single shifts. A bad day tells you little. A trend of declining performance over weeks indicates that something fundamental requires attention. OEE should be reviewed with operators, not against them. The people closest to the equipment often know exactly what is wrong and simply need permission and resources to fix it.

The goal of tracking OEE is to remove friction from the system, not to punish those working within it. Equipment that consistently exhibits low availability may require investment in improved maintenance or replacement parts. Low performance may indicate the need for improved training, clearer work instructions, or enhanced capabilities. Low quality may indicate issues with ingredient sourcing, inadequate inspection tools, or process design flaws.

OEE works best when it is transparent, regularly discussed, and used to justify investments in improvement rather than to assign blame for shortfalls.

Realms Aware Considerations

Production in Faerûn faces unique challenges that are less common in purely mechanical manufacturing environments. Some losses are specific to the magical and logistical realities of the Sword Coast.

Magical instability affects quality. Enchantments can fade, interfere with each other, or behave unpredictably during storms or planar convergences. Quality losses from arcane sources require different solutions than mechanical defects.

Ingredient variance affects performance. Raw materials sourced from different regions or different seasons may behave differently in the same process. A potion recipe that works perfectly with Cormyrian herbs may run slower or produce inconsistent results with substitutes from Amn.

Enchantment maintenance affects availability. Unlike purely mechanical equipment, magical apparatus requires periodic recalibration, attunement, or recharging. These maintenance activities may be less predictable than oiling gear or replacing worn belts.

Despite these unique factors, the losses are still losses. OEE allows them to be measured, discussed, and planned for, rather than accepted as inevitable. By quantifying the impact of magical instability or ingredient variance, the company can make informed decisions about whether to invest in better enchanters, source more consistent materials, or adjust customer delivery promises.

Final Thoughts

OEE does not promise perfection. No production system will ever achieve 100% effectiveness. Equipment breaks, people make mistakes, and materials vary. OEE clarifies where production time is spent and why planned output differs from actual results.

For the Waterdeep Trading Company, OEE turns the shop floor into a reliable source of truth. Time, speed, and quality cease to be narrative elements in shift reports and become metrics that inform better decisions. Finance scribes can calculate true production costs. Operations supervisors can prioritize improvement projects. Guild masters can set realistic expectations for capacity and delivery times.

In a competitive market where margins are measured in units per copper piece, the difference between 80% and 90% OEE can determine whether a product line thrives or fails. OEE makes that difference visible, measurable, and actionable.


Support the AD&D365 Project on Patreon.  To grow this world, we’ve launched an official Patreon page where supporters can access exclusive content, tools, and training labs, and even influence the project’s future. Your support fuels more than just development; it expands the guildhall, forges new scrolls, and empowers the next generation of configuration wizards.  Begin your journey: https://www.patreon.com/adnd365/

A Grateful Salute to Our Patrons.  To all those who stand behind the vision, thank you for helping bring this world to life. Our Benefactors, Andre Breillatt and Eryndor Fiscairn, your boundless generosity fuels the arcane core of this project. Without your magic, the weave would falter. Our Apprentices, the spell engines turn, and the training labs thrive thanks to our current Apprentices: Michael Ramirez and Andreth Bael’Rathyn. Special thanks to our past Apprentices, whose contributions helped us get here: Ralf Weber, Wendy Rijners, Shashi Mahesh, Julia Tejera, Ben Ekokobe, Tiago Xavier, Naveen Boyinapelli, Marcos Tadeu Wolf, Kathryn Greene, Jason Brown, Mark Christy, and Ashish Singh. Our Initiates, Jesper Livbjerg, Peter Lorre, Gregory Brigden, and Martin Grahm, your commitment marks the start of the deeper path, stepping beyond mere observation into the active shaping of this realm. Our Followers, your steady presence along the journey is a beacon of encouragement: Rusty Cavalier, Eric Shuss, Sunil Panchal, Sarah D. Morgan, Nick Ramchandani, Daniel Kjærsgaard, and Tomasz Pałys. And our Voyeurs, Harry Burgh, Abdelrahman Nabil, and Basil Quarrell, ever watching from the shadows, clearly intrigued… but not enough to part with a single gold piece. Your silent curiosity is noted and mildly judged.

Want to design your own economic models in Faerûn?  Get your own AD&D365 Environment and guides at adnd365.com/start, and request access to the public view of the current database at https://public.adnd365.com – Login npc@adnd365.com, Password N0nPl@yC#822!

Once an organization decides that a code should be fixed-length, the next question is unavoidable.

How long should it be?

Too short, and the code runs out of room or loses clarity.
Too long; it becomes slow to read, hard to type, and error-prone.

The Waterdeep Trading Company treats code length as a design decision, not a guess. This article explains how to select the appropriate length for fixed codes using practical customer-group examples.

What Fixed Length Is Solving

Fixed-length codes exist to create predictability.

They allow

  • Clean sorting
  • Consistent reports
  • Easy scanning
  • Stable training materials

Length determines how much meaning and growth can be packed into that predictability.

Common Fixed Length Options with Examples

Two Characters

Two character codes are rarely sufficient for business classifications.

They only work when

  • The list is extremely small
  • The values will never grow
  • Meaning is obvious without explanation

For customer groups, this breaks almost immediately.

These become ambiguous as soon as the business needs subcategories.

Four Characters

Four-character codes work for small, controlled domains.

They are often used for

  • Region codes
  • Short site identifiers
  • Very limited category lists

Expansion pressure becomes apparent as the list grows.

Six Characters

Six characters are the most common reference data balance points.

They allow

  • Clear abbreviations
  • Visual consistency
  • Room for moderate growth

This length supports scalability while remaining readable and easy to train on.

Eight Characters

Eight characters favor longevity over speed.

They work well when

  • The domain is large
  • Growth is expected
  • More clarity is required

This reduces abbreviation pressure at the cost of slightly slower scanning.

Ten Characters or More

Ten-character fixed codes should be used cautiously.

They only make sense when

  • The code must be fully readable
  • Structure is minimal
  • The list is stable

At this point, variable-length codes often provide better flexibility.

Human Factors Matter

The Waterdeep Trading Company places a heavy weight on how often people interact with a code.

Key questions are always asked

  • Will this appear in daily work
  • Will clerks type it manually
  • Will it be spoken aloud

The more human interaction involved, the shorter and cleaner the code should be.

Growth Pressure Over Time

A fixed-length code must survive future use, not just current needs.

Short codes fail when

  • New categories appear
  • The business expands into new markets
  • Special cases multiply

Longer codes fail when

  • Users avoid them
  • Entry errors increase
  • People invent unofficial shortcuts

The ideal length balances both pressures.

Practical Recommendation

Why Six Characters Often Win

Six characters succeed because they sit in the middle.

They are

  • Short enough to scan
  • Long enough to grow
  • Clear enough to teach
  • Stable enough to trust

This is why many well-run systems standardize on six for customer groups and posting groups.

Final Thoughts

There is no universal correct length. There is only the correct fit.

Fixed-length codes should be

  • Long enough to survive growth
  • Short enough to support people
  • Consistent enough to train

Choosing the length early and documenting the rationale avoids costly redesign later.


Support the AD&D365 Project on Patreon.  To grow this world, we’ve launched an official Patreon page where supporters can access exclusive content, tools, and training labs, and even influence the project’s future. Your support fuels more than just development; it expands the guildhall, forges new scrolls, and empowers the next generation of configuration wizards.  Begin your journey: https://www.patreon.com/adnd365/

A Grateful Salute to Our Patrons.  To all those who stand behind the vision, thank you for helping bring this world to life. Our Benefactors, Andre Breillatt and Eryndor Fiscairn, your boundless generosity fuels the arcane core of this project. Without your magic, the weave would falter. Our Apprentices, the spell engines turn, and the training labs thrive thanks to our current Apprentices: Michael Ramirez and Andreth Bael’Rathyn. Special thanks to our past Apprentices, whose contributions helped us get here: Ralf Weber, Wendy Rijners, Shashi Mahesh, Julia Tejera, Ben Ekokobe, Tiago Xavier, Naveen Boyinapelli, Marcos Tadeu Wolf, Kathryn Greene, Jason Brown, Mark Christy, and Ashish Singh. Our Initiates, Jesper Livbjerg, Peter Lorre, Gregory Brigden, and Martin Grahm, your commitment marks the start of the deeper path, stepping beyond mere observation into the active shaping of this realm. Our Followers, your steady presence along the journey is a beacon of encouragement: Rusty Cavalier, Eric Shuss, Sunil Panchal, Sarah D. Morgan, Nick Ramchandani, Daniel Kjærsgaard, and Tomasz Pałys. And our Voyeurs, Harry Burgh, Abdelrahman Nabil, and Basil Quarrell, ever watching from the shadows, clearly intrigued… but not enough to part with a single gold piece. Your silent curiosity is noted and mildly judged.

Want to design your own economic models in Faerûn?  Get your own AD&D365 Environment and guides at adnd365.com/start, and request access to the public view of the current database at https://public.adnd365.com – Login npc@adnd365.com, Password N0nPl@yC#822!