Archive for the ‘Customer Journey’ category

My USAA Web App User Experience

August 9, 2020

This is a detailed post in which I document my experience and expose the 5 problems I encountered with USAA downloaded financial information.  If you want to read it more quickly, you can gloss over the middle section, titled A Haskell Budget App.

Readers who are interested in testing systems, and/or in product management decision making may have fun guessing what might have happened inside the organization to enable the discrepancies and bugs I observed to occur.

I have tried to share this information with USAA before, but they have not yet as of 8/9/2020 implemented any changes. This, in my experience, is not atypical for big firms, who may have many other more important things to work on.

I give my reasons for bringing this to their attention again at the end.


I am a long time member of USAA for banking and insurance. Since my late twenties, I have had a useful and somewhat obsessive habit of categorizing my spending transactions and income as they happen. Early on, this was with a pencil in an accounting ledger such as the one shown here:

ledger.pngFor a few decades I then used Quicken via its proprietary interfaces. In 2016, I decided to use USAA’s banking services to make my life easier. This meant that via their app, I would regularly:

  • integrate all my non-USAA accounts in one place
  • view all of my transactions in one place
  • set the proper category for each transaction prior to downloading
  • download all of them to merge, and
  • with a custom written app, produce reports from one multi-year file

USAA has a few unique features that make it special for my purposes. I like the ability to edit the name of the transaction in the USAA app on the fly close to when the transaction happened. If I spend money on a book at Amazon, I can put in the book name for reference later.  I do this whenever I have a few minutes, or worst case prior to downloading.  It is quick, and easy to do, but because my brain doesn’t recall events more than a few days old, it is better to scan for these several times a week.

I can also ensure the category selected by USAA is correct and modify it if it isn’t.  I am very regular in downloading my transactions at the end of every month, so I can see my monthly and year-to-date spending, and adjust accordingly.

The Problem

At USAA, the downloaded fields from my aggregated bank accounts are:

  • the transaction date,
  • a transaction description,
  • a transaction description modified by the customer online
  • the status of the transaction,
  • the category and subcategory, if selected
  • the amount. 

There are three options for downloading a bank account’s transactions as follows:

1.) All Displayed
Screen Shot 2020-08-08 at 4.40.19 PM.png

2.) Selected

Screen Shot 2020-08-08 at 4.40.28 PM.png

3.)  Date Range

Screen Shot 2020-08-08 at 4.40.48 PM

I typically choose Date Range, and enter in the first and last dates of the month in question. Occasionally though I get lazy and use  ‘Option 1 – All Displayed’ if I have an account showing only a few transactions in that month. It saves me entering in the date fields for the filter. I assumed the records exported would look and function the same.

Wouldn’t you too expect that no matter which of these you used to ‘filter’ transactions for download that the formatting of the downloaded transactions would be identical across all three options? 

There is no visible indicator or immediately accessible tip, that the resulting .csv files will have different formats, including in one case with extra (un-official) records.  I found five major discrepancies or problems. I didn’t notice them all at the same time, but over time I noticed the pattern that all the faults are in the Date Range option which is my preferred option, and these problems do not occur with ‘All Displayed’, or ‘Selected’ options.  Here are the five differences: 

  1. Debit entries are prefixed with ‘–‘
    This is a double negative to denote a positive amount. This change was introduced without warning to users like me on the Date Range option only.
  2. The Category field is downloaded with %20% to designate any spaces
    The other options look good and don’t have this.
  3. Extra transactions are downloaded if there are ‘pending’ transactions.
    This causes duplicate records to be downloaded and doesn’t happen with the other options.
  4. Transaction Description is truncated.
    It was immaterial for making sense of the record, as the truncated bits were identifying transaction numbers tacked on to the description, but it caused the duplication feature in the app I describe below to fail. It was an annoyance that we had to account for it in our app.
  5. The Subcategory’s Parent Category is missing

Only the Subcategory is showing when the transaction has a subcategory selected. This will be described in further detail below.

A Haskell Budget App

My boyfriend, Christophe Thibaut, developed a nifty little Haskell app to import the data into one file so that I could run the app’s reports to my liking at the command line.  If you scroll down on the linked page to the user manual, you’ll see all of its features. 

I really appreciate this as I now have access to years of information which I can display as I like and it is far more convenient than using Microsoft Excel. As soon as I download the files, I can run the import with one command: ‘budget import’ and run whatever reports I need. 

