Streamlining Legislative Analysis Model Deployment with MLOps
fiscalnote · Legal · 2024 · source Agentic: no · promotional bias: high · source-backed · extracted with prompt 0.5.6 (schema v2)
Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.
Problem
Domain: Legislative and regulatory intelligence model deployment
FiscalNote needed to deploy and update ML/NLP models faster for legislative and regulatory intelligence, but fragmented MLOps infrastructure forced manual artifact, build, model-version, API, hosting, scaling, and no-disruption deployment work.
Constraints:
- FiscalNote works with structured and unstructured legislative and regulatory data.
- Client expectations required models in different locations, sizes, and capabilities.
- Before Databricks, certain AI models could be deployed or updated only around once a year.
- No-disruption deployments and data-asset discoverability were required for service continuity and data integrity.
Architecture
FiscalNote adopted Databricks MLflow and Databricks Model Serving. MLflow manages artifact, model-version, notebook, and deployment lifecycle tracking so data scientists spend less time on MLOps logistics. Model Serving deploys, hosts, scales, manages, and monitors ML models without custom APIs or infrastructure, supporting ETL, NLP summarization/sentiment, and binary classification workflows for legislative intelligence.
Diagram confidence: explicit (topology described by the source).
flowchart LR legislative_and_regulatory_data["Legislative and regulatory data"] --> data_science_model_development["Data science model development"] data_science_model_development --> mlflow_lifecycle_management["MLflow lifecycle management"] mlflow_lifecycle_management --> databricks_model_serving["Databricks Model Serving"] databricks_model_serving --> legislative_intelligence_applications["Legislative intelligence applications"]
Components
| Component | Role | Interacts with |
|---|---|---|
Legislative and regulatory data |
Structured and unstructured source data used for policy and geopolitical intelligence. | Data science model development |
Data science model development |
Builds ML and NLP models for legislative outcomes, sentiment, summarization, ETL, and classification. | Legislative and regulatory data, MLflow lifecycle management |
MLflow lifecycle management |
Tracks artifacts, builds, notebooks, model versions, and deployment state. | Data science model development, Databricks Model Serving |
Databricks Model Serving |
Deploys, hosts, scales, manages, and monitors models without custom serving infrastructure. | MLflow lifecycle management, Legislative intelligence applications |
Legislative intelligence applications |
Customer-facing workflows for insights into laws, regulations, sentiment, and voting outcomes. | Databricks Model Serving |
Data flow
Data scientists build ML/NLP models over structured and unstructured government data, track artifacts, versions, and notebooks in MLflow, then deploy models through Databricks Model Serving. Served models support ETL ingestion, summarization, sentiment analysis, and binary classification, enabling faster updates as legislative data changes.
3 supporting quotes
Why this architecture
FiscalNote chose Databricks because its previous fragmented deployment stack slowed model updates and required extensive custom coding for no-disruption deployments. MLflow and Model Serving gave one lifecycle path for tracking, deploying, scaling, and monitoring models so data scientists could focus on model approach and legislative intelligence rather than platform logistics.
3 supporting quotes
Models used: ML models · NLP models · binary classification models · sentiment analysis models · summarization models
Scale
- FiscalNote serves nonprofits, government agencies, and over half of the Fortune 100.“including nonprofits, government agencies and over half of the Fortune 100.”article, stated
- Before Databricks, certain AI model deployments were limited to around once per year.“limited the team’s cadence for deploying and updating certain AI models to around once a year.”article, stated
- Deployment phases previously extended over several weeks.“Since each deployment phase extended over several weeks”article, stated
- FiscalNote can now deploy three times the number of models annually compared with before Databricks.“FiscalNote can now deploy 3x the number of models annually, compared to their output before Databricks.”article, stated
Alternatives considered (roads not taken)
Manually stitch together model-deployment components
Rejected because: The fragmented process slowed internal workflows and limited model updates to about once per year.
Custom-coded no-disruption deployments
Rejected because: Custom infrastructure coding increased operational burden and risked data integrity and service continuity.
Build custom APIs, hosting, and scaling for served models
Rejected because: Databricks Model Serving removed the need for teams to build and scale this infrastructure themselves.
Patterns
observability-tracing (ML lifecycle)
MLflow tracks artifacts, model versions, and notebooks so teams can manage deployment state and reduce manual lifecycle work.
tool-use-orchestration (MLOps platform)
Databricks Model Serving handles API, hosting, scaling, model management, and monitoring for diverse ML workflows.
canary-rollout (deployment safety)
FiscalNote needed no-disruption deployments, and Model Serving reduced custom coding for safely rolling out updates.
latency-optimization (delivery speed)
The Databricks migration shortened model deployment cadence, letting teams ship three times as many models annually.
Tradeoffs
Standardize on Databricks lifecycle tooling.
Chose MLflow and Databricks Model Serving over Fragmented custom model-deployment infrastructure.
Rationale: The unified platform reduced artifact/version/deployment overhead and let data scientists focus on innovation.
Use managed model serving.
Chose Databricks Model Serving over Custom APIs, hosting, scaling, and no-disruption deployment code.
Rationale: Managed serving improved deployment speed and reduced the operational burden and continuity risks of custom infrastructure.
Gotchas (what bit them)
Fragmented MLOps creates yearly deployment cadence.
Root cause: Teams had to stitch together artifacts, builds, versions, APIs, hosting, scaling, and custom deployment code.
Resolution: Adopt MLflow and Model Serving to unify lifecycle tracking and model deployment.
No-disruption deployment requirements can increase operational risk.
Root cause: Custom coding was needed to prevent model updates from disrupting existing models.
Resolution: Use Model Serving to deploy models without custom API, hosting, scaling, and no-disruption infrastructure.
Poor data-asset discoverability slows model development.
Root cause: Data scientists could not easily access necessary data assets.
Resolution: Use a unified data analytics platform so teams spend less time on platform logistics and more on model approach.
Evaluation
FiscalNote measured deployment productivity and time-to-market improvements after moving model lifecycle and serving work to Databricks.
Metrics: Model deployment output: 3x annually compared with before Databricks. · Previous update cadence: around once per year. · Previous deployment phases: several weeks.
Outcomes
- FiscalNote streamlined model deployment and made the process 3x faster.
- Data scientists spent less time on MLOps logistics and more time on data science.
- The company can respond more dynamically to legislative changes.
FiscalNote serves nonprofits, government agencies, and over half of the Fortune 100; the Databricks shift enables three times as many annual model deployments.