James C Koch CV Blog Publications DE ☰

The Engineer Still Owns the Calculation

Disclaimer: This article was written with the assistance of AI and is meant as a snapshot of my current thoughts & workflows in the fast-evolving AI agent space.

I am a structural engineer, not a software developer by training. Nevertheless, an increasing part of my work involves writing Python scripts: preparing geometry, processing analysis results, generating finite-element models, checking data exchanges, and automating repetitive tasks. These scripts often sit between tools that are already established in the AEC industry. They may prepare geometry for a finite-element program, transform data into IFC, extract results, or validate information exchanged between different applications.

I recently started using an AI coding agent through Amp. The agent can inspect a repository, propose a plan, edit files, run tests, investigate failures, and continue working across several steps (Amp, n.d.--a, n.d.--b). That sounds powerful—and it is. But the most important change is not simply that the agent can write code faster. The important change is that I have had to make my development process more explicit.

I need to describe what the script is supposed to do, identify the authoritative inputs, record important decisions, define expected behaviour, and verify the result. In that sense, working with an AI coding agent has pushed me toward software-development practices that have useful parallels in structural engineering: specifications, calculation notes, checking procedures, and provenance.

My aim is not to replace trusted AEC tools with an AI system. CAD, IFC, and finite-element programs remain part of the established engineering workflow. The AI agent helps me develop the software around them: the integration, preprocessing, validation, testing, and reporting. A structural calculation is not trustworthy merely because a program produces a number. We need to understand the assumptions, loads, geometry, boundary conditions, formulas, units, and checks behind that number. The same principle applies to software used in structural engineering. The goal is therefore not to make the AI responsible for the script. The goal is to create a workflow in which the agent's work is constrained, inspectable, testable, and reviewable.

The engineer still owns the calculation.

The work between the established tools

The finite-element program is not usually the only part of a structural workflow that requires software.

There may also be scripts for:

  • extracting geometry from a CAD model;
  • converting or validating IFC data;
  • preparing geometry for finite-element analysis;
  • assigning materials, sections, and structural identities;
  • creating load cases and combinations;
  • processing analysis results;
  • generating reports and coordination models;
  • checking whether input files still satisfy project requirements.

These integration scripts can have a large influence on the final engineering result. A small mistake in a coordinate transformation, unit conversion, or element mapping can affect the model before it ever reaches the analysis program. This is where I see the practical value of agentic coding. The AI agent helps with the software work surrounding established engineering applications. It does not need to become a replacement for those applications.

CAD / Rhino ──▶ Python preparation ──▶ FE program ──▶ results
      │                  │                  │
      └────── IFC ◀──────┴──── tests ───────┘
                         │
                  Git, DVC, audits

The purpose is to make these connections more explicit and reproducible.

From an engineering question to a verified change

My workflow is gradually developing around the following sequence.

Define the engineering task

I start with an engineering question rather than a programming question.

For example:

  • Which geometry should be used as the source for the FE model?
  • How should a roof load be transferred?
  • Which objects should be exported to IFC?
  • How can a structural identity be preserved through a data conversion?
  • Which validation should stop the pipeline if an input is invalid?

Identify the authoritative sources

Different representations may describe the same building, but they do not necessarily have the same authority. A physical coordination model, an analytical FE model, an architectural IFC, and a research dataset may all contain geometry. The workflow must state which source is authoritative for which purpose.

Define the contract

The contract describes what must be true before and after the script runs.

Examples include:

  • every exported structural object has a unique identifier;
  • only approved source layers are read;
  • required geometry is planar;
  • expected storeys and object counts are present;
  • input units are known;
  • invalid geometry produces a hard error;
  • generated outputs contain an audit record.

Record decisions and create a plan

Important modelling and software decisions are recorded before implementation. The implementation plan then describes the files, stages, and checks required to apply the decision.

Implement and test

The AI agent can help draft code and tests, but the change is still reviewed against the engineering contract.

Review the result as an engineer

The final review includes the engineering assumptions, not only the Python implementation. I still need to inspect geometry, units, loads, boundary conditions, model idealisations, and results.

Engineering question
        │
        ▼
Authoritative sources and specification
        │
        ▼
Decision record and implementation plan
        │
        ▼
AI-assisted implementation
        │
        ▼
Tests, audit, and provenance
        │
        ▼
Engineering review and approval

Specifications are design requirements for software

A specification is not necessarily a large formal document. It can be a focused statement of the conditions that a script must satisfy. In structural engineering terms, it is similar to defining the design basis before carrying out the calculation.

For a geometry-preparation script, a specification might say:

  • the source is the analytical model, not the physical coordination model;
  • only exact layer paths are accepted;
  • construction and reference sublayers are excluded;
  • structural identifiers must be preserved;
  • objects without identifiers are allowed only for explicitly exempt analysis elements;
  • the output audit must record counts and validation status.

