plz 2

A $500,000,000 checkbox


A federal judge has ruled that Citibank isn’t entitled to the return of $500 million it sent to various creditors last August. Kludgey software and a poorly designed user interface contributed to the massive screwup.

Citibank was acting as an agent for Revlon, which owed hundreds of millions of dollars to various creditors. On August 11, Citibank was supposed to send out interest payments totaling $7.8 million to these creditors.

However, Revlon was in the process of refinancing its debt—paying off a few creditors while rolling the rest of its debt into a new loan. And this, combined with the confusing interface of financial software called Flexcube, led the bank to accidentally pay back the principal on the entire loan—most of which wasn’t due until 2023.

Citibank actually handed over about $900 million by mistake. The next day they politely asked for the money back and got about half of it. They sued the lenders who kept the money and now that lawsuit is over. The financial nuances were covered in Wednesday’s Money Stuff, which is excellent.

Both Money Stuff and the Ars Technica piece from the top have a screenshot of the interface that caused the issue and it is terrifying. There are eight inscrutably-labelled text input/checkbox pairs. In the screenshot, one of the inputs has a value in it and the corresponding checkbox is checked. A classic blunder! If you don’t want to accidentally refund everyone’s money you need to check three total checkboxes. No more, no less. Three shall be the number thou shalt check, and the number of the checking shall be three.

This software is made by Oracle and is called FLEXCUBE (they stylize it in all caps). Let’s take a look at the FLEXCUBE marketing material oh god what is this:

Meet Arthur, the CEO of ZigBank. Arthur reflects with wonder and pride on how Oracle FLEXCUBE has enabled ZigBank’s hyper-connected journey and transformed the way ZigBank thinks and does business. Oracle FLEXCUBE, with its suite of best-of-breed pre-integrated solutions, has empowered ZigBank with the ability to drive its digital strategy. Arthur is now able to define the digital ecosystem in partnership with fintechs as well as other banks and successfully participate in an integrated global economy. The result: simplified banking.

That is a tough paragraph and I promise it’s so much worse than it seems — you really have to watch the video. There are corny cartoon graphics and two other imaginary personalities. Also, the entire video is narrated in a slow, deliberate cadence reminiscent of children’s educational content. I guess a good-faith interpretation of that is that it makes the video more accessible to people who speak English as a second language? Subtitles are a thing, though, so that seems like a weird strategy.

A less-good-faith interpretation is that the video sounds like a Cyberchase episode because… that is the level of communication that works on the people who buy this software? I mean, there is a group of people — executives and VPs of large and mid-sized companies in various industries — who actually buy (or tell their subordinates to buy) enterprise software from Oracle. Oracle spends lots of money researching exactly how to convince these people to buy their software (as opposed to Salesforce’s, or something). I mean, Oracle’s business is selling software! They are probably good at it; the marketing is probably hitting the right notes.

We talked about this last week with regard to IBM. The general theme is that there are lots of silly[0] ads for software, especially enterprise software. The ads are made by big companies with lots of money and they make that money from selling their software. They can pay to min-max their marketing to keep the sales wheel turning so it’s logical to infer that if the ads are silly then it is because silly ads are effective. You can imagine the people who the ads are targeted to and (try to) infer things about their sophistication as customers based on the ad content. For enterprise software this inference is often… not charitable.

What can you do with this? Well, if you’re a company that might buy software from Oracle or Salesforce or whatever then there’s a competitive advantage to being a more sophisticated customer. You could try to do that by having executives or VPs with engineering backgrounds, for example (though I am an engineer, so, super biased). I would hazard a guess that the upward mobility for engineers at Citibank has not been great, historically. Or you could just not buy crappy software! If I was a consultant for Citibank I would probably talk about how they need to ‘restructure the technology procurement workflow to favor the end user’. That is fundamentally difficult, though, because the software buyers are not the software users.

You could also ignore the problem. It cost Citibank $500 million, oops!

Running a solo software business

Pinboard is an internet bookmarking company run by a guy named Maciej Cegłowski (who is also notable for his tweets and blog). He’s been running Pinboard alone since 2009 and its website has all the hallmarks of an OG independent web business. There is even this, deep in the FAQ:

