EPS - Prescription WORKFLOW

EPS - Prescription WORKFLOW

WORKFLOW OPTIMIZATION

WORKFLOW OPTIMIZATION

WORKFLOW OPTIMIZATION

CLINICAL DECISION SUPPORT

CLINICAL DECISION SUPPORT

Making Pharmacy Search Reliable Under Real-World Clinical Conditions

Making Pharmacy Search Reliable Under Real-World Clinical Conditions

background context

At first glance, pharmacy search in EMIS Web appeared to be working. Clinicians could search for pharmacies and issue prescriptions. But under time-critical prescribing conditions, a different story emerged.

Some searches returned no results. Others behaved differently depending on the information entered. In some cases, the system appeared to fail without explaining why.

At first glance, pharmacy search in EMIS Web appeared to be working. Clinicians could search for pharmacies and issue prescriptions. But under time-critical prescribing conditions, a different story emerged.

Some searches returned no results. Others behaved differently depending on the information entered. In some cases, the system appeared to fail without explaining why.

The challenge was not just to improve search. It was to make clinicians feel confident when the system was under pressure.

The challenge was not just to improve search. It was to make clinicians feel confident when the system was under pressure.

The challenge was not just to improve search. It was to make clinicians feel confident when the system was under pressure.

Client

NHS Wales, UK

NHS Wales, UK

Plaform

EMIS Web

EMIS Web

EMIS -X

EMIS -X

Team

Product

Product

ENGINEERING

ENGINEERING

CDG

CDG

Content

Content

Role

Dedicated UX Designer

Dedicated UX Designer

Shipped

February, 2025

February, 2025

THE CHALLENGE

A simple search form was hiding a reliability problem.

A simple search form was hiding a reliability problem.

The complexity only became visible when mapping search behavior across prescribing scenarios.
Behind a familiar interface, different search paths produced inconsistent outcomes—results, errors, or no feedback—forcing clinicians to retry, adjust inputs, or guess what went wrong.

The complexity only became visible when mapping search behavior across prescribing scenarios.
Behind a familiar interface, different search paths produced inconsistent outcomes—results, errors, or no feedback—forcing clinicians to retry, adjust inputs, or guess what went wrong.

What was at stake?

This work informed future pharmacy search patterns in EMIS X. The challenge was not search itself, but reliability. Clinicians needed clear feedback, predictable outcomes, and safe recovery paths when services failed. The solution had to balance clinical confidence with existing platform constraints.

This work informed future pharmacy search patterns in EMIS X. The challenge was not search itself, but reliability. Clinicians needed clear feedback, predictable outcomes, and safe recovery paths when services failed. The solution had to balance clinical confidence with existing platform constraints.

MY ROLE & CONTRIBUTIONS

I helped move the conversation from “search usability” to “system reliability”.

I led the UX design work across problem framing, workflow analysis, error-state design, and design decision documentation. The work sat between clinical safety, prescribing behaviour, API constraints, and legacy product consistency.

I led the UX design work across problem framing, workflow analysis, error-state design, and design decision documentation. The work sat between clinical safety, prescribing behaviour, API constraints, and legacy product consistency.

My contribution was not just producing screens. I clarified where the problem actually lived, what failure meant in a clinical workflow, and how the product should behave when the system could only partially recover.

My contribution was not just producing screens. I clarified where the problem actually lived, what failure meant in a clinical workflow, and how the product should behave when the system could only partially recover.

Discovery

Mapped the behaviour

I reviewed how different input combinations behaved, where search silently failed, and which outcomes were invisible to clinicians.

I reviewed how different input combinations behaved, where search silently failed, and which outcomes were invisible to clinicians.

Design

Designed recovery paths

I created clearer search pathways, differentiated error states, and fallback actions that helped clinicians keep moving.

I created clearer search pathways, differentiated error states, and fallback actions that helped clinicians keep moving.

Alignment

Aligned teams

I worked with Product, Engineering, Clinical Design, and Content teams to balance safety, technical feasibility, and platform consistency.

