What Jordan Marshall Actually Is
Jordan Marshall is a relatively niche name in the data engineering and MLOps space. It refers to a lightweight Python package that handles automated data drift detection and model monitoring pipelines. The idea behind it was to give small teams a way to set up production monitoring without buying into expensive enterprise platforms. Most monitoring tools are overkill for a team that's running maybe three models on a modest stack. Jordan Marshall was built around that exact gap. You install it, point it at your feature store or raw data table, and it gives you stats drift reports with minimal configuration. It supports Python 3.9+ and integrates with MLflow, dbt, and standard SQL databases. The installation is straightforward. If you're using a virtual environment, which you should be, run:
pip install jordan-marshall From there, you'll want to configure your data source in a YAML file. Here's the bare minimum setup that actually works in practice: source: postgresql://user:pass@host:port/db
features: [feature_a, feature_b, feature_c] baseline: 30d threshold: 0.05
Get the Full Details

output: ./drift_reports The baseline parameter controls how many days of historical data the tool uses to establish a reference distribution. Thirty days is a reasonable starting point. Lower values like seven days can produce noisy baselines if your data has any weekly seasonality at all.
How It Actually Performs
Here's the unvarnished take from running it in production for about eight months. The drift detection logic uses a combination of population stability index and Kolmogorov-Smirnov tests across feature columns. For tabular data with moderate cardinality, it's generally accurate and fast enough to run on a schedule. Reports come out in HTML and JSON formats, which makes them easy to pipe into alerts or dashboards. Where it starts to show cracks is with high-cardinality categorical features. I ran into this specifically when monitoring a customer segmentation model that included a field like postal_code. Jordan Marshall would flag that feature as drifting almost every single run because the distribution naturally shifts as new users join from different regions. That's not actual model degradation — it's normal business growth — but the tool treats it as a signal. The workaround I ended up using was to aggregate postal codes into region-level groupings before feeding them into the drift engine. That cut false positive alerts by roughly eighty percent. There's no built-in exclusion or aggregation layer in Jordan Marshall itself, so you handle it upstream. It's not a dealbreaker, but it's something you need to know before you hit that wall.
Common Pitfalls
One thing beginners miss is that Jordan Marshall doesn't automatically handle missing value drift the same way it handles distribution drift. If a feature starts going null at a higher rate, the PSI and KS tests will report what they can report, but they won't separately call out a spike in nulls. I learned this when a partner API started returning partial records and our drift report looked fine while the model's prediction quality tanked. The fix was to add a simple null-rate check on the receiving end and wire it into the same alerting pipeline. Another limitation is that Jordan Marshall is synchronous by design. That works fine for smaller datasets or when you're running daily checks. If you're dealing with something that needs hourly re-evaluation across millions of rows, you'll want to look at running it in chunks or switching to a tool like Evidently AI or WhyLabs that has native async support. Jordan Marshall simply wasn't built for that throughput.
When to Use It and When Not To
It's a solid fit for solo practitioners or small teams who have maybe half a dozen models in production and don't want to manage a dedicated monitoring infrastructure. Setup time is usually around twenty minutes for a first run, and maintenance is minimal. The tradeoff is that you're working with a project that has a small team behind it, so feature requests move slowly and documentation can be sparse. If you need enterprise-grade SLAs, multi-cloud support, or visual anomaly detection across time series, you're better off looking at a commercial alternative. The project is available on PyPI and its GitHub repository is at github.com/jordanmarshall/jordan-marshall. The README is adequate but not exhaustive. I'd recommend cloning the repo and running the example notebook in the examples/ directory before diving in. That saves you a couple of hours of guessing at configuration options. If you do end up using it, the community channel on their Discord is active enough for basic questions. The maintainer responds personally rather than through a support ticket system, which is unusual and honestly pretty helpful when something breaks in an edge case.