1 in 4 users hit a failure in the core flow. Most never recovered. An analytics-driven redesign of error states, guidance, and station eligibility filtering.

Role: Product Designer - UX Research
Period: April 2026
Platform: iOS · Android
Sample: ~52,000 users · 10 days
Fattura 1 Click is the primary feature of the Eni Station app — it lets drivers request an electronic invoice directly after refueling by scanning their receipt. It's not a secondary feature. It's the reason a significant portion of users download the app.
The support team was receiving a high volume of tickets, but no one had mapped exactly where in the flow users were breaking down, or why. We ran a 10-day behavioral analytics study on ~52,000 active users across iOS and Android to find out whether this was a technical problem, a communication problem, or a design problem.
It turned out to be all three — but mostly design.
Projected monthly, the ~915 tickets in 10 days translate to roughly 2,700 per month — each requiring 5 to 10 minutes of agent time. More importantly, every abandoned flow was a failed product experience for a user who had a legitimate need.

The customer journey map showed a clear pattern: the flow functioned well until the receipt scan step. Once a user hit a receipt error, recovery was nearly impossible — not because the app offered no path forward, but because the paths it offered were confusing, incomplete, or led immediately to a support request.

Drop-off chain
Of users who tried to manually enter their data after a receipt error, only 28% successfully sent the invoice. The other 72% either hit another error or gave up.

Where support requests originated

The data pointed to three distinct and addressable root causes. Each was generating a disproportionate share of tickets and could be resolved without changing backend logic.

ROOT CAUSE 01
Support was too easy to reach
Data:
At every critical failure point — receipt scan error, PV not found, authorization code mismatch — the UI prominently displayed a "Contatta assistenza" button. The intent was to help. The effect was to short-circuit any attempt at self-resolution.
Users who hit an error saw three things: a verbose explanation of what went wrong, two links to try to fix it themselves, and a large, visually prominent support CTA. Most clicked the CTA. The self-help options were there — they just weren't being chosen.
The paradox: making support easier to reach was generating more support requests, not fewer. Users weren't asking for help because they needed it — they were asking because the design suggested they should.

ROOT CAUSE 02
Errors explained what happened, not what to do
Data:
When a receipt scan failed, the error screen presented a dense explanation of the technical failure, followed by a form asking users to manually enter their PV code, authorization code, terminal ID, date, time, and amount — all in one screen, with no step-by-step guidance.
Users weren't failing because the task was impossible. They were failing because the interface treated a high-cognitive-load recovery task as if it were self-evident. The form was designed for a user who already understood the system — not for someone in a parking lot, frustrated that their scan didn't work.
The solution wasn't simplification for its own sake — it was progressive disclosure. Show one problem at a time. Guide through each recovery step before moving to the next. Escalate to support only after all self-service options are exhausted.
ROOT CAUSE 03
Non-participating stations weren't filtered upfront

Data:
A significant share of errors came from users who had legitimately refueled — but at a station not enrolled in Fattura 1 Click. The app had no mechanism to communicate this before they began the flow. They scanned their receipt, got an error, tried manual entry, got another error, and contacted support — only to be told the station wasn't participating.
This is a solvable problem at the entry point, not the error state. The map already shows station locations. Adding a visual indicator for enrolled vs. non-enrolled stations, and surfacing a clear message when a scan points to a non-participating PV, would prevent these users from entering a flow that cannot succeed for them.

The map was being used as a fallback, not a feature.

Stat row

Nearly a third of map sessions were triggered from an error screen — users looking up a PV code after their scan failed. This confirmed that the manual entry flow was unclear enough that users needed to use the map as a reference tool mid-task.
~6,000 monthly address searches suggest that integrating Google Maps address search (estimated cost: $481/month) could improve station discoverability and reduce PV-related tickets — a hypothesis testable post-release with the same tracking infrastructure.