I worked with Product, Engineering, Clinical Design, and Content teams to balance safety, technical feasibility, and platform consistency.

WHAT I DISCOVERED

The rules existed. Clinicians just could not see them.

What looked like one search experience was actually several different behaviors. That was the turning point in the project.

What looked like one search experience was actually several different behaviors. That was the turning point in the project.

Search Input Combination

Result

Status

Full postcode only

Full postcode only

All pharmacies in that postcode returned

All pharmacies in that postcode returned

Works

Works

Partial postcode only

Partial postcode only

Error prompt — name field required

Error prompt — name field required

Error Shown

Error Shown

Partial postcode + Name

Partial postcode + Name

Only that named pharmacy at partial postcode

Only that named pharmacy at partial postcode

Partial only

Partial only

Name only (full or partial)

Name only (full or partial)

Matching results returned

Matching results returned

Works

Works

Street + Name + Town + Postcode

Street + Name + Town + Postcode

Results returned

Results returned

Works

Works

Any misspelled input

Any misspelled input

No results — no feedback given

No results — no feedback given

Silent Fail

Silent Fail

Multistep retry loop

Multistep retry loop

No system feedback

No system feedback

Prescription delay risk

Prescription delay risk

Before — Old Electronic Prescription Services API

Before — Old Electronic Prescription Services API

After — New Search Service API EPS

After — New Search Service API EPS

One-off Pharmacy nomination search

Search for the nearest pharmacy based on postcode, address or pharmacy name.

Postcode

LS19 6BA

Pharmacy name

Timeframe

Next 24 Hours

Search by address:

Street

Town

Search

Code

Pharmacy name

Pharmacy address

Telephone

Distance

(miles)

In a straight line

Opening days

Opening hours

FPW64

Boots

11 NEW ROAD SIDE, RAWDON, LS19 6BA

01132502053

0.12

Monday

Tuesday

09:00 - 17:00

09:00 - 17:00

FPW64

Boots

11 NEW ROAD SIDE, RAWDON, LS19 6BA

01132502053

0.12

Monday

Tuesday

09:00 - 17:00

09:00 - 17:00

FPW64

Boots

11 NEW ROAD SIDE, RAWDON, LS19 6BA

01132502053

0.12

Monday

Tuesday

09:00 - 17:00

09:00 - 17:00

FPW64

Boots

11 NEW ROAD SIDE, RAWDON, LS19 6BA

01132502053

0.12

Monday

Tuesday

09:00 - 17:00

09:00 - 17:00

FPW64

Boots

11 NEW ROAD SIDE, RAWDON, LS19 6BA

01132502053

0.12

Monday

Tuesday

09:00 - 17:00

09:00 - 17:00

OK

Cancel

No address fields

No address fields

Unsorted results

Unsorted results

Pharmacy Name silently ignored at API

Pharmacy Name silently ignored at API

Distance sorted

Distance sorted

Opening times inline

Opening times inline

Wales enabled

Wales enabled

The problem was not that search sometimes failed. The problem was that clinicians could not understand why it failed or what to do next.

The problem was not that search sometimes failed. The problem was that clinicians could not understand why it failed or what to do next.

Search Input Combination

Result

Status

All pharmacies in that postcode returned

Works

Full postcode only

Partial postcode only

Error prompt — name field required

Error Shown

Partial postcode + Name

Only that named pharmacy at partial postcode

Partial only

Name only (full or partial)

Matching results returned

Works

Street + Name + Town + Postcode

Results returned

Works

Any misspelled input

No results — no feedback given

Silent Fail

Multistep retry loop

No system feedback

Prescription delay risk

EXPERIENCE SHIFT

From retry loop to a predictable route through the task.

UI changes are invisible without workflow context. This is what the same task actually felt like for a clinician.

UI changes are invisible without workflow context. This is what the same task actually felt like for a clinician.

Before

Unreliable under pressure

