How I use AI
One rule covers all of it: code computes the numbers, the model only explains them.
In the systems I build
Every statistic a user sees is computed deterministically in R or SQL before a language model is involved. The model receives those computed results, never the raw rows, and is allowed to interpret, summarise or restate them. It is not allowed to add, rank, re-weight, infer, or assign a probability. In a GxP environment a model that invents a result is not a bug, it is a compliance event.
Every AI answer carries an evidence line that names what the model was given: records in scope, the time window, the sources retrieved, the model, and the date the data runs through. Long runs can be stopped. Feedback on answers is logged so a wrong interpretation can be traced to its prompt and payload.
Where a model's output could be mistaken for a measurement, the design refuses it. A rule that could not run says so instead of staying silent, and a result of “nothing fired” is shown as a finding, not an empty table.
On this site
I designed and built this site myself, after researching how other data scientists, engineers and AI practitioners present production work, and I wrote the copy. Every number on the site comes from a maintained ledger of verified figures; if a number is not in that ledger it is not published, and an estimate is labelled as one. No screenshot or image here is AI-generated: the card art for internal platforms is hand-authored SVG, because real screenshots would leak enterprise detail.
The dated changelog records what changed and when.
What I will not do
- Let a model compute or restate a number it was not handed.
- Ship an AI feature without a visible evidence line and a way to stop it.
- Publish an impact figure that is not measured, or annualise one that was measured over a shorter period.
- Paste internal identifiers, data locations or regulated content into any external model.