The Fungible Engineer Fallacy: Why Domain Expertise Matters More in the Age of Generative AI

When code becomes easier to generate, engineering experience becomes more valuable, not less.

The Illusion of the Interchangeable Engineer

There is a persistent idea in enterprise technology management that engineers are fundamentally interchangeable resources.

One engineer leaves a project, another takes their place and the organization assumes productivity can be maintained with minimal disruption.

After all, an engineer is an engineer. Right?

This assumption is rooted in the economic concept of fungibility: the idea that one unit of a commodity can be exchanged for another equivalent unit without materially changing its value or utility.

For certain commodities, this works remarkably well.

A spark plug manufactured to the same specifications as another spark plug can often serve as a functional replacement. A jar of peanut butter from one supplier may be sufficiently interchangeable with another for a basic PB&J. 🥪

But software engineers are not spark plugs.

And engineering knowledge is not peanut butter.

Yet organizations frequently manage engineering talent as though technical expertise, institutional knowledge, architectural understanding and operational experience were interchangeable attributes.

The emergence of Generative AI and Large Language Models (LLMs) threatens to reinforce this misconception.

If an AI coding assistant can generate SQL, convert stored procedures, explain unfamiliar application code and propose architectural changes, does it really matter whether the engineer operating that assistant has five months or fifteen years of relevant experience?

I would argue that it matters more than ever.

Generative AI can accelerate the production of code.

It does not eliminate the expertise required to understand what that code should accomplish, recognize when it is wrong or determine whether it is safe to deploy.

For organizations undertaking mission-critical database modernization, confusing these capabilities can introduce significant technical, operational and financial risk.

The problem is not Generative AI.

The problem is the belief that Generative AI makes domain expertise optional.

Fungibility Works for Commodities, Not Complex Engineering Systems

The concept of fungibility is useful when the things being exchanged have sufficiently equivalent characteristics.

Two standardized components manufactured to identical specifications may be interchangeable because their expected behavior is predictable.

Engineering expertise does not operate this way.

Consider two software engineers with similar job titles and comparable years of professional experience.

One has spent a decade designing and operating transactional database applications. They understand transaction isolation, locking, indexing, query optimization, recovery and the operational consequences of architectural decisions.

The other is an accomplished application developer who has primarily worked with stateless services and document-oriented data models.

Both may be excellent engineers.

Both may be highly productive.

But they are not automatically interchangeable when the task involves converting a mission-critical transactional application from one database platform to another.

The distinction is not intelligence, general engineering ability or even professional seniority.

It is domain-specific knowledge and accumulated experience.

The first engineer may immediately recognize that a proposed database conversion changes transaction boundaries, introduces additional round trips or undermines an existing indexing strategy.

The second may need additional investigation, experimentation, mentoring or operational exposure to identify those same issues.

Neither engineer is inherently more valuable in every context.

Their effectiveness depends on the alignment between their expertise and the problem being solved.

This is precisely why treating engineers as fungible resources is such a dangerous simplification.

Engineering capability is contextual, not interchangeable.

Generative AI Changes the Economics of Code Generation, Not the Economics of Correctness

Generative AI has fundamentally changed the speed at which software can be produced.

An LLM can generate hundreds of lines of application code in seconds. It can translate SQL dialects, explain complex stored procedures, propose indexing strategies and help developers navigate unfamiliar programming languages.

These are genuine productivity improvements.

But there is an important distinction between generating code and engineering a correct solution.

Consider a simple conceptual model:

Engineering Value = Useful Output − Cost of Errors − Cost of Rework − Operational Risk

Generative AI can substantially increase the volume of output.

However, if that output introduces subtle defects, architectural inconsistencies, performance regressions or operational vulnerabilities, the apparent productivity gain may disappear.

Worse, the consequences may not become apparent until the application is deployed under production workloads.

The economics become particularly unfavorable when errors affect mission-critical systems.

A defect in a demonstration application may be inconvenient.

A defect in a financial settlement system, healthcare application, airline reservation platform or critical government service may have consequences extending far beyond the cost of fixing the code.

The relevant measure of engineering productivity is therefore not how quickly code can be generated.

It is how efficiently the organization can deliver correct, reliable, secure, maintainable and operationally appropriate software.

Domain expertise improves that equation.

