Once upon a time, I went looking for a MacOS CSV viewer and was surprised that there weren't one or two widely used, clearly awesome options. I went hunting.

I downloaded Modern CSV, hopeful that it would be a quick and easy solution. I really wanted to like it! I even paid for it. I made it my default app for opening CSV files. But after a week or so, I gave up in frustration. It has lots and lots of editing functions (like, 50+ editing commands!) but first and foremost it has to work as a viewer, and it doesn't. It has too many design decisions that don't make sense for a viewer.

Take, for example, the most common use case: I want to see what's in a CSV file, and it has a header row, because the vast majority of CSV files have a header row. What are the things I want to know?

1. What columns are present?
2. What do the columns mean?
3. What does the data look like?

Let's see how this goes.

I. Headers

The first thing that stands out is that, by default, Modern CSV highlights the headers, but — misleadingly — doesn't freeze them. What's the point of headers if they are not frozen? As soon as I scroll, the answer to #1 is gone. Within the first 10 seconds of using Modern CSV, I find myself hunting for the "Freeze Headers" command.

I right-click on the headers, but it's not among the 25+ items in the context menu. I have to scan through all the pull-down menus, to find the single most commonly needed command: it's buried on the second level of menus, after 27 other menu options. 27! It is also mixed in with a few other similar commands, so I have to think about which one to pick:

Toggle Highlight Header Rows
Toggle Highlight Header Columns
Toggle Freeze Header Rows
Toggle Freeze Header Columns
Toggle Freeze Header Rows and Columns

What are "Header Columns", by the way? In my whole life, I have worked with many, many CSV files and I've never seen header columns. Clicking Toggle Freeze Header Columns doesn't seem to have any visible effect.

Ah, now I've found "Toggle Freeze Header Rows." I will need to do this 99% of the time I open a file. Does it have a hotkey? No. I will have to navigate through two levels of menus to find item #27, every time.

II. Hotkeys

I know I won't last long if I have to navigate two levels of menus every time I open a file, so I look for a way to add a hotkey. Unlike every other Mac app, Modern CSV doesn't have a preference menu in the usual place, and Command-Comma doesn't open the preferences.

To add a hotkey, you must edit a CSV file of hotkey definitions, which means learning how the file is organized and the syntax for specifying hotkeys. Deviously, the column with the hotkeys in it is not the one you edit. Editing this column does nothing; you must instead edit the empty column next to it. This is explained in the instructions, but of course you can't see them, because they disappear when you scroll down to find the row you want.

Also, as you scroll down to find the "Toggle Freeze Header Rows" command, the column with the command names occasionally disappears off the left side of the screen because Modern CSV insists on letting you scroll over to column 49 even though there are only 3 columns in the file. Which brings me to...

III. Scrolling

Having solved this, my the next action is to scroll around to look at the data. And here I am stymied again: the scrolling response is maddeningly hard to control, for four reasons.

First, vertical scrolling happens at a constant speed. It doesn't matter how slow or fast you swipe your fingers on the touchpad; there are exactly two speeds: zero, and about 60 rows per second. If you are scrolling down to row 1,000, you must swipe and swipe and swipe continuously, and wait for ages until you get there. The constant speed also means that if you want to adjust the view up or down by one or two rows, it's impossible; the view will jump by 7 or 8 rows no matter how tiny your swiping movement.

Second, scrolling will continue coasting after you stop, for some distance. This distance varies, but it is too far; when I swipe only a small amount, the scrolling continues for about 30 rows. I tried a few tiny swipes, gradually swiping a little more and more, to try to figure out the algorithm; and it appears that the coasting distance stays at zero for the smallest swipes, and then suddenly jumps from zero to about 30 rows. Again, the discontinuity makes it very difficult to control.

Third, horizontal scrolling only moves by whole columns. You get no visual feedback until the view jumps by an entire column, and columns in CSV files can often be quite wide. This makes it very hard to control how much you scroll, and again, hard or impossible to shift your view by just one or two columns.

Fourth, Modern CSV always shows 50 columns, even if your file has fewer. That means there will often be a giant empty space off to the right of your data. And because there is no feedback until the view jumps by
an entire column, it's easy to accidentally scroll over and get lost in that empty space.

The first of these problems alone is enough to make me want to quit the app.

IV. Filtering

If the header doesn't make it obvious what's in a column, a good way to understand it is to see what values are present. The Filter feature in Google Sheets and Excel is great for this: you get a dropdown menu in each column that shows you a list of unique values in that column, which you can tick on or off to apply a filter.

Modern CSV doesn't have this feature. "Filter Selected Column" is in the context menu for a column, which is great, but it doesn't work; it's a paid feature. This is basic stuff; you can't explore a 10,000-line CSV file without filters.

In a licensed copy of Modern CSV, "Filter Selected Column" brings up a dialog with ten lines of syntax instructions for me to read, and a blank text field to enter a filter expression. I don't want to have to read syntax instructions to apply a filter. If the window is a normal width, I can't even see all the syntax instructions, because they are cut off and cannot be scrolled into view. Resizing my window won't help; I have to close the dialog, resize my window, and open the dialog again to read the instructions.

The filtering syntax has three different ways to specify a range of numbers (>=20 & <=30, or 20+ & 30-, or 20–30), but if I want to filter for a particular string value that appears in half the rows, I have to retype the string into the box. In Google Sheets or Excel, you just tick a checkbox.

—

The whole app feels like this. Sophisticated operations are possible, but the most basic, common operations don't work properly or are unnecessarily complicated. I was really sad to go back to Excel because it's so heavy and slow, but I went back to Excel.

I know this is a long rant, and no one asked for my advice. But I hope this is helpful information. If I were to advise the author, I would recommend:

Make easy things easy.
Make scrolling work.
Choose good defaults.
Provide filtering in the free version, and make it easy.

That would bring me back to Modern CSV.

—

All these things become obvious if you watch someone try to use the app for the first time. Perhaps even better advice would be:

Stop adding features.

Watch someone use the app for the first time, for
a real-life use case with a real-life data file.

Just watch. Do not say anything. Record every
frustration they encounter in the first ten minutes.

Then, with maniacal focus, eliminate every one of
those frustrations and test again and again until
the first-use experience is completely smooth.

I guarantee this will get you more paid users.