Nasdaq's Facebook Glitch Came From Race Conditions
The Nasdaq computer system that delayed trade notices of the Facebook IPO on Friday was plagued by race conditions, the stock exchange announced Monday. As a result of this technical glitch in its Nasdaq OMX system, the market expects to pay out US$13 million or even more to traders.
A number of trading firms lost money due to mismatched Facebook share prices. About 30 million shares' worth of trading were affected, the exchange estimated.
On Friday, Nasdaq had delayed Facebook's IPO by 30 minutes. For about 20 minutes, the exchange stopped confirming trades placed by brokers, who were unable to see the results of their orders for more than two hours.
The problem stemmed from Nasdaq's IPO Cross, a pre-IPO auction process the exchange put in place in 2006 that allows traders to place orders and agree on an IPO price before the stock is officially launched, according to a Nasdaq statement issued on Monday.
Typically, in the minutes before an IPO launch, IPO Cross will run an auction in which traders can put in bids, and then calculate an opening price using these auction bids. The opening price would then be fed to the Nasdaq tape. After the opening price is calculated and just before it prints its opening price to the tape, IPO Cross checks to see if any additional orders have been placed since it started its calculation. In Facebook's case, additional orders kept coming in, which caused IPO Cross to recalculate the price multiple times, resulting in the delay past the 11 a.m. scheduled opening.
The problem was only fixed at 11:30 a.m., when Nasdaq switched to a backup version of the IPO Cross matching engine, which allowed the stock to go live on Nasdaq. Unfortunately, this secondary instance of the engine used calculations made at 11:11 a.m., ignoring any bids entered in the system since then. Also during this time, some customers did not receive order confirmations or had their connectivity from their own systems momentarily cut. Orders entered between 11:11 a.m. and 11:30 a.m. were not executed until after 11:30 a.m., resulting in trades that were not fully understood by brokers.
Nasdaq characterized the problem as a race condition. A race condition occurs when two or more parts of a program that rely on each other get locked in an infinite loop, halting forward progress of the program as a whole. The race condition in this case took place between the auction process and the final calculation of the IPO price.
While most race conditions can be identified by simply testing programs while in development, in some cases they may not become apparent until the software is stressed under heavy usage, said Scott Sellers, CEO of software provider Azul Systems. Azul offers a version of the JVM (Java Virtual Machine) engineered for extreme scalability.
While Sellers had no direct information about this Nasdaq system, he did say that many of his customers and potential customers -- which include other financial exchanges -- have experienced race conditions only under heavy loads, as multiple threads in the program interact with one another in sometimes unpredictable ways. So the frenzy of trading around the Facebook IPO might have been enough to expose a flaw in the software, he said.
"A surge in demand can be extraordinarily difficult to model in pre-production staging," he said. "It is the corner case conditions that usually occur in high volumes. If [an organization] has not built a platform that is scalable enough, it can get in trouble."
Oddly enough, the IPO of another company, Zynga, also scheduled that day, came off correctly, even though the IPO Cross auction period was similarly heated. In this case however, all auction bids were reconciled before the final trading price was issued, at 12:27 p.m.
Nonetheless, Nasdaq has subsequently modified the IPO Cross process so it no longer accepts orders after the auction's final calculation has been made.
Nasdaq has rules in place to handle disputed transactions, in which brokers can petition the Nasdaq for losses due to system failures. The company has put aside $13 million for claims. As of Monday, however, Facebook share prices have dipped below the IPO price of $38 per share, and in the midafternoon were trading at $33.64.