prior professional work
Extending Spotfire for clinical trial review
A Spotfire C# Custom Extension and supporting analytics application integrating with domain data sources enabling analysts to review, annotate, and route clinical trial data.
the project
Designed and built a Spotfire C# Custom Extension that enabled clinical trial researchers to review trial data, provide feedback and corrections, and route records to the appropriate destination systems. The solution integrated Spotfire with Salesforce, Medidata Rave, and Oracle Life Sciences Data Hub (LSH), and was deployed for both Spotfire Analyst and Web Player.
I worked closely with a team of employees and external consultants to build this solution.
Clinical trial researchers needed to review incoming trial data, identify anomalous or questionable results, provide contextual feedback and corrections, and route those records to the appropriate downstream systems. The broader review process was managed through a heavily customized Salesforce environment, but researchers needed richer analytical capabilities to investigate the underlying trial data and identify individual data points requiring review. The workflow also crossed several specialized clinical data systems, making it important to preserve context and state as users moved between systems.
the system
We designed the workflow so that Salesforce remained the researcher's starting point. From a trial record in Salesforce, the user could launch Spotfire Web Player directly into an analysis containing the relevant trial data. The analysis presented the underlying records alongside visualizations designed to help identify outliers and other data points requiring investigation.
From there, the user could select one or more data points and launch a custom "Data Point Wizard" dialog workflow directly from the visualization. The wizard allowed the user to choose or modify the fields included in the review, then stepped through each selected record individually while incorporating additional metadata retrieved from Salesforce. For each record, the researcher could create a new query, add notes, categorize the issue, and select its destination. Once the selected records had been reviewed, the user could either finish the analysis or return to Spotfire and continue investigating additional data points.
Depending on the workflow, the resulting records were written back to Salesforce, Oracle Life Sciences Data Hub, Medidata Rave, or other downstream clinical systems.
During my time on-site, I also trained end users of the customization as well as Spotfire authors working on other projects.
The solution connected a heavily customized Salesforce environment with Spotfire, Medidata Rave, Oracle Life Sciences Data Hub, and other clinical data systems. Salesforce provided the entry point into the workflow, launching Spotfire Web Player directly into the appropriate trial analysis.
A custom C# Spotfire extension implemented the Data Point Wizard and maintained workflow state as users moved between selected records and multiple dialogs. The extension combined data selected interactively within Spotfire with metadata retrieved from Salesforce, then wrote the resulting queries and records to the appropriate downstream systems.
Because the application needed to support both Spotfire Analyst and Web Player, portions of the interface were implemented separately using Windows Forms and HTML/CSS/JavaScript.
supporting work
The application pushed well beyond Spotfire's documented extension points. This was my first time writing C#, and I ended up using reflection to access visualization data that wasn't exposed through the public API. I also built a stateful, multi-step Data Point Wizard for Web Player despite there being no documented mechanism for creating that kind of dialog workflow. Supporting both Spotfire Analyst and Web Player meant implementing the interface separately in Windows Forms and HTML/CSS/JavaScript while maintaining the same workflow and state across both environments.
decisions and current state
One of the biggest challenges was working within the limitations of the Spotfire C# API. This was the first time I'd ever written C#, and I quickly discovered that some of the information I needed from Spotfire visualizations wasn't exposed through the public API. I ultimately used reflection to reach parts of Spotfire that weren't otherwise accessible.
Supporting both Spotfire Analyst and Web Player introduced another challenge. The desktop interface used Windows Forms, while Web Player required HTML/CSS/JavaScript, and there was no documented mechanism for implementing the sequence of dialogs required by the Data Point Wizard. The extension therefore required quite a bit of custom state handling and some clever tricks to maintain the workflow as users moved between dialogs and records.
I also had to develop the application within a heavily regulated pharmaceutical environment, working with GxP controls, Computer System Validation (CSV) practices, and ALCOA+ data-integrity standards.
This project was my baby for years.
The application became an established part of the clinical trial review workflow and remained in active use for years, continuing well beyond my original engagement and eventually transitioning to ongoing maintenance outside TIBCO.