KubeCon + CloudNativeCon San Diego | November 18 – 21 | Learn more

How to rapidly develop apps with microservices

Originally published by Rick Osowski on the IBM Cloud Blog, here.

As of late last year, a global majority primarily now accesses the internet through a mobile device.

The business implications of the trend are often brought into focus with cautionary tales about Uber and Airbnb successfully disrupting their respective markets. Incumbents in all markets have been put on notice that their customers will soon be offered increasingly innovative user experiences, shifting expectations. Rapidly innovating the relationship with customers through mobile applications is now a platitude in business planning.

Mobile first is not enough: Your customers for awhile may tolerate a great mobile-friendly version of your existing web site, but you have to ask how long you can keep them waiting for features that augment their mundane lives in context. If implementing your ideas take months—as is often the case with a monolithic application that requires coordinated work among many different teams—your innovation easily could become a me-too offering. A more nimble competitor will always be seeking to grab the baton.

It’s uncomfortably obvious that development teams need to accelerate how they deliver new benefits to users. Since nobody can fully predict user behavior, even the fastest, most successful DevOps program has to be ready to fail in the field of actual user experience. Quickly redesigning, replacing, and augmenting parts of the user experience are a top priority based on analysis of clear usage data. That’s why a microservices model of developing cloud-based applications is so powerful. It allows a different small team to own the entire cycle (concept, development, deployment, monitoring) for each component of an application, providing the flexibility necessary to precisely iterate an underperforming part of the user experience as reflected by data gathered in monitoring what users themselves are doing. The DevOps process becomes a dynamic interaction–almost a conversation–with users in the field.

Starting from where you are

Failing fast and iterating quickly: these are DevOps requirements for competitive app delivery in the mobile services era. They imply application architectures that decouple services from each other in a continuous development and delivery cycle while ensuring well-performing interactions with users.

While a startup has an advantage in building greenfield cloud-native applications—using a microservices approach along with DevOps tools and practices—incumbent companies often must begin by refactoring an existing monolith.

Let’s look at a specific example.

In this case, an online retailer wanted to transform a monolith into microservices in order to learn more about customers, and to quickly update and introduce new features.

Since browsing the online catalog presented pressing business problems to solve, the transformation of the overall app began there:

Pilot Task: Determine and implement a better handling of the catalog

The current app failed to help customers easily find product data and blocked the business from exposing data to other sites.

As a proof of concept for the microservices approach, the team built a single microservice for the business catalog using the following steps:

  • Establish a new continuous integration/continuation development model to do the work.
  • Import data into an elastic search to get new ways to search their data and identify new data.
  • Link the existing website to the new search.

At this point, the catalog was still integrated with the existing ordering components, which run core business logic and were too complex to break up without additional work. However, with a successful pilot, the team was convinced of the value of microservices and decided to expand the scope of the app transformation.

Task 2: Learn more about the customer

To learn more about the customer, the team created an account microservice by figuring how to shift the business to focus on customers instead of inventory.

When they determined that customer experience could be enriched over time based on analytics, marketing, and cognitive data, the choice to use an unstructured database became obvious. So they designed a new customer model and used a NOSQL database (like Mongo DB or Cloudant) to manage the unstructured data.

Task 3Innovate the user experience

The team built a new native mobile app and created a new front end for mobile and web access. Even though the catalog depends on the legacy ordering code, the overall user experience was noticeably enhanced.

Task 4: Update access to the order microservice

The team created new order APIs for mobile and integrated them into existing transactions. The business decided to create an adapter microservice that called into the existing ordering system of record on premises. They also used the adapter to integrate with new payment methods and systems.

Task Next: Create an new auction feature

Within the newly flexible architecture, the team has planned to add this innovation in upcoming sprints.

Asking the right questions

As you think about the example, consider these questions:

  • What do your customers want–now and next?
  • Are users of mobile devices satisfied with the experiences your apps are providing?
  • In terms of delivering what users want, how are the DevOps processes and practices of your IT organization helping and hindering?
  • Considering what’s hindering your Devops, and assuming you have an existing app monolith that you need to modernize, do you know exactly what you need to do first?
  • What experiments with cloud platforms should the individual members of your application development team be conducting?
  • What is a good pilot project to use in evaluating a microservices approach and cloud platforms for implementing it?