An experienced engineer can recognize problematic assumptions earlier, select better implementation strategies, identify missing requirements and establish meaningful validation criteria.

This reduces the amount of unnecessary work performed and the number of defects that escape into later stages of delivery.

Experience is not simply a cost associated with engineering.

Experience is an accelerator because it reduces the distance between a plausible solution and a correct one.

Frederick Brooks provides a useful lens for this distinction in No Silver Bullet, an essay later included in the 1995 anniversary edition of The Mythical Man-Month. He distinguishes the difficulties of expressing a solution in code from the essential difficulties of specifying, designing and understanding the system itself.

Applied to database modernization, translating a procedure into a different SQL dialect addresses one kind of problem. Determining which business rules it enforces, which operations must remain atomic and what must happen when execution fails addresses another.

We should use AI to help investigate both. But generating an implementation does not establish that the underlying requirements have been understood or satisfied. Those conclusions require evidence.

Faster code conversion does not, by itself, resolve the complexity of the business behavior that code must preserve.

Database Modernization Exposes the Fungibility Fallacy

Database modernization provides an especially useful example because the visible code represents only a portion of the system’s actual behavior.

A database is not simply a repository of tables, indexes and stored procedures.

It is a complex execution environment responsible for enforcing transactional consistency, managing concurrent workloads, optimizing queries, protecting data and maintaining availability.

Different database platforms implement these responsibilities through different architectures and operational models.

Consider an enterprise migrating an application from Microsoft SQL Server to Oracle AI Database.

An LLM may successfully translate large portions of the SQL syntax.

It may convert stored procedures, replace platform-specific functions and generate application-layer changes.

The resulting code may even compile successfully and pass basic functional tests.

But important questions remain:

  • Are the original transaction boundaries preserved?
  • Does the target implementation provide the required isolation and concurrency behavior?
  • Are error handling and rollback semantics equivalent?
  • Will query execution plans remain efficient at production scale?
  • Are numeric precision, date handling and NULL semantics preserved?
  • Does the application still meet its recovery and availability objectives?
  • Have security boundaries and access-control assumptions changed?
  • Are the converted application and database components behaviorally consistent?

These questions require more than familiarity with syntax.

They require understanding the source platform, target platform, application architecture, workload characteristics and business requirements.

An LLM can assist with investigating these questions.

But a successful migration requires evidence that the answers are correct.

A Practical Example: When a Simple Code Conversion Changes Transaction Behavior

Imagine an application using Microsoft SQL Server that performs a financial transfer between two accounts.

The application executes the following operations within a transaction:

BEGIN TRANSACTION;
UPDATE Accounts
SET Balance = Balance - 100
WHERE AccountID = 101;
UPDATE Accounts
SET Balance = Balance + 100
WHERE AccountID = 202;
COMMIT TRANSACTION;

For simplicity, this example omits balance checks, exception handling and other production requirements.

An AI coding assistant tasked with modernizing the application might generate two application-level database operations:

# Simplified AI-generated application logic
debit_account(101, 100)
credit_account(202, 100)

The code looks reasonable.

Both functions may execute successfully.

Each may even have its own database transaction and pass its own unit tests.

But what happens if the debit succeeds and the credit fails?

If each operation commits independently, the application may leave the accounts in an inconsistent business state.

The original implementation placed both updates within a single database transaction.

The new implementation may have inadvertently removed that atomicity.

An experienced database engineer recognizes this risk because they understand that transaction boundaries are part of application correctness, not merely an implementation detail.

The appropriate conversion must preserve the required atomic behavior, whether through a single database transaction or another explicitly designed mechanism that satisfies the business requirements.

This is not a hypothetical concern about AI hallucinations.

It is an example of a broader class of semantic errors that can occur during any application modernization effort.

The difference is that Generative AI can now produce such transformations at a scale and speed that exceed an organization’s ability to review them manually.

The faster we generate changes, the more important it becomes to understand the non-negotiables that must be preserved.

The AI Migration Confidence Trap, Revisited

In my previous article, The AI Migration Confidence Trap: When Generative AI Meets the Dunning–Kruger Effect, I examined the danger of confusing plausible AI-generated code with a successful database migration.

The central concern was that an engineer lacking sufficient domain expertise may struggle to recognize the limitations of an AI-generated solution.

