// The chart lives in this cell, not with the definitions below: a node
// already displayed by another (hidden) cell is shown as an object, not drawn
{
const vertical = width < 640;
const tip = { fill: palette.panel, stroke: palette.navy };
const channels = { Role: "title", When: "range" };
// Page-coloured outline so a neighbouring stem passes behind a label, not through it
const halo = { stroke: "#1b2432", strokeWidth: 5, paintOrder: "stroke" };
// Desktop layout: stack labels into lanes by their measured pixel extent,
// so nothing overlaps at any width. Labels that would run off the right
// edge flip to the left of their stem.
const margin = 20, pad = 10;
const x = d3.scaleUtc([roles[0].start, d3.max(roles, (d) => d.end)], [margin, width - margin]);
const ends = []; // rightmost pixel used in each lane
const laned = roles.map((d) => {
const px = x(d.start);
const w = pad + d3.max(d.label.split("\n"), measure);
const left = px + w > width - margin;
const [x0, x1] = left ? [px - w, px + 6] : [px - 6, px + w];
const fits = (k) => ends[k] + pad < x0;
// Prefer a lane whose stem also clears the labels below it
let lane = ends.findIndex((_, k) => fits(k) && ends.slice(0, k).every((e) => e < px - 4));
if (lane < 0) lane = ends.findIndex((_, k) => fits(k));
if (lane < 0) lane = ends.length;
ends[lane] = x1;
return { ...d, level: lane + 1, left };
});
const lanes = ends.length;
// Phone layout: years run down the page. Labels are laddered at least
// `gap` apart and a bent stem ties each back to its true start date.
const gap = 1.25 * 365.25 * 864e5;
const placed = [];
for (const d of roles) {
const prev = placed.at(-1);
placed.push({ ...d, at: new Date(Math.max(+d.start, prev ? +prev.at + gap : 0)) });
}
const chart = vertical
? Plot.plot({
width, height: 960, marginTop: 16, marginLeft: 44, marginRight: 8,
style: { background: "transparent", color: palette.sand, fontSize: "12px" },
x: { axis: null, domain: [0, 6] },
y: { type: "utc", reverse: true, grid: true, label: null,
domain: [placed[0].start, new Date(+placed.at(-1).at + gap / 2)] },
marks: [
Plot.ruleX([0], { stroke: palette.navy }),
Plot.ruleX(placed, { x: 0, y1: "start", y2: "end", stroke: color, strokeWidth: 4, strokeOpacity: 0.5 }),
Plot.link(placed, { x1: 0, y1: "start", x2: 1, y2: "at", curve: "bump-x", stroke: color }),
Plot.dot(placed, { y: "at", x: 1, r: 6, fill: color, stroke: palette.panel,
channels, tip: { ...tip, format: { x: false, y: false, fill: false } } }),
Plot.text(placed, { y: "at", x: 1, text: "label", dx: 10, textAnchor: "start",
fill: "#f3ede2", lineHeight: 1.2, ...halo })
]
})
: Plot.plot({
width, height: 100 + 70 * lanes, marginTop: 10, marginBottom: 30,
marginLeft: margin, marginRight: margin,
style: { background: "transparent", color: palette.sand, fontSize: "12px" },
y: { axis: null, domain: [0, lanes + 0.6] },
x: { type: "utc", label: null, grid: true, domain: x.domain() },
marks: [
Plot.ruleY([0], { stroke: palette.navy }),
Plot.ruleY(laned, { y: 0, x1: "start", x2: "end", stroke: color, strokeWidth: 6, strokeOpacity: 0.5 }),
Plot.ruleX(laned, { x: "start", y1: 0, y2: "level", stroke: color }),
Plot.dot(laned, { x: "start", y: "level", r: 6, fill: color, stroke: palette.panel,
channels, tip: { ...tip, format: { x: false, y: false, fill: false } } }),
Plot.text(laned, { filter: (d) => !d.left, x: "start", y: "level", text: "label", lineHeight: 1.2,
fill: "#f3ede2", dx: 10, textAnchor: "start", ...halo }),
Plot.text(laned, { filter: (d) => d.left, x: "start", y: "level", text: "label", lineHeight: 1.2,
fill: "#f3ede2", dx: -10, textAnchor: "end", ...halo })
]
});
// Plot binds each circle's datum to its row index
d3.select(chart).selectAll("g[aria-label=dot] circle")
.style("cursor", "pointer")
.on("click", (event, i) => jump(roles[i]));
return chart;
}Experience
Hover a dot for dates, click to jump to the role.
Experience
Korro Bio (Cambridge, MA)
Director of Data Science
August 2025 – Present
- Lead Korro’s Data Science function, a blended team of up to 3 on-site FTEs and 3 international contractors, owning hiring, performance management, budget, vendor contracts, and the cross-Discovery/Clinical roadmap.
- Established a cross-time-zone operating model (asynchronous review, documentation standards, shared code and data conventions) so a distributed team delivers reproducibly.
- Interrogated EHR-scale real-world datasets (NIH All of Us Researcher Workbench, NashBio) for indication expansion, eligibility and enrollment feasibility, and natural-history characterization; findings informed clinical trial design and were presented at EASL 2026 (see Fischer, Roy, Tapper 2026).
- Directed agentic-AI development of an integrated software ecosystem that unifies ADAR-recruiting oligonucleotide workflows from target identification and validation through ML/DL-guided design and automated high-throughput screening ingest and analysis.
- Materially reduced function spend (contractor, cloud, and SaaS) while expanding computational biology output, through agentic coding tools and a secure on-prem LLM deployment that keeps proprietary sequence and clinical data in-network.
- Championed adoption of AI coding agents across the organization, raising codebase quality and development velocity.
Affini-T Therapeutics (Watertown, MA; company closed 2025)
Associate Director: Precision and Translational Medicine and Computational Biology
December 2021 – July 2025
- Led multidisciplinary initiatives at a cell and gene therapy start-up, successfully driving translational and computational strategies supporting AFNT-211, a multi-site single-arm TCR-T clinical trial in solid tumors.
- Led a diverse Computational team of 1 FTE, 3 contractors, 2 associated Discovery scientists, 2 academic consultants, and multiple vendors.
- Integrated and harmonized complex multi-source clinical, translational, and manufacturing data types, including EDC, CMC, ctDNA, PK/PD, flow cytometry, scRNA-seq, and cytokines.
- Designed and maintained interactive dashboards that increased trial data accessibility, stakeholder engagement, and decision making.
- Developed statistical models to predict responses based on enrollment criteria and improve patient trial response rates.
- Conducted site visits engaging clinical investigators, leading to increased in enrollment rates and enhanced site feedback incorporation.
- Contributed patient population analysis based on preclinical experiments for inclusion in IND filings.
- Created a novel patient population estimation algorithm based on HLA and mutation frequencies (see Roy2025 for HLA component).
- Leveraged public and proprietary datasets to assess HLA Loss of Heterozygosity impacts on therapy efficacy (see ASGCT 2024 abstract and Poster).
- Architected and maintained a multi-account AWS cloud infrastructure supporting both Discovery and Clinical programs.
- Championed deployment of computational workflow management systems enabling scalable, reproducible analysis pipelines.
- Supported Discovery and Prelinical activities from 2021–2024.
- Led efforts in TCR sequencing analysis and novel target identification (oncogene antigens, private neoantigens, ncRNAs, cryptic peptides).
Takeda Oncology (Cambridge, MA)
Principal Scientist: Discovery Translational Science and Computational Oncology
October 2017 – December 2021
- Directed Computational Oncology support for multiple cell therapy discovery projects.
- Collaborated closely with cell therapy teams to design and analyze preclinical translational experiments, informing clinical strategy.
- Led pilot evaluations of spatial transcriptomics platforms, informing technology adoption across Discovery.
- Managed three direct reports, fostering skill development and productivity improvements.
- Spearheaded optimization of cell therapy combinations involving armoring, target selection, platform delivery, and patient population stratification (Project “Square”).
- Identified novel cell therapy targets with an emphasis on clinical relevance and competitive landscape.
- Played key role in interview panels and onboarding, enhancing team cohesion and technical ramp-up.
- Integrated public and proprietary genomic and proteomic datasets to identify tumor-associated antigens uniquely overexpressed in lung cancer.
- Supported GI-DDU scientists with RNA-Seq and scRNA-Seq dataset analyses and external therapeutic platform designs.
- Developed, validated, and disseminated single-cell RNA-seq pipelines, enabling reproducible data analysis across platforms.
- Founded and led internal working group focused on scRNA-seq technology awareness and best practices.
- Revitalized scientific computing environments, facilitating cloud migration and elastic resource scaling.
- Oversaw NGS outsourcing operations for multiple teams, ensuring cost efficiency and data quality.
- Core team member piloting Apple MacBooks deployment across Discovery, supporting IT transition.
Ohana Biosciences/VL34 Inc (Cambridge, MA)
Senior Scientist, Computational Biology
October 2016 – October 2017
- Provided foundational scientific analysis culminating in publication in Science.
- Designed and implemented AWS-based collaborative computing environments for large-scale genomics.
- Performed exome sequencing of key commercial dairy bulls to identify novel tissue-specific protein isoforms.
- Developed scalable pipelines for transcript reconstruction and whole chromosome haplotype phasing across species.
- Led multi-species genomic analyses interpreting whole genome, exome, and single-cell sequencing.
- Assembled tissue- and cell-type-specific transcriptomes integrating publicly available datasets.
- Integrated RNA-Seq data from >15 distinct bovine tissues to generate comprehensive gene and transcript annotations.
- Fostered relationships with dairy farmers innovating in cattle genetics, integrating phenotype and genotype datasets.
- Developed candidate evaluation portals integrating multi-omic data to optimize candidate selection efficiency.
Takeda Oncology (Cambridge, MA)
Scientist 2, Computational Biologist
October 2014 – October 2016
- Advanced oncology small molecule drug development using HTS data from public and in-house sources.
- Conducted comprehensive bioinformatic assessments covering expression profiles, indication suitability, mutations, and other omic features.
- Identified early translational strategies applying tool molecule responses across hundreds of cell lines.
- Selected translationally appropriate in vitro and in vivo models for target validation.
- Conducted genome-wide screening for antibody drug conjugate targets.
- Analyzed treatment-induced differential gene expression in models.
- Enhanced department-wide computational biology capabilities with command-line and cloud computing adoption.
Voyager Therapeutics (Cambridge, MA)
Consultant, Computational Biology Vector Design Group
June 2014 – October 2014
- Built AWS cloud-based computational biology HTS analysis environment.
- Directed AAV vector design leveraging public small RNA-Seq datasets.
- Analyzed and interpreted company-generated HTS data.
Graduate School (Worcester, MA)
Graduate Student
See Education for details. September 2007 – June 2014
Genzyme (Framingham, MA)
Research Associate, Bioanalytical Development Group
April 2004 – September 2007
- Developed GLP/GMP biochemical assays for recombinant protein clinical trials.
- Engineered HPLC assays for protein glycosylation quantification.
- Developed qPCR assays to monitor viral contamination in production cell lines.
Research Intern, Bioanalytical Development Group
Summer 2003
- Supported preclinical and clinical research via IEF assays and ELISAs.
Achillion Pharmaceuticals (New Haven, CT)
Research Internship
Summer 2002
- Conducted ELISAs and cell culture supporting small molecule screening.