Archive for the ‘Quality’ 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.