Resolving an impossible problem
Finding a solution to a crucial problem that can't be solved
Connecting to users’ investment accounts was essential for the system. Imagine you have 50 securities and make trades every month. It would be painful to update this information manually.
Meanwhile, the portfolio connection success rate was terrible. The probability of a successful connection was less than 50%. Considering an average user has three accounts, a connection failure was guaranteed, as was users’ disappointment, incredulity, and frustration.
Since it was physically impossible to influence the connection process itself, I focused on the only thing I could change: users' recovery rate from an unsuccessful connection.
The connection error recovery rate was just 22%, meaning 78% of people dropped off after experiencing the problem.

Handling errors
First, I checked all possible errors, selected those a user could influence, and structured them. Then, I created a group of modals customized for every problem.

Modals turned out to be more or less similar. Meanwhile, implementing nine different versions would significantly increase the code's complexity at the moment (the complexity would be multiplied in the future). That's why I unified all modals into one.

The unified modal improved the recovery rate to 41% (+19pp).
Since I aimed for an 80% recovery rate, the result was far from perfect. I explored different directions for further improvement:
Adding more options
Adding more explanatory text
Adding ultra-short videos
User survey indicated that the first variant was the least confusing.

The evolved modal improved the recovery rate to 57% (+16pp).
On my way to this point, I dropped ideas implemented in the first version. To improve the rate, I combined ideas from the first and the second improvement iterations.

The combined modal improved the recovery rate to 64% (+7pp).
The modal got cluttered at this point, so I explored different variants of visual hierarchy improvement.

The cleaned modal didn't improve the recovery rate.
Actually, connection errors were only a part of a larger scope of various issues that prevented a user from connecting a portfolio:
Corrupted data from financial institutions
Financial institutions' maintenance
Extra action requirement for different browsers
Incognito browser mode restrictions
The connection functionality was getting more and more complex.



All error handling allowed to increase the recovery rate to 70%.
Sadly, that was still far from perfect. The most frustrating thing was that the rate didn't improve further, no matter what the engineers or I did. While adding more logic for handling errors would inevitably lead to bugs, errors, and collisions.
At this moment, I've got an idea: If you can't fix a problem, take an entirely different approach.

Alternative approaches
Improve alternative solutions visibility
It is possible to reduce cost of an error if there are simple are easily accessible alternative ways to solve the problem. That's why file upload and manual input became a new improvement focus.

This approach became a breakthrough and allowed to increase the recovery rate to 75%.
Improve the connection modal
Clear available options (all of them are together)
More straightforward logic (search and popular institutions are equal)
Simple layout (a single column)
Simpler texts


Improve the manual portfolio upload
Recently appeared LLMs, allowed to make this modal extremely simple. However, I faced an unexpected barrier: the input interface was too simple and too flexible. Users were comfortable with old-style complex input interfaces but were confused by free-form input.
People are so used to strict restrictions on input data that they are completely lost when an LLM can parse anything they enter.
It took five iterations of stand-alone test prototypes to find a coherent solution.

Results
Unfortunately, I didn't have enough time to test and implement all my ideas, like auto-reconnection in case of an error, special handling of VIP users, etc.
Nevertheless, after many experiments, the account connection flow stopped generating negative feedback, which was a huge win.