Unlocking the Monolith: Lessons Learned from Naviance's Journey
In this talk, I will share Naviance’s experience using Launch Darkly to power our next generation of software architecture and team practices. I’ll describe our team’s blueprint for progressively breaking up a monolithic architecture of roughly 1 million LOC into a service-oriented architecture more accurately reflecting our application’s Bounded Contexts. We’ll discuss how this “modernization blueprint” connects to our use of feature flags for controlled releases, but also look at other aspects where the importance of feature flags may not be readily apparent (for example, when performing data migrations).
The talk will be divided into five key sections.
Section 1: Why? Modernizing to Scale Your Team and Unlock Innovation
We’ll begin the discussion with a quick snapshot of the Naviance team’s situation prior to our use of Launch Darkly feature flags and our commitment to progressive, opportunistic modernization. This section will cover a few key decisions:
1.1. The Monolith Doesn’t Scale: To get things started, I want to begin by describing the “good problem” of having a successful enterprise product. For Naviance, this has meant YoY growth in our overall team size and our ability to bring new features to our customers. However, this growth also poses a problem: a single codebase that can be maintained and enhanced successfully by a handful of teams simply cannot scale to concurrent work by hundreds of engineers.
1.2 The Monolith “Locks In” Technology: Similar to the prior sub-section, in this section I will describe how our team had a strong desire to migrate towards new technologies and patterns in order to take advantage of modern, high-velocity practices, such as Cloud Native architectures and Serverless designs
1.3 The Monolithic Release Cycle: In this section, I will describe how our monolithic application also locked us in to a lengthy release cycle that complicated our engineering, increased our risk, and delayed our ability to release value to our customers. At this point I will introduce Launch Darkly, and discuss how our team initially looked at Launch Darkly to solve this problem in isolation, only to realize later that feature flags also unlocked our ability to attack the prior two problems as well.
Section 2: How To Get Started: “Big Bang” vs. Opportunism
In this section, I will describe our team’s first key strategic decision: Should our existing monolith be rewritten from scratch or should it be progressively modernized?
In this section, I’ll bring our team’s experience to the forefront by highlighting that we’ve done it *both* ways: Naviance has rewritten a monolith of roughly 700k LOC from scratch in a new programming language (our student-facing application), and we’ve also progressively enhanced our school staff and teacher application by “Breaking apart the monolith” module-by-module. I’ll present a comparison matrix that shows the benefits and challenges that come from both approaches. The key takeaway of this section will be that, while both options are better than nothing, opportunistic enhancement allows more freedom to bring added value to the customer and improve the overall system architecture.
This section will also provide some commentary on how Modernization is more than a technical decision. Committing to a strategy of progressive modernization requires a deep understanding of your customer’s needs in order to be confident that your technical and market vision are in alignment.
Lastly, this section will conclude with a “Big Picture” diagram of what a progressively modernized architecture can look like over time.
Section 3: “The Blueprint”
In this section, we’ll look at the architectural blueprint Naviance has replicated across multiple teams to migrate monolithic application modules into standalone services owned by small, individual teams. At a high level, this section will cover the following list of key features of this blueprint:
- Feature Flags for Progressive Rollout
- “Micro Front Ends” (a la https://martinfowler.com/articles/micro-frontends.html) as a pattern to build modules that are truly loosely coupled from an existing monolithic system
- Data Migrations: We’ll review an event-based approach for migrating data in two scenarios:
- “Initial Data Load”
- “Data Backfill” for reporting
This section will conclude with some key takeaways on why this approach has been successful for us, focusing on the technology decisions, including feature flags but also calling out other “star players” such as serverless and engineer-owned IAC.
Section 4: Deep-Dive: Data Migrations for Service-Oriented Architecture
This section will “zoom in” on one of the pieces of our blueprint: Data Migrations. Data Migrations can be especially challenging for teams considering modernization, and this has been true for the Naviance team as well. This section offers an opportunity to speak to real challenges our team has faced when attempting to migrate customer data that is, in some cases, decades old.
One critical takeaway from this section will be the key capability to “look ahead” at the results of a data migration in a production environment. This is achieved by smart use of feature flags, as well as an architecture that allows data migrations to be “tested in production” with zero impact to customers. After reviewing a few tactical approaches we take in this area, the conclusion of this section will reflect on the reality that data migrations have no “silver bullet” which makes them easy; smart teams should expect to find surprises and plan from the beginning with contingencies and flexibility in mind.
Section 5: Results
The last section of the presentation will dive into a variety of results and metrics which paint the picture of our Modernization journey’s positive results. The precise statistics which we can release publically may be subject to change pending internal review, but the following items are tracked today internally to measure our progress:
- DORA metrics (especially deployment cadence) on modernized systems
- LOC deleted from our existing Monolith
- Features shipped to market using our Modernization approach
- Team sentiment surveys & team member quotes: how our engineers have responded to feature-flag-oriented development and working on smaller, context-bound systems
Trajectory related videos
Keynote: Product Vision
Trajectory
Flagging the Jamstack - Using Feature Flags with Netlify - W...
Trajectory
Flight School - Workshop
Trajectory
Keynote: State of Feature Management
Trajectory
Keynote: Fireside chat with Gene Kim
Trajectory
State of LaunchDarkly Experimentation
Trajectory
Product Updates - Introducing Custom Contexts, Accelerate an...
Trajectory
LaunchDarkly Architecture - Releasing Features at Global Sca...
Trajectory
General Motors' Journey to Feature Flags with LaunchDarkly
Trajectory
Vodafone Fireside Chat with Jessica Cregg
Trajectory
Incidents: The customer empathy workshop you never wanted
Trajectory
Unlocking the Monolith: Lessons Learned from Naviance's Jour...
Trajectory
Shifting Cloud Native Observability to the Left
Trajectory
How Chronosphere releases features at massive cloud native s...
Trajectory
The Journey with LaunchDarkly at One Medical
Trajectory
How LaunchDarkly Uses LaunchDarkly
Trajectory
Scaling LaunchDarkly to Teams of Teams
Trajectory
Feature Management For Product Managers and More
Trajectory
Use Feature Flags to Avoid Downtime During Migrations
Trajectory
Automating Progressive Delivery
Trajectory
Developer's Guide to Experimentation with LaunchDarkly
Trajectory
The Power of Targeting Via Attributes
Trajectory
Building Dynamic Configuration into Terraform
Trajectory
Using Observability to Accelerate Continuous Integration
Trajectory
5 Open Source Security Tools All Developers Should Know Abou...
Trajectory
Shift the feedback cycle left with Feature Flags and Cloud D...
Trajectory
Fireside chat with Edith Harbaugh, LaunchDarkly CEO & Co-Fou...
Trajectory
Partner Summit: What to Expect When Co-selling with LaunchDa...
Trajectory
Partner Summit: Build feature-led development solutions with...
Trajectory
LaunchDarkly Product Demo
Trajectory
Partner Summit: LaunchDarkly Partner Program Benefits
Trajectory
I Love Feature Flags!
Trajectory
5 Real Ways to Use Feature Flags Across Product, Marketing, ...
Trajectory
Doing Deployments at Scale
Trajectory
Clear Skies in the Cloud: Safer, Faster App Modernization wi...
Trajectory
Product Deep Dives: Liberty McBride, Brandon Mensing, and Ro...
Trajectory
Learn in Production with Traffic Management
Trajectory
A Tale of Three Digital Transformations
Trajectory
Going From Zero to 100 Deploys a Day
Trajectory
Building LaunchDarkly at Scale with Self Service
Trajectory
Rolling Out LaunchDarkly Using LaunchDarkly
Trajectory
Rethink/Reimagine: Delivering Value in a Hybrid World
Trajectory
From Monolith to CI/CD
Trajectory
Game Dev Using LaunchDarkly
Trajectory
What To Do When You Blow Your Service Level Objectives
Trajectory
Fireside Chats: Edith Harbaugh & Chase Brammer
Trajectory
Project to Product: Measuring Digital Outcomes with the Flow...
Trajectory
FDD: Flag (and Test!) Driven Development
Trajectory
Fireside Chats: Edith Harbaugh & Ravi Upad
Trajectory
Kubernetes, You Rainbow-Infused Space Unicorn: What Leslie K...
Trajectory
Stealth-mode North Star: Rebranding in Secret with Feature F...
Trajectory
Product Keynote: John Kodumal
Trajectory
Fireside Chats: Edith Harbaugh & Michael McKay
Trajectory
Building the Circle of Faith: How Corporate Culture Builds T...
Trajectory
Flipr: Uber’s Dynamic Configuration Platform
Trajectory
Enterprise Empathy: Coping with Stress in Business Transform...
Trajectory
Ones and Zeros
Trajectory
Making Releases Boring in the Enterprise
Trajectory
Engineering Pathways for Systemic Change – What Happens When...
Trajectory
No Fear: Scaling the Xero Developer Platform
Trajectory
The Power of Feature Workflows
Trajectory
Champion versus Challenger
Trajectory
Launch Day Workflows
Trajectory
Understanding Feature Flag Performance with Observability
Trajectory
How Progressive Delivery Enables us to Chaos Engineering
Trajectory
How LaunchDarkly's systems break orbit
Trajectory
Shipping and Learning Fast via Feature Flags
Trajectory
How to Build Self Healing Systems and a Kill Switch. (Error ...
Trajectory
How Betway Tests in Production: Hypothesis Driven Developmen...
Trajectory
Service Protection at Scale with LaunchDarkly
Trajectory
Empowering Better Feature Management at Tray.io
Trajectory
Fast & Simple: Observing Code & Infra Deployments at Honeyco...
Trajectory
Always Be Testing: Test Strategy for Continuous Deployment
Trajectory
The Language of Liftoff
Trajectory
Several People are Launching: Feature Flags at Slack
Trajectory
Experiment Culture: From Tradition to Data-Driven
Trajectory
Tools for the Next Iteration of Modern Development
Trajectory
Not Just Buttons: Feature Flagging Your Machine Learning Arc...
Trajectory
Breaking Systems to Make Them Unbreakable
Trajectory
How Firefox Upholds its Values and Keeps Up With Change
Trajectory
Production as an Experiment Lab
Trajectory
Backyard Chat: Progressive Delivery
Trajectory
Opening Keynote: Product Vision
Trajectory
Conversation: Edith Harbaugh & LaunchDarkly Customer Panel
Trajectory
Opening Keynote: Empowering All Teams to Deliver & Control S...
Trajectory
Keynote: Measuring Your Trajectory
Trajectory
Scaling Salads: How We Launched One of Our Most Impactful Te...
Trajectory