Skip to content

Mermaid Diagram of Stratum ecosystem #48

Description

@jasonvanderslice

Why Stratum?

Without Stratum you scale like flows × platforms; with Stratum you scale like flows + platforms.

What’s the difference?

Without Stratum, every user flow is wired to every observability platform by hand. More flows and more platforms mean more of everything: more custom integration code, more dashboards, and more connections to maintain. Add one new flow and you add work for every platform. Add one new platform and you add work for every flow. The work grows quickly.

With Stratum, all flows go through one integration layer, and that layer connects to each platform through a single plugin. Add a new flow and you add one connection into Stratum. Add a new platform and you add one plugin. The work grows slowly and in one place.

Same idea, in numbers

If you have F user flows and P observability platforms:

Without Stratum you get on the order of O(F × P) of each: custom integration code, dashboards, and connections. Adding one flow means P new connections; adding one platform means F new connections.

With Stratum you get on the order of O(F + P): F flows into Stratum, then P plugins to platforms. One new flow is one new connection; one new platform is one new plugin.

So the first diagram scales like flows × platforms; the second scales like flows + platforms.

In one picture

Without Stratum

%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'lineColor':'#9a96a0' }}}%%
flowchart LR
    subgraph mult[flows × platforms]
      direction LR
      f1((flow 1))
      f2((flow 2))
      f3((flow 3))
      p1((platform 1))
      p2((platform 2))
      p3((platform 3))
      f1 --> p1
      f1 --> p2
      f1 --> p3
      f2 --> p1
      f2 --> p2
      f2 --> p3
      f3 --> p1
      f3 --> p2
      f3 --> p3
    end
Loading

With Stratum

%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'lineColor':'#9a96a0' }}}%%
flowchart LR
    subgraph add[flows + platforms]
      direction LR
      fa1((flow 1))
      fa2((flow 2))
      fa3((flow 3))
      S[Stratum]
      pa1((platform 1))
      pa2((platform 2))
      pa3((platform 3))
      fa1 --> S
      fa2 --> S
      fa3 --> S
      S --> pa1
      S --> pa2
      S --> pa3
    end
Loading

(Mermaid can’t go inside a standard Markdown table—cells can’t contain multi-line blocks. Using the PNGs above is the reliable way to get two diagrams side by side.)

What I've seen in the wild

%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'secondaryColor':'#f5f0ec', 'tertiaryColor':'#f0ece8', 'lineColor':'#9a96a0', 'fontFamily':'Poppins, system-ui, sans-serif', 'fontSize':'14px', 'fontWeight':'400' }}}%%
flowchart LR

    %% ---- Styles ----
    classDef flowApp fill:#3a3a4a,stroke:#5a5a6a,color:#ffffff
    classDef library fill:#f5d4a8,stroke:#c4a876,color:#2d2d3c
    classDef sunk fill:#f0b8b8,stroke:#d49898,color:#2d2d3c
    classDef dashboard fill:#faf9f8,stroke:#c8c4c0,color:#2d2d3c

    %% ---- Flow app nodes ----
    firstFlow(First User Flow App Code)
    secondFlow(Second User Flow App Code)
    thirdFlow(Third User Flow App Code)

    %% ---- Library nodes ----
    NR(New Relic Library)
    GA(Google Analytics Library)
    SC(SiteCatalyst Analytics Library)

    %% ---- Custom code (sunk) by platform ----
    sunk1NR(Custom code to capture 1st flow)
    sunk2NR(Custom code to capture 2nd flow)
    sunk3NR(Custom code to capture 3rd flow)
    sunk1GA(Custom code to capture 1st flow)
    sunk2GA(Custom code to capture 2nd flow)
    sunk3GA(Custom code to capture 3rd flow)
    sunk1SC(Custom code to capture 1st flow)
    sunk2SC(Custom code to capture 2nd flow)
    sunk3SC(Custom code to capture 3rd flow)

    %% ---- Dashboards by platform ----
    dashboard1NR(New Relic Dashboard for 1st flow)
    dashboard2NR(New Relic Dashboard for 2nd flow)
    dashboard3NR(New Relic Dashboard for 3rd flow)
    dashboard1GA(Google Analytics Dashboard for 1st flow)
    dashboard2GA(Google Analytics Dashboard for 2nd flow)
    dashboard3GA(Google Analytics Dashboard for 3rd flow)
    dashboard1SC(SiteCatalyst Dashboard for 1st flow)
    dashboard2SC(SiteCatalyst Dashboard for 2nd flow)
    dashboard3SC(SiteCatalyst Dashboard for 3rd flow)

    %% ---- Subgraphs: flow containers ----
    subgraph Flow1
      firstFlow
    end
    subgraph Flow2
      secondFlow
    end
    subgraph Flow3
      thirdFlow
    end

    %% ---- Subgraph: app code → custom code ----
    subgraph Chaos[Repetitive and Custom Code]
      firstFlow --> sunk1NR
      firstFlow --> sunk1GA
      firstFlow --> sunk1SC
      secondFlow --> sunk2NR
      secondFlow --> sunk2GA
      secondFlow --> sunk2SC
      thirdFlow --> sunk3NR
      thirdFlow --> sunk3GA
      thirdFlow --> sunk3SC
    end

    %% ---- Subgraphs: custom code → libraries ----
    subgraph NewRelicPlatform[New Relic Platform]
      sunk1NR --> NR
      sunk2NR --> NR
      sunk3NR --> NR
    end
    subgraph GoogleAnalyticsPlatform[Google Analytics Platform]
      sunk1GA --> GA
      sunk2GA --> GA
      sunk3GA --> GA
    end
    subgraph SiteCatalystPlatform[SiteCatalyst Platform]
      sunk1SC --> SC
      sunk2SC --> SC
      sunk3SC --> SC
    end

    %% ---- Subgraph: libraries → dashboards ----
    subgraph ChaosDashboard[Custom Queries and Dashboards]
      NR --> dashboard1NR
      NR --> dashboard2NR
      NR --> dashboard3NR
      GA --> dashboard1GA
      GA --> dashboard2GA
      GA --> dashboard3GA
      SC --> dashboard1SC
      SC --> dashboard2SC
      SC --> dashboard3SC
    end

    %% ---- Apply styles ----
    class firstFlow,secondFlow,thirdFlow flowApp
    class NR,GA,SC library
    class sunk1NR,sunk2NR,sunk3NR,sunk1GA,sunk2GA,sunk3GA,sunk1SC,sunk2SC,sunk3SC sunk
    class dashboard1NR,dashboard2NR,dashboard3NR,dashboard1GA,dashboard2GA,dashboard3GA,dashboard1SC,dashboard2SC,dashboard3SC dashboard