A clinician could enter a postcode, scan unsorted results, try pharmacy name, hit a silent failure, and retry with different combinations.

The system gave little guidance and created doubt during a time-sensitive task.

A clinician could enter a postcode, scan unsorted results, try pharmacy name, hit a silent failure, and retry with different combinations.

The system gave little guidance and created doubt during a time-sensitive task.

~10–20s of cognitive load

~10–20s of cognitive load

Dead end with no signal

Dead end with no signal

Prescription delay risk

Prescription delay risk

After

Clearer and recoverable

The redesigned experience prioritised postcode, sorted results by distance, showed opening times inline, and gave a clear recovery path when something failed.

The clinician could understand the result and move forward with more confidence.

The redesigned experience prioritised postcode, sorted results by distance, showed opening times inline, and gave a clear recovery path when something failed.

The clinician could understand the result and move forward with more confidence.

~3–5s to nearest option

~3–5s to nearest option

Zero extra steps

Zero extra steps

Predictable behaviour

Predictable behaviour

Workflow-Level Impact

Workflow-Level Impact

At the scale of hundreds of One off nominated pharmacy searches per practice per week, eliminating retry loops and reducing scan time translates to meaningful recovery of clinician time in high-pressure workflows — and lower risk of delayed prescriptions.

At the scale of hundreds of One off nominated pharmacy searches per practice per week, eliminating retry loops and reducing scan time translates to meaningful recovery of clinician time in high-pressure workflows — and lower risk of delayed prescriptions.

scenario PROMPTS

One-off Nomination Pharmacy (OON) isn't a convenience feature. It's used when something has gone wrong.

The three primary OON use cases — confirmed by clinical design group CDG — are all time-critical. This is not a workflow where a user can afford to retry, troubleshoot, or wait. Every design decision was stress-tested against the question: does this work when a clinician is under pressure, with a patient on the line?

The three primary OON use cases — confirmed by clinical design group CDG — are all time-critical. This is not a workflow where a user can afford to retry, troubleshoot, or wait. Every design decision was stress-tested against the question: does this work when a clinician is under pressure, with a patient on the line?

A clinician searching for an out-of-network pharmacy is not browsing. They are reacting to a specific situation — a patient call, a late-night emergency, a holiday prescription — in real time. Search failure in this context does not cause mild frustration. It can cause a delayed or missed prescription.

A clinician searching for an out-of-network pharmacy is not browsing. They are reacting to a specific situation — a patient call, a late-night emergency, a holiday prescription — in real time. Search failure in this context does not cause mild frustration. It can cause a delayed or missed prescription.

Scenario 01

Urgent or out-of-hours prescription: usual pharmacy unavailable

A patient needs medication urgently, but their usual pharmacy is closed or unavailable. The clinician needs to find a nearby pharmacy that is open within the relevant time window, without manually checking multiple places or cross-referencing opening hours.

A patient needs medication urgently, but their usual pharmacy is closed or unavailable. The clinician needs to find a nearby pharmacy that is open within the relevant time window, without manually checking multiple places or cross-referencing opening hours.

Goal

Help the clinician identify the closest suitable open pharmacy quickly and confidently.

Why this scenario matters

In urgent and out-of-hours prescribing, the risk is not just a slower search. It is delay, uncertainty, or choosing a less suitable pharmacy because the system does not make the safest next step clear.

DESIGN RESPONSE

Postcode first

Fastest way to start the search using available patient/location information.

Faster task start

Nearest open option first

Results are distance-sorted so the most practical pharmacy appears first.

Reduces manual scanning

Opening hours visible

opening status and hours are shown directly in the results.

Supports faster choice

Relevant timeframe only

Search returns pharmacies useful for the prescription window, not every possible pharmacy.

Keeps results actionable

Keeps results actionable

Why this mattered

In urgent prescribing situations, uncertainty can lead to delays, unnecessary retries, or selecting a less suitable pharmacy. The interface needed to make the safest next step obvious.

User Impact

Less uncertainty during urgent prescribing and fewer decisions made from incomplete information.