What happens if the guy who runs Pinboard gets hit by a bus?

The bus is likely to be fine. They don’t go very fast and are designed with passenger safety in mind.

I don’t know how to label the brusque, independent style that Maciej applies to his business, but I recognize it from a different internet era that is now mostly gone. Roughly, I’m talking about an era that ended with the ascendance of the iPhone.

Anyway, when Pinboard was a very new company you paid a one-time fee for a lifetime account. Later, Maciej converted Pinboard to a subscription service but there was still a large cohort of non-paying users with original accounts. This week, Maciej sent an email to these users asking them to voluntarily convert to subscription accounts to fund further investment in the business. Some users shared the email, which garnered attention based on Pinboard’s general appeal in the developer community.

Besides being transparent and direct, there is this incredible description of what it is like to run a solo software company:

I would describe my work like single-handedly running a restaurant in an old château. It’s cool and fun, and the ambiance is great, but occasionally the soup is served cold or not at all because I have to chase a bunch of bats out of the kitchen, or replace a collapsed beam, while the diners sit and wait. This is no fun for either me or the diners, who rightfully complain that it ruins their dinner.

Maciej goes on to explain how the additional revenue from converted users would allow him to hire some help and further improve the product.

I suspect there is an appetite for more corporate communication with this up-front style. This especially applies to tech companies, who are among the biggest producers of eye-rolling PR doublespeak. An exception is Elon Musk, who is known for saying exactly what he thinks (sometimes to an extreme). He is the CEO of Tesla, but I think Tesla itself takes a more traditional corporate tone. Stripe is fairly upfront with its ‘grow the GDP of the internet’ mission, but its incentives are unusually well-aligned so this is less of an achievement. More to come in this arena, perhaps.

Ethical trade-offs

This is a slide deck from a 2018 talk by Chris Stucchio entitled ‘AI Ethics, Impossibility Theorems and Tradeoffs’[1]. The central point of the talk is that systems (including AI systems) are often judged against multiple, incompatible ideas of fairness. Chris introduces the ethical frameworks of Utilitarianism (maximizing good and minimizing harm) and procedural fairness (the idea that systems should be impartial to certain individual traits) and demonstrates through a series of examples how it is often impossible to simultaneously maximize for both frameworks.

This problem is stated succinctly in the theorem that:

A predictive algorithm can only be well calibrated and have equal false positive/negative rates if it achieves either perfect accuracy or base rates [across groups for the predicted phenomenon] are equal.

Chris points out a corollary to this, which is that any predictive algorithm that treats groups equally (i.e. with procedural fairness) will have different per-group false negative rates as long as the base rates for the groups are different. Also, if you are a journalist, you can analyze essentially any algorithm and are guaranteed to find bias! The reproduction of this result relies on Bayes’ Theorem and is covered clearly in the slides so I won’t reproduce it here. Chris examines a series of real-world issues through this lens: department store loss prevention, microlending in India, criminality, and FICO scores.

The talk doesn’t advocate for a way to address these challenges, but instead for the explicit acknowledgement of trade-offs that are sometimes made implicitly. Because there is no answer that satisfies all ethical criteria (as some people would assert) it is the responsibility of human decision makers and, increasingly, algorithm designers to assert the principles they are pursuing.


On Thursday, NASA’s Perseverance rover landed safely on Mars. I do not have much to say about this, except that it is a monumental achievement of engineering and human ingenuity. Perseverance is the size of an SUV and spent nearly seven months hurtling through space to reach the Red Planet. Besides the rover, there is also a small helicopter. This stuff is so cool!

Of course there is lots of software necessary to make this all possible. Today’s software development paradigms call for releasing code on a daily or weekly basis. Servers are easy to update so fixes can be done quickly in the event of a problem. A rover represents the most unforgiving alternative to this: work for years to make good on your one opportunity to get it right and wait seven months to find out if you succeeded. So far, so good!


Draw icebergs to see how they would float. City skylines 3-D printed from your GitHub commits. Custom-mix bar background noise. Split keyboard gallery.

[0] By silly I mean high-level, unsophisticated, filled with buzzwords, and devoid of meaningful information about the product.

[1] There is also a recording on YouTube.