Software
I build software to support statistical and data science work. Most of it is written in R, with Python and other tools used when they are a better fit.
Applications and packages
My work includes Shiny dashboards, internal and public R packages, reporting tools, and data pipelines. I have built applications for data exploration, model review, scientific reporting, and other analytical workflows.
For larger Shiny projects, I use modular application structures, reactive design, bslib, and frameworks such as golem or Rhino when they are useful. Interactive tables and graphics often use plotly, gt, or gtsummary.
Reproducible workflows
I use version control, testing, dependency management, and automated deployment as part of the analytical workflow. Tools I have used include:
targetsfor analytical pipelines;renvfor R environments anduvfor Python project and dependency management;testthatandshinytest2for package and application testing;- GitHub pull requests and code review, with GitHub Actions for CI/CD;
pre-commitfor automated code checks;- Quarto for reports and websites;
- Posit Connect and Workbench for application development and deployment; and
- Docker when a portable runtime is needed.
Languages and platforms
Primary: R, Shiny, the tidyverse, data.table, survival, plotly, gt, gtsummary, targets, bslib, Quarto, and the Posit platform.
Additional experience: Python, Bash, SQL, GitHub, Polars, DuckDB, Arrow, Docker, Linux, AWS, S3, BigQuery, and Databricks.
I have also experimented with Rust, WebAssembly (Wasm), webR, and Shinylive.
Generative AI and agentic workflows
I have used large language models, retrieval-augmented generation (RAG), and agentic workflows for software development, document summarization, and knowledge retrieval. I treat generated output as something to review and validate, particularly when the work supports healthcare decisions.