Sometimes trying a new technology works out great. And sometimes it doesn't.
Yammer, which bills itself as the "enterprise social network," had tapped Scala, a general-purpose, statically typed language on the Java Virtual Machine, for high-performance back-end services. But in a recent email to executives of Scala middleware vendor Typesafe, Yammer infrastructure architect Coda Hale pointed out problems Yammer had been having. Hale advised Typesafe chairman (and Scala founder) Martin Odersky and CEO Donald Fischer that Yammer would switch to Java.
"Right now at Yammer, we're moving our basic infrastructure stack over to Java and keeping Scala support around in the form of façades and legacy libraries. It's not a hurried process and we're just starting out on it, but it's been a long time coming. The essence of it is that the friction and complexity that comes with using Scala instead of Java isn't offset by enough productivity benefit or reduction of maintenance burden for it to make sense as our default language," Hale wrote. "We'll still have Scala in production, probably in perpetuity, but going forward, our main development target will be Java."
Subsequently, in an official Yammer blog post, Hale softened his stance and pointed out there are issues with all languages. "The fact that I described some of our team's negative experiences with Scala was misrepresented by some as constituting an official Yammer position or announcement. It was not; it was a private email." Yammer, he said, has solved a number of hard problems using Scala. The company has built a real-time message delivery service with Scala, as well as a distributed data store for message feeds, a search system, a server for integrating with Active Directory, a notifications service, and an OAuth token service.
In the blog, Hale said Yammer found some tasks Scala was not good at and noted it was a relatively young language. But in his private email, Hale said the "development story was never as easy as I'd thought it would be." He added, "Because one never writes pure Scala in an industrial setting, we found ourselves having to superimpose four different levels of mental model -- the Scala we wrote, the Java we didn't write, the bytecode it all compiles into, and the actual problem we were writing code to solve." Also, Yammer had difficulty finding people with Scala experience.