Loading

With Stratum

%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#faf8f6', 'primaryBorderColor':'#e8e4e0', 'primaryTextColor':'#2d2d3c', 'secondaryColor':'#f5f0ec', 'tertiaryColor':'#f0ece8', 'lineColor':'#9a96a0', 'fontFamily':'Poppins, system-ui, sans-serif', 'fontSize':'14px', 'fontWeight':'400' }}}%%
flowchart LR

    %% ---- Styles ----
    classDef flowApp fill:#3a3a4a,stroke:#5a5a6a,color:#ffffff
    classDef library fill:#f5d4a8,stroke:#c4a876,color:#2d2d3c
    classDef sunk fill:#f0b8b8,stroke:#d49898,color:#2d2d3c
    classDef dashboard fill:#faf9f8,stroke:#c8c4c0,color:#2d2d3c

    %% ---- Flow app nodes ----
    firstFlow(First User Flow App Code)
    secondFlow(Second User Flow App Code)
    thirdFlow(Third User Flow App Code)

    %% ---- New Relic ------
    NewRelicLibrary(New Relic Library)
    NewRelicPlatform(New Relic Platform)

    %% ---- Google Analytics ------
    GoogleAnalyticsLibrary(Google Analytics Library)
    GoogleAnalyticsPlatform(Google Analytics Platform)

    %% ---- SiteCatalyst ------
    SiteCatalystLibrary(SiteCatalyst Library)
    SiteCatalystPlatform(SiteCatalyst Platform)

    %% ---- Enterprise Specific -------
    EnterpriseSpecificLibrary(Enterprise Specific Library)
    EnterpriseSpecificPlatform(Enterprise Specific Platform)

    %% ---- Stratum ------
    StratumLibrary(Stratum Library)
    StratumPluginNewRelic(Stratum Plugin for New Relic)
    StratumPluginGoogleAnalytics(Stratum Plugin for Google Analytics)
    StratumPluginSiteCatalyst(Stratum Plugin for SiteCatalyst)
    StratumPluginEnterpriseSpecific(Stratum Plugin for Enterprise)

    subgraph AppCodeFlow
      firstFlow
      secondFlow
      thirdFlow
    end

    subgraph StratumFlow
      firstFlow --> StratumLibrary
      secondFlow --> StratumLibrary
      thirdFlow --> StratumLibrary
      StratumLibrary --> StratumPluginNewRelic
      StratumLibrary --> StratumPluginGoogleAnalytics
      StratumLibrary --> StratumPluginSiteCatalyst
      StratumLibrary --> StratumPluginEnterpriseSpecific
    end


    subgraph GoogleAnalyticsFlow
      StratumPluginGoogleAnalytics --> GoogleAnalyticsLibrary
      GoogleAnalyticsLibrary --> GoogleAnalyticsPlatform
    end

    subgraph SiteCatalystFlow
      StratumPluginSiteCatalyst --> SiteCatalystLibrary
      SiteCatalystLibrary --> SiteCatalystPlatform
    end

    subgraph EnterpriseSpecificFlow
      StratumPluginEnterpriseSpecific --> EnterpriseSpecificLibrary
      EnterpriseSpecificLibrary --> EnterpriseSpecificPlatform
    end

    subgraph NewRelicFlow
      StratumPluginNewRelic --> NewRelicLibrary
      NewRelicLibrary --> NewRelicPlatform
    end

    %% ---- Apply styles ----
    class firstFlow,secondFlow,thirdFlow flowApp
    class NR,GA,SC library
    class sunk1NR,sunk2NR,sunk3NR,sunk1GA,sunk2GA,sunk3GA,sunk1SC,sunk2SC,sunk3SC sunk
    class dashboard1NR,dashboard2NR,dashboard3NR,dashboard1GA,dashboard2GA,dashboard3GA,dashboard1SC,dashboard2SC,dashboard3SC dashboard
Loading

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions