Experience

What I have built

A progression rather than a list: electronics and embedded work, then twenty-five years owning an industrial automation and ERP platform end to end, then independent AI research, and now lead engineering on a large enterprise security product.

OpenText (formerly Micro Focus)

2021 to present

Lead Software Engineer · WebInspect

WebInspect is an enterprise dynamic application security testing platform: a large, mature C# and .NET product with a long history and an installed base that cannot be disrupted. I joined Micro Focus as a Senior Software Engineer in 2021, stayed when OpenText acquired them, and was promoted to Lead in 2025. The work spans architecture, modernization, implementation, debugging, cross-platform compatibility, data integrity, build and release reliability, and production maintenance.

Across that time I have delivered more than 250 production-integrated changes and led roughly five major feature initiatives, owning design through to delivery.

  • The WebInspect settings API. Led the settings model that exposes WebInspect's scan configuration as a programmatic API, shipped as a library and consumed by ScanCentral DAST to control scans. It covers the full settings surface and is the largest thing I have owned on this product. I wrote roughly 80 percent of it: the model itself, the override system layered on top so a caller can change one setting without restating the rest, and validation across every model in it. The validation work ran as its own campaign across roughly fourteen model classes.
  • Suppressed findings and false-positive export. My feature from the start, and the longest-running thread of work here: February 2023 to April 2026. The original export feature, then import, merge behavior, correlation across providers, file encoding, failed-import cleanup, and making the whole path thread-safe. Customer-facing reliability rather than new surface area, which is why it kept coming back.
  • HAR support. Built end to end, letting a recorded browser session be used as a scan source, with a parser hardened against the non-standard files real-world tools emit. The largest single feature by volume of code.
  • SQL Express through the Entity Framework migration. The product's move to Entity Framework Core was led by another engineer focused on SQL Server. I was brought in when SQL Express broke on Linux and took ownership of making the system work on SQL Express across both platforms. Scan management was restored under .NET 8 and EF Core by replacing legacy ADO.NET enumeration with a cache-backed design, keeping backward compatibility with existing scan files. The interesting problems were the ones the migration exposed rather than the migration itself: connection settings deprecated since 2012, crashes from shared threads and detached databases mid-scan, and false change detection caused by timezone rounding. The team is now moving that .NET 8 codebase to .NET 10 for the next release, on a long-running modernization branch that is about to become the product's main line.
  • Linux and container enablement. One of two engineers on the team who develop against the Linux container branch, where the product runs in Docker with SQL Express under Entity Framework. Aligning runtime and data behavior across platforms means resolving differences that only appear off Windows, down to filesystem permission models.
  • API configuration and validation. I did not write the REST API, but I owned validating it: request and configuration validation, transport and authentication header handling, endpoint correctness, and later Postman collection support. Also encryption for stored credentials, OAuth providers, client certificate pins and bearer values, which was smaller but mine.
  • Copilot governance framework. Led this with others on the team. A modular set of repository instructions defining boundaries for AI-assisted change around high-risk projects, platform symmetry, localization, logging and public APIs, intended to prevent unrequested architecture-altering edits while keeping each prompt's context small.

MarketAI

Ongoing

Independent AI research and systems engineering

A sequence-learning engine built from first principles, and the trading terminal that supervises it. It has been a spare-time project for many years and close to a second full-time job for the last eighteen months. The engine is built. The terminal is the surface a human uses to watch, evaluate, and act on what it is doing.

The engine

  • Built without pretrained weights, and not layered on an existing transformer. It combines probabilistic state modeling, in the spirit of hidden Markov models, with attention-based sequence processing.
  • Learning is continuous and driven by surprise. There is no separate training phase followed by a frozen model. Error and surprise signals decide when to update, and the system carries persistent long-term memory across sessions.
  • It reads the same signal at several time scales at once and treats agreement and disagreement between those scales as information in its own right.
  • Prediction is a set of forward paths, not a point estimate. Where the paths converge is conviction; where they fan out is uncertainty. The terminal draws them directly on the chart, so the shape of the model's doubt is visible rather than reduced to a number.
  • Designed to run on hardware I own. A linear sparse attention scheme chosen to execute efficiently on a single consumer GPU, with multimodal input and disk-backed structures that keep a working set far larger than memory inside millisecond response targets.

The terminal

