A Norwegian Cruises
success story

Norwegian cruises ahead of the competition with Akka

The need

Over the past decade, Norwegian has changed the game for the cruise industry by becoming more responsive to its customers. Its “Feel Free” strategy provides guests with the flexibility to choose from a huge range of options to tailor their cruise experience to their preferences and budget.

However, as the company’s strategy evolved and business grew, its IT remained anchored in the past. Norwegian’s technology team realized they needed to rethink the entire software infrastructure to enable a fundamental shift towards a more digital way of doing business.

The challenge

During a period of rapid expansion, Norwegian’s software infrastructure had accumulated technical complexity and system dependencies that were beginning to negatively impact developer productivity. The company had three different backend systems and five different code bases, which were monolithic, written in multiple languages, and presented a steep learning curve for developers.

Adding further complexity, the company’s APIs had to support multiple clients, which made it difficult to model interactions between front and backend systems, and make changes safely. The company also had multiple different deployment strategies for its different production environments, which made development cycles slow—it could take weeks to make even a simple change to the company’s website, and handling seasonal peaks in website traffic was a major challenge.

“Our two key goals in modernizing Norwegian’s software infrastructure were to create more agility for the developer team to support the businesses with more frequent release cycles, and to create a more stable site to sell cruises,” explains Fidel Peréz, Director of Enterprise Architecture and Performance at Norwegian.

The solution

After a careful review of all languages and application architecture options, Peréz’s team decided to rewrite its code bases using Scala and Akka.

Scala’s type safety provides developers with useful documentation, and acts as a safety net for error detection and refactoring at compile time. Meanwhile, Akka's web framework makes it easy to develop stateless applications that decouple the need for particular servers to handle particular requests, minimizing the impact of server failures. It also enables Norwegian’s development team to make code deployments during the day with increased business agility.

Scala and Akka also made it easier to loosen the coupling between Norwegian’s three back-end systems and its web site and other endpoints, making it possible to implement changes in one system without impacting another.

Finally, Norwegian signed up to an Akka subscription that provides full lifecycle support from the creators of Scala and Akka, giving the company the assurance of a safety net as it rolled out its ambitious modernization initiative through its development, test and production environments.

The results

Today, Norwegian remains a heavy user of Scala and Akka. The majority of the ncl.com site is written in Scala, and so is the front-end layer of Norwegian’s partner API.

Norwegian has converted its monolithic legacy architecture into a modern service-oriented architecture with well-defined boundaries. For example, Norwegian has built service layers that allow it to isolate its client applications from failures on the backend, so backend service outages no longer cascade to the rest of the system.

By adopting a more modern development model in Scala, Norwegian developers can more easily roll out new features and bug fixes. Previous deployment cycles were weekly or monthly; today, Perez estimates that the company deploys four times more frequently.

Similarly, the use of stateless services enables Norwegian to deploy during business hours, because it can roll out updated software one server at a time, without taking its entire service offline. In the past, the team was required to deploy after midnight to reduce service interruption.

In a 12-month period after the move to Scala and Akka, Norwegian completed over 65 code deployments with no major issues or rollbacks. According to Pérez, the uptime comes from the resiliency of Akka's actor model and the fact that errors are propagated to the supervisor and not to the caller, allowing more sophisticated error handling mechanisms.

Pérez also testifies that Norwegian has been using Akka for more than two years to manage the payments systems for the casino, arcade, and vending machines on its ships, without a single crash. In any case of failure on the backend, the devices just “wait” and are still fully functional for passengers. Norwegian sees this resiliency as the foundation for building future technology-driven innovation for better passenger experiences and new revenue opportunities.

Stay Responsive
to Change.