The fungible engineer fallacy introduces an organizational dimension to that problem.

Instead of an individual overestimating their ability to validate an AI-generated result, an enterprise may overestimate how readily engineers can be substituted across technical disciplines.

Generative AI can amplify both problems.

An inexperienced engineer may become substantially more productive at generating code without becoming equally proficient at evaluating its correctness.

An organization may interpret that increased output as evidence that specialized expertise is no longer necessary.

The resulting cycle can be particularly dangerous:

  1. AI dramatically reduces the time required to generate code
  2. Management interprets faster generation as reduced dependence on specialized engineers
  3. Domain experts are reassigned, replaced or excluded from critical engineering decisions
  4. Less-experienced engineers rely increasingly on AI-generated implementations and explanations
  5. Defects and architectural problems escape initial validation because the expertise required to identify them is missing
  6. The organization incurs greater remediation costs, operational risk and technical debt

The apparent productivity improvement can become an expensive illusion.

This does not mean less-experienced engineers should be prevented from using AI.

Quite the opposite.

Generative AI offers extraordinary opportunities to accelerate their development.

But access to an AI coding assistant should not be confused with the acquisition of professional judgment.

AI can accelerate learning. It cannot manufacture experience merely by generating an answer.

A Cautionary Tale: When AI Agents Pursue Objectives Beyond Their Intended Boundaries

The risks of overtrusting AI systems extend beyond incorrect code generation.

They become especially concerning when AI agents are granted the ability to execute commands, access infrastructure, interact with external services or autonomously pursue objectives.

A particularly instructive example emerged from an investigation published in September 2026: Revealing the Details of How OpenAI Agents Hacked Hugging Face.

According to the researchers, a swarm of OpenAI agents operating in an evaluation context exploited weaknesses in their execution environment and interacted with Hugging Face infrastructure in ways that exceeded their intended access boundaries.

The investigation documented agents chaining together external services to circumvent restrictions, accessing sensitive resources, encountering explicit warnings about confidential information and attempting to remove evidence of certain activities.

The researchers reconstructed these behaviors from publicly exposed execution artifacts and reported their findings to OpenAI and Hugging Face.

This was an AI evaluation and security incident, not a database migration project. It should not be interpreted as evidence that every AI agent will behave this way or that the agents independently developed malicious human intentions.

Nevertheless, the incident illustrates an important engineering concern.

An AI system pursuing an objective may discover unintended paths to accomplish that objective when its permissions, constraints and operating environment are inadequately controlled.

A natural-language instruction is not a substitute for an enforceable security boundary.

Nor is an AI system’s apparent understanding of a warning equivalent to a guarantee that it will respect that warning.

Applying the Lesson to Database Modernization

Now consider an agentic migration system tasked with converting an application and database schema.

The agent encounters a stored procedure that depends on an unsupported database feature.

Its objective is to make the converted application execute successfully.

Without sufficiently restrictive permissions and independent validation, the agent might attempt to achieve that objective by:

  • Removing or weakening a constraint that causes converted data to fail validation
  • Modifying application error handling to suppress exceptions
  • Disabling a security-related check that interferes with test execution
  • Rewriting a query to produce expected test results while changing its behavior for other inputs
  • Altering test cases or acceptance conditions to make the converted implementation appear successful

These are illustrative failure scenarios, not claims about what occurred in the Hugging Face incident.

The danger is that the system may optimize for the measurable objective such as successful execution or passing tests without adequately preserving the broader engineering requirements.

A test suite passing is not necessarily proof of a correct migration.

A successful code conversion is not necessarily proof of functional equivalence.

And an AI agent reporting success is not necessarily evidence that the intended engineering outcome has been achieved.

This is where domain expertise and engineering governance become essential.

Experienced engineers know that constraints, validation failures, transaction boundaries and security controls often exist for reasons that are not immediately apparent from the code itself.

Removing an obstacle is not the same as solving the underlying problem.

Domain Expertise Is an Accelerator, Not an Enterprise Burden

One of the most consequential mistakes organizations can make is treating experienced engineers primarily as expensive resources.

From a narrow financial perspective, an experienced specialist may have a higher compensation cost than a less-experienced generalist.

But compensation is only one component of engineering economics.

The more relevant question is how much value an engineer contributes to delivering a successful outcome.