The underlying principle across all three proposals: self-resolution before escalation. Guide the user through recovery steps progressively, surface information at the right moment, reserve the support CTA for when it's truly the last resort.
PROPOSAL 01
Reduce support CTA visibility at critical failure points
Remove or visually demote "Contatta assistenza" from the primary action hierarchy in error states. Replace it with a structured self-help path. Only surface the support CTA after the user has attempted all self-resolution options.
This doesn't remove access to support — it reorders the choice architecture so that self-resolution is the natural first step, not an alternative to a prominent shortcut.
→ [before/after screens qui]
PROPOSAL 02
Progressive disclosure for manual data entry
Break the manual entry form into sequential steps. When a scan fails, show one recovery option at a time — starting with retry scan before presenting manual entry. When manual entry is required, guide the user through each field individually with contextual help, rather than presenting the full form at once.
Error messaging should shift from descriptive ("the code doesn't match any receipt") to directive ("check the 8-digit code printed below the station logo on your receipt").

PROPOSAL 03
Surface station eligibility before the flow begins
Add a visual indicator on the map to distinguish enrolled vs. non-enrolled stations. When a scan points to a non-participating station, surface a clear early-exit message before the user attempts manual entry — explaining that the service isn't available at this location and what their alternatives are.
This eliminates an entire ticket category: users who never could have succeeded, but spent time and patience trying anyway.
→ [before/after screens qui]
Measurable outcomes, not assumptions
Each proposal targets a specific and quantified source of tickets. Post-implementation, success will be measured against a 30-day baseline using the same behavioral tracking used in this analysis.
Impact items
The instinct when users struggle is to make help easier to find. This project showed the opposite can be true: when support is the path of least resistance, users take it — even when they could have solved the problem themselves. Good error design isn't about explaining failure. It's about engineering recovery.
Fattura 1 Click is the primary feature of the Eni Station app — it lets drivers request an electronic invoice directly after refueling by scanning their receipt. It's not a secondary feature. It's the reason a significant portion of users download the app.
The support team was receiving a high volume of tickets, but no one had mapped exactly where in the flow users were breaking down, or why. We ran a 10-day behavioral analytics study on ~52,000 active users across iOS and Android to find out whether this was a technical problem, a communication problem, or a design problem.
It turned out to be all three — but mostly design.
Projected monthly, the ~915 tickets in 10 days translate to roughly 2,700 per month — each requiring 5 to 10 minutes of agent time. More importantly, every abandoned flow was a failed product experience for a user who had a legitimate need.

The customer journey map showed a clear pattern: the flow functioned well until the receipt scan step. Once a user hit a receipt error, recovery was nearly impossible — not because the app offered no path forward, but because the paths it offered were confusing, incomplete, or led immediately to a support request.

Drop-off chain
Of users who tried to manually enter their data after a receipt error, only 28% successfully sent the invoice. The other 72% either hit another error or gave up.

Where support requests originated

The data pointed to three distinct and addressable root causes. Each was generating a disproportionate share of tickets and could be resolved without changing backend logic.

ROOT CAUSE 01
Support was too easy to reach
Data:
At every critical failure point — receipt scan error, PV not found, authorization code mismatch — the UI prominently displayed a "Contatta assistenza" button. The intent was to help. The effect was to short-circuit any attempt at self-resolution.
Users who hit an error saw three things: a verbose explanation of what went wrong, two links to try to fix it themselves, and a large, visually prominent support CTA. Most clicked the CTA. The self-help options were there — they just weren't being chosen.
The paradox: making support easier to reach was generating more support requests, not fewer. Users weren't asking for help because they needed it — they were asking because the design suggested they should.

ROOT CAUSE 02
Errors explained what happened, not what to do
Data:
When a receipt scan failed, the error screen presented a dense explanation of the technical failure, followed by a form asking users to manually enter their PV code, authorization code, terminal ID, date, time, and amount — all in one screen, with no step-by-step guidance.
Users weren't failing because the task was impossible. They were failing because the interface treated a high-cognitive-load recovery task as if it were self-evident. The form was designed for a user who already understood the system — not for someone in a parking lot, frustrated that their scan didn't work.
The solution wasn't simplification for its own sake — it was progressive disclosure. Show one problem at a time. Guide through each recovery step before moving to the next. Escalate to support only after all self-service options are exhausted.
ROOT CAUSE 03
Non-participating stations weren't filtered upfront

