(mis)adventures in software development...

28 January 2012

Goodbye crappy overpriced overhyped charting application, hello AmiBroker

Category Trading

So I’ve had this idea for a post/rant knocking around in my head for ages, but been unsure whether I should actually write it. For one thing, it would essentially amount to a review of software I no longer use, haven’t used in a long time, and have no intention of ever using again. However, I do use one of it’s competitors, which I consider a much superior piece of software, and which I will happily continue to use. Like all software, however, it is not perfect, and there are some things about the user interface I find a bit frustrating, though no where near as much as the former. So just in case at some point I happen to write something that might be remotely critical of the latter, I should at least bag the shit out of the former first, especially since it is what made me appreciate the latter so much — and as such provide some context for any future ramblings about trading software. Not to mention it might be good to vent. So here goes.

Once upon a time, years ago, I decided to dedicate an increasingly large chunk of my increasingly smaller free time to trading the stock market. That was probably my first mistake. So I went searching for software tools to assist me in this misguided quest. Specifically, I wanted a charting program. Being a beginner trader, my needs were fairly modest, but I thought I had a good idea of what I wanted — just the common technical analysis indicators, and ability to search a stock price database based on common technical criteria. My research led me to one piece of software which seemed popular and well regarded — something which now, having used the software in question, I find completely mystifying. I won’t mention the name of this charting application, because it is an abomination against all that is good and holy in user interface design and software quality. Let’s call it the “Charting Application That For Usability Crappiness The Name Of Which Is Not To Henceforth Ever Be Uttered or Mentioned”, or CATFUCTNOWINTHEBUM for short. OK, that’s not very short. It’s actually twice as many letters as the real name of the software. So how about we just call it the Charting Application That Possesses Pathetically Poor Usability (CATPPPU), and just agree never to mention its name?

Well, OK, to be fair (kind of), if all you want to do is look at the occasional chart, CATPPPU does the job. (Though with the current state of computer hardware/software, drawing a 2 dimensional chart of stock prices is hardly a taxing task.) Where the software really fell down is with the more advanced functionality around its charting core — like searching through stock price data, and manipulating and maintaining lists of stocks.

The user interface was like something out of a bad 90’s shareware application. It was full of small, cramped, non-resizable dialog boxes — one of my personal pet-peeves of user-interface design. What’s worse, these undersized dialogs were either crammed with controls, or were filled with one or more table widgets full of data, which, once populated, necessitated constant scrolling of sliders to see the data. I felt this was just inexcusable for a mature software application like this, since one of its main features — and reason for existing — is allowing users to generate and work with that data easily! And the ultimate frustration of not having resizable dialog boxes in an interface of a charting application for traders, is that if any class of computer user (apart from developers) are likely to have large screens and even multiple monitors, it’s traders! Nowadays large LCD screens and multiple monitor setups are relatively common for desktops machines, but hardcore traders have been using multiple flat screens way back when most people were still stuck with a single bulky CRT. So I would regard it as quite a serious deficiency in a piece of software supposedly aimed at serious traders, to cram all its advanced functionality into small, cramped dialogs that can’t be resized to take advantage of the larger screen(s) the target end user is likely to have!

Then there’s the functionality for creating and managing “watchlists”, such as it was. It seemed this part of the user interface was modelled loosely on early versions of Internet Explorer’s “Favourites” feature. Modelling anything on Internet Explorer features is rarely a good idea.

The whole “watchlist” thing was actually my main reason for buying an overpriced charting application in the first place. The workflow I wanted to achieve is to to create a list of stocks, usually by a search based on technical analysis criteria (e.g. moving averages, etc), then quickly scroll through the resulting list, having a quick look at each one, and discarding those I didn’t like the look of. The remaining stocks on that list would then be worthy of deeper analysis. I didn’t think that was too much to ask of a modern charting application. But if there was a way to easily achieve this workflow, I couldn’t work it out, despite going through the manual and googling. I had to resort to copying results of searches into Excel, then flicking back and forth between the two applications to get anything even close to the workflow I wanted.

Even worse, the minimal watchlist functionality this software did have was poorly implemented, buggy and slow as all fuck. The program would frequently crash while I was trying to manipulate watchlists. And even when it didn’t, deleting one or more stocks from a list would make it freeze up and furiously thrash the hard drive for minutes at a time. To delete one item from a list! On a modern PC! Seriously! We’re not talking about huge data structures here — just lists of stock codes, or some kind of references to data files on a local hard drive. What kind of convoluted internal data structure were these watchlists using that it took up to 10 minutes of thrashing the hard drive to delete one tiny item of data from a list? What could it possibly be doing for so long? As a developer, that indicates the watchlist functionality was phenomenally poorly implemented. What happened? Did they get the work experience kid to work on that part of the program? Without supervision? This kind of thing is seriously amateur hour — and I paid a thousand bucks for this shit!