A Rust trading terminal, built on egui and wgpu, that renders the engine's output and gives it a controlled way to act. The framework underneath it is complete: every milestone built, with unit and integration tests passing and manual verification behind each one. On top of that framework the application already puts a real, fast chart on screen from a TimescaleDB store, and I am currently building the trading-enablement layer. This is the part I can describe in detail, and the engineering in it stands on its own.

  • One command surface for both the human and the AI. Every mutation in the application flows through a single typed command queue, and the AI uses exactly the same API a click does. That decision was made in the first milestone, which means the AI's control surface has been the integration test backbone for every feature since, rather than something bolted on at the end.
  • A permission layer in front of that surface. Each command category can be allowed, gated behind a human confirmation, or refused outright, according to a configured trust level. Trust is set at startup and deliberately cannot be raised during a session, so there is no in-session prompt for the model to talk its way through.
  • Every order passes the same risk gate, including the ones I place by hand. A manual ticket becomes an intent, gets evaluated, approved, and submitted through the identical path an AI-generated trade takes. The human ticket is not a back door around the safety system. A mismatch between the account a profile claims to be and the account the broker reports is a hard refusal rather than a warning.
  • Deterministic replay throughout. Nothing reads the system clock directly; time comes from a clock abstraction that can be live or replaying history. The same run at any speed produces identical interpretation order, which is what makes evaluating the engine against the past meaningful.
  • A 144Hz frame budget, enforced. An eight-phase frame loop with a per-phase time budget inside 6.9ms, instrumented per phase, and a graduated degradation policy that sheds visual quality before it sheds frame rate. Panels tear out into independent OS windows, regroup, and snap magnetically.
  • Pixel regressions caught without a GPU. Draw commands are recorded and replayed through a headless software rasterizer against committed golden images, so rendering regressions fail in CI on a machine with no graphics hardware.
  • Continuous-density level of detail. Rather than stepping through fixed resolution rungs, the chart splits and folds buckets by factors of two to hold candle width inside a target pixel band as you zoom, with per-tier caches, fetches moved off the frame thread, and stale-while-refetch rendering so the view never blanks while data is in flight. Getting this right is most of what separates a chart that feels fast from one that does not.
  • A production boundary the AI cannot reach. The lab environment is paper-only and open to agent tooling; the live-capable environment runs under a separate identity with its own secrets and is not agent accessible, with signed artifacts and rollback between them. Passing every gate still does not enable live trading. That remains a manual act only I can perform, which is the correct place to put a decision about real money.

How it is built

  • Specified before it is written. Roughly 700,000 words of design documents, API contracts, and per-sprint specifications, where each sprint states its acceptance tests, its explicit non-goals, and what must be passing before it starts.
  • Adversarially reviewed by several models independently. Each milestone's design goes out to more than one frontier model for criticism from different angles, the findings are consolidated, and the resolutions are recorded against the design gaps they close. This is the same multi-model workflow I brought to work, applied to a codebase where I am the only human reviewer.

Proprietary independent research. The engine's internals, its representation and memory model, and anything resembling a market methodology are deliberately absent from this page. What is described above is architecture and process, not algorithm.

Davis Core and Pad

1995 to 2020

Lead Software Engineer and Systems Architect

Twenty-five years designing, building, deploying and maintaining a complete factory automation and ERP platform, as the sole engineer. Requirements through architecture, code, test, deployment, and the corporate IT it ran on. Three hardware generations, with the system in continuous production throughout.

  • Replaced mechanical machine timers with programmable controllers, improving timing accuracy to roughly a tenth of a second and enabling functionality such as vacuum molding. Cycle time fell by at least 20 per cent, with a corresponding gain in productivity.
  • Wrote a real-time kernel in C and assembly because no suitable operating system existed for the original Z180 hardware, and a token-ring-style network stack over RS-485 because the industrial environment was too electrically noisy for anything simpler.
  • Migrated the controller to x86 and Windows Embedded in C++ when the project outgrew the original hardware, rebuilding the GUI, the development environment and the OS integration while carrying forward what still applied.
  • Added centralized production data collection on PostgreSQL running on Debian, growing to roughly 36 tables and 20 stored procedures serving gigabytes of machine data.
  • Built the C# clients the business actually ran on: real-time productivity and profitability reporting per machine and per employee, shift overviews, efficiency over arbitrary time ranges, and inventory and customer management. The second-generation system produced an 8 percent productivity gain in its first week online and continued improving after that.

Earlier

1991 to 1994

Burton Vision, Software Developer, 1993 to 1994. Assisted in developing an interactive sign language and English dictionary for deaf students, in HyperTalk.

Telecommunication Consulting and Repair, Electronics Technician, 1991 to 1992. PBX installation and component-level circuit board repair, including surface-mount rework and reverse engineering circuit diagrams from bare boards.

Education

B.S. Computer Science, Southern Polytechnic State University, subsequently Kennesaw State University, 2016.

Graduate coursework in Computer Science, machine learning specialization, Georgia Institute of Technology.

Design Patterns Reference LinkedIn