Data:
A significant share of errors came from users who had legitimately refueled — but at a station not enrolled in Fattura 1 Click. The app had no mechanism to communicate this before they began the flow. They scanned their receipt, got an error, tried manual entry, got another error, and contacted support — only to be told the station wasn't participating.
This is a solvable problem at the entry point, not the error state. The map already shows station locations. Adding a visual indicator for enrolled vs. non-enrolled stations, and surfacing a clear message when a scan points to a non-participating PV, would prevent these users from entering a flow that cannot succeed for them.

The map was being used as a fallback, not a feature.

Stat row

Nearly a third of map sessions were triggered from an error screen — users looking up a PV code after their scan failed. This confirmed that the manual entry flow was unclear enough that users needed to use the map as a reference tool mid-task.
~6,000 monthly address searches suggest that integrating Google Maps address search (estimated cost: $481/month) could improve station discoverability and reduce PV-related tickets — a hypothesis testable post-release with the same tracking infrastructure.

The underlying principle across all three proposals: self-resolution before escalation. Guide the user through recovery steps progressively, surface information at the right moment, reserve the support CTA for when it's truly the last resort.
PROPOSAL 01
Reduce support CTA visibility at critical failure points
Remove or visually demote "Contatta assistenza" from the primary action hierarchy in error states. Replace it with a structured self-help path. Only surface the support CTA after the user has attempted all self-resolution options.
This doesn't remove access to support — it reorders the choice architecture so that self-resolution is the natural first step, not an alternative to a prominent shortcut.
→ [before/after screens qui]
PROPOSAL 02
Progressive disclosure for manual data entry
Break the manual entry form into sequential steps. When a scan fails, show one recovery option at a time — starting with retry scan before presenting manual entry. When manual entry is required, guide the user through each field individually with contextual help, rather than presenting the full form at once.
Error messaging should shift from descriptive ("the code doesn't match any receipt") to directive ("check the 8-digit code printed below the station logo on your receipt").

PROPOSAL 03
Surface station eligibility before the flow begins
Add a visual indicator on the map to distinguish enrolled vs. non-enrolled stations. When a scan points to a non-participating station, surface a clear early-exit message before the user attempts manual entry — explaining that the service isn't available at this location and what their alternatives are.
This eliminates an entire ticket category: users who never could have succeeded, but spent time and patience trying anyway.
→ [before/after screens qui]
Measurable outcomes, not assumptions
Each proposal targets a specific and quantified source of tickets. Post-implementation, success will be measured against a 30-day baseline using the same behavioral tracking used in this analysis.
Impact items
The instinct when users struggle is to make help easier to find. This project showed the opposite can be true: when support is the path of least resistance, users take it — even when they could have solved the problem themselves. Good error design isn't about explaining failure. It's about engineering recovery.
Fattura 1 Click is the primary feature of the Eni Station app — it lets drivers request an electronic invoice directly after refueling by scanning their receipt. It's not a secondary feature. It's the reason a significant portion of users download the app.
The support team was receiving a high volume of tickets, but no one had mapped exactly where in the flow users were breaking down, or why. We ran a 10-day behavioral analytics study on ~52,000 active users across iOS and Android to find out whether this was a technical problem, a communication problem, or a design problem.
It turned out to be all three — but mostly design.
Projected monthly, the ~915 tickets in 10 days translate to roughly 2,700 per month — each requiring 5 to 10 minutes of agent time. More importantly, every abandoned flow was a failed product experience for a user who had a legitimate need.

The customer journey map showed a clear pattern: the flow functioned well until the receipt scan step. Once a user hit a receipt error, recovery was nearly impossible — not because the app offered no path forward, but because the paths it offered were confusing, incomplete, or led immediately to a support request.

Drop-off chain
Of users who tried to manually enter their data after a receipt error, only 28% successfully sent the invoice. The other 72% either hit another error or gave up.

Where support requests originated

The data pointed to three distinct and addressable root causes. Each was generating a disproportionate share of tickets and could be resolved without changing backend logic.