WoRKFLOW IMPACT

Fewer retries, less scanning, and a clearer path from search to pharmacy selection.

PRODUCT IMPACT

A search pattern that can scale into EMIS X with stronger defaults and clearer decision support.

Scenario 03

Patient away from Home - Holiday patient: no local postcode, patient on the phone

A patient is away from home and needs an urgent prescription, but they do not know the local postcode. They can describe the area, a nearby street, or the pharmacy name they can see.

A patient is away from home and needs an urgent prescription, but they do not know the local postcode. They can describe the area, a nearby street, or the pharmacy name they can see.

Goal

Help the clinician find a suitable pharmacy using location clues or a recognisable pharmacy name, without forcing the patient to provide a postcode.

Help the clinician find a suitable pharmacy using location clues or a recognisable pharmacy name, without forcing the patient to provide a postcode.

DESIGN RESPONSE

Make address search easy to discover

Street and town fields are available as a clear alternative when postcode is not known. This gives clinicians another way to search using the information the patient can actually provide.

Prevents postcode from becoming a dead end

Support partial pharmacy name search

Support partial pharmacy name search

If the patient says “I can see a Boots nearby”, the clinician should not need the exact branch name. Partial pharmacy names help return recognizable options quickly.

Turns vague information into useful results

Keep the journey usable without postcode

The flow should not rely on postcode as the only successful path. Address and name search remain available so the clinician can recover when the patient has limited location details.

Keeps the clinician moving forward

Why Recovery matters

In this scenario, the patient is relying on the clinician to work with incomplete information. If postcode becomes the only path forward, the journey breaks down. The search experience needs to provide alternative ways to recover and continue safely.

Design principle applied

Design for graceful recovery. When the ideal input is missing, the system should still offer a clear next path instead of making the clinician start again.

Design for graceful recovery. When the ideal input is missing, the system should still offer a clear next path instead of making the clinician start again.

constraints

The interface looked simple, but the behaviour underneath was fragmented.

The interface looked simple, but the behaviour underneath was fragmented.

Before exploring design options, I worked with Product and Engineering to understand the practical constraints surrounding pharmacy search. These constraints shaped what could be delivered and helped focus the design effort on changes that would have the greatest impact.

Before exploring design options, I worked with Product and Engineering to understand the practical constraints surrounding pharmacy search. These constraints shaped what could be delivered and helped focus the design effort on changes that would have the greatest impact.

No analytics

No analytics

No reliable data on search behaviour or error frequency.

No reliable data on search behaviour or error frequency.

Legacy parity

Legacy parity

OON needed to align with existing Primary Nomination patterns.

OON needed to align with existing Primary Nomination patterns.

API limits

API limits

Postcode lookup capability was inconsistent across products.

Postcode lookup capability was inconsistent across products.

Failure detection

Failure detection

Some failures were only visible after a search attempt.

Some failures were only visible after a search attempt.

DESIGN PRINCIPLES

P1 — Consistency

P1 — Consistency

Match Primary Nomination patterns wherever possible.

Match Primary Nomination patterns wherever possible.

Match Primary Nomination patterns wherever possible.

P2 — Urgency Awareness

P2 — Urgency Awareness

Reduce effort & surface the most actionable option first.

Reduce effort & surface the most actionable option first.

Reduce effort & surface the most actionable option first.

P3 — Graceful Recovery

P3 — Graceful Recovery

Ensure failures always have a clear next step.

Ensure failures always have a clear next step.

P4 — Minimal Change

P4 — Minimal Change

Change only what the problem required.

Change only what the problem required.

ERROR STRATEGY

Designing for failure, not just the happy path.

Pharmacy search depended on more than one service, so not every failure meant the same thing. Some issues could be corrected by the clinician. Some meant only postcode lookup was unavailable. Others meant search could not continue at all.

I simplified the error strategy around one practical question:

