Toggle Tv > Unlocking the Monolith: Lessons Learned from Naviance's Journey

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

Featured Videos

Video Collections