To create the app, I acted as Product Owner, and Christophe was the developer. By using the Test Driven Development style of designing and writing the software, the resulting tests made it easy to make changes, add features, and fix some of the errors we found in the USAA data, without introducing complexity.

Problem 1-3

After most of the custom app was built, he fixed the first three discrepancies above  by removing (during record import) the debit amount’s  ‘–‘ and the replacing each category field’s %20% with spaces. In addition, he prevented records with status of ‘pending’ from importing.

Problem 4

The truncation of the description field shouldn’t normally have caused a user experience issue, but we wanted to ensure in the app that the import would not inadvertently re-import a record that was already present.  We needed to do that using this field, in addition to the date and amounts fields.

The duplicate imports might happen if I had made a mistake selecting a previously imported file, or if I had included a Date Range that included records I had already imported before.  We had accounted for this in the import routine using a duplicate checker feature, but we then had to fix the checker when we discovered problem 4. We had to lean on only the truncated text and not the full text of the description as part of the duplicates comparison. Without that, I would see duplicate records representing the same record, thus for example, seeing my health insurance cost double in one month! We knew health insurance was costly, but not that costly! Phew, problem fixed.

Problem 5

We still haven’t addressed the fifth problem related to categories. Within USAA bank’s system, a user may create custom subcategories for a given expense category. For example, under Business Expenses, I have about 8 entries, for Conference Fees, Travel, Publications, Liability Insurance, and so on.  Note that Travel (or any other subcategory I create) may also exist as a Category level – which are controlled entries only USAA can change. I like having the subcategory feature. However …

The Date Range option downloads only the subcategory, for example: Travel. The other export selection options show the category field as follows, with both the top category and the subcategory: Business Expenses – Travel. Thus using the Date Range method, the reports would result in my business travel records getting summarized with USAA’s generic category of Travel which I was using for personal travel, causing me to expense fewer business expenses. Of course, I am too alert for even that to happen, so this is a nuisance that I could remedy with a post download search and replace in VIM.  But I don’t want to spend my time that way. I want smooth operations all the way around.  Alternatively, I could permanently rename the conflicting subcategories on the USAA Web application as a workaround. Yet, I continued to wonder why all of the issues exist only in the Date Range selection optionWhat would crop up next, I thought?

Documentation – Where Are You?

None of the five problems is documented anywhere that I can find. I did find this help online.

Here you do not even see the export filter options explicitly called out, let alone that they behave differently in their output. If they should behave differently, the user interface should reflect that with some explanation.

What is your guess as to how these discrepancies came about?

Feel free to share your guesses in the comments.

Christophe thinks it is a management issue, all the way down.

Close But No Cigar

On May 16th 2020, I received a phone message from USAA. I was excited that perhaps my issues would be addressed, or perhaps explained. 
I did call back, referencing the ticket number, but the person who took my call would not connect me  to Kevin or to any software developers.  [I was several years into my developer career in the late 1990s when the managers told us there would be no more interaction with the customer] With that realization and disappointment, I did decide to leave the whole USAA export dilemma behind forever. Recently though, the fifth problem started to bother me again. So I decided to bring them all back to USAA’s attention here.

Why Do I Bother?

I bother with this because 15 years ago a USAA service representative saved my mother from a potentially very dangerous situation. I was so grateful that I went out of my way to make sure that the representative got recognized within the company. The story made it into an internal magazine where the rep was highlighted for great customer service. Also, USAA returns its profits to its members every year and thus, I have a stake in it being a company that pleases its customers. My purpose is thus to help the company become even better at delivering its services.

Below you can see I still have the e-mail referencing the service award that I helped a USAA customer service representative obtain.

 Screen Shot 2020-08-09 at 3.36.19 PM.png


For my application to work and to avoid confusion for others, the format of the records downloaded via the Date Range option should match one for one the format of the same records downloaded by the two other selection options. These options are in the account export feature of your banking application on the web, within a specific account.

I hope that by my having documented each of the five discrepancies here, the customer service rep will be able to convey my explanation to a developer or triage team by way of this written record (or via a link to this post).

The original ticket number was: IMC 410-9018.  Thank you, USAA, for considering this change.

The Feedback Loop – Success!

June 22, 2018

June 2018