ROOT CAUSE 01
Support was too easy to reach
Data:
At every critical failure point — receipt scan error, PV not found, authorization code mismatch — the UI prominently displayed a "Contatta assistenza" button. The intent was to help. The effect was to short-circuit any attempt at self-resolution.
Users who hit an error saw three things: a verbose explanation of what went wrong, two links to try to fix it themselves, and a large, visually prominent support CTA. Most clicked the CTA. The self-help options were there — they just weren't being chosen.
The paradox: making support easier to reach was generating more support requests, not fewer. Users weren't asking for help because they needed it — they were asking because the design suggested they should.

ROOT CAUSE 02
Errors explained what happened, not what to do
Data:
When a receipt scan failed, the error screen presented a dense explanation of the technical failure, followed by a form asking users to manually enter their PV code, authorization code, terminal ID, date, time, and amount — all in one screen, with no step-by-step guidance.
Users weren't failing because the task was impossible. They were failing because the interface treated a high-cognitive-load recovery task as if it were self-evident. The form was designed for a user who already understood the system — not for someone in a parking lot, frustrated that their scan didn't work.
The solution wasn't simplification for its own sake — it was progressive disclosure. Show one problem at a time. Guide through each recovery step before moving to the next. Escalate to support only after all self-service options are exhausted.
ROOT CAUSE 03
Non-participating stations weren't filtered upfront

Data:
A significant share of errors came from users who had legitimately refueled — but at a station not enrolled in Fattura 1 Click. The app had no mechanism to communicate this before they began the flow. They scanned their receipt, got an error, tried manual entry, got another error, and contacted support — only to be told the station wasn't participating.
This is a solvable problem at the entry point, not the error state. The map already shows station locations. Adding a visual indicator for enrolled vs. non-enrolled stations, and surfacing a clear message when a scan points to a non-participating PV, would prevent these users from entering a flow that cannot succeed for them.

The map was being used as a fallback, not a feature.

Stat row

Nearly a third of map sessions were triggered from an error screen — users looking up a PV code after their scan failed. This confirmed that the manual entry flow was unclear enough that users needed to use the map as a reference tool mid-task.
~6,000 monthly address searches suggest that integrating Google Maps address search (estimated cost: $481/month) could improve station discoverability and reduce PV-related tickets — a hypothesis testable post-release with the same tracking infrastructure.

The underlying principle across all three proposals: self-resolution before escalation. Guide the user through recovery steps progressively, surface information at the right moment, reserve the support CTA for when it's truly the last resort.
PROPOSAL 01
Reduce support CTA visibility at critical failure points
Remove or visually demote "Contatta assistenza" from the primary action hierarchy in error states. Replace it with a structured self-help path. Only surface the support CTA after the user has attempted all self-resolution options.
This doesn't remove access to support — it reorders the choice architecture so that self-resolution is the natural first step, not an alternative to a prominent shortcut.
→ [before/after screens qui]
PROPOSAL 02
Progressive disclosure for manual data entry
Break the manual entry form into sequential steps. When a scan fails, show one recovery option at a time — starting with retry scan before presenting manual entry. When manual entry is required, guide the user through each field individually with contextual help, rather than presenting the full form at once.
Error messaging should shift from descriptive ("the code doesn't match any receipt") to directive ("check the 8-digit code printed below the station logo on your receipt").

PROPOSAL 03
Surface station eligibility before the flow begins
Add a visual indicator on the map to distinguish enrolled vs. non-enrolled stations. When a scan points to a non-participating station, surface a clear early-exit message before the user attempts manual entry — explaining that the service isn't available at this location and what their alternatives are.
This eliminates an entire ticket category: users who never could have succeeded, but spent time and patience trying anyway.
→ [before/after screens qui]
Measurable outcomes, not assumptions
Each proposal targets a specific and quantified source of tickets. Post-implementation, success will be measured against a 30-day baseline using the same behavioral tracking used in this analysis.
Impact items
The instinct when users struggle is to make help easier to find. This project showed the opposite can be true: when support is the path of least resistance, users take it — even when they could have solved the problem themselves. Good error design isn't about explaining failure. It's about engineering recovery.