User Experience Fix: Better Error Messages

Date: November 17, 2025 Issue: Generic error messages after refactoring Impact: Users couldn’t understand why analysis was failing


Problem Description

After the refactoring, users were seeing a generic error message:

“Analysis could not be completed. Please check your parameters and data.”

This message appeared even when the issue was simple (e.g., missing ΔI value) and didn’t tell users what to fix.

Why This Happened

The refactoring introduced a template method (_trigger_analysis) that centralizes error handling. When _execute_core_analysis returns None, the template method shows a generic error message.

Before Refactoring:

  • Each analysis method showed specific, helpful error messages

  • Example: “Please provide a non-zero ΔI value”

  • Users knew exactly what to fix

After Refactoring (Initial):

  • _execute_core_analysis returned None silently

  • Template method showed generic error

  • Users didn’t know what was wrong


The Fix

Updated _execute_core_analysis in rin_tab.py to set user-friendly status messages before returning None.

Code Changes

Location: src/Synaptipy/application/gui/analysis_tabs/rin_tab.py

Change 1 - Missing ΔI value (line 1257):

# Before:
if not delta_i_pa or np.isclose(delta_i_pa, 0.0):
 log.warning("_execute_core_analysis: Missing or zero delta_i_pa")
 return None # No user feedback

# After:
if not delta_i_pa or np.isclose(delta_i_pa, 0.0):
 log.warning("_execute_core_analysis: Missing or zero delta_i_pa")
 self.status_label.setText("Status: Please provide a non-zero ΔI value.") # Clear message
 return None

Change 2 - Missing ΔV value (line 1290):

# Before:
if not delta_v_mv or np.isclose(delta_v_mv, 0.0):
 log.warning("_execute_core_analysis: Missing or zero delta_v_mv")
 return None # No user feedback

# After:
if not delta_v_mv or np.isclose(delta_v_mv, 0.0):
 log.warning("_execute_core_analysis: Missing or zero delta_v_mv")
 self.status_label.setText("Status: Please provide a non-zero ΔV value.") # Clear message
 return None

Change 3 - Missing windows (line 1248):

# Before:
if not baseline_window or not response_window:
 log.warning("_execute_core_analysis: Missing baseline/response windows")
 return None # No user feedback

# After:
if not baseline_window or not response_window:
 log.warning("_execute_core_analysis: Missing baseline/response windows")
 self.status_label.setText("Status: Please set baseline and response windows.") # Clear message
 return None

User Experience Comparison

Before Fix

  1. User adds file to analysis

  2. User clicks in Rin tab

  3. User tries to run analysis

  4. Popup: “Analysis could not be completed. Please check your parameters and data.”

  5. User: “What parameter? What’s wrong?”

After Fix

  1. User adds file to analysis

  2. User clicks in Rin tab

  3. User tries to run analysis

  4. Status Label: “Status: Please provide a non-zero ΔI value.”

  5. User: “Oh, I need to enter the ΔI value!”


How to Use Rin Analysis

For users who see “Please provide a non-zero ΔI value”:

Voltage Clamp Mode

  1. Load your file

  2. Add to analysis

  3. Go to Rin tab

  4. Enter the ΔI value (current step size) in the ΔI spinbox

  5. Set baseline and response windows (interactive or manual)

  6. Click Run or wait for auto-analysis

Current Clamp Mode

  1. Load your file

  2. Add to analysis

  3. Go to Rin tab

  4. Enter the ΔV value (voltage step size) in the ΔV spinbox

  5. Set baseline and response windows (interactive or manual)

  6. Click Run or wait for auto-analysis


Technical Notes

Design Pattern

This fix follows the Fail-Fast with Feedback pattern:

  1. Detect the error condition early

  2. Provide specific, actionable feedback to the user

  3. Return early to avoid cascading errors

Why Not Remove the Generic Error?

The generic error popup (from _trigger_analysis) is still useful for:

  • Unexpected errors (exceptions)

  • Cases where subclasses don’t set specific messages

  • Acts as a safety net for unknown issues

The specific status messages are the first line of defense, and the generic popup is the fallback.


Verification

All tests pass (12/12) File compiles without errors No linting issues User-friendly error messages now display Generic popup still appears as fallback


Recommendations for Future Tabs

When implementing _execute_core_analysis in any analysis tab:

  1. Always set self.status_label with a helpful message before returning None

  2. Be specific about what the user needs to fix

  3. Use action-oriented language (“Please provide…”, “Please set…”)

  4. Test the error path to ensure messages display correctly


Status: FIXED AND VERIFIED