I persevered for a while, but then it came time to get a new PC, with a newer version of Windows — Vista. Not surprisingly, the version of CATPPPU I was using was not compatible with Vista, and there was no fucking way I was going to spend more money to upgrade this shitty software. So I went looking for alternatives. I ended up switching to AmiBroker, which turned out to be better in just about every way. Not only that, it was cheaper, and worked across any version of Windows I cared about.

Now, I don’t really like getting all philosophical about software development. The people who do wax lyrical about software/websites/apps as “art” are usually either trying to bullshit their way into getting venture capital funding, or a venture capital douchebag trying to justify why he just invested millions of dollars in a company that isn’t making any money and will likely never ever make any money. Or just Apple fanboys.

But there is undeniably an aspect of art involved, both in the process of coding, but also in the more visible area of user-interface design. When watching a good movie or experiencing a great band perform, it is often obvious from the start that the people involved really know what they’re doing, they’re on top of their game, that they have crafted their art with skill and attention to detail. In the same way, it can be obvious when a piece of software has been well crafted by people who put some thought and attention into how it should work, as opposed to just a bunch of careless cubicle monkeys phoning it in. That is the difference between AmiBroker and CATPPPU. AmiBroker and CATPPPU are both applications that set out to fill a particular need and provide a specific set of functionality. Yet, while CATPPPU does kind of get the job done, it does it clumsily — it’s basically a great example of lazy software, as the user inferface it provides is about as basic and minimal as possible, and certainly without style. They obviously threw a bunch of features in there, while doing as little work possible to expose those features to the end user. They certainly didn’t think about the user experience in using those features. AmiBroker, by contrast, is an example of the same basic idea done right. It’s not perfect, but it gets the job done with a clean, modern user interface.

I actually found myself at an “educational” trading seminar last year — where “educational” in this context means “shameless promotion of trading products and services but with a few authors of second rate trading books throwing up some charts every now and then to provide a thin veneer of credibility, before shamelessly spruiking their own second rate books”. At one point some guy from the company currently distributing CATPPPU in Australia got up and bullshitted about what a great product it is, while I sat down the back and tried to refrain from laughing hysterically. He hooked his laptop to the projector to provide a demonstration. I’d completely given up on CATPPPU by this stage, and had long since switched to AmiBroker. Watching him work CATPPPU on the projector I felt even more justified in my decision, as it reminded me of some other user interface failings of the software that by then I had forgotten.

He demonstrated how to run scans on the database, but to do so involves selecting which stocks (or subset of stocks) to search through. This is done though fairly standard windows open/browse dialog boxes (non-resizable, if I remember right?). But I don’t think there’s any way to select a directory (and it’s entire contents). You have to go into every directory, press CTRL-A to select every data file in it, wait while the software freezes up for a bit if there are lots of files in the directory (which there usually will be), click open, then repeat the process for each directory (of which there will be around 26 if you happen to have the data files sorted in A-Z directories, a default of many data suppliers because the proprietry file format it uses has an arbitrary limit of 2000 data files per directory!). And you have to do this every fucking time you want to run a scan — unless you manage to painstakingly, and with much hard drive thrashing, create a watchlist without the software crashing on you. Not surprisingly he glossed over this point during the demonstration.

The real kicker for me, however, was when, in an attempt a levity, he pointed out the most common support call they get from customers is right after they install and run the software for the first time. And it’s always the same question:

What do I do now?”

Because the software starts up with essentially a blank window with only a menu bar at the top. Nothing to indicate how to open a chart, or where to load data from. He then went to great lengths to reassure everyone that their support department is ready and waiting for their calls, and will be all to happy to help out if anyone encounters problem during or after installation. This for me was more proof of how hopelessly broken this software was from an user experience point of view. He shouldn’t have had to make that assurance, and ideally the software should do more to guide users what to do when first run.

Another telling example of the difference between the art of making quality software with care for the end user experience and attention to detail, and software just hacked together for the money. Don’t get me wrong, CATPPPU does what it claims to do, but in my subjective opinion, it doesn’t do it at all well. I think just about everything in its user interface could have been implemented better. AmiBroker is proof of that.