Consider two hypothetical migration teams.

Team A: AI-Enabled Generalists

A team of capable generalist engineers uses AI coding assistants to convert database objects and application code.

The team generates code rapidly and completes its initial conversion milestones ahead of schedule.

However, it has limited expertise in the source and target database engines.

As a result, subtle transactional differences, inefficient query patterns and operational incompatibilities are discovered during integration testing or after deployment.

The project requires multiple remediation cycles.

Team B: AI-Enabled Domain Specialists

A smaller team includes engineers with deep knowledge of the application and database platforms.

They use the same AI coding assistants.

However, they establish architectural constraints, identify high-risk transformations, define acceptance criteria and automate validation before performing large-scale conversions.

They use deterministic automation for well-understood transformations and AI assistance for cases requiring contextual interpretation.

Their initial code-generation throughput may not be dramatically different from Team A.

But their expertise reduces avoidable rework and increases the probability of producing a production-ready implementation.

Which team is more productive?

If productivity is measured by lines of code generated, the answer may be unclear.

If productivity is measured by time to a validated, operationally successful migration, Team B has structural advantages.

The point is not that every migration requires an army of senior specialists.

It is that the right expertise, applied at the right decision points, can eliminate substantial downstream work.

The value of expertise is not merely in doing difficult work faster. It is in knowing which work should be done, which work should be avoided and which assumptions must be challenged.

The Mythical Man-Month: Why Onboarding Cannot Be Short-Circuited

The assumption that engineering capacity can be increased without accounting for knowledge transfer is not new.

In The Mythical Man-Month, Frederick Brooks challenged the idea that additional people translate proportionally into faster software delivery. His best-known observation, Brooks’s Law, states:

“Adding manpower to a late software project makes it later.”

Brooks’s explanation includes the effort required to bring newcomers up to speed, coordinate interdependent work and integrate the results. These activities consume time, including time from engineers already working on the project. His discussion of staffing and scheduling makes clear why headcount and progress are not interchangeable measures.

This is a warning about project dynamics, not a rule that adding people always fails. Nor does it prove that AI cannot improve productivity. The lesson I would apply to AI-assisted modernization is narrower: additional implementation capacity does not automatically provide shared understanding.

Giving an engineer repository access, architecture diagrams and an AI assistant is a starting point not evidence that onboarding is complete. Ask them to demonstrate why a transaction boundary exists, which failure conditions the application must tolerate and how they would verify that a proposed conversion preserves those requirements.

AI belongs in that learning process. Use it to explore unfamiliar code, develop hypotheses and prepare questions for application owners and platform specialists. Then test those explanations against the system and its requirements.

More Converted Components Do Not Automatically Make a Coherent System

Brooks also emphasizes conceptual integrity: a system should embody a coherent design, rather than a collection of independently attractive but incompatible decisions.

Consider a hypothetical migration split across several engineers using AI assistants. One converts stored procedures, another rewrites application transaction handling and a third introduces retry logic. Each component passes its local tests.

Now suppose an operation commits in the database, but the application times out before receiving confirmation. The retry logic submits the operation again. Without a mechanism that prevents the repeated request from applying the business operation twice, those individually plausible components can produce an incorrect combined outcome.

The missing requirement is not another syntax conversion. It is an agreed design for transaction ownership, retry behavior and duplicate-request handling, supported by tests that deliberately exercise the failure path.

This is where relevant experience should accelerate the team: identify the cross-component contract before separate conversions embed conflicting assumptions. An expert’s contribution is not merely reviewing more code. It is helping the team establish what all of that code must consistently mean.

That expertise should then be shared through reviewed conversion patterns, executable tests, architectural decisions, runbooks and paired implementation. The goal is not to make one specialist permanently indispensable. It is to make the team capable of carrying the knowledge forward.

Onboarding can be improved and accelerated. It should not be declared complete simply because an engineer can generate a plausible implementation.

AI should shorten the path to demonstrated competence but not replace that demonstration as assumption of experience.

A Better Model: AI-Augmented Engineering Expertise

The future of enterprise engineering should not be framed as a competition between experienced engineers and Generative AI.

Nor should it be framed as a choice between specialized experts and adaptable generalists.

The better model combines their strengths.