Pharmacy search depended on more than one service, so not every failure meant the same thing. Some issues could be corrected by the clinician. Some meant only postcode lookup was unavailable. Others meant search could not continue at all.

I simplified the error strategy around one practical question:

What can the clinician still do next?

What can the clinician still do next?

User correctable

Invalid postcode

The search input is the issue. The clinician needs clear feedback and an immediate route to try address or pharmacy name instead.

The search input is the issue. The clinician needs clear feedback and an immediate route to try address or pharmacy name instead.

Partial recovery

Postcode lookup unavailable

One service is down, but the task can still continue through address or name search. Progress should be preserved.

One service is down, but the task can still continue through address or name search. Progress should be preserved.

No search possible

Search service unavailable

No digital search route is available. The interface needs to be honest, explain the failure, and guide clinicians to safe alternatives.

No digital search route is available. The interface needs to be honest, explain the failure, and guide clinicians to safe alternatives.

Recovery model applied to the interface

Scenario 1

Invalid Postcode

User Correctable

Design response

The issue is recoverable, so the UI should not make the clinician feel the service has failed. The message explains the input problem and points to the next useful search route.

The issue is recoverable, so the UI should not make the clinician feel the service has failed. The message explains the input problem and points to the next useful search route.

Clear recovery

Clear recovery

Input issue, not system failure

Input issue, not system failure

Redirects to address or name search

Redirects to address or name search

Scenario 2

Scenario 2

Postcode lookup unavailable

Postcode lookup unavailable

Postcode lookup unavailable

Partial recovery · inline banner

The Postcode search is currently unavailable

The Postcode search is currently unavailable

The Postcode search is currently unavailable

Try again later, or issue an EPS - Any Pharmacy or printed prescription instead. If this problem persists, contact Optum Help Centre.

Design response

The service is degraded, not fully broken. The postcode stays visible, entered information is not cleared, and the clinician can continue using the search paths that still work.

The service is degraded, not fully broken. The postcode stays visible, entered information is not cleared, and the clinician can continue using the search paths that still work.

Postcode is kept

Postcode is kept

Address and name still work

Address and name still work

No false full-service failure

No false full-service failure

Scenario 3

Scenario 3

Pharmacy search service unavailable

Pharmacy search service unavailable

Operational fallback

The pharmacy search service is currently unavailable.

The pharmacy search service is currently unavailable.

Try again later, or issue an EPS - Any Pharmacy or printed prescription instead. If this problem persists, contact Optum Help Centre.

Try again later, or issue an EPS - Any Pharmacy or printed prescription instead. If this problem persists, contact Optum Help Centre.

Design response

When search cannot continue, the interface should stop implying recovery through another input. It needs to clearly state the system issue and make the safest next step visible.

When search cannot continue, the interface should stop implying recovery through another input. It needs to clearly state the system issue and make the safest next step visible.

System issue

System issue

Search cannot continue

Search cannot continue

Safe next step is still visible

Safe next step is still visible

What changed

The experience moved from silent failure to guided recovery. Each error state was designed around the clinician's next possible action, not around the technical reason the service failed.

The experience moved from silent failure to guided recovery. Each error state was designed around the clinician's next possible action, not around the technical reason the service failed.

DESIGN DECISIONS

Every design choice had to balance urgency, familiarity, and feasibility.

Tension

Tension

Resolution

Resolution

Friction Removed

Friction Removed

Postcode reordered to first position

Postcode reordered to first position

Interaction cost reduction

Urgent Context

The existing screen prioritised Pharmacy Name, but clinicians typically started their search with a postcode. In urgent prescribing situations, even small interaction costs can slow down a task that needs to be completed quickly.

The existing screen prioritised Pharmacy Name, but clinicians typically started their search with a postcode. In urgent prescribing situations, even small interaction costs can slow down a task that needs to be completed quickly.

Tension

I moved Postcode to the first position and placed focus on the field when the dialog opened. Where available, the patient’s registered postcode was pre-populated, allowing clinicians to start searching immediately.