I have just received a lovely email from a participant in one of my East Coast workshops earlier this year.  Over the past six years of quietly and gently sharing the gift of Clean questions and mindset, I’ve noticed that the real impact of what I do takes some time to show up. And it is such a joy when it does.  I’ve gotten permission to share the story, although the participant wishes to remain anonymous. I hope you enjoy the story too!

Hi Andrea,

I hope you are well.  I attended your Clean Language workshop last month. I wanted to share with you that applying what I learned in your workshop made a significant difference for my project and has helped enhance our effectiveness with our client.

Technically, I run QA for a small software company outside of [location removed]. But I am also involved in requirements gathering and other areas of client engagement. While meeting with my client, I didn’t ask the series of clean questions verbatim because I didn’t know how my client would feel about that. But I started as best as I could with a clean mind, did a lot of listening, no convincing, and asked a few questions that were, to me, a version of the clean questions you had taught us. The results felt almost magical.
Though a very nice client, the problem we were facing was that the end users of our application are Safety Inspectors for a government agency. They are older gentlemen who had been very successful at what they do, doing things the same way for a very long time. So they didn’t want to transition to using new technology to record and execute their inspections. Thus, they were presenting a lot of resistance in meetings and so forth.
My manager kept telling me that the issue we were facing was age and their related mistrust in technology. But during my last visit to the client site, I was able to discover that the real core issue wasn’t either of those things. The core issue was their fear that they wouldn’t be able to learn how to use the new technology well enough, and that would result in some kind of public safety disaster. It started to click for me when I heard them insist that they would have to hire their teenage grandkids who would know how to press the buttons on the mobile field app for them. Like I said, I didn’t bother trying to convince them otherwise.
Instead, I recommended to my manager that we implement on-the-field UAT testing for the inspectors to conduct while still in the safety net of a pre-production environment. This way, not only can we further minimize potential production issues, but we can also demystify (without a debate) the perceived threat of the new software to the inspectors. Our developers are very talented and the application is easy to use. I felt that the inspectors would realize that and gain in self-confidence as long as their initial try would yield no real world consequences.
This approach worked even better than I had imagined. Everyone on the client side was on board immediately. They even got excited and started planning the ride alongs for the on-field UAT. And there was a wave of great ideas and requirements that started to flow in from the same inspectors. Since we are agile, we are able to accommodate these new requirements.
I wanted to thank you for the workshop and also let you know that I am very inspired and continuing my study of clean language. Also, I wanted to ask if there has been any study on how we can use clean language to help more marginalized or quieter people in a team by providing them with a better platform to be heard. Is there a way that I can get involved with that kind of a study?

Thank you so much! I hope to hear from you soon.

[the author wishes to remain anonymous]

The participants of my short workshop are typically exposed to an hour of demos and exercises, a few slides with content and pictures, some story telling based on questions that come up, and they leave with a handout as well.  What I am inferring was imparted in this case was the clean mindset – listening to understand well while quieting any urge to respond with your own thoughts.  How wonderful that it had a further impact on the participant and the outcome of IT project as well!

I’ve started to collect very brief feedback testimonials on my company page.  You can find more brief testimonials here.

There’s a lot afoot in 2018 with Clean retreats, clean trainings and conference workshops.  I can help you find the best fit for learning, whether online, in person, introductory, or in-depth.

More fundamentally though I would love to connect with you and give you the space to think about whatever is on your mind, to give you an experience of being listened to cleanly and to answer questions you may have.   Email me at to request a free 1/2 hour conversation about Clean Language

The Long Term View – Systems Thinking and Beyond

October 4, 2017


At the user end of a systemic failure

Waking at 4:30 a.m. from the effects of jet-lag this morning, I tackled some admin work which led me to this unexpected result – a little systems story to frame my passion around what I teach in workshops: communication and systems thinking.

I am an independent contractor with my own business. I HAVE to buy ‘Affordable’ Health Care Act insurance.   I am required also to report address changes  – but not directly to the insurance company – no.  I found that was not possible. I had to report via the website, and had anticipated it would be a quick ‘address change’.  A day before my departure for a trip to Europe, I embarked on this fascinating address change journey.   What I discovered to my shock and horror was that I was going to be REQUIRED to change health plans mid-year.  Why?  Because apparently the high end plan I had bought at my old address 10 miles south would NOT be available at my new address.  Why? No one could say initially – the guy on the end of the phone line at the old health plan put me on hold to go do some research. He found that only a small carved out geographic area near my old home had access to that plan.   My head started spinning. I had JUST reached my deductible for the year, meaning higher per visit coverage (less out-of-pocket expense) for the rest of the year.  Wait!!! Change plans?  Yes: Return to Go.   Start over.  From scratch.  Sadly, what’s available at the new address are plans with much higher deductibles. So, I am back to square one.  At least I live in a geographic area that HAS plans, I suppose. I see the silver lining, yet muse about how broken the system is. I feel momentarily powerless.