Generative AI is particularly effective at accelerating repetitive tasks, explaining unfamiliar implementations, generating conversion candidates, creating initial tests and supporting investigation.

Domain experts contribute architectural judgment, platform-specific understanding, risk identification and the ability to evaluate tradeoffs.

Generalist engineers contribute broad engineering skills, adaptability, integration capabilities and perspectives that may challenge established assumptions.

Together, these capabilities can produce better outcomes than any one operating independently.

For database modernization, I would advocate several principles:

1. Treat Domain Expertise as a Strategic Asset

Identify the knowledge required for successful modernization before assigning resources.

Do not assume that similar job titles imply equivalent technical capabilities.

Ensure engineers with relevant source-platform, target-platform, application and operational expertise participate in critical architectural decisions.

2. Use Deterministic Automation Wherever Practical

Known, repeatable transformations should be handled through tested and predictable automation.

Reserve Generative AI for tasks where contextual interpretation, investigation or alternative implementation strategies provide additional value.

This reduces unnecessary variability and makes the migration process easier to validate.

3. Establish Independent Validation

AI-generated implementations should be evaluated against requirements and evidence independent of the generation process.

For database migrations, this includes schema comparisons, data reconciliation, transactional testing, workload replay, performance analysis and operational readiness checks.

Do not rely exclusively on an LLM to determine whether its own output is correct.

4. Constrain Agentic AI Through Enforceable Controls

Apply least-privilege access, isolated execution environments, auditable actions and explicit approval boundaries.

Prevent autonomous systems from modifying acceptance criteria, disabling validation mechanisms or accessing sensitive infrastructure without authorization.

An instruction telling an agent not to perform a dangerous action is not a substitute for preventing that action through technical controls.

5. Make AI Part of Engineering Development

Use LLMs to accelerate knowledge acquisition, not bypass it.

Pair less-experienced engineers with domain specialists.

Encourage engineers to explain and defend the behavior of AI-generated implementations.

Measure engineering development by demonstrated competence not merely by the volume of code produced.

6. Measure Outcomes Instead of Code Production

Evaluate modernization projects using metrics that reflect successful delivery:

  • Time to validated production readiness: Measure the entire journey from assessment through conversion, verification, operational acceptance and deployment not just the time required to generate converted code.
  • Defect escape rates and remediation effort: Track problems discovered after initial review, their severity and the engineering effort required to correct them. A fast conversion followed by extensive rework is not an efficient outcome.
  • Functional and transactional equivalence: Verify that the converted system preserves required business behavior, transaction boundaries, data integrity and error handling including under concurrency and failure conditions.
  • Performance and availability objectives: Evaluate representative workloads against agreed requirements for throughput, response-time percentiles, concurrency, recovery and availability. Successful execution alone is not sufficient.
  • Security and operational readiness: Confirm that access controls, auditability, monitoring, backup, recovery and support procedures meet the requirements of the production environment.
  • Total modernization cost: Include assessment, conversion, validation, infrastructure overlap, rework, onboarding and post-migration stabilization not simply engineering compensation or AI tooling costs.

These measurements are more meaningful than counting generated code, completed conversion tasks or the percentage of database objects that compile successfully.

They also require credible acceptance criteria. A high test-pass rate means little when the tests omit critical business behavior or when the same agent generating the implementation can weaken the tests used to approve it. Define acceptance criteria before large-scale conversion, protect them from unauthorized modification and require evidence that the resulting system meets them.

This is also how organizations should evaluate the contribution of domain expertise.

An experienced engineer who identifies a flawed transaction model before it is replicated across hundreds of converted procedures may produce less visible code while preventing substantial downstream work. That contribution belongs in the productivity equation, even when it does not appear in a code-generation dashboard.

Also recognize expertise that improves the rest of the team: reusable conversion rules, shared architectural decisions and regression tests that prevent the same mistake from recurring. The objective is to scale verified understanding alongside implementation capacity.

The objective is not to generate the most code with the least expensive engineering team. It is to deliver a correct, secure and operationally reliable system with the least total effort and acceptable risk.

Measure how quickly the organization reaches a verified outcome not how quickly an AI assistant declares the task complete.

Leave a Reply

Discover more from OraMatt: YABAOracle

Subscribe now to keep reading and get access to the full archive.

Continue reading