Morrisons: Fresh Code Check
Improving food safety and reducing waste through digital expiry checks
Overview
Fresh Code Check is a mobile tool used by Morrisons store colleagues to manage expiry date checks across fresh food departments.
It replaced a manual, paper-based process that was inconsistent, time-consuming, and exposed the business to compliance risks.
The app created a faster, more reliable way to check, log, and act on products nearing expiry — improving compliance and visibility across stores.
My Role
I was the UX Designer responsible for the full design process — from research and discovery through to prototyping, testing in stores, and development handover.
I worked closely with business stakeholders, subject matter experts, and store colleagues to make sure the design fit seamlessly into daily workflows.
The Challenge
Store colleagues were using handwritten logbooks to record expiry checks.
These were often incomplete, backdated, or missing entirely — making it hard to prove compliance and increasing waste and labour costs.
The problems:
Colleagues lost track when interrupted mid-check
Some products were checked unnecessarily, others missed
No visibility of completion rates or compliance status
Legal and financial risks from expired products on sale
“If I get pulled away, I don’t know where I left off.” – Liam, Fresh Produce
Key Insights
Through in-store research and observation, we found:
The process broke easily under real working conditions
Staff needed flexibility to adapt to interruptions
Managers needed clearer visibility into task completion
Speed and accuracy mattered more than rigid structure
These insights shaped our approach to simplify the process and design for how colleagues actually work in a busy store environment.
Design Process
Task-based vs List-based Checks
We tested two methods for completing checks.
List-based (Store-walk-order): Guided colleagues through every product in a set order.
Task-based: Organised checks by aisle and department instead of individual products.
Testing showed the task-based approach was faster, reduced errors, and felt more natural.
The store-walk-order model was later repurposed for alerts and critical checks, where precision was essential.
Designing for Interruptions
Colleagues are often pulled away mid-task.
To support this, we added:
Aisle-level progress tracking
Automatic saves
Resume prompts for incomplete work
These updates reduced frustration and ensured checks were actually completed rather than restarted from scratch.
Integrating Wastage & Markdown
We integrated wastage actions directly into the Fresh Code Check flow, letting colleagues record waste on the spot without switching apps.
This reduced duplicate entries and created better visibility across systems.
Markdown integration was also designed but postponed due to resource constraints in another team.
Outcomes
Fresh Code Check delivered significant improvements across speed, accuracy, and compliance.
Business impact:
£2 million saved in labour costs
Prevented 12 potential local authority prosecutions
Strengthened visibility and due diligence across stores
User impact:
Faster, simpler process
Reduced manual entry and errors
Clear task tracking and confidence in completion
Lessons Learned
Design for real-world conditions, not ideal workflows
Early in-context testing ensures adoption
Dependencies can shape delivery — stay adaptable
Integrating related processes creates broader value
Reflection
Fresh Code Check is one of those projects that shows how thoughtful design can have real operational and financial impact.
It taught me the importance of designing for context — creating tools that not only solve problems on paper but genuinely make people’s work easier day-to-day.