For a wind-load calculation, the specification might define:

  • the source of the building height;
  • the applicable wind zone and terrain profile;
  • the permitted height range;
  • the accepted roof regions;
  • the expected load cases;
  • the required coverage and overlap checks.

These requirements can be implemented with ordinary Python. I do not currently use a large data-validation framework for this purpose. For example, the FE builder rejects invalid wind geometry instead of continuing with a plausible-looking result:

height = maximum_roof_z - GROUND_DATUM_Z

if not math.isfinite(height) or height <= 0.0:
    raise ValueError(
        f"Wind building height must be in (0, 25 m], got {height!r}"
    )

This is not a structural proof. It is a guardrail against an invalid input silently entering the calculation.

ADRs, plans, and tests

I use different documents for different kinds of knowledge. An Architecture Decision Record captures a decision, its rationale, alternatives, and consequences (ADR GitHub Organization, n.d.).

In the project repository:

  • AGENTS.md contains instructions for the coding agent;
  • README.org describes project structure, data policy, and reproducibility;
  • .llm/.adr/ contains accepted architectural decisions;
  • .llm/.plans/ contains implementation plans;
  • .llm/.notes/ contains research and investigation records;
  • tests/ contains automated checks.

These documents are not interchangeable.

An agent instruction tells the coding agent how to work. An ADR records why an important decision was made. A plan explains how a decision will be implemented. A test checks whether the implementation still satisfies a defined behaviour. The distinction is important when an AI agent is involved. Without explicit project knowledge, the agent may produce locally plausible code that violates a decision made elsewhere.

Why Git and DVC are part of the workflow

Git is commonly associated with software development, but its basic purpose is familiar to engineers: it records changes to files over time so that specific versions can be recovered later (Git, n.d.).

In this project, Git tracks:

  • Python scripts;
  • configuration files;
  • design registries;
  • pipeline definitions;
  • decision records;
  • implementation plans;
  • small provenance records.

This makes it possible to ask:

  • Which version of the script was used?
  • When did a modelling rule change?
  • Which decision justified the current implementation?
  • Which configuration was active when an output was generated?

The project also contains large binary files: Rhino models, IFC files, meshes, finite-element models, and generated results. These are not well suited to being stored directly in Git. DVC, or Data Version Control, addresses this problem. It stores large data and model files separately while Git tracks small pointer files and the relationships between inputs, scripts, and outputs (DVC, n.d.).

Git tracks:
  scripts, configuration, decisions, metadata, DVC pointers

DVC manages:
  Rhino models, IFC files, meshes, FE models, and results

Together they record:
  which inputs + which code + which configuration
  produced a particular engineering output

DVC is not a replacement for an office document-management system or a Common Data Environment. In this workflow, it is the reproducibility layer for computational work. The purpose is not merely to recover an old file. It is to recover the relationship between the file, the script, the assumptions, and the generated result.

A project example

I am testing these concepts in a real structural-engineering project containing scripts, analysis workflows, design documentation, exchange models, tests, and DVC-managed data.

A simplified version of its model workflow is:

Working structural model
        │
        ▼
Frozen DVC input
        │
        ▼
Validated geometry preparation
        │
        ▼
Finite-element model and structural IFC
        │
        ▼
Audit files and provenance metadata
        │
        ▼
Engineer review

The geometry-preparation stage extracts type-specific inputs and writes an audit record. Tests check object counts, structural identifiers, geometry types, elevations, and failure cases. The FE builder reads a versioned design registry rather than relying entirely on hidden mappings inside the script. It also records wind inputs, load variants, coverage areas, and other audit information.

This makes an AI-assisted change easier to review. The question is no longer only:

Does this code look reasonable?

It becomes:

Does this change preserve the engineering contract, pass the automated checks, and produce an auditable result?

Why I keep the established AEC tools

The AEC industry already has tools and formats that engineers know and that form part of established review processes:

Tool or format Role
Rhino or CAD Geometry authoring
IFC Model exchange and coordination
RFEM or another FE program Structural analysis
Python Preparation, automation, validation, and integration
Git and DVC History and data provenance
Amp AI-assisted software development

This division is deliberate.

I am not trying to replace the finite-element solver with an AI model. I am not trying to replace IFC with an opaque AI-generated exchange format. I am trying to make the software connecting these tools more explicit and reliable. This matters because trust in engineering technology is not created by a demonstration alone. It develops through familiarity, repeatable behaviour, documentation, independent checking, and successful use within an established workflow.

What I borrowed from agentic coding projects

Two projects helped me understand this workflow more clearly. GitHub's Spec Kit provides structured processes for coding agents. Its specification-driven workflow includes specifying, planning, breaking work into tasks, implementing, and converging (GitHub, n.d.). Superpowers provides a skills-based development methodology involving brainstorming, planning, test-driven development, code review, and verification (obra, n.d.).

