Modern Muse is a UK-based charity that’s designed to inspire and engage the next generation of female business leaders and entrepreneurs. Together with fellow technology partner Avanade, Microsoft IT is working to make www.modernmuse.org a modern platform that’s accessible to everyone, and that can scale and grow with the organization. We’re using Microsoft Azure and open-source development with Visual Studio Team Services (VSTS) to refine the Modern Muse experience.
Bringing Modern Muse into modern engineering with Azure
We recently migrated Modern Muse’s open-source systems from Amazon Web Services (AWS) to Microsoft Azure to demonstrate the flexibility and range of Microsoft technologies, showcase our partner Avanade’s skill set, and showcase how agile, open-source development can be achieved using modern engineering practices and VSTS. This is significant for businesses that have built their applications using open-source technologies but have decided to upgrade and capitalize on the business value of Azure and modern engineering practices—particularly its increased flexibility, agility, accessibility, and scalability.
Modern Muse development in AWS
Before Microsoft took over sponsorship of the venture, Modern Muse was managed by a vendor that used AWS. When we assessed the development environment and processes, we identified areas that could be improved in Modern Muse. We identified Azure and VSTS as a combined solution to unite the development environment for Modern Muse and build effective continuous integration and continuous deployment (CI/CD) into the Modern Muse release process.
Modern Muse in Azure
- Front-end tier. The front end is a responsive webpage that’s hosted as an Azure App Service. It uses the standard Apache Tomcat server environment, just like it did on AWS. The technology that drives this tier is a React-based webpage that’s written using CoffeeScript. We manage the application using VSTS and the CI/CD platform that’s integrated into VSTS Release Management and the Azure App Service.
- Back-end tier. The code from the back-end tier is also hosted in Azure App Service—this enables a similar level of code re‑use and CI/CD benefits as the front-end tier. The back-end code is primarily Java-based, and uses the Spring Framework. Deployments for all environments are fully automated using VSTS Release Management. The back-end tier uses some Azure core functions, such as Azure Search, Azure Redis Cache, and Azure Notification Hubs.
- Database tier. The database tier is hosted in Azure Database for PostgreSQL. We can re-use almost all the database code structure and patterns—while maintaining a solution for Modern Muse components in Azure that’s completely based on platform as a service (PaaS). Like with the other tiers of the application, the database is deployed using release management and uses CI/CD for metadata upgrades.
Platform and tools
VSTS is the primary tool that unifies the modern engineering experience in Modern Muse. We used VSTS in conjunction with Azure to remove the disparate toolsets that were used in the AWS version of Modern Muse and to provide a unified, end-to-end solution for code and release management. Because VSTS seamlessly incorporates with Azure, we didn’t need to develop additional tools or modify the Modern Muse code. We use VSTS to manage the following development processes:
- Collect user stories. We use VSTS to track user stories, features, and bugs. All code check-ins are associated with their relevant items. Then we get the stories automatically attached to each release when it goes live.
- Manage releases. Modern Muse operates with CI/CD at the core of the development and release cycle. We operate on a two-week sprint cycle in three environments, one each for build, test, and production. Our code is hosted in VSTS using a Git repository. Each release goes through a sign-off process, which fully publishes the bug fixes and features in the release. This process is coordinated using email messages that are automatically generated and checked to confirm sign-off for a release.
- Gated check-ins. With our gated check-in process, a release is halted if any unit test fails when code is checked in. This halt remains until the developer fixes the code.
Using VSTS, our developers can still use the code development environments of their choice, using the open-source tools that are required for this kind of development. By using VSTS, we can connect and manage the end-to-end process while still offering open-source tools and components to provide the core functionality.
The following figure shows Modern Muse architecture as it was in AWS and how it exists now in Azure.
After we completed our migration, we assessed ongoing results and made necessary changes to the functioning Azure-based Modern Muse app. The migration was a success—we lifted the existing AWS solution and shifted it to Azure without significant code changes, and we realized several other benefits from running Modern Muse on Azure:
- CI/CD support. The VSTS CI/CD stack that’s built into Azure App Service immediately improved our development practices. We can get new features and functionality changes to production much faster and more often.
- Simplified release management. Release management is, literally, the click of a single button. The entire build and release process is managed by VSTS through GitHub using integrated CI/CD support. Our three environments are all compiled at the same time—this saves time and makes it much easier to manage the three environments together for development and testing.
- Standardized monitoring and management. We have visibility into Modern Muse in the same way as the rest of our Azure-hosted solutions, and the Azure monitoring capabilities make it easy to effectively monitor and manage.
- Retention of open-source code and third-party tools. Because of the lift-and-shift nature of the migration and the VSTS flexibility, we’re working with most of the original code base and we seamlessly maintained connection to third-party components like Google Analytics, MailChimp, Getstream.io, and Cloudinary.
Best practices and lessons
We learned a lot from this migration. AWS and Azure each have their nuances, so this experience will help us to be more effective at similar migrations in the future:
- Use sanitized and standardized code. We ran into several code challenges during the migration. Some of the original code used non-standard coding and references that didn’t fully support a platform-agnostic PaaS solution. To avoid setbacks and delays later in the migration process, it’s important to know your code and fix problems before a migration.
- Design for modern engineering. Even though the AWS solution wasn’t designed for modern engineering, we incorporated modern engineering standards into the Azure version of Modern Muse with small changes and broad support for modern engineering capabilities in Azure. CI/CD integration and the ability to adopt an agile software development process has enabled us to efficiently publish new releases of Modern Muse that include fixes and new features.
- Visual Studio Team Services integrates with any Azure codebase. Open source worked perfectly in Azure. With VSTS, we took advantage of the built-in integration with Azure and essentially plugged in a modern engineering toolset without significant changes to the existing code base.
For more information
© 2019 Microsoft Corporation. This document is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.