Modernizing disease surveillance

centers for disease control · nbs · 2023–25 · ux design lead · service design, design systems, user research, uswds/508

An epidemiologist’s morning starts in NBS’s queues: what came in overnight, and what am I working? In the legacy system those questions cost three to four clicks per record, and it forgot your filters and your place every time you opened one. This case follows the queues rebuild: one piece of a modernization readying NBS for the next pandemic, and the piece where the system learned to carry the volume and remember its user.

The program

NBS is the CDC’s disease surveillance system, used by state, local, and territorial health departments. COVID exposed it: lab reports arrived by the thousands each day, and queues built for routine caseloads could not keep up. The modernization that followed had one mandate: make NBS ready for the next pandemic.

That mandate ran wider than any single feature. Data ingestion and the rules engine were rebuilt for large loads, automation reduced manual triage, performance was overhauled, and new disease investigation workflows became faster to spin up. The front end modernized in pieces under a strangler-fig approach, legacy and modern living together. This case study covers one piece of that program: the queues, rebuilt by a team of four, where epidemiologists spend more of their day than anywhere except search.

The morning

Epidemiologists open the queues first. Documents requiring review holds the lab, case, and morbidity reports that arrived overnight and could not be auto-triaged; each one needs a human call, open an investigation or archive it. Open investigations holds the active cases, worked to completion and reported out to the state and CDC. Two queues, two questions: what came in, and what am I working?

Legacy NBS home: six hard-coded widgets and queue links with counts
Modernized NBS morning screen: triage queues, conditions map, and workload tiles
before · legacy nbsafter · intended design
Legacy NBS home: six hard-coded widgets and queue links with counts
before · legacy nbs
Modernized NBS morning screen: triage queues, conditions map, and workload tiles
after · intended design
fig 2.1 · the morning screen, before and after — six widgets became a work surface

A system that forgot

The legacy home was six hard-coded widgets, and queues were links with counts. Reaching one record meant clicking into a queue, landing on a fixed table, filtering one column at a time through dropdown checklists, and opening the record: three to four clicks, measured through user tests and a mapping of the legacy software.

The return trip cost more. The architecture broke the browser’s back button, so leaving a record erased the page’s state, filters included. Pick the wrong record and you started over. With thousands of documents arriving daily, triage slowed to the speed of the interface.

Legacy Open Investigations queue: a fixed data table
the fixed table
Legacy queue filtering through a dropdown checklist, one column at a time
filtering, one column at a time
fig 2.2 · the legacy queue — fixed columns, dropdown filters, all of it lost on navigation
fig 2.3 · reconstruction — the cost of one record, drawn from user tests and the legacy mapping exercise

Configurability as the mindset

Research made the pattern plain: workflows varied by jurisdiction, by experience, by disease, and by role. No single default fit that spread. Configurability stopped being a feature request and became the design mindset.

It had to be argued for. Legacy NBS offered saved searches labeled “private custom queues,” and the name convinced stakeholders the need was already met. Users read “custom” as customizable, which it never was. User feedback and design sessions made the difference visible, and the configurable queue system was approved: out-of-the-box queues, plus queues an epidemiologist can build, save, and share within a program area.

Create queue: event type, criteria builder with and/or groups, columns, actions, and sharing per program area
fig 2.4 · create queue — criteria, columns, actions, and sharing per program area

A queue that remembers

The rebuilt queue keeps the user’s context. Columns are configurable per queue and saved per user: show every available field, or only what your program needs. Filters open above every column at once and persist until reset. Result density is a preference. Bulk actions surface when rows are selected.

Queues also stopped being destinations you reach through home. A panel beside the queue name lists every queue, default and custom, and starring pushes the ones you live in to the top. The pattern generalizes across the system; columns, filters, and actions adapt to each queue.

Open investigations, rebuilt: criteria chips visible, clear actions, persistent filter row
fig 2.5 · open investigations, rebuilt — criteria visible, actions clear, state kept
Filter row open above every column
filters persist
Column picker with per-user saved configuration
columns, saved per user
All-queues side panel with starred queues on top
every queue, one panel
fig 2.6 · what the queue remembers — filters, columns, and a way between queues
Documents requiring review, starred: the same queue system with columns, filters, and actions adapted to the workflow
fig 2.7 · documents requiring review, starred — same system; columns, filters, and actions adapt per queue

Outcomes

−50%case review time, from before-and-after user surveys across jurisdictions
5.6 → 8.4user satisfaction, surveyed at the user group before design and again after upgrade
+20%jurisdictions opting into the modernized upgrade, per client upgrade tracking

Reflection

When the system remembers, the epidemiologist can forget: no re-filtering, no lost place, no rebuilding context after every record. The biggest win was hearing users say they were finally keeping up with their caseload. Configurability carried forward as the design mindset for the rest of NBS.

A thinking layer for the AI builder eranext case · tessera