Amp is different. It is the environment in which the agent works. It provides threads, tools, project context, isolated orbs, and model routing (Amp, n.d.--a, n.d.--b).

I see these as different layers:

Layer Purpose
Structural-engineering governance Defines what is acceptable and who is responsible
Specification and development practices Structures the work before implementation
Amp Provides the agentic coding environment
CAD, IFC, and FE tools Remain the engineering tools and representations

My current workflow is a project-specific adaptation of these ideas rather than a direct implementation of any one tool.

What the AI agent can and cannot do

The agent is useful for work such as:

  • exploring an unfamiliar repository;
  • identifying relevant files and call sites;
  • drafting implementation plans;
  • proposing test cases;
  • writing repetitive code;
  • investigating error messages;
  • checking whether documentation matches the implementation.

The agent should not be treated as the final authority for:

  • design-code interpretation;
  • structural idealisation;
  • load assumptions;
  • boundary conditions;
  • material properties;
  • numerical plausibility;
  • project applicability;
  • final engineering approval.

The Institution of Structural Engineers recommends treating LLM output like the work of an inexperienced junior engineer. It should be checked, and an LLM should not be treated as an independent checking engineer (Institution of Structural Engineers, n.d.--a). Its wider guidance also highlights risk assessment, data security, competence, transparency, and lifecycle management when organisations implement AI (Institution of Structural Engineers, n.d.--b). ASCE states that AI cannot replace the professional judgement of a civil engineer. NSPE emphasises verification, validation, testing, monitoring, transparency, and accountability for AI systems affecting public safety (American Society of Civil Engineers, 2024; National Society of Professional Engineers, n.d.). Automated software tests and engineering checks are complementary. Neither one makes the other unnecessary.

A practical starting point

A structural engineer who wants to try this workflow does not need to redesign an entire office process. Start with one low-risk script.

  1. Choose a repetitive but limited task.
  2. Describe what the script must do.
  3. Identify the authoritative inputs.
  4. Record important decisions and assumptions.
  5. Ask the coding agent for a plan before asking for implementation.
  6. Add tests for normal cases and invalid inputs.
  7. Generate an audit record.
  8. Review the output independently.
  9. Record the tool, version, input data, and result.

The purpose is not to eliminate engineering risk through automation. It is to prevent speed from becoming opacity.

Conclusion

I started using an AI coding agent because I wanted to develop structural engineering scripts more efficiently. The unexpected benefit has been that it has forced me to make more of my existing reasoning visible. The agent can help write the integration code. Git and DVC can preserve its inputs and outputs. Tests can catch implementation errors. CAD, IFC, and finite-element programs can remain the familiar engineering tools.

But the important decisions still belong to the engineer. The engineer still owns the calculation.

AI assistance and responsibility

This post was written with the assistance of AI. I used Amp with a linked ChatGPT Plus subscription to help research, structure, draft, and edit parts of the article. Amp's model routing and subscription coverage can change over time. I remain responsible for the claims, examples, and conclusions presented here. AI assistance does not replace engineering review, independent checking, or professional responsibility. The workflow described here are works in progress. They are project-specific and should not be treated as a general-purpose verified engineering library.

References

ADR GitHub Organization. (n.d.). Architectural decision records. Retrieved October 18, 2026, from https://adr.github.io/
American Society of Civil Engineers. (2024, July 18). Policy statement 573: Artificial intelligence and engineering responsibility. https://www.asce.org/advocacy/policy-statements/ps573---artificial-intelligence-and-engineering-responsibility
Amp. (n.d.--a). Introduction. Retrieved October 18, 2026, from https://ampcode.com/docs
Amp. (n.d.--b). Orbs. Retrieved October 18, 2026, from https://ampcode.com/docs/orbs
DVC. (n.d.). Versioning data and models. Retrieved October 18, 2026, from https://dvc.org/doc/use-cases/versioning-data-and-models
Git. (n.d.). About version control. Retrieved October 18, 2026, from https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
GitHub. (n.d.). Spec kit: Build with a spec, fix a bug, or assess an idea–-with your coding agent. Retrieved October 18, 2026, from https://github.com/github/spec-kit
Institution of Structural Engineers. (n.d.--a). Calculation models: Artificial intelligence–-large language models. Retrieved October 18, 2026, from https://www.istructe.org/resources/technology-digital/calculation-models-artificial-intelligence-large-l/
Institution of Structural Engineers. (n.d.--b). Implementing ai in structural engineering. Retrieved October 18, 2026, from https://www.istructe.org/resources/technology-digital/artificial-intelligence-guidance/
National Society of Professional Engineers. (n.d.). Artificial intelligence. Retrieved October 18, 2026, from https://www.nspe.org/nspe-advocacy/explore-issues/professional-policies-and-position-statements/artificial-intelligence
obra. (n.d.). Superpowers: An agentic skills framework and software development methodology. Retrieved October 18, 2026, from https://github.com/obra/superpowers