San Mateo, Calif.-based Coupa is a spend management company, which means it helps companies control their indirect spending and generate savings by delivering such capabilities as e-procurement and expense management.
Coupa’s Cloud Spend Optimization software-as-a-service (SaaS) product manages indirect purchases and expenses in real time. Built on Coupa’s cloud architecture, it provides executive dashboards, alerts, expense management and real-time benchmarking in a single user interface. This spend optimization software suite focuses on three core spend areas, including procurement, accounts payable and expense management. Coupa is cloud-based and built on Amazon Web Services infrastructure.
Why did Coupa decide to focus on Ruby?
“When we started out we were quite small and all of us were coming from Oracle and we had a Java background,” Williams explained. “We knew we wanted to build something modern, and Ruby was just so modern and it made us happy as developers. It meant that we could write much more concise code. It was a much better trade-off as to how much we could write how quickly. And especially in our business, where in enterprise software in general, you’re not going to get a huge spike in users suddenly because you hit TechCrunch or something like that. You know how many users you’re going to get. Your scaling problems are much more about the data and what you allow them to do.
“So for us it’s a lot more valuable to be able to build out a lot more flexibility and configurability quickly than it is to be able to tune one thing to be very, very fast. But the way that Ruby makes us productive has been a wonderful boon for the company.”
Ruby also helps Coupa solve one of the key problems of enterprise software in the cloud, which is how to support customization. Williams said in enterprise software, people have an expectation from big companies that they’re able customize things to do exactly what they want. However, in the cloud it is difficult to support that gracefully.
“This means that we need to be as flexible as possible and support a lot of configuration and a lot of dynamic aspects to our product, but at the same time set some principles,” Williams said. “And Ruby has been a really great way to make those compromises stick.”
Now the company plans to move to Ruby 2.0 in 2014 and has a forward branch with some updates already in place.
Williams said Coupa is looking forward to a lot of the changes in 2.0, such as the updated garbage collector, as well as getting the “copy-on-write” semantics back that they had with Ruby Enterprise Edition, which reached end of life in 2012.
Coupa Software Scales on Ruby and Rails
“This is nice because it’s all about throughput and scalability,” Williams said. “In our system the fewer times you have to garbage collect, the less memory you take up per process, the more people you can put on the server, the better response time your users are going to get and the less hardware you’re going to have to throw at it. So what’s nice about the platform is it’s quite horizontally scalable. We can throw more hardware at it if we need to, but it’s nice not to have to. So that saves us money in the long term and saves our customers money as well.”
Williams said the development team at Coupa is looking forward to lazy enumerators for the performance benefits there, as well as to named arguments.
In a post on DZone, Pat Shaughnessy, a Ruby developer working at a global management consulting firm, described lazy enumerators thusly:
“Ruby 2.0’s new lazy enumerator feature seems like magic. In case you haven’t tried it yet, it allows you to iterate over an infinite series of values and take just the values you want. It brings the functional programming concept of lazy evaluation to Ruby—at least for enumerations.”
JP Krishnamoorthy, vice president of engineering at Coupa, said Coupa is “the most active spend optimization platform in the world.” He added that as Coupa gives its customers and their users a consumer-like experience, “people are going to use the system more and more.” Later, Krishnamoorthy asked Ruby creator Yukihiro “Matz” Matsumoto, who was on hand with a delegation of Ruby developers from Japan, what advice he had for enterprise software companies using Ruby.
Matsumoto replied, “The fundamental principle of Ruby goodness is focusing on the programmer, on people. As programmers we tend to focus on technology or the computer, as in how to make it fast and how to make it scalable. They are important, but if you are building software applications that target humans, don’t forget to focus on humans.”
Coupa’s platform handles 500,000 transactions daily and supports $43 billion in spend through. “As a Rails app we have 241 controllers, almost 500 models and 130,000 lines of code,” Williams said. “For a Ruby project this is fairly large; for a Java project not so much.”
Since its launch in 2006, the company has continued to grow quickly. In fact, recently Coupa moved its development team to a nearby location because it had filled the existing facility to capacity.
Coupa’s longer-term challenges include scaling more and more as the company grows.
“We already scaled past this office, we’re scaling in employees, in customers, in users per customer, in data volume, in size of customers,” Williams said. “So everything we can do in the language, in the platform, in our code to make scalability easier is a good investment from our perspective. So some of that will be getting into more thread safety. This is something that is mostly a librarian testing issue. We’re also looking at multi-core support. We may end up exploring JRuby or Rubinius, but that’s longer term.”
Another thing Coupa is looking at is sandboxing untrusted code, Williams said.