I moved Postcode to the first position and placed focus on the field when the dialog opened. Where available, the patient’s registered postcode was pre-populated, allowing clinicians to start searching immediately.

Resolution

Clinicians could begin searching without additional clicks or unnecessary input. The workflow aligned more closely with real-world behaviour and helped them find the right pharmacy faster.

Clinicians could begin searching without additional clicks or unnecessary input. The workflow aligned more closely with real-world behaviour and helped them find the right pharmacy faster.

~15s saved per OON search

~15s saved per OON search

Friction removed

Address search visible, not dominant

Address search visible, not dominant

Primary Nomination parity vs. cognitive load

Platform Parity

Most clinicians searched using a postcode, so showing extra address fields by default risked adding unnecessary complexity. But hiding address search completely made it harder to support patients who did not know their postcode.

Most clinicians searched using a postcode, so showing extra address fields by default risked adding unnecessary complexity. But hiding address search completely made it harder to support patients who did not know their postcode.

Tension

Address search remained visible but secondary to the primary postcode workflow. This kept the interface focused while ensuring alternative search paths were easy to discover when needed.

Address search remained visible but secondary to the primary postcode workflow. This kept the interface focused while ensuring alternative search paths were easy to discover when needed.

Resolution

Clinicians could quickly switch to address-based search when a postcode was not available, without disrupting the experience for users who relied on postcode as their primary search method.

Clinicians could quickly switch to address-based search when a postcode was not available, without disrupting the experience for users who relied on postcode as their primary search method.

Zero additional engineering spend

Resolution

KEY DESIGN TRADE-OFFS

Every significant design decision was evaluated against clinical urgency, platform consistency, technical feasibility, and delivery risk.

Every significant design decision was evaluated against clinical urgency, platform consistency, technical feasibility, and delivery risk.

Proposal

Proposal

DECISION

DECISION

Replaced by

Replaced by

Postcode Lookup

Postcode Lookup

Postcode Lookup

Proposal

Rejected

Rejected

DECISION

Engineering confirmed postcode lookup capability was inconsistent across EMIS products and would create parity issues with existing prescribing workflows.

Engineering confirmed postcode lookup capability was inconsistent across EMIS products and would create parity issues with existing prescribing workflows.

REPLACED BY

Disable Search When Service Fails

Disable Search When Service Fails

Disable Search When Service Fails

Proposal

DECISION

Rejected

Rejected

Service failures could only be detected after a search attempt. Proactively disabling the interface would create a misleading experience.

Service failures could only be detected after a search attempt. Proactively disabling the interface would create a misleading experience.

REPLACED BY

Auto Search On Dialog Open

Auto Search On Dialog Open

Proposal

DECISION

Rejected

Rejected

Increased API usage, introduced unnecessary network calls, and risked returning irrelevant results before the clinician had entered context.

Increased API usage, introduced unnecessary network calls, and risked returning irrelevant results before the clinician had entered context.

replaced by

Postcode First

Postcode First

Accepted

Accepted

Clinical Design Group confirmed postcode was the most common starting point during urgent prescribing scenarios.

Clinical Design Group confirmed postcode was the most common starting point during urgent prescribing scenarios.

Opening Hours Inline

Opening Hours Inline

Accepted

Accepted

Removed the need for clinicians to cross-check opening times outside the workflow.

Removed the need for clinicians to cross-check opening times outside the workflow.

Address + Name Search Retained

Address + Name Search Retained

Accepted

Accepted

Supported recovery when postcode information was unavailable or incomplete.

Supported recovery when postcode information was unavailable or incomplete.

Outcome

Outcome

This decision log became a shared reference across Product, Engineering, Clinical Design Group, and Content reviews. Rather than debating individual UI elements, discussions focused on trade-offs, risks, and the safest path to delivery within existing platform constraints.

This decision log became a shared reference across Product, Engineering, Clinical Design Group, and Content reviews. Rather than debating individual UI elements, discussions focused on trade-offs, risks, and the safest path to delivery within existing platform constraints.