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
%2BUnlocking%2Bthe%2BMonolith%2B-%2BLessons%2BLearned%2Bfrom%2BNaviance_s%2BJourney.png)
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
%2BThe%2BJourney%2Bwith%2BLaunchDarkly%2Bat%2BOne%2BMedical.png)
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
.png)
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