Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const COLORS = {
purple: 'bg-purple text-light',
}

export const CaseStudyJumbotron: React.FunctionComponent<{
export const CaseStudyFeature: React.FunctionComponent<{
title: string
titleClassName?: string
quote: string
Expand Down Expand Up @@ -33,7 +33,7 @@ export const CaseStudyJumbotron: React.FunctionComponent<{
<div className="row container justify-content-center">
<div class="col-sm-12 col-md-2 case-studies-feature__image">
<a href={url}>
<img class="p-3 img-thumbnail align-middle" src={image} />
<img class="img-thumbnail align-middle" src={image} />
</a>
</div>
<div class="col-md-6 case-studies-feature__content">
Expand Down
3 changes: 1 addition & 2 deletions website/src/css/pages/__case_studies.scss
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@
img {
display: inline-block;
width: 100%;
background-color: white;
border: 2px solid lightgrey;
border: 1px solid lightgrey;
}

@include media-breakpoint-down(sm) {
Expand Down
125 changes: 46 additions & 79 deletions website/src/pages/case-studies/we-are-thorn.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,143 +11,110 @@ import { ViewDeveloperDocumentationAction } from '../../css/components/actions/V
export default ((props: any) => (
<Layout location={props.location}>
<Helmet>
<title>Sourcegraph Case study - Thorn</title>
<meta
name="twitter:title"
content="How Thorn uses Sourcegraph to sunset legacy applications with zero downtime"
/>
<meta
property="og:title"
content="How Thorn uses Sourcegraph to sunset legacy applications with zero downtime"
/>
<title>Thorn sunsets legacy applications safely with Sourcegraph</title>
<meta name="twitter:title" content="How Thorn sunsets legacy applications safely with Sourcegraph" />
<meta property="og:title" content="How Thorn sunsets legacy applications safely with Sourcegraph" />
<meta
name="twitter:description"
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems, removing huge amounts of tech debt in the process."
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems safely, removing huge amounts of tech debt in the process."
/>
<meta
property="og:description"
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems, removing huge amounts of tech debt in the process."
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems safely, removing huge amounts of tech debt in the process."
/>
<meta
name="description"
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems, removing huge amounts of tech debt in the process."
content="Learn how Sourcegraph code search enabled Thorn to systematically sunset legacy systems safely, removing huge amounts of tech debt in the process."
/>
<link rel="icon" type="image/png" href="https://about.sourcegraph.com/favicon.png" />
<link rel="icon" type="image/png" href="https://about.sourcegraph.com/case-studies/thorn-sourcegraph-case-study.png" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css"
></link>
</Helmet>

<CaseStudyPage
title="How Thorn uses Sourcegraph to sunset legacy applications with zero downtime."
title="Thorn sunsets legacy applications safely with Sourcegraph"
logo="/case-studies/thorn-logo.png"
pdf="https://storage.googleapis.com/sourcegraph-assets/Thorn%20Sourcegraph%20case%20study.pdf"
className="thorn-case-study"
>
<ContentSection color="white" className="pt-5 pb-3">
<MediaQuote
image="/case-studies/jacob-gillespie-thorn-square.jpg"
quote="It was time-consuming for developers and reviewers to ensure that changes to legacy systems didn’t affect our production stability."
quote="Ensuring that changes to legacy systems didn’t affect production stability was taking too long."
author="Thorn Software Engineer Jacob Gilesspie"
/>
</ContentSection>

<ContentSection color="white" className="col-md-6">
<h2>Thorn's mission</h2>
<h2>Thorn defends children</h2>

<p>
Thorn builds technology to defend children from sexual abuse. Their work focuses on finding victims
of child sex trafficking faster, and eliminating child sexual abuse from the internet.Thorn partners
with tech companies, law enforcement, as well as other NGOs, to build products that provide the
front lines with the latest technology to find the most vulnerable child victims faster.
</p>
<p>
Thorn’s life changing work and not-for-profit status made it a simple decision to provide
Sourcegraph’s enterprise features free of charge. For many children, Thorn plays a critical role in
speeding up the time it takes for them to be identified and we’re proud to be supporting them with
their mission.
of child sex trafficking quickly and eliminating child sexual abuse from the internet. Thorn
partners with tech companies, law enforcement, and other NGOs to build products to find vulnerable
child victims faster. Thorn's software has helped law enforcement reduce investigation times by 60%, ensuring that we find more children, faster.
</p>

<h2 class="pt-5 pb-1">
Sunsetting deprecated systems was previously costly and risked production stability
</h2>
<h2 class="pt-5 pb-1">Sunsetting deprecated systems was costly and risked production stability</h2>
<p>
As Thorn’s products evolved, it became difficult to trace the impact of code changes to core
application components, as it was difficult to determine what code might rely on legacy
architecture, risking instability and greatly increasing the demand on development and review.
Determining which code relied on legacy architecture was difficult. Developers took too long to
ensure that changes to legacy systems didn’t affect production stability.
</p>

<InContentBlockquote quote="It was time-consuming for developers and reviewers to ensure that changes to legacy systems didn’t affect our production stability." />
<InContentBlockquote quote="Ensuring that changes to legacy systems didn’t affect production stability was taking too long." />

<p>
Over 9,000 officers in 38 countries rely on Thorn’s systems to identify child victims of sexual
abuse. Any downtime of these services has a negative impact on Thorn’s ability to identify children
globally.
Over 9,000 officers in 38 countries rely on Thorn to identify child victims of sexual abuse. Any
downtime reduced Thorn’s ability to identify these children.
</p>

<h2 class="pt-5 pb-1">Existing tooling was not sufficient</h2>

<p>
Tech debt, and the upkeep of legacy code was becoming increasingly problematic. Previous attempts,
such as cloning all repositories locally and using grep to find references, were inadequate,
especially when considering simultaneous development by multiple teams across many different
projects, repositories, and branches. It was costly to determine if all the different microservices
were properly in sync when removing legacy application code.
Tech debt and upkeep of legacy code were problematic. Previous attempts, such as cloning all
repositories locally and using grep to find references, were inadequate when considering
simultaneous development by multiple teams across many different projects, repositories, and
branches. Determining if all the different microservices were properly in sync when removing legacy
application code was painful.
</p>

<p>
Sourcegraph’s multi-repository code search, was able to prove that no code referencing legacy
systems exists organization-wide
</p>
<h2 class="pt-5 pb-1">
Sourcegraph’s multi-repository code search proved that no code referencing legacy systems existed
across the organization
</h2>

<p>
Thorn Software Engineer Jacob Gillespie deployed Sourcegraph and synced Thorn’s entire list of
repositories within minutes.
</p>

<InContentBlockquote quote="With Sourcegraph, we could search over the contents of every repository, in any or all branches in seconds." />

<p>
Sourcegraph code search gave Thorn the ability to find references to deprecated systems. But more
importantly, it proved itself to be an invaluable new part of their code review process.
repositories within minutes. With Sourcegraph, Thorn could search over the contents of every
repository, in any or all branches in seconds. Sourcegraph code search gives Thorn the ability to
find references to deprecated systems.
</p>

<InContentBlockquote quote="In pull requests, team members would include links to Sourcegraph code search, in order to prove all references to a deprecated system had been removed. This gave the reviewer confidence that the code was safe to merge." />
<p>Sourcegraph is now essential to their code review process. </p>

<h2 class="pt-5 pb-1">As a result, deprecated systems were taken offline without downtime.</h2>
<p>
Thorn’s developers could then systematically remove or modify deprecated systems, removing huge
amounts of tech debt in the process. This benefited all areas of the architecture, including not
only application code, but also build, deployment, logging, and monitoring systems—any tool that
supported the deployment and uptime of the application.
</p>

<p>
Modern microservice architecture makes the application deprecation process more challenging than
ever.{' '}
</p>
<InContentBlockquote
quote="In pull requests, team members include links to Sourcegraph code search to prove all references to a deprecated system have been removed, giving the reviewer confidence that the code is safe to merge."
/>

<h2 class="pt-5 pb-1">Deprecated systems were taken offline without downtime</h2>
<p>
<strong>
Sourcegraph’s code search enables developers and DevOps teams to find dead code, unused
packages, and references to deprecated systems, organization wide across tens of thousands of
repositories.
</strong>
Thorn’s developers removed or modified deprecated systems, eliminating huge amounts of tech debt.
This benefited all areas of the architecture, including not only application code, but also build,
deployment, logging, and monitoring systems—any tool that supported the deployment and uptime of the
application.
</p>

<p class="pb-4">
Being able to take advantage of industry leading solutions like Sourcegraph provides critical
support to Thorn’s mission. Every start-up has to make choices about when to rebuild their systems
and when to move forward accruing technical debt, Thorn is no different, but here at Sourcegraph,
we’re proud that our tools could be used to make the Thorn team a little more successful, a little
faster.
<p class="pb-5">
Using Sourcegraph provides critical support to Thorn’s mission. Every start-up has to make choices
about when to rebuild their systems and when to move forward accruing technical debt. Modern
microservice architecture makes the application deprecation process challenging.
</p>
</ContentSection>
</CaseStudyPage>
<ContentPage
title="Code search and navigation"
description="Code search helps you grok code so you can write better code more quickly. Sourcegraph's code search is used by elite software teams."
title="Get Sourcegraph for your team "
description="Sourcegraph’s code search enables developers and DevOps teams to find dead code, unused packages, and references to deprecated systems, organization-wide across tens of thousands of repositories."
mainActions={
<div className="d-flex flex-column align-items-center">
<RequestDemoAction className="mt-3" />
Expand Down
10 changes: 5 additions & 5 deletions website/src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Link } from 'gatsby'
import * as React from 'react'
import { CaseStudyJumbotron } from '../components/CaseStudyJumbotron'
import { CaseStudyFeature } from '../components/CaseStudyFeature'
import { ContentSection } from '../components/content/ContentSection'
import { Jumbotron } from '../components/Jumbotron'
import Layout from '../components/Layout'
Expand Down Expand Up @@ -65,12 +65,12 @@ export default ((props: any) => (
<CustomerLogosSection className="py-5" />
</div>
<ContentSection color="black">
<CaseStudyJumbotron
title="See how Thorn uses Sourcegraph to sunset legacy applications"
quote="In pull requests, team members would include links to Sourcegraph code search, in order to prove all references to a deprecated system had been removed."
<CaseStudyFeature
title="See how Thorn sunsets legacy applications safely with Sourcegraph"
quote="In pull requests, team members include links to Sourcegraph code search to prove all references to a deprecated system have been removed."
author="Thorn Software Engineer, Jacob Gilesspie"
url="/case-studies/we-are-thorn"
image="/case-studies/thorn-logo-square.png"
image="/case-studies/thorn-sourcegraph-case-study.png"
/>
</ContentSection>
<div className="bg-white text-dark">
Expand Down
Binary file modified website/static/case-studies/thorn-logo-square.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.