Skip to content

Designing a research-platform suite for pharmaceutical R&D

TL;DR

Diagnosis

For years, the scientific knowledge here lived in documents — study plans in Word, data in Excel, charts pasted by hand into reports. You couldn’t search it, compare it across studies, or feed it forward into the next piece of work. Both platforms in this case study attack the same core problem: turning research knowledge from documents into structured data the organization can reuse.

flowchart LR
    A["Plan a study"] --> B["Auto-generated lab task list"]
    B --> C["Analyze results"]
    C --> D["Meta-analyze across studies"]

    classDef neutral fill:#f0f0f1,stroke:none,color:#3f3f46,rx:14,ry:14
    class A,B,C,D neutral
    linkStyle default stroke:#a8a8b3,stroke-width:1.5px

What I did

Results

MetricBeforeAfter
Time to plan a study~2 weeksa few days (~70% faster)
Time to produce a report~3–5 daysa few hours (order of magnitude)
Finding a comparable studynear-impossibleinstant (structured search)
Adoption at launch~50 scientists, 2 research areas

The problem

What was planning a study actually like?

Study plans were written in documents, as unstructured text — not as structured data. That meant a plan couldn’t be queried, compared with past studies, or turned into anything actionable downstream. Planning was slow and lived in prose.

Planning also runs on two clocks at once, which is the real source of complexity:

And analyzing the results?

Reports were built manually in Word. Scientists collected data by hand into Excel, then used an online tool that worked like a calculator with no memory — analyzed data wasn’t stored, so charts and analyses had to be downloaded and pasted into documents by hand.

The biggest business pain was finding and comparing past studies: each study carried only limited metadata, so finding research with similar parameters was nearly impossible. The new system had to collect structured data and make it searchable.

My role / scope

Process

Key decisions & trade-offs

DrugLow doseMid doseHigh dose
Drug A100 mg200 mg400 mg
Drug B200 mg400 mg600 mg
flowchart LR
    A["Study 1<br/>group 2"] --> W["Comparison layer<br/>drug + dose"]
    B["Study 2<br/>group 6"] --> W
    C["Study 3<br/>group 3"] --> W

    classDef info    fill:#e9eff8,stroke:none,color:#1e3a5f,rx:14,ry:14
    classDef accent  fill:#27272a,stroke:#3f3f46,stroke-width:1px,color:#fafafa,rx:14,ry:14
    class A,B,C info
    class W accent
    linkStyle default stroke:#a8a8b3,stroke-width:1.5px
flowchart TD
    S1["Study time<br/>day 50: draw blood"] --> X{"Collision with lab calendar?"}
    C1["Calendar time<br/>real date is a holiday"] --> X
    X -->|"yes"| V["Calendar view for lab staff<br/>transparency, not auto-resolve"]
    X -->|"no"| Y["Event scheduled normally"]

    classDef info    fill:#e9eff8,stroke:none,color:#1e3a5f,rx:14,ry:14
    classDef good    fill:#e6f2ea,stroke:none,color:#1f4d33,rx:14,ry:14
    classDef accent  fill:#27272a,stroke:#3f3f46,stroke-width:1px,color:#fafafa,rx:14,ry:14
    class S1,C1 info
    class X info
    class Y good
    class V accent
    linkStyle default stroke:#a8a8b3,stroke-width:1.5px

How it turned out

What I took away