In an earlier post, we discussed how PaaS can help companies to enable faster, standardized and more cost-efficient software development. In this post, we examine how one company set out on their first native cloud endeavor and what they learned with that first experience.
This software company runs a broad-scope set of CRM SaaS applications for organizations that want to better manage information, organize events, perform fundraising, and more. The company has a rather large, monolithic application which it built over many years. While it served their purposes in the early years, growth in customers and system users led to performance issues, especially when it came to database-dependent functions.
The company leveraged Pivotal Cloud Foundry in an effort to move away from its dependence on the monolithic application and infrastructure stack. They also had some of their developers trained around Pivotal’s code writing methodology for native cloud applications running on Cloud Foundry. Once live on Pivotal Web Services (the hosted model of Cloud Foundry), the company wanted to achieve fast and substantial ROI and ensure developer uptake of the new infrastructure. To that end, they decided to break it down into a micro-service based architecture.
The monolith application had a number of components working in concert, and some of those with greater degrees of interdependence than others. It also had a few components that were home grown, had outlived their usefulness as custom software, and were prime candidates for replacement with outside services. The email system, used to build and send thousands of emails to various organization contact lists was chosen as the first carve-out project.
To do this, they went into their monolithic application, found all the functions that perform email, carved them out, and determined how all other components of the application communicated the email piece. Once that information was documented, they built a small email service in Pivotal, which included testing, near-production-level testing, and full production running. They leveraged SendGrid, a popular email service provider, and were able to offload all of the responsibilities and complexities of an email server, leaving their engineering team with more time to focus on issues strategic to the company and its user base.
Today, the organization and all users of its email portion of the application run as a single company on Cloud Foundry.
Learnings from Their First Native Cloud Experience
The company learned a lot in their process of making their email native to the cloud. First and foremost, they found development had become easier, because their developers were able to deploy and test on demand. Because of the on-demand nature of testing, developers found issues with code earlier, including both the code functionality itself as well as connectivity with the existing platform. Additionally, because development and testing ran simultaneously, deploying to full production involved the same target processes and required far less time than before.
A number of principles help guide development of native cloud applications.
First, look to build services that scale out, not up. Traditional applications rely on increasing memory and/or CPU to be able to accommodate additional loads. With microservices, the idea is to build components that can be instantiated many (even thousands) of times. This forces your design choices to reflect a small-footprint, discrete and focused component.
Second, the PaaS world has learned not to fear disruption, but to embrace its inevitability, designing components and infrastructure that can easily bridge the gaps. Traditional applications, especially ones with long running processes, risk leaving the system in an inconsistent state after a crash or unexpected shutdown, thereby affecting downstream processes. With microservices, the objective is to recover gracefully, pick up where you left off, or be able to pick up where another component left off. These components reside in an intelligent, load-balanced container that monitors the state of all instances and spins up new instances in the event of a crash, or offloads all of the work to a different container altogether, making the platform all the more resilient.
Finally, the company found that they were able to establish repeatable processes which they can leverage for their next functionality carve-out. Improving another feature or function will be far easier than it was for their email, since they now have a standard process to follow.
What advice can we offer for others leveraging Pivotal Cloud Foundry?
Plan Your Native-Cloud Development Up Front. This team underscored how different it can be building features and functions in the cloud versus in a monolithic application. In particular, they cited the need to focus on communication with other components, standardizing APIs in the beginning, and maintaining components that are lightweight and stateless. Doing this, they say, will make your software standardized, scalable, and fast to deploy.
Test Away!! With the ability to deploy to a production-like environment, developers can now have an instance of the entire system at their disposal on demand. That means they can reliably test integration points, communication failures/disruptions and outages. No longer are these tests relegated to the end of a sprint or release; this created even more opportunities for the team to find issues early in the development cycle.
Continuous Collaboration With Business Users. Continue to gather input from Business Users at every step, otherwise you risk meeting requirements and expectations, which will ultimately put the success of the PaaS model at risk.
After the development team and the business users have a good understanding of what the platform can do for common workloads, collaborate with influential users to provide a detailed view of what PaaS should ‘look like’. You know it can fulfill the basic workload tasks, so use these influencers to create and inspire the next level of opportunities. Aligning vision with the technology will increase your success. The real power of PaaS is to allow your business users to drive the solutions as that will result in a better overall solution and higher adoption rates.
Deploying services on a PaaS platform, allows your organization to deliver enterprise software and applications faster than ever before, through standardized architecture, infrastructure and processes. Just remember, doing so requires upfront planning. The payoff is faster response-to-market conditions, greater focus on strategic innovation and producing business value, as well as better resource efficiency across both operations and software development.
Remember that deploying a PaaS environment is just your first step toward innovating across your organization and extended enterprise. As you think about the new ways to work with native-cloud capabilities, you are sure to innovate both processes and architectures to gain long-term competitive advantages.