> ## Documentation Index
> Fetch the complete documentation index at: https://site.aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# VideoAmp's success with Aspect Workflows

> How VideoAmp, Aspect's first Workflows customer, uses Bazel and Aspect Workflows to run CI/CD across a 33-domain monorepo.

export const CaseStudyQuote = ({attribution, children}) => <blockquote className="border-l-4 border-blue-500 pl-4 italic text-zinc-700 dark:text-zinc-200">
    {children}
    {attribution && <footer className="mt-2 not-italic text-sm text-zinc-500 dark:text-zinc-400">{attribution}</footer>}
  </blockquote>;

export const MarketingPage = () => <div className="marketing-page-marker" style={{
  display: "none"
}} />;

export const Section = ({children, className = "", gray = false, dark = false, id}) => <section id={id} className={`w-full flex justify-center px-4 py-16 md:py-24 ${gray ? "bg-gray-50 dark:bg-zinc-900" : dark ? "bg-zinc-900 dark:bg-zinc-950" : ""} ${className}`}>
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {children}
    </div>
  </section>;

<MarketingPage />

<Section>
  <div className="max-w-3xl mx-auto">
    <div className="case-study-logo mb-5">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/aspectbuild/images/marketing/customers/videoamp-logo-color.svg" alt="VideoAmp" noZoom style={{height: "4.8rem"}} />
    </div>

    <h1 className="text-3xl md:text-4xl font-semibold text-zinc-900 dark:text-white tracking-tight">
      VideoAmp: CI/CD that just works, at monorepo scale
    </h1>

    <div className="case-study-hero mt-10">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/aspectbuild/images/marketing/case-studies/VideoAmp-stage-photo.jpg" alt="VideoAmp event" noZoom />
    </div>

    <div className="mt-12 space-y-5 text-zinc-600 dark:text-zinc-300 leading-relaxed">
      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">One monorepo, 33 domains</h2>

      <p>
        VideoAmp is a media performance platform that provides the infrastructure for media buyers
        and sellers to find their most valuable audiences, optimize to what's working, and measure
        the real-world impact of advertising. By leveraging big data, privacy-forward technology,
        and AI, VideoAmp delivers a comprehensive view of media performance across streaming,
        digital, and linear TV, so every campaign decision is made with clarity and every result is
        measurable.
      </p>

      <p>
        Their codebase reflects the same commitment to a single source of truth: one Bazel
        monorepo called "Central," spanning 33 product and platform domains. The scale is real:
        roughly 5k BUILD files, 7.4k Go files, 6.5k Python files, and 8.3k SQL files. Go drives
        their API and service layer, Python handles ETL and ML pipelines, TypeScript and HTMX
        power their UIs, and Protocol Buffers run throughout.
      </p>

      <p>
        Their engineering culture is built around the same principles as their product.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "Transparency and trust in measurement demand reproducible, well-built systems, so we lean
        hard into a single monorepo, strong shared conventions, hermetic Bazel builds, and
        trunk-based development. We'd rather invest in platform and tooling that makes every team
        faster and safer than let things fragment."
      </CaseStudyQuote>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">Before Aspect: a fragmentation problem</h2>

      <p>
        Before moving to a monorepo, VideoAmp's code lived across many separate repos, mostly Python, with
        each team building on its own terms. Teams rarely reused each other's libraries, so the
        same problems kept getting solved in slightly different ways. Their CI/CD was equally fragmented:
        wired up per-repo, each one its own island of pipelines and conventions. Changes didn't
        propagate, tooling drifted between teams, and keeping everything healthy took constant
        effort.
      </p>

      <p>
        That fragmentation pushed them toward consolidating into a Bazel monorepo and
        toward a CI partner that could make a fast and reliable monorepo at their scale.
      </p>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">Why Aspect</h2>

      <p>
        VideoAmp evaluated a number of vendors before choosing Aspect. Many offered to own Bazel
        and CI outright, but that approach would have left VideoAmp without the internal Bazel
        expertise they wanted to build.
      </p>

      <p>
        Aspect stood out for two reasons: a product built around Bazel from the start, and deep
        contributions to the Bazel community. That focus, combined with a shared background in
        Bazel-native tooling, meant VideoAmp's team was talking to people who'd already solved
        these problems before.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "Bazel is foundational for us — we build everything with it across Go, Python, TypeScript,
        SQL, and protos. That made the choice of CI partner almost self-selecting: we needed someone
        whose product was designed around Bazel, not bolted onto it. Aspect was the obvious fit."
      </CaseStudyQuote>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">Shaping the product together</h2>

      <p>
        VideoAmp became the first Aspect Workflows customer in 2022. The initial ask was simple:
        a remote cache to make CI faster. What they got was a partnership that helped shape
        both our product and their development.
      </p>

      <p>
        Early conversations steered VideoAmp away from approaches that would've caused pain,
        including merge queues, in favor of detecting when the repo went red and reacting quickly.
        Together, we worked with VideoAmp using a manifest as the interface between CI and
        CD — a pattern that became central to how Workflows handles continuous delivery.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "We got to shape the product to our needs without having to reinvent a lot of the basics.
        Talking through the problems with Alex was extremely helpful — he talked us out of merge
        queues and instead had us focus on detecting when the repo went red and reacting quickly."
      </CaseStudyQuote>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">Migrating from CircleCI to GitHub Actions</h2>

      <p>
        In October 2024, VideoAmp completed the full migration of their Central monorepo CI/CD
        from CircleCI to GitHub Actions, with Aspect Workflows handling the heavy lifting. Aspect
        orchestrated Bazel builds, tests, and delivery across self-hosted runners with intelligent
        cache warming, so PRs start fast rather than rebuilding from scratch. The migration was a
        large, coordinated effort — the kind where we could flex our combined depth in Bazel and GitHub
        Actions.
      </p>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">The result: CI that just works</h2>

      <p>
        The biggest change since adopting Aspect is that builds and CI stopped being a daily battle
        and became infrastructure teams can simply trust. There's now one consistent way things build
        and ship across all 33 domains. A dependable foundation developers rarely have to think about.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "CI is no longer a chore each team needs help with or owns — it's infrastructure that just
        works."
      </CaseStudyQuote>

      <h2 className="mt-10 text-2xl font-semibold text-zinc-900 dark:text-white">A partnership that stays flexible</h2>

      <p>
        Almost four years in, the relationship has lasted because our support isn't a separate
        function — it's the same Bazel engineers who build Workflows, in a dedicated Slack channel.
        VideoAmp's Bazel leads can hand off questions to us and keep their
        focus on higher-value work.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "Aspect actively monitors our infrastructure and we have a direct line to them when something
        needs attention — it functions like an extension of our platform team rather than a vendor
        we file tickets with."
      </CaseStudyQuote>

      <p>
        VideoAmp helped shape Workflows from the start. A customer willing to work through the
        hard problems with you (not just use the product) is something we don't take for granted.
        We're looking forward to where our partnership takes us next.
      </p>

      <CaseStudyQuote attribution="Josh Excell, Manager, Engineering, VideoAmp">
        "If you're running Bazel at any real scale — especially a monorepo — Aspect is worth a
        serious look. Their whole product is built around Bazel rather than bolted onto it. For us,
        that's been the difference between CI fighting our build system and CI working with it."
      </CaseStudyQuote>
    </div>
  </div>
</Section>
