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