Just now back from my trip abroad and tackling the admin work early this morning, I look for any sign of mail that has my new health plan ID cards. None.  Searching emails. Ok, here it is in Junk mail.  Click on links – ah – yes, I will create a new account.  And then Wham!  I am stuck with an incredible FLAW in the registration process.  No matter what I put into the field for username I get the same error.   I can’t register for an account.  The system says: if you can’t register, ‘just’ call.   Well, it is too early for that.  I pause the task at hand and start writing in frustration.
This is a different sort of systems issue.  Surely I can’t be the first one to report this… Yet, Aetna has taken no action.

My part in fixing the larger mess

I can imagine that both the policy flaw that was surfaced by my address change, and the error in my registration – although vastly different in their origination – might have been avoided with good systems thinking and communication. These are precedents and prerequisites for agile success.

We no longer need problem solvers who only see their accomplishments as  check marks on the issue directly  ahead of them. We need workers who can question everything and say no with integrity and congruence when pressured unreasonably to deliver crappy policies, regulations, and software .  We need to create safe environments where people can speak up their truths without fear.  We need folks who can see both the details and the big picture, work collaboratively and creatively to solve immediate problems with a long term view.

Organizations are under pressure to rapidly create new systems (policies, programs, applications, websites), and to learn rapidly changing technologies, so they sometimes neglect to understand that the starting point of failure is a lack of systems thinking and excellence in communication.

Capital One – Can We Dance together?

July 15, 2017

<rant> I want to share my user experience trying to update my address on my business account with Capital One.   This is a bit of a customer-journey anti-pattern…

I recently moved, so I wanted to change the address associated with my Business checking account.

First, I logged in online to the business side of the bank hoping I could change the address online.  I looked at my profile where the address is shown. It only gave me an option to phone the bank, so I did.

After waiting at least 20 minutes, I got a person who said, that I had landed on the wrong side (personal banking).  I had to call a different toll-free number for the business. So I dialed the number she gave me: 1-888-755-2172.

Again I was warned of long wait times. I waited, but while I was waiting the automated teller voice insisted on verifying my identity through SSN/EIN in combination with the pin code I must have set up when I set up the account.  I failed to recall the correct PIN, and the automated voice signaled that I would ‘need assistance’… so I continued to wait for a real person.   Eventually the person who could provide ‘assistance’ came online, but she said I was not on the business side after all.  [I had had a sneaky suspicion that I had been re-routed without being notified]

I was really losing my cool this time.  She remained very professional and calm.  She asked me what number I had dialed. I told her. She said, ‘Yes, that is the external business number.  I am not sure why you ended up with me.’  (must have been the incorrect pin attempts) ‘But, we have an internal business number I can put you through to.’   I said, ‘Well please try, but I am beginning to doubt that I will ever be able to change my address with you.  Perhaps I should just change banks.’   She said ‘I am so sorry’ again.    I waited again, for a very long time.

I am really frustrated by this experience.   If Capital One could even do something as SIMPLE as providing an email where I could send my updated VA Articles of Incorporation document which has the correct address – they could put the request into their processing queue, and I would be happy not having to experience:  Over an HOUR of waiting with the same lobby, tinny, incredibly boring music, interrupted every 2 minutes with ‘We are continuing to experience high call volumes.  Your Call is Extremely Important to us. Please continue to hold and an Associate will be with you in a moment…’

Capital One – please treat the user experience as an end-to-end process and don’t optimize for the components in the middle.  Training your phone reps well is all good, but doesn’t really add that much to my experience when I can’t get my address changed in under ten minutes.  

As I end this post, which has been written while I’ve been on hold, I have finally gotten the address updated.  I did insist that the rep notate the exact path of what happened, and forward it on to 1.) content managers for the profile/address change page and 2.) phone call routing admins who can maybe change the routing  when one is unable to authenticate on the business side – so that one lands with the business anyway.
Let’s get this system working.  And please adjust the on-duty call staff to be able to accommodate the demand on the system.  </end rant>