Yorkshire Building Society Design Failings

Here at Storycase we’ve been involved in digital transformation programmes for both the private and public sector. Working with several of industry’s best architects and designers we understand what’s needed to deliver a service that meets the customer’s needs without costing the earth.

With this lens we’re posting a series of articles to highlight failings we’ve found while using digital services. The intention is to name and shame – not maliciously but to put pressure on organisations to change the way they operate – and to deliver services that work.

Yorkshire Building Society – YBS Internal Transfer Problems

As bank and building society branches close we’ve come to rely on apps for our daily financial transactions. When apps do not work as expected we justifiably get annoyed and the stress levels in our daily lives are raised. So what went wrong at YBS and their app?

With increasing inflation rate here in the UK, like many customers with some cash savings we need to move money between accounts and providers seeking best interest rates. Larger banks and some building societies notoriously delay or fail to pass on bank base rate increases to savers while immediately hiking mortgage rates. Building societies create new account variants that pay higher interest and fail to pass on rate hikes on older accounts penalising existing customers who fail to act.

Profit’s lie in the difference between deposits they receive from customers and the money providers lend so it’s no surprise that their savings accounts and business processes are designed to maximise profits.

Customers need to open new accounts chasing the best rates and move funds from one account to another. So there’s an incentive for providers to make it difficult to do this and let fiscal drag increase revenue.

My use case with YBS was to simply transfer funds from a savings account to another savings provider. We may well close the accounts if the issues highlighted are not addressed but that’s another story.

Step 1 – transfer between internal accounts

Each new account needs a separate third-party payee set up if you want to transfer funds out. This involves managing payees and entering the external account name and details but needs verifying with a small amount before sending larger sums so we’d not done this on the new account. As we had already set up the correct payee for an older account, where the rates had plummeted, we needed to do an internal transfer between accounts.

When the YBS app starts up it shows the balance on each account so it’s easy to see which account has the funds that need moving.

I begin by using the app to transfer funds internally from account A to account B. Using Transfers this is easy as the internal accounts show up when selecting the destination.

Step 2 – return to view account balances

On confirmation the app returns to the home screen and the balance for account A has decreased as expected but the balance for account B did not increase. When I click to view account B details the transfer transaction is not shown. Where has the money gone?

So I try closing the app and login again – I’m thinking maybe it’s poor design and a restart will refresh the account details. Still the home screen account balances don’t reflect the transfer between accounts – the money I transferred appears to have vanished. Clicking into account B the credit transaction does now show along with the revised account balance but it’s different to the balance on the home screen – it’s very confusing. So there is a data caching issue – I had to exit the app for it to refresh the transaction list – but why did the main account balance screen still fail to show the correct values?

Step 3 – attempt transfer out

So next I try to make the payment from account B to the external account that’s already set up and verified. I enter the amount and click confirm. I get an error message – There are insufficient funds in the account to make the payment!

Ouch. So I transfer funds internally and I can’t access the money I’ve just transferred. That’s not a good customer experience. I blocked – is it deliberate?

When apps or online journeys fail it’s often due to ‘security’ measures that providers have hastily put in place in response to scams and online fraud which has taken over from the bygone bank raid. In my case I don’t suspect it’s a deliberate act by YBS to stop me making the transfer as I see the account balances are incorrect. But I’m wondering why such a common journey has not been fully tested by YBS before releasing the app – after all they’ve had three years in which to get it right.

Step 4 – call YBS customer services

I call the support number and wait in a queue listening to distorted music and a voice telling me how YBS are very busy at the moment and it’s faster to carry out things online. I wait patently.

After ten minutes a real human answers and I explain the problem. They advise me to logout and wait 10 minutes. I explain I’ve done this while I’ve been waiting to speak to someone and am still seeing the message about insufficient funds. Well you will just have to wait longer they advise me again. I ask how long and am told as YBS is a building society their systems don’t work like banks and some accounts can take time for balances to show.

This raises an eyebrow or two and I ask if they know this why they don’t include a warning in the app to avoid customers panicking and having to call. I ask if they can see the transfer I’ve just made from their system to reassure me. They can and so I ask if they can make the payment instead as we’re set up for telephone banking. They do so successfully with no need to wait. I then ask for a compliant to be logged detailing the scenario.

Why should the customer be blocked from making a transfer when the funds are clearly present and the transfer can be made using an internal system?

What really annoyed me about the whole experience with YBS is the attitude to their customers. They know their systems don’t work and have a story to feed customers that obfuscates the truth. There’s no reason for a building society account to behave differently from a bank when moving monies between internal accounts. Clearly external transfers make suffer different constraints but this should not be used as an excuse for poor system design internally.

There’s no incentive for YBS to improve this experience because it’s literately in their interest to make it hard for customers to access money and move to better accounts.

To add insult to injury the reason we installed the YBS app was in response to a YBS Money Guide email to highlight the app’s benefits:

This month the YBS Savings app turns 3! Since we launched it in 2020, the app has continued to grow and develop. We now have over 300,000 registered users who continue to use it, and we are constantly looking to develop and add new features. Making it even easier to access your savings! If you haven’t already checked out our app, look at our guide for getting started.

YBS Money Guide email

Easier to access your savings? This means there’s over 300,000 customers that have or will find they can’t make the external payment they need if they follow this user journey. And they will end up calling the support number creating the high call volume. It’s a vicious circle where the customer ends up suffering due to incompetent system design.

Lessons learned

I don’t know what architecture YBS use but clearly there are several layers between the master system of record and the cached views surfaced through app, web and customer services deliver channels. I’ve represented an example of how this could occur below.

System architecture showing the account balance in each layer

Each layer may well cache the account balance to take the load off the master database and this can lead to the confusing state I experienced. Poor system design appears to have omitted to refresh the cached values after an internal account transfer. So the new account balance is not available for validation when making another transfer. Login out or restarting the app refreshes some cached balances but not all indicating the server side caches could be out of date.

If I was writing out a ServiceNow ticket to describe the problems I’d mention the discrepancies between what the customer sees and what actually exists in the system of record. The balance should be consistent.

User needs

So what are the user needs and how have YBS failed to meet them?

Here’s a set of user stories that try to capture what the customer wants followed by the business. We’ll let you the reader decide which is right.

As an online customer
I want my account balances to reflect my account transactions immediately
So that I have confidence the actions I perform are obeyed correctly
So that I don't worry that money has been stolen from my account
So that I can carry out further actions with my money
Given a customer has two immediate access savings accounts A and B
And a transfer amount M is within the limits on the accounts
When a transfer is made from account A to account B for amount M
Then the balance for account A is debited by M
And the balance for account B is credited by M
Given a customer has transferred amount M from account A to account B successfully
When a further transfer payment is requested from account B
Then the current balance is used for account funds validation and not a cached value
As a financial savings provider
I want to delay presenting account balances to customers when they make transactions
So that I can earn maximum interest from customers deposits 

We hope we’re wrong and YBS have not deliberately designed funds transfer user journeys to cause friction and stress to its customers. But we’ve experienced similar behaviour from other financial providers that disregard user experience which makes us skeptical of ethical product management. Or maybe it’s the minimum viable product syndrome that plagues some poorly managed agile delivery programmes.


YBS did respond to our complaint and upheld it, offering compensation for the time wasted. This was a welcome gesture but we did emphasis the only way to resolve this issue is to fix the underlying stale data cache or whatever reason YBS have for implementing this defective system behaviour.