<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Fulcrum Genomics]]></title><description><![CDATA[Let's Talk Biology.]]></description><link>https://blog.fulcrumgenomics.com</link><image><url>https://substackcdn.com/image/fetch/$s_!75J-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffc4218-616c-41e5-ba3f-ce72c1c229f9_1050x1050.png</url><title>Fulcrum Genomics</title><link>https://blog.fulcrumgenomics.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 17 Aug 2026 04:26:07 GMT</lastBuildDate><atom:link href="https://blog.fulcrumgenomics.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Fulcrum Genomics]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[fulcrumgenomics@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[fulcrumgenomics@substack.com]]></itunes:email><itunes:name><![CDATA[Charlotte Tolonen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Charlotte Tolonen]]></itunes:author><googleplay:owner><![CDATA[fulcrumgenomics@substack.com]]></googleplay:owner><googleplay:email><![CDATA[fulcrumgenomics@substack.com]]></googleplay:email><googleplay:author><![CDATA[Charlotte Tolonen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Benchmarking is not validation]]></title><description><![CDATA[Clinical genomics runs on research-grade code. We need to validate it.]]></description><link>https://blog.fulcrumgenomics.com/p/benchmarking-is-not-validation</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/benchmarking-is-not-validation</guid><dc:creator><![CDATA[Nils Homer]]></dc:creator><pubDate>Tue, 11 Aug 2026 14:57:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rcYp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rcYp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rcYp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 424w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 848w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 1272w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rcYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png" width="1456" height="928" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:928,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cutaway illustration of a two-level building: a bright, glass-walled genomics lab above ground, where scientists in lab coats run sequencing instruments, sits directly on top of a windowless basement where three people in hoodies work at monitors full of code &#8212; the computational foundation literally buried beneath the visible science.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cutaway illustration of a two-level building: a bright, glass-walled genomics lab above ground, where scientists in lab coats run sequencing instruments, sits directly on top of a windowless basement where three people in hoodies work at monitors full of code &#8212; the computational foundation literally buried beneath the visible science." title="Cutaway illustration of a two-level building: a bright, glass-walled genomics lab above ground, where scientists in lab coats run sequencing instruments, sits directly on top of a windowless basement where three people in hoodies work at monitors full of code &#8212; the computational foundation literally buried beneath the visible science." srcset="https://substackcdn.com/image/fetch/$s_!rcYp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 424w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 848w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 1272w, https://substackcdn.com/image/fetch/$s_!rcYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a30b621-e24b-45ec-a1a0-c4669d0636bb_1571x1001.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Clinical genomics runs on software that was usually built for research first.</span></p><p><span>That is not an insult. Research code has carried this field a very long way. Many of the tools we use every day were written by small groups, often underfunded, often in academic labs, usually to answer a scientific question before anyone knew the tool would become infrastructure. Some of those tools now sit underneath diagnostic pipelines, clinical trials, drug development programs, and patient reports.</span></p><p><span>The clinical assays built on top of that software are validated. The shared tools underneath them are more often benchmarked, trusted, and left alone until something breaks.</span></p><p><span>That gap is getting harder to defend.</span></p><p><span>Benchmarking asks whether a tool performed well on a defined dataset at a point in time. Verification asks whether a tool continues to do what it claims to do, across versions, inputs, and edge cases. Clinical validation asks whether the result is fit for the medical use in front of it.</span></p><p><span>Each activity is an attempt to answer a different question. Genomics has spent a lot of time benchmarking and then acting as though the other two activities come along for free, when they do not.</span></p><h2><strong><span>A mutation can depend on the software that reads it</span></strong></h2><p><span>Take </span><em><span>FLT3</span></em><span> internal tandem duplications in acute myeloid leukemia. </span><em><span>FLT3</span></em><span>-ITDs are clinically important because they can affect risk stratification and treatment decisions. They are also awkward for short-read sequencing.</span></p><p><span>An ITD is an insertion created when a stretch of DNA is copied head-to-tail. Reads that span that kind of event do not always align cleanly to the reference genome. Depending on the aligner, the extra sequence may be represented as an insertion, or it may be soft-clipped and set aside as unmatched sequence.</span></p><p><span>That choice can decide whether the downstream mutation caller sees the alteration.</span></p><p><span>In </span><a href="https://www.jmdjournal.org/article/S1525-1578(12)00259-0/fulltext"><span>one evaluation</span></a><span>, BWA missed 85 bp and 95 bp duplications that another aligner detected because the signal was pushed into soft-clipped reads instead of aligned as the duplicated sequence. Same sample. Different aligner behavior. Different downstream visibility.</span></p><p><span>Getting that call right is not academic. FLT3-ITD status gates targeted therapy (quizartinib is approved specifically for FLT3-ITD AML) so a miscalled ITD can change the drugs a patient is offered. And the result is more than present-or-absent: the duplication&#8217;s length, position, polyclonality, and allelic burden are the annotation a lab relies on for interpretation and for tracking residual disease. That is the deeper version of the alignment problem above: when the duplicated sequence is soft-clipped instead of represented as an insertion, you don&#8217;t only risk missing the variant, you lose the metadata needed to characterize it.</span></p><p><span>We have seen versions of this problem in client work. We have built custom FLT3-ITD callers for multiple groups because there is no generic tool I trust to get this right everywhere. The right approach depends on the sequencing platform, read length, panel design, coverage profile, homopolymer behavior, aligner behavior, and caller assumptions.</span></p><p><span>That is the part people underestimate. A clinical result can depend on a default chosen years earlier by someone solving a different problem.</span></p><p><span>Nobody set out to make that fragile. It is what happens when tools are benchmarked once and then treated as fixed infrastructure.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i5Ee!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i5Ee!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 424w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 848w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 1272w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i5Ee!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png" width="1456" height="823" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:823,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Three-panel diagram titled \&quot;FLT3-ITD: why the aligner decides what's seen.\&quot; The first panel shows the true event &#8212; a segment of FLT3 exon 14 duplicated head-to-tail. The second shows Aligner A soft-clipping the duplicated copy, so a downstream caller may miss it. The third shows Aligner B representing the same copy as an explicit insertion, so the caller can detect it.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Three-panel diagram titled &quot;FLT3-ITD: why the aligner decides what's seen.&quot; The first panel shows the true event &#8212; a segment of FLT3 exon 14 duplicated head-to-tail. The second shows Aligner A soft-clipping the duplicated copy, so a downstream caller may miss it. The third shows Aligner B representing the same copy as an explicit insertion, so the caller can detect it." title="Three-panel diagram titled &quot;FLT3-ITD: why the aligner decides what's seen.&quot; The first panel shows the true event &#8212; a segment of FLT3 exon 14 duplicated head-to-tail. The second shows Aligner A soft-clipping the duplicated copy, so a downstream caller may miss it. The third shows Aligner B representing the same copy as an explicit insertion, so the caller can detect it." srcset="https://substackcdn.com/image/fetch/$s_!i5Ee!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 424w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 848w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 1272w, https://substackcdn.com/image/fetch/$s_!i5Ee!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67acaaa5-d570-43b2-80c8-beabb10da0d0_2048x1157.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>What a benchmark can miss</span></strong></h2><p><span>A benchmark is useful. I like benchmarks. I have written plenty of them.</span></p><p><span>But a benchmark is a measurement. It does not give you a specification. It does not tell you what happens when two inputs tie, when clipping lands on a boundary, when quality encodings drift, when a dependency changes, when a tool is run twice on the same file, or when a new architecture exposes an assumption that was invisible on x86.</span></p><p><span>For clinical bioinformatics, that is not a minor distinction.</span></p><p><span>The assay gets validated end to end because the lab has to validate it. The tool underneath may never be re-verified unless the lab changes something obvious enough to trigger the work. Every lab repeats some version of that burden in isolation, while the shared tool itself often carries less validation infrastructure than the workflows built on top of it.</span></p><p><span>This is one reason maintenance in bioinformatics feels so broken. The field depends on shared software, but the cost of keeping that software reliable lands in odd places. A lab validates around it. A user files an issue. A maintainer triages it at night. A company forks it. A clinical team discovers the edge case after the tool has already shaped a result.</span></p><p><span>That is not a sustainable validation model.</span></p><h2><strong><span>What changed with AI-assisted development</span></strong></h2><p><span>AI did not make clinical validation unnecessary. Anyone saying otherwise is selling something dangerous.</span></p><p><span>What AI has changed is the cost of building verification infrastructure.</span></p><p><span>A coding model can help rewrite a tool. More importantly, it can help build the harness that checks the rewrite against a reference implementation. It can generate test cases, run comparisons, summarize differences, and help tighten conformance tests. That work used to take enough engineering time that most grants, labs, and product teams could not justify it. Now large parts of it can be done much faster.</span></p><p><span>The hard part did not go away. You still need someone who knows which differences matter. You need someone skeptical enough to distrust a green test suite. You need someone who understands the biology, the file formats, and the failure modes.</span></p><p><span>The machine can make experiments cheap. It cannot decide what counts as a clinically meaningful answer.</span></p><p><span>That combination is useful, but only if we use it honestly.</span></p><h2><strong><span>fgumi, and the bug I did not expect to find</span></strong></h2><p><span>fgumi is our </span><a href="https://blog.fulcrumgenomics.com/p/introducing-fgumi"><span>Rust reimplementation of fgbio&#8217;s UMI tools</span></a><span>.</span></p><p><span>Unique molecular identifiers are short barcodes that help distinguish true molecules from sequencing errors. The grouping step is not glamorous, but it sits in the middle of workflows where reproducibility is essential.</span></p><p><span>When we built fgumi, the important part was not just writing a faster or more portable implementation, it was building the verification harness.</span></p><p><span>The harness ran fgumi and fgbio on the same inputs and compared the outputs read by read. It did this continuously across versions and datasets. It caught the kinds of bugs ordinary unit tests miss: tie-breaking differences, sort-order drift, quality-score encoding problems, and fixes that later refactors accidentally undid.</span></p><p><span>Then it found something I did not expect.</span></p><p><span>The problem was not in the rewrite. </span><em><span>It was in fgbio</span></em><span>, the original tool I had recommended for years.</span></p><p><span>On the same patient sample, fgbio could group molecules differently across runs. When two barcodes had equal counts, the code broke the tie using hash-map order, which was not deterministic. That kind of bug can sit undetected for years because a one-time benchmark will not catch it. You have to run the same data repeatedly and compare behavior carefully.</span></p><p><span>The harness found other issues too, including numeric instability in the consensus caller, double-counted statistics, and edge cases around clipped bases. We fixed them upstream.</span></p><p><span>It turns out building the new tool, then refusing to let it disagree with the old one without explanation, made the old tool better.</span></p><h2><strong><span>bwa-mem3, and the work nobody wants to fund</span></strong></h2><p><span>Most foundational tools will not be rewritten from scratch. They will be inherited.</span></p><p><span>bwa-mem3 is our modernization of bwa-mem2, which descends from bwa, the aligner much of the field has depended on for more than a decade. We forked it for speed, but also for control.</span></p><p><span>Control is underrated. bwa-mem2 ran on x86, while a lot of current development happens on Apple Silicon and deployment increasingly includes Arm. Quality-of-life improvements and correctness work had slowed because maintainer attention is finite. If a tool is going to remain load-bearing, someone has to do the unglamorous work of portability, tests, continuous integration, documentation, benchmarking, and verification against the prior implementation.</span></p><p><span>So that is what we did.</span></p><p><span>The verification harness compares bwa-mem3 and bwa-mem2 read by read. Across more than 800 whole-genome comparisons and 5.5 billion aligned reads, the two agree on 99.9% of reads. The remaining differences are not hand-waved away. They are characterized. Some are deliberate improvements. Some are tolerated. Some get budgets that fail the build if they drift.</span></p><p><span>That is the kind of boring engineering clinical genomics needs more of.</span></p><p><span>It is also the kind of work the field has historically undervalued.</span></p><h2><strong><span>ferro-hgvs, and where I got it wrong</span></strong></h2><p><span>The same validation gap shows up further downstream, where variants get named.</span></p><p><span>A clinical report usually does not communicate a variant as a raw genomic coordinate. It uses </span><a href="https://hgvs-nomenclature.org/stable/"><span>HGVS nomenclature</span></a><span> to describe DNA, RNA, and protein changes. That string is how the variant gets looked up in databases like </span><a href="https://www.ncbi.nlm.nih.gov/clinvar/"><span>ClinVar</span></a><span>, </span><a href="https://www.ncbi.nlm.nih.gov/snp/"><span>dbSNP</span></a><span>, and </span><a href="https://civicdb.org/"><span>CIViC</span></a><span>. If the string is wrong, the variant may fail to match the interpretation that already exists for it.</span></p><p><a href="https://blog.fulcrumgenomics.com/p/introducing-ferro-hgvs"><span>ferro-hgvs</span></a><span> is our library for parsing and normalizing HGVS strings. We verified it against established parsers and tested it against ClinVar, dbSNP, CIViC, and tens of millions of variants from public datasets. By release 0.6.0, it handled every publicly reported clinically relevant variant I had put through it.</span></p><p><span>I thought it was basically done.</span></p><p><span>It was not.</span></p><p><span>I should be blunt here because this is the part people tend to skip in blog posts. Variant representation is not my home turf. My background is read alignment and sequencing data infrastructure. I have written aligners, helped write the SAM specification, and built fgbio. HGVS projection is a different specialty.</span></p><p><span>I leaned too hard on the harness.</span></p><p><span>That worked for fgumi because the test suite behind fgbio had been built over years, case by case, by people who knew the tool deeply. In that situation, the test suite was close to a specification. Verify against it and you have done a meaningful part of the work.</span></p><p><span>ferro-hgvs was different. I leaned on tests ported from other tools, plus large public variant corpora. That was useful, but it was not enough. A corpus is not a specification. It is only the set of cases someone collected.</span></p><p><span>A clinical-trial client found the edge for us. They needed projection from genome to transcript to protein on their own data. The harness was green. I was confident. My confidence came across as authority.</span></p><p><span>The tool did not behave the way I had implied it would.</span></p><p><span>No patient was harmed because human review was part of the validation process, but the miss was still ours. More specifically, it was mine.</span></p><p><span>We could not simply add their failing examples to our tests. The variants would have revealed the disease area and therapy the company was working on. So we had to anonymize the patterns while preserving the shape of the HGVS constructs. This amounted to keeping the grammar and removing the biology.</span></p><p><span>Since then, much of the work has been building the projection I had assumed was finished and hardening the harness so it cannot tell the same comfortable story twice.</span></p><p><span>That is the difference between verification and validation in one project. The harness verified ferro-hgvs against the references we gave it. Validation required real use, private data, a clinical context, and enough humility to admit the harness was not asking the whole question.</span></p><p><span>A green test suite is evidence. It is not absolution.</span></p><h2><strong><span>The same problem runs below our code</span></strong></h2><p><span>This gap does not stop with tools we build.</span></p><p><span>htsjdk is the Java library used by Picard, GATK, and many other genomics tools to read and write sequencing files. A bug in htsjdk can become a bug everywhere at once. But it does not need a flashy rewrite. It needs careful hardening for performance work, correctness fixes, thread-safety checks, regression tests, and review by people who understand how widely the library is used.</span></p><p><span>The same principle applies when general tools are the wrong answer.</span></p><p><em><span>SMN1</span></em><span> and </span><em><span>SMN2</span></em><span>, the gene pair involved in spinal muscular atrophy carrier screening, are so similar that standard short-read pipelines can struggle to assign reads confidently. In some populations, relying on a standard pipeline alone can miss a substantial fraction of carriers. The field&#8217;s answer was to build specialized, separately validated callers for that region.</span></p><p><span>Knowing where a general tool fails is part of validation.</span></p><h2><strong><span>What should change</span></strong></h2><p><span>Equivalence testing against a reference implementation should be standard for rewrites. If you replace a foundational tool, you should show where the new implementation agrees, where it differs, and why those differences are acceptable.</span></p><p><span>Public benchmarks should also include more clinical edge cases. </span><a href="https://www.nature.com/articles/s41587-021-01158-1"><span>Genome in a Bottle</span></a><span>&#8217;s challenging medically relevant genes benchmark is a good model. The field needs more of that across ancestries, assay types, and regions routine pipelines still handle poorly: </span><em><span>FLT3</span></em><span> duplications, </span><em><span>SMN</span></em><span> paralogs, </span><em><span>CYP2D6</span></em><span>, repeat expansions, difficult structural variants, awkward HGVS constructs, and all the cases that get dismissed as edge cases until they show up in a report.</span></p><p><span>Clinical labs will still need to validate their assays. That does not change. I have run clinical validations and helped lead bioinformatics in a CLIA lab, and I know enough to respect the difference between tool verification and clinical validation.</span></p><p><span>But assay-level validation has been asked to carry too much of the tool-level burden. Each lab validates its own configured pipeline against the samples it has. That does not certify every shared tool underneath across the range of inputs it will eventually see. It also means the same work gets repeated in isolation by groups that all depend on the same infrastructure.</span></p><p><span>We can do better than that.</span></p><h2><strong><span>Who pays for this?</span></strong></h2><p><span>Bioinformatics has never settled who pays for maintenance.</span></p><p><span>AI-assisted engineering makes that harder to ignore because one of the old excuses is weaker now. The harnesses are cheaper to build. The comparisons are cheaper to run. The scaffolding that used to be uneconomic is now within reach for many more teams.</span></p><p><span>That does not make validation free. Human judgment is still expensive, and it should be. Someone has to decide what the tool is allowed to do, what counts as a meaningful difference, which edge cases belong in the suite, and where the tool should not be used.</span></p><p><span>The labs, diagnostic developers, funders, software companies, and open-source users all benefit from this infrastructure. They should all expect to fund some part of it.</span></p><p><span>At </span><a href="https://fulcrumgenomics.com/"><span>Fulcrum</span></a><span>, we are starting with the tools in front of us. The validation suites behind fgumi, bwa-mem3, and ferro-hgvs are worked examples of what continuous verification can look like for real bioinformatics software. They do not solve clinical validation. They do show that tool-level verification can be done routinely, and that it can find real bugs in software the field already depends on.</span></p><p><span>I would rather build that infrastructure now, while it is finally cheap enough to do properly, than explain later why we kept trusting research code without checking it.</span></p><p></p><div><hr></div><p><em><span>Nils Homer is a Founding Partner at</span><a href="https://fulcrumgenomics.com/"> Fulcrum Genomics</a><span>, where he builds bioinformatics tools and pipelines for the genomics community. He is the creator of</span><a href="https://github.com/fulcrumgenomics/fgbio"> fgbio</a><span> and a co-author of the</span><a href="https://doi.org/10.1093/bioinformatics/btp352"> SAMtools paper</a><span>. You can find him on</span><a href="https://www.linkedin.com/in/nilshomer/"> LinkedIn</a><span> or reach Fulcrum at contact@fulcrumgenomics.com</span></em></p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a><span> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. </span><a href="https://fulcrumgenomics.com/">Contact us to discuss your project</a><span>.</span></p>]]></content:encoded></item><item><title><![CDATA[A CRISPR off-target search is only as good as the sequences it searches]]></title><description><![CDATA[Rebuilding DivRef so CRISPR off-target searches can account for human variation]]></description><link>https://blog.fulcrumgenomics.com/p/a-crispr-off-target-search-is-only</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/a-crispr-off-target-search-is-only</guid><dc:creator><![CDATA[Alison Meynert]]></dc:creator><pubDate>Wed, 05 Aug 2026 14:43:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7HdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p><em><span>This post is part of Fulcrum&#8217;s series on practical informatics for CRISPR off-target analysis. In a </span><a href="https://blog.fulcrumgenomics.com/p/why-crispr-off-target-search-should"><span>companion post</span></a><span>, Tim Dunn describes recent work on Sassy that helps enumerate plausible guide alignments at a locus instead of returning only one preferred answer. DivRef addresses the other side of the same problem, which is what sequence space should be searched in the first place.</span></em></p></div><p><span>Finding short-sequence matches in the human genome is a common problem in bioinformatics. CRISPR guide RNAs are a good example. The guide is designed to match the intended editing site, but close matches elsewhere in the genome can also matter, because the guide could also edit at those sites, causing unintentional effects. To evaluate those possible off-target sites, the search has to include the sequences where those matches could occur.</span></p><p><span>The standard human reference genome does not contain all of the common sequence variation present across populations. A single alternate allele, or a short haplotype of nearby alleles, can create a match that is not present in the reference assembly. For CRISPR off-target analysis, that means the reference alone is an incomplete search space.</span></p><p><a href="https://doi.org/10.5281/zenodo.14733921"><span>DivRef</span></a><span> was built to help with this problem. The resource contains FASTA records for common human haplotypes and variants, plus an index with population allele frequencies and variant metadata. Those FASTA files can be used directly with CRISPR off-target search tools.</span></p><p><span>I recently rebuilt the DivRef generation workflow because I wanted something more transparent, configurable, and easier to update.</span></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7HdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7HdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 424w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 848w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7HdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png" width="1400" height="1128" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1128,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagram comparing three loci searched with a CRISPR guide. The third locus is missed against the reference genome at 4 mismatches but found at 1 mismatch against a DivRef haplotype record, illustrating that off-target search only reports sites present in its search space. &quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram comparing three loci searched with a CRISPR guide. The third locus is missed against the reference genome at 4 mismatches but found at 1 mismatch against a DivRef haplotype record, illustrating that off-target search only reports sites present in its search space. " title="Diagram comparing three loci searched with a CRISPR guide. The third locus is missed against the reference genome at 4 mismatches but found at 1 mismatch against a DivRef haplotype record, illustrating that off-target search only reports sites present in its search space. " srcset="https://substackcdn.com/image/fetch/$s_!7HdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 424w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 848w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!7HdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff764d9ad-b209-448e-b95a-dd0f28d4ec5e_1400x1128.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>Why rebuild it?</span></strong></h2><p><span>The existing DivRef generation workflow was a collection of standalone Python scripts and a Makefile. Some inputs were hard-coded; others were not fully recorded. That makes it difficult to answer basic questions later: exactly which variants were included, where did they come from, what thresholds were used, and how would the bundle change if those assumptions changed?</span></p><p><span>For some applications, that may be fine. For off-target workflows that need to account for population variation and make their assumptions visible, it is not enough.</span></p><p><span>I reimplemented the workflow in Snakemake, wrapping a Python toolkit, with a configuration schema and support for ingesting data from GCS or AWS Open Data. The workflow runs per chromosome, so a full rebuild with default parameters takes less than 20 hours on a laptop.</span></p><p><span>That makes it practical to rebuild DivRef when the underlying data change, or when a specific scientific application needs different allele frequency thresholds, population sets, or sequence windows. In general, that won&#8217;t occur very often, so a rebuild process that takes less than one day (or less on a VM with more resources) is reasonable.</span></p><h2><strong><span>What changed?</span></strong></h2><p><span>The new workflow makes several updates.</span></p><p><span>The rebuilt workflow now includes gnomAD 4.1 joint exome/genome variants in the single-variant records. The original DivRef documentation said these records were included, but the released resource did not contain them. The rebuild also updates the haplotype computation algorithm, adds chrX haplotypes, flags haplotypes with incompatible variant combinations, and exposes the main assumptions through configuration rather than hard-coded scripts.</span></p><p><span>For single-variant records, users can also specify additional populations from gnomAD 4.1. Several populations have enough samples in the larger joint dataset to be useful, even though they are underrepresented in the gnomAD 3.1.2 phased subset used to build multi-variant haplotypes.</span></p><p><span>The haplotype computation change is especially important. The original algorithm used staggered windows to aggregate nearby variants into haplotypes, then split and deduplicated the results. That approach can split true haplotypes across bin boundaries or choose one representative when the same haplotype appears with different allele counts.</span></p><p><span>The new algorithm walks each sample haplotype in genomic order, cuts parent blocks using a reference-aware gap rule, enumerates contiguous sub-fragments, and counts each parent block once. The result is deterministic and handles indel-driven gaps more cleanly.</span></p><p><span>The workflow also flags haplotypes with incompatibly phased variants instead of trying to repair them. Phasing is not perfect, especially around repeats, which can yield such cases. When the input data place mutually incompatible variants on the same haplotype, the workflow carries that information forward in the index. A downstream user can decide whether to keep or exclude those records for a particular application.</span></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xPAn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xPAn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 424w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 848w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xPAn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png" width="1400" height="1296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1296,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagram of the DivRef build with default parameters: two gnomAD sources &#8212; 3.1.2 HGDP+1KG for haplotypes, 4.1 joint for single variants &#8212; filtered to 0.5% allele frequency in at least one of five populations, producing FASTA records with 25 bp of flanking reference and a DuckDB index of coordinates and per-population frequencies.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram of the DivRef build with default parameters: two gnomAD sources &#8212; 3.1.2 HGDP+1KG for haplotypes, 4.1 joint for single variants &#8212; filtered to 0.5% allele frequency in at least one of five populations, producing FASTA records with 25 bp of flanking reference and a DuckDB index of coordinates and per-population frequencies." title="Diagram of the DivRef build with default parameters: two gnomAD sources &#8212; 3.1.2 HGDP+1KG for haplotypes, 4.1 joint for single variants &#8212; filtered to 0.5% allele frequency in at least one of five populations, producing FASTA records with 25 bp of flanking reference and a DuckDB index of coordinates and per-population frequencies." srcset="https://substackcdn.com/image/fetch/$s_!xPAn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 424w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 848w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!xPAn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6f6254e-513b-4ab2-8049-78e231796753_1400x1296.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><span>Key for off-target workflows</span></strong></h2><p><span>A CRISPR off-target search is only as good as the sequences it searches.</span></p><p><span>If a guide has a plausible off-target match created by a common haplotype, and that haplotype is not represented in the search space, the workflow will never report it. Better alignment logic cannot recover a candidate sequence that was never included.</span></p><p><span>That is why DivRef and Sassy are complementary. Sassy helps expose plausible alignments at a locus. DivRef helps make sure population-level variation and haplotype sequence are available to search in the first place.</span></p><p><span>For teams building or maintaining off-target workflows, this is the kind of detail that tends to matter late, after a method has already become part of a larger pipeline. The tool may run, the output may look reasonable, and the assumptions may still be too hidden for the next use case.</span></p><p><span>A rebuildable DivRef workflow makes those assumptions easier to inspect and change.</span></p><h2><strong><span>Read the technical write-up</span></strong></h2><p><span>This post is the short version. I wrote a more detailed technical walkthrough on GitHub covering the implementation, gnomAD 4.1 inclusion, haplotype computation, incompatible haplotype flags, chrX handling, and runtime details.</span></p><p><strong><span>Read the full technical write-up on GitHub:</span></strong><span> </span><a href="https://github.com/fg-labs/divref-wf/blob/main/docs/blog.md"><span>https://github.com/fg-labs/divref-wf/blob/main/docs/blog.md</span></a></p><p><strong><span>View the workflow:</span></strong><span> </span><a href="https://github.com/fg-labs/divref-wf/tree/main"><span>https://github.com/fg-labs/divref-wf/tree/main</span></a></p><div><hr></div><p>Alison Meynert is a Principal Bioinformatics Scientist at <a href="https://fulcrumgenomics.com/"><span>Fulcrum Genomics</span></a>, where she builds bioinformatics tools and pipelines for the genomics community. She previously ran the bioinformatics core facility at Edinburgh's Institute of Genetics and Cancer, where she built rare disease diagnostic pipelines for NHS Scotland. You can find her on <a href="https://www.linkedin.com/in/alison-meynert-556b1925/"><span>LinkedIn</span></a> and <a href="https://github.com/ameynert"><span>GitHub</span></a>.</p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a><span> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. </span><a href="https://fulcrumgenomics.com/">Contact us to discuss your project</a><span>.</span></p>]]></content:encoded></item><item><title><![CDATA[Why CRISPR Off-Target Search Should Report Multiple Alignments Per Locus]]></title><description><![CDATA[How Sassy enumerates every reasonable alignment without sacrificing runtime]]></description><link>https://blog.fulcrumgenomics.com/p/why-crispr-off-target-search-should</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/why-crispr-off-target-search-should</guid><dc:creator><![CDATA[Tim Dunn]]></dc:creator><pubDate>Tue, 21 Jul 2026 19:48:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pKLX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p><span>CRISPR off-target analysis depends on two things that are easy to take for granted: the sequence space being searched and the alignments a tool chooses to report. A workflow can miss relevant off-target candidates if it searches only the reference genome, or if it collapses multiple plausible alignments at a locus into a single preferred answer.</span></p><p><span>This post focuses on the second problem. Tim Dunn walks through recent work on Sassy that makes it possible to enumerate all reasonable alignments for short sequences such as CRISPR guides, while keeping runtime practical. In a companion post, Alison Meynert will look at the other side of the problem: rebuilding DivRef as a configurable resource for searching human variation and haplotype sequence.</span></p></div><h2><span>Executive Summary</span></h2><p><a href="https://github.com/RagnarGrootKoerkamp/sassy"><span>Sassy</span></a><span> (authored by Rick Beeloo and Ragnar Groot Koerkamp) is an approximate string matching algorithm that uses bitpacking and SIMD instructions to quickly search for short patterns in long texts. The recent </span><a href="https://github.com/RagnarGrootKoerkamp/sassy/releases"><span>v0.2.5 release</span></a><span> (authored by Fulcrum in collaboration with the original authors) eliminates the computational blind spot of returning only the single &#8216;best&#8217; alignment at a particular locus when searching for CRISPR guide RNA off-target sites. For a typical Cas9 guide RNA, the enhanced algorithm identifies &gt;9X more reasonable alignments in the human genome in under 30 seconds of total runtime, allowing researchers to evaluate the full spectrum of its potential off-target interactions.</span></p><h2><span>Background</span></h2><p><span>When CRISPR-Cas9 edits a genome, the guide RNA is designed to direct Cas9 to a single intended target. The guide is only 20 bases, and that&#8217;s short enough that it can partially match thousands of other sites across the human genome. Cas9 will cut at any of those if the spacer binds strongly enough. Unintended off-target cuts can disrupt genes, activate oncogenes, or introduce structural variants, any of which can be catastrophic in a therapeutic setting. Before a CRISPR-based therapy can advance toward the clinic, researchers must enumerate every close-enough partially matched genomic site and characterize what a cut there would mean. This post explains how we extended the fuzzy string matching tool sassy to not just report alignment </span><em><span>locations</span></em><span> within a given maximum edit distance from a guide sequence, but </span><em><span>all reasonable alignments</span></em><span> at each location.</span></p><h2><span>Why Report Every Alignment?</span></h2><p><span>When investigating potential CRISPR off-target sites, looking at only the &#8220;best&#8221; possible alignment at a given location doesn&#8217;t always show the full picture.</span></p><p><span>Consider two ways to align the same guide to one off-target genomic region. For readability, the figure shows the corresponding DNA sequence on the non-target strand, followed by the PAM. This allows the bases to be compared directly without also depicting complementation or U-to-T conversion.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3d2E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3d2E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 424w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 848w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 1272w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3d2E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png" width="1330" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two sequence alignments of the same guide RNA (AGGTTACTACGATCGATGGA&#183;N&#183;GG, followed by a PAM) against the same off-target reference DNA (ATGGT&#183;&#183;CTACGATCGATGGAAGG). Alignment 1 introduces a gap in the guide and two gaps in the DNA, producing 21 matches but 2 gap opens and 3 gap bases for a score of 6. Alignment 2 has no gap in the guide and one gap in the DNA, but incurs 2 mismatches; it scores 5. Alignment 1 wins on sequence similarity, but its two gap opens keep the mismatches at zero while Alignment 2's mismatches fall at specific positions that a biological scoring model might weigh differently&#8212;illustrating that the highest-scoring alignment is not necessarily the most biologically relevant one.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two sequence alignments of the same guide RNA (AGGTTACTACGATCGATGGA&#183;N&#183;GG, followed by a PAM) against the same off-target reference DNA (ATGGT&#183;&#183;CTACGATCGATGGAAGG). Alignment 1 introduces a gap in the guide and two gaps in the DNA, producing 21 matches but 2 gap opens and 3 gap bases for a score of 6. Alignment 2 has no gap in the guide and one gap in the DNA, but incurs 2 mismatches; it scores 5. Alignment 1 wins on sequence similarity, but its two gap opens keep the mismatches at zero while Alignment 2's mismatches fall at specific positions that a biological scoring model might weigh differently&#8212;illustrating that the highest-scoring alignment is not necessarily the most biologically relevant one." title="Two sequence alignments of the same guide RNA (AGGTTACTACGATCGATGGA&#183;N&#183;GG, followed by a PAM) against the same off-target reference DNA (ATGGT&#183;&#183;CTACGATCGATGGAAGG). Alignment 1 introduces a gap in the guide and two gaps in the DNA, producing 21 matches but 2 gap opens and 3 gap bases for a score of 6. Alignment 2 has no gap in the guide and one gap in the DNA, but incurs 2 mismatches; it scores 5. Alignment 1 wins on sequence similarity, but its two gap opens keep the mismatches at zero while Alignment 2's mismatches fall at specific positions that a biological scoring model might weigh differently&#8212;illustrating that the highest-scoring alignment is not necessarily the most biologically relevant one." srcset="https://substackcdn.com/image/fetch/$s_!3d2E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 424w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 848w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 1272w, https://substackcdn.com/image/fetch/$s_!3d2E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d6565d2-ac7a-42aa-9c93-c59014c7700e_1330x844.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Alignment 1 receives a slightly better score when aligned using </span><a href="https://github.com/lh3/BWA"><span>BWA</span></a><span>&#8217;s default parameters, but that does not establish that it is the more biologically relevant configuration. Standard affine-gap and edit-distance scores measure sequence similarity; they are not models of guide binding or cleavage. A downstream model or domain expert may rank the same alignments differently based on the locations and types of edits, including whether the PAM remains intact.</span></p><p><span>A guide-specific scoring model could choose one configuration, but there is no single model whose assumptions are appropriate for every nuclease, guide, or experimental context. Reporting only one alignment therefore commits the analysis to one scoring model before downstream evaluation begins. Sassy instead separates candidate enumeration from biological ranking: it reports every reasonable alignment at the locus, allowing later models and experts to decide which configurations warrant further attention.</span></p><p><span>Rather than trying to claim that every reported alignment is equally likely to produce an off-target cut, the goal is to avoid eliminating plausible configurations before the appropriate biological scoring, filtering, or experimental validation can be applied.</span></p><p><span>The question of which alignments are worth reporting turns out to be surprisingly subtle, and working through it is where some interesting algorithmic ideas live. This post walks through the depth-first search at the core of sassy&#8217;s new search_all_alignments() API, developed collaboratively between Fulcrum Genomics, Ragnar Groot Koerkamp, and Rick Beeloo. The algorithm builds on sassy&#8217;s existing SIMD-accelerated search and adds a recursive backtracker that efficiently enumerates every reasonable alignment within edit distance k.</span></p><h2><span>What We&#8217;re Building On</span></h2><p><span>In this section, we&#8217;ll be using the language of approximate string matching algorithms. A &#8220;pattern&#8221; in this context is the sequence of characters for which you want to find partial or exact matches, e.g. a guide RNA sequence. The &#8220;text&#8221; is the sequence of characters in which you are searching, e.g. a reference genome.</span></p><p><span>Sassy already does the hard part: given a short DNA pattern (in our case a 20 bp guideRNA plus a 3 bp PAM) and a reference sequence, it uses SIMD bitwise operations to find every position where the pattern matches within edit distance k, fast. What it couldn&#8217;t do until now was report </span><em><span>all</span></em><span> reasonable alignments &#8212; the specific sequences of matches, mismatches, insertions, and deletions that connect the pattern to the reference sequence.</span></p><p><span>The new search_all_alignments() API adds a second pass to accomplish this:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hNbK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hNbK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 424w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 848w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 1272w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hNbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png" width="1076" height="190" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:190,&quot;width&quot;:1076,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hNbK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 424w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 848w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 1272w, https://substackcdn.com/image/fetch/$s_!hNbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bfe4c75-7ed7-44d8-b8a9-53ca85fd06a6_1076x190.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>Pass 1 is the same SIMD search sassy already uses. Pass 2 is where the new recursive depth-first search lives.</span></p><h3><span>Pass 1: Alignment</span></h3><p><span>Sassy&#8217;s search_all() algorithm faithfully implements </span><a href="https://ccc.inaoep.mx/~villasen/bib/Navarro_Review_on_Approximate_Matching_p31-navarro.pdf"><span>Navarro&#8217;s definition of &#8216;Approximate String Matching&#8217;</span></a><span>: it finds all positions in the text where an alignment of the pattern with cost &#8804;k ends, and returns those positions with a traceback/alignment for each. If you are unfamiliar with sequence alignment, the </span><a href="https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm"><span>Needleman-Wunsch</span></a><span> Wikipedia article on semi-global alignment provides a good introduction. Sassy uses a block-based dynamic programming (DP) algorithm based on </span><a href="https://dl.acm.org/doi/10.1145/316542.316550"><span>Myers&#8217; bit-parallel alignment</span></a><span> algorithm to efficiently search the text. Below, an example fully-computed DP matrix shows alignment end positions where the pattern matches the text with edit distance k&#8804;3 (highlighted in gray). For this figure (and all following matrices), we depict only the 7-base prefix of the pattern, since all remaining bases match and are uninformative.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VUcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VUcT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 424w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 848w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 1272w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VUcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png" width="1456" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A fully-computed dynamic-programming edit-distance matrix for Sassy's search_all() function. The vertical axis is the 7-base guide RNA prefix AGGT TAC (one base per row, rows 1&#8211;7); the horizontal axis is the reference DNA text ATGGTCAGACAGCTAAGCAAGTA (one base per column, columns 1&#8211;23), with a row 0 and column 0 of zeros representing the semi-global alignment initialization. Each cell holds the minimum edit distance to align the pattern prefix ending at that row against a text substring ending at that column. Cells in the final row (pattern base C, row 7) with values &#8804; 3 are shaded gray; these mark the text positions where the full pattern aligns with at most 3 edits. Nine such positions are highlighted, occurring at text columns 7, 8, 9, 11, 16, 17, 18, 19, and 23, with values of 3, 3, 3, 3, 3, 3, 3, 3, and 3 respectively.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A fully-computed dynamic-programming edit-distance matrix for Sassy's search_all() function. The vertical axis is the 7-base guide RNA prefix AGGT TAC (one base per row, rows 1&#8211;7); the horizontal axis is the reference DNA text ATGGTCAGACAGCTAAGCAAGTA (one base per column, columns 1&#8211;23), with a row 0 and column 0 of zeros representing the semi-global alignment initialization. Each cell holds the minimum edit distance to align the pattern prefix ending at that row against a text substring ending at that column. Cells in the final row (pattern base C, row 7) with values &#8804; 3 are shaded gray; these mark the text positions where the full pattern aligns with at most 3 edits. Nine such positions are highlighted, occurring at text columns 7, 8, 9, 11, 16, 17, 18, 19, and 23, with values of 3, 3, 3, 3, 3, 3, 3, 3, and 3 respectively." title="A fully-computed dynamic-programming edit-distance matrix for Sassy's search_all() function. The vertical axis is the 7-base guide RNA prefix AGGT TAC (one base per row, rows 1&#8211;7); the horizontal axis is the reference DNA text ATGGTCAGACAGCTAAGCAAGTA (one base per column, columns 1&#8211;23), with a row 0 and column 0 of zeros representing the semi-global alignment initialization. Each cell holds the minimum edit distance to align the pattern prefix ending at that row against a text substring ending at that column. Cells in the final row (pattern base C, row 7) with values &#8804; 3 are shaded gray; these mark the text positions where the full pattern aligns with at most 3 edits. Nine such positions are highlighted, occurring at text columns 7, 8, 9, 11, 16, 17, 18, 19, and 23, with values of 3, 3, 3, 3, 3, 3, 3, 3, and 3 respectively." srcset="https://substackcdn.com/image/fetch/$s_!VUcT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 424w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 848w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 1272w, https://substackcdn.com/image/fetch/$s_!VUcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb018bfc-a228-4feb-bc9e-fa8fce02fff7_2048x834.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><span>Pass 2: Backtracking</span></h3><p><span>Backtracking occurs independently for each of the alignment end positions highlighted in the final row of the above DP matrix. In order to make backtracking simple, many sequence alignment implementations store the predecessor of each cell in the DP matrix when it is first reached during the forward pass. Once the full DP matrix has been computed, backtracking is as simple as following a trail of pointers to the top of the matrix:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6u8v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6u8v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 424w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 848w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6u8v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png" width="1456" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A DP edit-distance matrix titled \&quot;Standard Backtracking,\&quot; with the 7-base guide RNA prefix AGGT TAC on the vertical axis and the reference DNA text ATGGTC on the horizontal axis. Every cell contains both a numeric edit-distance value and a small colored arrow indicating how that cell was reached from its predecessor: a green diagonal arrow for a match, red diagonal for a substitution, blue upward for an insertion in the pattern, and gold leftward for a deletion from the text (key shown at right). A gray-shaded trail of cells marks the traceback path from the bottom-right end-position cell (value 3) back to the top of the matrix, following the stored predecessor arrows. The path proceeds mostly along the main diagonal, reflecting several matches, but includes a blue upward arrow at one step, indicating an insertion. The traceback terminates at row 0, giving the alignment start position in the text.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A DP edit-distance matrix titled &quot;Standard Backtracking,&quot; with the 7-base guide RNA prefix AGGT TAC on the vertical axis and the reference DNA text ATGGTC on the horizontal axis. Every cell contains both a numeric edit-distance value and a small colored arrow indicating how that cell was reached from its predecessor: a green diagonal arrow for a match, red diagonal for a substitution, blue upward for an insertion in the pattern, and gold leftward for a deletion from the text (key shown at right). A gray-shaded trail of cells marks the traceback path from the bottom-right end-position cell (value 3) back to the top of the matrix, following the stored predecessor arrows. The path proceeds mostly along the main diagonal, reflecting several matches, but includes a blue upward arrow at one step, indicating an insertion. The traceback terminates at row 0, giving the alignment start position in the text." title="A DP edit-distance matrix titled &quot;Standard Backtracking,&quot; with the 7-base guide RNA prefix AGGT TAC on the vertical axis and the reference DNA text ATGGTC on the horizontal axis. Every cell contains both a numeric edit-distance value and a small colored arrow indicating how that cell was reached from its predecessor: a green diagonal arrow for a match, red diagonal for a substitution, blue upward for an insertion in the pattern, and gold leftward for a deletion from the text (key shown at right). A gray-shaded trail of cells marks the traceback path from the bottom-right end-position cell (value 3) back to the top of the matrix, following the stored predecessor arrows. The path proceeds mostly along the main diagonal, reflecting several matches, but includes a blue upward arrow at one step, indicating an insertion. The traceback terminates at row 0, giving the alignment start position in the text." srcset="https://substackcdn.com/image/fetch/$s_!6u8v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 424w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 848w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!6u8v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b084f48-2105-479e-9cda-3e12faea2e60_1570x1458.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Since we would like to return </span><strong><span>all reasonable</span></strong><span> alignments, and not just </span><strong><span>one</span></strong><span> alignment that ends at this position, we cannot take this approach and must instead consider each possible path backwards from the alignment end position:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GG8b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GG8b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 424w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 848w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 1272w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GG8b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png" width="1456" height="1351" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1351,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A DP edit-distance matrix titled \&quot;Naive DFS Backtracking,\&quot; with the same layout as the standard backtracking figure: the 7-base guide RNA prefix AGGT TAC on the vertical axis and reference DNA text ATGGTC on the horizontal axis. Unlike standard backtracking, where each cell stores a single predecessor arrow, here every cell displays all three possible backward moves simultaneously&#8212;a green diagonal (match), red diagonal (substitution), blue upward (insertion), and gold leftward (deletion)&#8212;representing every path a DFS could follow. The bottom-right cell, value 3, is shaded gray as the alignment end position. From that cell, the DFS would recursively explore all arrow directions, pruning any path whose cumulative edit cost exceeds k, until it reaches row 0 for each surviving path.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A DP edit-distance matrix titled &quot;Naive DFS Backtracking,&quot; with the same layout as the standard backtracking figure: the 7-base guide RNA prefix AGGT TAC on the vertical axis and reference DNA text ATGGTC on the horizontal axis. Unlike standard backtracking, where each cell stores a single predecessor arrow, here every cell displays all three possible backward moves simultaneously&#8212;a green diagonal (match), red diagonal (substitution), blue upward (insertion), and gold leftward (deletion)&#8212;representing every path a DFS could follow. The bottom-right cell, value 3, is shaded gray as the alignment end position. From that cell, the DFS would recursively explore all arrow directions, pruning any path whose cumulative edit cost exceeds k, until it reaches row 0 for each surviving path." title="A DP edit-distance matrix titled &quot;Naive DFS Backtracking,&quot; with the same layout as the standard backtracking figure: the 7-base guide RNA prefix AGGT TAC on the vertical axis and reference DNA text ATGGTC on the horizontal axis. Unlike standard backtracking, where each cell stores a single predecessor arrow, here every cell displays all three possible backward moves simultaneously&#8212;a green diagonal (match), red diagonal (substitution), blue upward (insertion), and gold leftward (deletion)&#8212;representing every path a DFS could follow. The bottom-right cell, value 3, is shaded gray as the alignment end position. From that cell, the DFS would recursively explore all arrow directions, pruning any path whose cumulative edit cost exceeds k, until it reaches row 0 for each surviving path." srcset="https://substackcdn.com/image/fetch/$s_!GG8b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 424w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 848w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 1272w, https://substackcdn.com/image/fetch/$s_!GG8b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303bdae7-22f4-41b4-b5cd-edef44fd5a65_1574x1460.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At each step, the depth-first search (DFS) considers three backward moves: diagonal (Match or Sub, consuming one base in both sequences), horizontal (Del, consuming text only), and vertical (Ins, consuming pattern only). Any move that would push the cumulative edit cost above k is pruned immediately. Other subtrees are explored only if they meet several additional criteria, explained in more detail below.</span></p><h2><span>What Does &#8220;All Reasonable Alignments&#8221; Mean?</span></h2><p><span>Before writing a line of code, the team had to answer a difficult question: which alignments should actually be reported?</span></p><p><span>Naively enumerating every path through the edit-distance dynamic programming (DP) graph is combinatorially explosive. Aligning a 23-mer and allowing k=6 edits has on the order of millions of candidate paths, and reference regions dense with N bases make things even worse. You need a principled way to thin the set.</span></p><p><span>Our discussion converged on the idea that an alignment B is </span><strong><span>not</span></strong><span> </span><strong><span>reasonable</span></strong><span> if there exists another alignment A that covers the same region with a strict subset of the edits. In this case, alignment A should be kept and alignment B should be discarded.</span></p><p><span>In general, a &#8220;reasonable&#8221; alignment with edit distance &#8804;k must meet the following additional criteria:</span></p><blockquote><p><strong><span>(A)</span></strong><span> it doesn&#8217;t start or end with deletions, i.e. horizontal edges (deletions don&#8217;t consume pattern bases, so the alignment should be considered complete instead of marking additional text bases as deleted when they could just not be part of the alignment)</span></p><p><strong><span>(B) </span></strong><span>for any two points in the alignment, if the intervening positions match exactly in the text and pattern, the alignment uses those matches rather than routing around it with indels</span></p><p><strong><span>(C)</span></strong><span> it doesn&#8217;t contain adjacent insertions and deletions (in this case, substitutions should be preferred)</span></p></blockquote><p><span>For example, an alignment with </span><a href="https://timd.one/blog/genomics/cigar.php"><span>CIGAR string</span></a><span> 4=1I2=1D4= is not reasonable if another alignment covering the same positions has CIGAR string 9=, and so only 9= is reported. But 4=1X6= and 4=1I2=1D4= are incomparable (neither alignment contains a set of edits that is a subset of the other), so both get reported. Below, we explain how these criteria are enforced in greater detail:</span></p><h3><span>Rule 1 &#8212; No leading or trailing deletions (Criterion A)</span></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ieRo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ieRo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 424w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 848w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 1272w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ieRo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png" width="916" height="124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:124,&quot;width&quot;:916,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ieRo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 424w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 848w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 1272w, https://substackcdn.com/image/fetch/$s_!ieRo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa280826d-de85-45d2-8a64-c08c02b0d3e5_916x124.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>In general, a deletion represents a text base that is not present in the pattern. A deletion at the very edge of the aligned region is meaningless, since all text bases outside the aligned region are already not present in the pattern. For any alignment with cost c where c&lt;k, the alignment could be left- and right-padded with up to k-c deletions. These additional alignments are not useful, and should be discarded.</span></p><h3><span>Rule 2 &#8212; Don&#8217;t leave a diagonal you can extend exactly to the end (Criterion B)</span></h3><p><span>Before taking an indel movement away from the current diagonal, the algorithm checks whether the remaining pattern prefix matches the corresponding text exactly:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VQEz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VQEz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 424w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 848w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 1272w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VQEz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png" width="1132" height="184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c41739aa-410f-436a-951a-805df0a0fd71_1132x184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:184,&quot;width&quot;:1132,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VQEz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 424w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 848w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 1272w, https://substackcdn.com/image/fetch/$s_!VQEz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41739aa-410f-436a-951a-805df0a0fd71_1132x184.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>If the prefix is all exact matches, any indel taken here produces an unreasonable alignment, since there exists an alignment (the path with all matches) with no additional edits. This rule covers criterion B from the </span><strong><span>left-hand</span></strong><span> side of the alignment.</span></p><h3><span>Rule 3 &#8212; Don&#8217;t enter a diagonal reachable by exact matches (Criterion B)</span></h3><p><span>The symmetric counterpart: when entering a new diagonal via an indel, the algorithm checks whether the pattern rows between the new position and the last time it visited this diagonal are all exact matches:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4zyl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4zyl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 424w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 848w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 1272w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4zyl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png" width="1242" height="156" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:156,&quot;width&quot;:1242,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4zyl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 424w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 848w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 1272w, https://substackcdn.com/image/fetch/$s_!4zyl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f30054-e837-49d6-a0b0-1e234ce51310_1242x156.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>If these slices match exactly, then there exists an alignment with fewer edits (that never left this diagonal during this section of the alignment) and the current alignment is unreasonable and can be discarded. The key data structure here is last_row_in_diagonal, a vector that tracks, for each diagonal in the DP matrix, the most recent row in this diagonal visited during the current DFS. This logic enables enforcing criterion B from the </span><strong><span>right-hand</span></strong><span> side of each indel, ensuring that no unnecessary indels are ever included.</span></p><p><span>The following example illustrates this criterion filtering out path P2 as it extends leftwards into the dark gray cell (1,1). Because the last time this path visited the main diagonal was cell (4,4), text[1..4] = TGG is compared to pattern[1..4] = TGG and this path is pruned because alternate path P1 exists with fewer edits.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fnsv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fnsv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 424w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 848w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fnsv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png" width="1456" height="1060" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1060,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A DP matrix with the same layout as before&#8212;guide RNA prefix AT GGTA C on the vertical axis, reference DNA ATGGTC on the horizontal axis&#8212;with faded background arrows showing all possible moves. Two backtracking paths are overlaid and highlighted in gray. P1 (green, labeled \&quot;Reasonable\&quot;) travels along the main diagonal through cells (1,1), (2,2), (3,3), (4,4), continuing downward with matches and a small number of edits. P2 (red, labeled \&quot;Not Reasonable\&quot;) takes a divergent route involving substitutions and insertions, eventually making a leftward deletion move to reach cell (1,1), which is shaded dark gray to mark where pruning occurs. P2 is pruned at that cell because the last time it visited the main diagonal was (4,4), and the intervening slice&#8212;pattern rows 1&#8211;4 (TGG) and text columns 1&#8211;4 (TGG)&#8212;match exactly, meaning P1 covers the same region with fewer edits and P2's detour is unnecessary.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A DP matrix with the same layout as before&#8212;guide RNA prefix AT GGTA C on the vertical axis, reference DNA ATGGTC on the horizontal axis&#8212;with faded background arrows showing all possible moves. Two backtracking paths are overlaid and highlighted in gray. P1 (green, labeled &quot;Reasonable&quot;) travels along the main diagonal through cells (1,1), (2,2), (3,3), (4,4), continuing downward with matches and a small number of edits. P2 (red, labeled &quot;Not Reasonable&quot;) takes a divergent route involving substitutions and insertions, eventually making a leftward deletion move to reach cell (1,1), which is shaded dark gray to mark where pruning occurs. P2 is pruned at that cell because the last time it visited the main diagonal was (4,4), and the intervening slice&#8212;pattern rows 1&#8211;4 (TGG) and text columns 1&#8211;4 (TGG)&#8212;match exactly, meaning P1 covers the same region with fewer edits and P2's detour is unnecessary." title="A DP matrix with the same layout as before&#8212;guide RNA prefix AT GGTA C on the vertical axis, reference DNA ATGGTC on the horizontal axis&#8212;with faded background arrows showing all possible moves. Two backtracking paths are overlaid and highlighted in gray. P1 (green, labeled &quot;Reasonable&quot;) travels along the main diagonal through cells (1,1), (2,2), (3,3), (4,4), continuing downward with matches and a small number of edits. P2 (red, labeled &quot;Not Reasonable&quot;) takes a divergent route involving substitutions and insertions, eventually making a leftward deletion move to reach cell (1,1), which is shaded dark gray to mark where pruning occurs. P2 is pruned at that cell because the last time it visited the main diagonal was (4,4), and the intervening slice&#8212;pattern rows 1&#8211;4 (TGG) and text columns 1&#8211;4 (TGG)&#8212;match exactly, meaning P1 covers the same region with fewer edits and P2's detour is unnecessary." srcset="https://substackcdn.com/image/fetch/$s_!Fnsv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 424w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 848w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!Fnsv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7af44c-319c-4d55-aa07-081ba7f99c36_1898x1382.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><span>Rule 4 &#8212; No insertion-deletion mixing without a match anchor (Criterion C)</span></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kL_E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kL_E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 424w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 848w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 1272w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kL_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png" width="894" height="124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:124,&quot;width&quot;:894,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kL_E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 424w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 848w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 1272w, https://substackcdn.com/image/fetch/$s_!kL_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee72a2a-6ff5-4fab-8c85-ac1fd3d8b24f_894x124.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>In an alignment, adjacent insertions and deletions can always be replaced by substitutions. For every alignment that includes a mismatch (X), reporting a pair of adjacent indels (ID or DI) as well is not useful. This rule avoids reporting all such alignments, but still allows D=I and I=D when == does not work.</span></p><h3><span>Summary</span></h3><p><span>The result of applying these four rules during a depth-first backtracking search is an iterator that delivers every structurally distinct alignment within cost k, without reporting unreasonable alignments, and without materializing the exponential set of possible alignments first.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pKLX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pKLX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 424w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 848w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 1272w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pKLX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png" width="1456" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A DP matrix titled \&quot;Final DFS Backtracking,\&quot; with guide RNA prefix AGGT TAC on the vertical axis and reference DNA ATGGTC on the horizontal axis, with faded background arrows as in previous figures. Seven distinct backtracking paths are overlaid, all terminating at the same gray-highlighted end-position cell in the bottom right and fanning out toward the upper left as they trace different routes to row 0. A gray band highlights the diagonal region the paths traverse. Each path is a different color and labeled with a compact edit string in the key: P1 (blue, 1=1X1=1X1=1I1=), P2 (teal, 1X2=1I1=1I1=), P3 (pink, 1=1D2=1I1=1I1=), P4 (cyan, 1I2=1I1=1I1=), P5 (green, 1X3=2I1=), P6 (orange, 1=1D3=2I1=), and P7 (purple, 1I3=2I1=). P6 and P1 correspond to Alignment 1 and Alignment 2 respectively from the opening figure of the post.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A DP matrix titled &quot;Final DFS Backtracking,&quot; with guide RNA prefix AGGT TAC on the vertical axis and reference DNA ATGGTC on the horizontal axis, with faded background arrows as in previous figures. Seven distinct backtracking paths are overlaid, all terminating at the same gray-highlighted end-position cell in the bottom right and fanning out toward the upper left as they trace different routes to row 0. A gray band highlights the diagonal region the paths traverse. Each path is a different color and labeled with a compact edit string in the key: P1 (blue, 1=1X1=1X1=1I1=), P2 (teal, 1X2=1I1=1I1=), P3 (pink, 1=1D2=1I1=1I1=), P4 (cyan, 1I2=1I1=1I1=), P5 (green, 1X3=2I1=), P6 (orange, 1=1D3=2I1=), and P7 (purple, 1I3=2I1=). P6 and P1 correspond to Alignment 1 and Alignment 2 respectively from the opening figure of the post." title="A DP matrix titled &quot;Final DFS Backtracking,&quot; with guide RNA prefix AGGT TAC on the vertical axis and reference DNA ATGGTC on the horizontal axis, with faded background arrows as in previous figures. Seven distinct backtracking paths are overlaid, all terminating at the same gray-highlighted end-position cell in the bottom right and fanning out toward the upper left as they trace different routes to row 0. A gray band highlights the diagonal region the paths traverse. Each path is a different color and labeled with a compact edit string in the key: P1 (blue, 1=1X1=1X1=1I1=), P2 (teal, 1X2=1I1=1I1=), P3 (pink, 1=1D2=1I1=1I1=), P4 (cyan, 1I2=1I1=1I1=), P5 (green, 1X3=2I1=), P6 (orange, 1=1D3=2I1=), and P7 (purple, 1I3=2I1=). P6 and P1 correspond to Alignment 1 and Alignment 2 respectively from the opening figure of the post." srcset="https://substackcdn.com/image/fetch/$s_!pKLX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 424w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 848w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 1272w, https://substackcdn.com/image/fetch/$s_!pKLX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d5a963-9a84-4e98-93d2-d73a710477e4_1968x1468.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The above figure visualizes all seven search_all_alignments() results reported on this example, and you can see that both Alignment #1 and Alignment #2 from the very  first figure in this blog post are depicted here as paths P6 and P1, respectively.</span></p><h2><span>Optimization: Filtering N-dense Regions</span></h2><p><span>Reference sequences frequently contain hard-masked regions, most often due to assembly gaps caused by repetitive regions such as centromeres or telomeres. These are present in the FASTA as long stretches of N bases (e.g. NNNNN&#8230;) which result in a large number of uninformative alignments, since all bases A/C/G/T are considered a Match with N. To enable filtering these alignments, search_all_alignments() provides the argument max_n_frac, which defaults to 0.2. Any alignments where more than 20% of the aligned reference bases are Ns are discarded.</span></p><p><span>In many such cases, we can avoid computing the recursive DFS entirely using known properties of the alignment and text. All alignments of a pattern to the text with edit distance &#8804;k must have length of at least len(pattern)-k and at most len(pattern)+k. The alignment&#8217;s end_pos in the text has been computed by search_all(), and is known. Thus, all alignments will cover the region text[end_pos - (len(pattern)-k).. end_pos], though some may extend further leftwards. If the number of Ns contained in this text substring divided by the maximum possible alignment length (len(pattern)+k) exceeds max_n_frac, no alignments from this position will be valid and the recursive DFS can be skipped entirely. Since the pattern length is 23 and k is usually less than or equal to 6, as long as max_n_frac is below 58%, all alignments fully within hard-masked regions will be skipped.</span></p><h2><span>Conclusion</span></h2><p><span>Aligning the guideRNA sequence GAGTCCGAGCAGAAGAAGAANGG (from </span><a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC3795411/"><span>Zhang 2013</span></a><span>) to a GRCh38 reference FASTA with k=6 results in the following high-level metrics, computed on an Apple M3 Max:</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xIzH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xIzH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 424w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 848w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 1272w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xIzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png" width="1208" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c093152f-2539-4d72-8d10-e25683410e27_1208x292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:1208,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53580,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/207926040?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xIzH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 424w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 848w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 1272w, https://substackcdn.com/image/fetch/$s_!xIzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc093152f-2539-4d72-8d10-e25683410e27_1208x292.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>In under 30 seconds, we are able to find all reasonable alignments of the guide RNA to the human reference genome. The new N-region pre-filtering and recursive backtracking steps add less than 10 seconds of runtime, yet they are able to discard over 99% of hits as uninformative and increase the total number of useful alignments by over 9x! This is important because any alignments which are not reported are unable to be filtered and evaluated by a human expert. Removing this computational blind spot is cheap and fast, potentially saving significant time and money on downstream validation efforts.</span></p><p><span>Sassy is currently available on </span><a href="https://github.com/RagnarGrootKoerkamp/sassy"><span>GitHub</span></a><span>. The alignment iterator work is complete and has been incorporated into the recent sassy release v0.2.5.This release includes both a Rust implementation and Python bindings for Searcher.search_all_alignments().</span></p><p></p><div><hr></div><p>Tim Dunn is a Staff Bioinformatics Scientist at <a href="http://fulcrumgenomics.com"><span>Fulcrum Genomics</span></a>, where he builds bioinformatics tools and pipelines for the genomics community. He earned his PhD in Computer Science from the University of Michigan and is the author of <a href="https://github.com/timd1/vcfdist"><span>vcfdist</span></a>, a method for accurately benchmarking small variant calls. You can find him on <a href="https://linkedin.com/in/timdone"><span>LinkedIn</span></a> and <a href="https://github.com/TimD1"><span>GitHub</span></a>, where he's still trying to convince two variant callers they made the same call.</p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a><span> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. </span><a href="https://fulcrumgenomics.com/">Contact us to discuss your project</a><span>.</span></p>]]></content:encoded></item><item><title><![CDATA[Minibwa: alignment is never solved]]></title><description><![CDATA[Heng Li and Nils Homer revisit BWA-MEM with a faster mapper for short reads, accurate long reads, and bisulfite sequencing data.]]></description><link>https://blog.fulcrumgenomics.com/p/minibwa-alignment-is-never-solved</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/minibwa-alignment-is-never-solved</guid><pubDate>Tue, 30 Jun 2026 17:09:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!b6Tx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>It is used because it works. It is used because thousands of pipelines were built around it. It is used because changing an aligner is never a casual decision when the output feeds variant calling, methylation profiling, clinical workflows, large research studies, and production-scale analysis.</span></p><p><span>That kind of staying power is a credit to the original tool. It also creates a familiar problem in bioinformatics: once a tool becomes standard, the field starts treating its limitations as part of the landscape.</span></p><p><span>Tim Fennell recently wrote about this in</span><a href="https://blog.fulcrumgenomics.com/p/bioinformatics-still-mostly-runs"><span> Bioinformatics Still (Mostly) Runs on Old Plumbing</span></a><span>. A lot of useful work in genomics happens below the visible layer of new assays and new methods, in the libraries, file formats, utilities, and command-line tools that carry the everyday workload. When those tools get faster or more reliable, the benefit spreads across many workflows at once.</span></p><p><span>The new preprint from Heng Li and Fulcrum Genomics&#8217; Nils Homer is a concrete example of that argument.</span></p><p><span>Minibwa takes on one of the most widely used pieces of genomic infrastructure: read alignment.</span></p><h2><strong><span>Moving past strict compatibility</span></strong></h2><p><span>A lot of recent work on BWA-MEM has focused on acceleration while preserving BWA-MEM-like behavior. BWA-MEM2 improved performance. BWA-MEME, BWA-MEM3, GPU implementations, and other efforts have pushed the limits of the approach.</span></p><p><span>That work is valuable, but strict compatibility creates a ceiling. If a tool has to stay close to BWA-MEM by design, there are only so many algorithmic changes and code optimizations it can make.</span></p><p><span>Minibwa takes a different approach. It does not try to be a bit-identical replacement for BWA-MEM. It keeps pieces that still make sense, including BWA-MEM-style variable-length seeding, but combines them with newer approaches from minimap2 and ropebwt3.</span></p><p><span>The result is a mapper designed for standard WGS short reads, Hi-C reads, accurate long reads, and directional bisulfite sequencing data.</span></p><p><span>In practical terms, minibwa introduces:</span></p><ul><li><p><span>a faster batched SMEM-finding algorithm</span></p></li><li><p><span>minimap2-style chaining adapted for variable-length seeds</span></p></li><li><p><span>SIMD-based base alignment</span></p></li><li><p><span>more frequent use of ungapped fast paths</span></p></li><li><p><span>reduced effort in highly repetitive regions where short reads are unlikely to be placed accurately</span></p></li><li><p><span>native support for directional bisulfite sequencing</span></p></li></ul><p><span>That last point is worth calling out. BWA-Meth made bisulfite alignment practical by wrapping BWA-MEM. BISCUIT went deeper by modifying the BWA-MEM source code. Minibwa brings bisulfite-aware mapping into a faster framework rather than treating it as a layer bolted onto older assumptions.</span></p><h2><strong><span>The speedup is substantial</span></strong></h2><p><span>The headline result is speed.</span></p><p><span>In the reported benchmarks, minibwa is about four times as fast as BWA-MEM and more than twice as fast as BWA-MEM2 for standard WGS short-read alignment, while maintaining comparable accuracy. For long-read data, it is slightly faster than minimap2 in the reported tests. For bisulfite sequencing, it is several times faster than BWA-Meth and BISCUIT, and more than 10 times faster than Bismark.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b6Tx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b6Tx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 424w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 848w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 1272w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b6Tx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png" width="1438" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Grouped bar charts comparing the speed and peak memory of genomic read aligners on real data, with reads aligned to GRCh38. The top row shows speed in Gbp/hr over 32 threads; the bottom row shows peak memory in GB. Three column panels group results by data type: short-read aligners (left), long-read aligners (middle, HiFi and ONT), and bisulfite-sequencing aligners (right, BS-seq). Left panels (short-read, with WGS, SBX, and Hi-C bars): For speed, minibwa reaches roughly 100&#8211;135 Gbp/hr across data types, far above bowtie2, bwa-mem, bwa-mem2, and bwa-mem3 (most under 75), and well above minibwa-rs and minimap2. Only strobealign is faster on WGS (~150). Memory use for minibwa is low (~8 GB), comparable to bowtie2 and bwa-mem, while bwa-meme (~130 GB) and strobealign (~45&#8211;90 GB) consume far more. Middle panels (long-read, HiFi and ONT): For speed, minibwa (~118 HiFi, ~103 ONT) leads minimap2 and rammap (~77&#8211;88) and dwarfs winnowmap2 (~8). Peak memory for all four sits between ~15 and 30 GB. Right panels (bisulfite, BS-seq): For speed, minibwa-meth reaches ~50 Gbp/hr, roughly 2.5&#215; biscuit (~19), ~4&#215; bwa-meth (~13), and over 10&#215; bismark (~3). For memory, bwa-meth is highest (~57 GB), biscuit ~25 GB, and minibwa-meth lowest (~15 GB). Across panels, minibwa delivers leading or near-leading speed while keeping peak memory among the lowest of the tested aligners.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Grouped bar charts comparing the speed and peak memory of genomic read aligners on real data, with reads aligned to GRCh38. The top row shows speed in Gbp/hr over 32 threads; the bottom row shows peak memory in GB. Three column panels group results by data type: short-read aligners (left), long-read aligners (middle, HiFi and ONT), and bisulfite-sequencing aligners (right, BS-seq). Left panels (short-read, with WGS, SBX, and Hi-C bars): For speed, minibwa reaches roughly 100&#8211;135 Gbp/hr across data types, far above bowtie2, bwa-mem, bwa-mem2, and bwa-mem3 (most under 75), and well above minibwa-rs and minimap2. Only strobealign is faster on WGS (~150). Memory use for minibwa is low (~8 GB), comparable to bowtie2 and bwa-mem, while bwa-meme (~130 GB) and strobealign (~45&#8211;90 GB) consume far more. Middle panels (long-read, HiFi and ONT): For speed, minibwa (~118 HiFi, ~103 ONT) leads minimap2 and rammap (~77&#8211;88) and dwarfs winnowmap2 (~8). Peak memory for all four sits between ~15 and 30 GB. Right panels (bisulfite, BS-seq): For speed, minibwa-meth reaches ~50 Gbp/hr, roughly 2.5&#215; biscuit (~19), ~4&#215; bwa-meth (~13), and over 10&#215; bismark (~3). For memory, bwa-meth is highest (~57 GB), biscuit ~25 GB, and minibwa-meth lowest (~15 GB). Across panels, minibwa delivers leading or near-leading speed while keeping peak memory among the lowest of the tested aligners." title="Grouped bar charts comparing the speed and peak memory of genomic read aligners on real data, with reads aligned to GRCh38. The top row shows speed in Gbp/hr over 32 threads; the bottom row shows peak memory in GB. Three column panels group results by data type: short-read aligners (left), long-read aligners (middle, HiFi and ONT), and bisulfite-sequencing aligners (right, BS-seq). Left panels (short-read, with WGS, SBX, and Hi-C bars): For speed, minibwa reaches roughly 100&#8211;135 Gbp/hr across data types, far above bowtie2, bwa-mem, bwa-mem2, and bwa-mem3 (most under 75), and well above minibwa-rs and minimap2. Only strobealign is faster on WGS (~150). Memory use for minibwa is low (~8 GB), comparable to bowtie2 and bwa-mem, while bwa-meme (~130 GB) and strobealign (~45&#8211;90 GB) consume far more. Middle panels (long-read, HiFi and ONT): For speed, minibwa (~118 HiFi, ~103 ONT) leads minimap2 and rammap (~77&#8211;88) and dwarfs winnowmap2 (~8). Peak memory for all four sits between ~15 and 30 GB. Right panels (bisulfite, BS-seq): For speed, minibwa-meth reaches ~50 Gbp/hr, roughly 2.5&#215; biscuit (~19), ~4&#215; bwa-meth (~13), and over 10&#215; bismark (~3). For memory, bwa-meth is highest (~57 GB), biscuit ~25 GB, and minibwa-meth lowest (~15 GB). Across panels, minibwa delivers leading or near-leading speed while keeping peak memory among the lowest of the tested aligners." srcset="https://substackcdn.com/image/fetch/$s_!b6Tx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 424w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 848w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 1272w, https://substackcdn.com/image/fetch/$s_!b6Tx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F913a0d6c-f17e-43d4-b814-a12a965f7fb2_1438x896.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>That kind of improvement is important because alignment remains a real cost center in many genomics workflows.  In complementary work, we </span><a href="https://blog.fulcrumgenomics.com/p/introducing-fgumi"><span>re-wrote fgbio into fgumi</span></a><span> finding significant speedups in the fgbio tools (over 25x), finding that now alignment is the dominant bottleneck in the end to end workflow.</span></p><p><span>Even when it is not the only bottleneck, it is often one of the steps teams have learned to scale around. More cores. More waiting. More Cloud spend. More acceptance that the old path is simply the path.</span></p><p><span>Minibwa shows that some of that cost is not inherent to the problem. Some of it comes from inherited design choices.</span></p><p><span>As Nils puts it:</span></p><blockquote><p><span>&#8220;Every hour and every dollar spent on alignment sits between a sample and an answer. Cutting both reaches the patient, the clinical report, and the researcher.&#8221;</span></p></blockquote><h2><strong><span>Accuracy still has to survive downstream</span></strong></h2><p><span>A faster aligner is useful only if the downstream results hold up.</span></p><p><span>On simulated WGS short reads, BWA-MEM remains slightly more accurate in some settings, largely because of centromeric and acrocentric regions. Minibwa spends less effort in regions where short reads are often difficult or impossible to place accurately because of repetitiveness and structural variation.</span></p><p><span>That is the tradeoff, and it&#8217;s worth considering for your own pipelines. But we think the better question is whether it changes the outputs users actually care about.</span></p><p><span>For small variant calling, the reported answer is encouraging.</span></p><p><span>In the preprint, HG002 short reads were aligned to GRCh38, variants were called with DeepVariant, and results were compared to the GIAB Q100 truth set. Minibwa closely matched or slightly improved on BWA-MEM: fewer SNP false negatives, fewer SNP false positives, fewer indel false negatives, and slightly more indel false positives.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9IY4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9IY4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 424w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 848w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 1272w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9IY4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png" width="676" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b2da045-552c-4016-8215-3faa04b9a847_676x308.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:676,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Short-read variant calling accuracy with DeepVariant, comparing three aligners on false negative (#FN) and false positive (#FP) counts for SNPs and indels. Lower is better; bold marks the best performer per metric. For SNPs, minibwa has the fewest false negatives (46,367) and false positives (7,544), beating BWA-MEM (46,895 FN; 7,585 FP) and strobealign (57,545 FN; 8,108 FP). For indels, minibwa has the fewest false negatives (36,321), ahead of BWA-MEM (37,425) and strobealign (37,828), while BWA-MEM has the fewest false positives (5,218) versus minibwa's 5,308 and strobealign's 5,655. minibwa is best or near-best on every metric, leading on three of four.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Short-read variant calling accuracy with DeepVariant, comparing three aligners on false negative (#FN) and false positive (#FP) counts for SNPs and indels. Lower is better; bold marks the best performer per metric. For SNPs, minibwa has the fewest false negatives (46,367) and false positives (7,544), beating BWA-MEM (46,895 FN; 7,585 FP) and strobealign (57,545 FN; 8,108 FP). For indels, minibwa has the fewest false negatives (36,321), ahead of BWA-MEM (37,425) and strobealign (37,828), while BWA-MEM has the fewest false positives (5,218) versus minibwa's 5,308 and strobealign's 5,655. minibwa is best or near-best on every metric, leading on three of four." title="Short-read variant calling accuracy with DeepVariant, comparing three aligners on false negative (#FN) and false positive (#FP) counts for SNPs and indels. Lower is better; bold marks the best performer per metric. For SNPs, minibwa has the fewest false negatives (46,367) and false positives (7,544), beating BWA-MEM (46,895 FN; 7,585 FP) and strobealign (57,545 FN; 8,108 FP). For indels, minibwa has the fewest false negatives (36,321), ahead of BWA-MEM (37,425) and strobealign (37,828), while BWA-MEM has the fewest false positives (5,218) versus minibwa's 5,308 and strobealign's 5,655. minibwa is best or near-best on every metric, leading on three of four." srcset="https://substackcdn.com/image/fetch/$s_!9IY4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 424w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 848w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 1272w, https://substackcdn.com/image/fetch/$s_!9IY4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2da045-552c-4016-8215-3faa04b9a847_676x308.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>That is the right kind of benchmark. Alignment metrics are informative, but production users need to understand whether changes in mapping behavior affect the calls, reports, and decisions that sit downstream.</span></p><h2><strong><span>The Fulcrum view</span></strong></h2><p><span>At Fulcrum, we care about this category of work because it is highly leveraged.</span></p><p><span>Most genomics teams do not need novelty for its own sake. They need pipelines that run faster, cost less, behave predictably, and keep up with changes in sequencing technology. Sometimes that means building new methods. Often it means improving the tools people already depend on.</span></p><p><span>Minibwa fits that pattern. It addresses a real bottleneck, supports multiple read types, reduces unnecessary computation, and evaluates downstream impact instead of stopping at raw speed.</span></p><p><span>For teams running large-scale WGS, bisulfite sequencing, Hi-C, or mixed read-length workflows, minibwa is worth watching closely &#8212; especially where alignment time is starting to shape cost, throughput, or pipeline design.</span></p><h2><strong><span>Read the preprint</span></strong></h2><p><span>The preprint, &#8220;</span><a href="https://doi.org/10.48550/arXiv.2606.15357"><span>Fast genomic read alignment with minibwa</span></a><span>,&#8221; is available now. The source code is available on </span><a href="https://github.com/lh3/minibwa"><span>GitHub</span></a><span>.</span></p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a><span> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. </span><a href="https://fulcrumgenomics.com/">Contact us to discuss your project</a><span>.</span></p>]]></content:encoded></item><item><title><![CDATA[Bioinformatics Still (Mostly) Runs on Old Plumbing]]></title><description><![CDATA[Some of the most valuable work happens in the tools underneath the tools]]></description><link>https://blog.fulcrumgenomics.com/p/bioinformatics-still-mostly-runs</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/bioinformatics-still-mostly-runs</guid><dc:creator><![CDATA[Tim Fennell]]></dc:creator><pubDate>Wed, 17 Jun 2026 10:28:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jQ3k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jQ3k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jQ3k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 424w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 848w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 1272w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jQ3k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png" width="1243" height="791" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:791,&quot;width&quot;:1243,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1269697,&quot;alt&quot;:&quot;Pen-and-ink illustration in blue ink. Above ground, a busy city with a skyline, trees, and people walking and biking. Below ground, a dense network of water pipes, valves, and a subway tunnel. The pipes and fittings are labeled with widely used bioinformatics tools: samtools, GATK, Picard, htsjdk, Snakemake, Nextflow, IGV, GLIMPSE, libdeflate, and fgbio. The everyday work of the field runs on an unseen layer of shared infrastructure.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/199357006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Pen-and-ink illustration in blue ink. Above ground, a busy city with a skyline, trees, and people walking and biking. Below ground, a dense network of water pipes, valves, and a subway tunnel. The pipes and fittings are labeled with widely used bioinformatics tools: samtools, GATK, Picard, htsjdk, Snakemake, Nextflow, IGV, GLIMPSE, libdeflate, and fgbio. The everyday work of the field runs on an unseen layer of shared infrastructure." title="Pen-and-ink illustration in blue ink. Above ground, a busy city with a skyline, trees, and people walking and biking. Below ground, a dense network of water pipes, valves, and a subway tunnel. The pipes and fittings are labeled with widely used bioinformatics tools: samtools, GATK, Picard, htsjdk, Snakemake, Nextflow, IGV, GLIMPSE, libdeflate, and fgbio. The everyday work of the field runs on an unseen layer of shared infrastructure." srcset="https://substackcdn.com/image/fetch/$s_!jQ3k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 424w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 848w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 1272w, https://substackcdn.com/image/fetch/$s_!jQ3k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6020b39-c968-458c-b32b-e71ded8e50e1_1243x791.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Bioinformatics runs on a hidden layer of shared infrastructure. samtools, GATK, Picard, htsjdk, Snakemake, Nextflow, and the libraries beneath them carry a huge share of day-to-day work. Most of it stays out of sight, like city plumbing.</figcaption></figure></div><p><span>Bioinformatics has a weakness for novelty. That is understandable enough in a field built around publications that prefer new methods, new assays, and new ways of extracting signal from data, but it leaves a blind spot. A lot of the work still runs through old libraries, old file-format code, old command-line utilities, and old assumptions about what counts as acceptable performance. Once those things become standard, people stop looking at them very hard. They learn the rough edges, budget around the delays, and treat the friction as part of the landscape.</span></p><p><span>I don&#8217;t think that is a great habit.</span></p><p><span>If a tool sits in the path of thousands of workflows, any inefficiency in that tool gets paid again and again. The same goes for awkward implementations, stale assumptions, and missing features that everyone has worked around for long enough that they no longer seem strange. Familiarity has a way of lowering standards. A lot of core tooling in bioinformatics gets treated as settled long after it has stopped being current.</span></p><p><span>One thing that makes this especially odd is that people do recognize the value of this work when it shows up in a product. Nobody is confused about why faster software is worth paying for. Products like DRAGEN and Sentieon make that point well enough. What gets less attention is the open-source tooling underneath a much larger share of the field&#8217;s day-to-day work. The value there is just as real, but it is spread across enough users and enough workflows that it often goes unclaimed.</span></p><p><span>I have been spending a fair amount of time on that layer of the field lately, partly because I think it is undervalued and partly because the leverage is often better than people realize. When you improve a method that gets used once in a niche workflow, you have improved a method. When you improve a library, file format implementation, or utility that other tools build on, you end up improving a much larger slice of the field all at once.</span></p><h2><strong><span>File formats and I/O still deserve real engineering effort</span></strong></h2><p><span>A recent example is the work that went into </span><a href="https://github.com/samtools/htsjdk/releases/tag/5.0.0"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">HTSJDK</span></a><span>. I put a lot of effort into a recent release that adds CRAM 3.1 writing and makes CRAM and BAM read/write substantially faster. That work lands in one library, but the effect carries into Picard, GATK, IGV, fgbio, and a long tail of other tooling that depends on it. There is nothing glamorous about faster BAM and CRAM handling, but there is also no serious argument that it is unimportant when so much other software is standing on top of it.</span></p><p><span>One small part of that work was building </span><a href="https://github.com/fulcrumgenomics/jlibdeflate"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">jlibdeflate</span></a><span>, Java bindings for libdeflate. Libdeflate has been around for close to a decade and is widely recognized as one of the fastest block-deflate implementations, so it was surprising to realize the Java ecosystem still lacked a clean way to use it. That is a pretty good example of the kind of gap I mean here: not some grand new method, just an obvious missing piece in heavily used tooling that, once filled in, improves a lot of downstream software.</span></p><p><span>There is a tendency to talk about work like this as though it were just maintenance. Sometimes it is maintenance. Sometimes it is finally correcting an obvious deficiency in widely used tooling that had gone unaddressed for years. I would put a lot of this in the second category.</span></p><h2><strong><span>The boring steps in a workflow still run on every dataset</span></strong></h2><p><span>The same pattern shows up lower down in the pipeline. I am getting ready to release </span><a href="https://github.com/fulcrumgenomics/chelae"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">chelea</span></a><span>, a faster, more accurate tool for short-read adapter trimming. My co-founder, Nils, has released </span><a href="https://github.com/fg-labs/mako"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">mako</span></a><span>, which sorts BAM files substantially faster than </span><span data-color="rgb(24, 128, 56)" style="color: rgb(24, 128, 56);">samtools sort</span><span>. Nobody is going to confuse adapter trimming or BAM sorting with the exciting part of genomics, but they are steps that show up constantly across real production workflows, where inefficiency compounds very quickly.</span></p><p><span>In one sense this is no different from why people value DRAGEN or Sentieon. Speed, better implementation, and fewer operational headaches are easy to appreciate when they show up in steps you run all the time. The difference is that open-source plumbing often has no obvious owner, even when the user base is broader and the cumulative waste is larger.</span></p><p><span>A lot of this work lingers for the same reason. The payoff is broad, but not concentrated. Faster compression, better BAM and CRAM handling, a faster adapter trimmer, a better BAM sorter, or a speedup in a heavily used imputation or QC tool can improve a lot of workflows at once. However, no single group usually feels enough of the pain to justify taking it on, so the work sits there until somebody gets annoyed enough to do it for the broader user base.</span></p><h2><strong><span>Some of the best work is improving tools other people already use</span></strong></h2><p><span>Not all of this shows up as a new release from us. Some of it is just contributing back to tools that are already broadly useful and already embedded in other people&#8217;s work.</span></p><p><span>I have open pull requests into </span><a href="https://github.com/odelaneau/GLIMPSE"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">GLIMPSE</span></a><span> that improve single-sample low-pass imputation performance in </span><span data-color="rgb(24, 128, 56)" style="color: rgb(24, 128, 56);">glimpse2_phase</span><span> by about 30 to 50 percent. I have also had pull requests merged into </span><a href="https://github.com/Griffan/VerifyBamID"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">verifyBamID</span></a><span> that make the compute-heavy optimization phase roughly 20 times faster and add support for non-human genomes. Nils has also been spending time on </span><a href="https://github.com/fg-labs/bwa-mem3-rs"><span data-color="rgb(17, 85, 204)" style="color: rgb(17, 85, 204);">bwa-mem3</span></a><span>, a fork of bwa-mem2 that is faster, includes a number of quality-of-life improvements, and supports non-Intel architectures. None of that fits neatly into the usual story people like to tell about innovation, but it is the sort of work that makes existing workflows better in ways users feel immediately.</span></p><p><span>I don&#8217;t think every old tool needs a rewrite, and I don&#8217;t think starting over is automatically admirable. In plenty of cases the better answer is to speed up the thing people are already using, fix the part that is wasteful, or add the capability that should have been there in the first place. There is a lot of value in meeting the ecosystem where it is instead of pretending value only appears when you create something brand new.</span></p><h2><strong><span>We underrate accumulated drag</span></strong></h2><p><span>Part of the reason this work gets less attention is that accumulated drag is hard to see. A new method is easy to point at. An old dependency that is 30 percent slower than it needs to be, or a file-format implementation that has not kept up, tends not to announce itself with the same clarity. People absorb the cost in small increments. They wait a little longer, provision a little more compute, put up with some awkwardness, and move on.</span></p><p><span>A lot of the value in this layer of the stack is real, but diffuse. Faster BAM and CRAM handling in HTSJDK, Java bindings for libdeflate, a better adapter trimmer, a faster BAM sorter, a speedup in GLIMPSE, or a much faster optimization loop in verifyBamID all make real workflows better. The problem is that the gain often lands a little bit everywhere, which makes it harder for any one group to justify doing the work. So a lot of it sits there until somebody gets annoyed enough to fix it for the broader user base.</span></p><p><span>AI changes that calculus some. A lot of this plumbing work used to be easy to defer because it was tedious, sprawling, and hard to justify against more visible priorities. Lowering the cost of implementation makes more of it tractable. That does not make the work glamorous, and it does not remove the need for careful engineering, but it does make it more practical to go fix things that many people depend on and no one had quite gotten around to fixing.</span></p><h2><strong><span>Some of the most valuable work happens in the tools underneath the tools</span></strong></h2><p><span>The field does not need less ambition. It does need a broader view of what ambitious work looks like.</span></p><p><span>Sometimes it is a new method. Sometimes it is a new model. Sometimes it is a much faster BAM/CRAM implementation, a missing binding that should have existed years ago, a better adapter trimmer, a faster sort, or a pull request that takes a painful optimization loop and makes it 20 times faster. The common thread is leverage. When a tool sits low enough in the stack and gets used widely enough, improving it pays off across a lot of other work.</span></p><p><span>That is why I think this layer deserves more attention than it gets. Not because it is fashionable, and not because every old tool is secretly broken, but because a lot of scientific software still depends on code that can be made materially better with focused effort.</span></p><p><span>That will never be the glamorous part of bioinformatics.</span></p><p><span>It is still some of the most useful work you can do.</span></p><div><hr></div><p><em>Tim Fennell is a Founding Partner at <a href="https://fulcrumgenomics.com/">Fulcrum Genomics</a>, where he builds bioinformatics tools and pipelines for the genomics community. He is a creator of <a href="https://github.com/broadinstitute/picard">Picard</a> and a co-author of the <a href="https://doi.org/10.1093/bioinformatics/btp352">SAMtools paper</a>. You can find him on <a href="https://www.linkedin.com/in/tfenne/">LinkedIn</a> or reach Fulcrum at <a href="mailto:contact@fulcrumgenomics.com">contact@fulcrumgenomics.com</a></em></p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);"> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. </span><a href="https://fulcrumgenomics.com/">Contact us to discuss your project</a><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">.</span></p>]]></content:encoded></item><item><title><![CDATA[Deep QC Should Run on Every Sequencing Dataset. That’s Why I Built Riker.]]></title><description><![CDATA[The case for rebuilding sequencing QC instead of carrying old performance costs forward]]></description><link>https://blog.fulcrumgenomics.com/p/deep-qc-should-run-on-every-sequencing</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/deep-qc-should-run-on-every-sequencing</guid><dc:creator><![CDATA[Tim Fennell]]></dc:creator><pubDate>Tue, 21 Apr 2026 18:46:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q-1S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q-1S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q-1S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 424w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 848w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 1272w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q-1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png" width="1456" height="888" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cartoon of Star Trek Captain Picard shaking the hand of Captain Riker&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cartoon of Star Trek Captain Picard shaking the hand of Captain Riker" title="Cartoon of Star Trek Captain Picard shaking the hand of Captain Riker" srcset="https://substackcdn.com/image/fetch/$s_!q-1S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 424w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 848w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 1272w, https://substackcdn.com/image/fetch/$s_!q-1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf986e5-9498-4c04-87d0-954065494bd7_1484x905.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Quality control isn&#8217;t optional in sequencing.</p><p>If you generate a sequencing dataset, you should collect the metrics that tell you how that dataset was made, how it behaved, and whether anything subtle went wrong along the way. That should be standard practice, not a special step reserved for failed runs or high-priority projects.</p><p>The problem is that QC tooling has not kept up with current sequencing scale.</p><p>For years, Picard has been the default tool for sequencing metrics, and for good reason. It gave the field a common set of measurements and became part of a huge number of production workflows. I spent a lot of time working on it, and I know exactly why it became so widely used.</p><p>I also know where it started to fall behind.</p><p>Picard reflects an earlier era of sequencing. It is slower than modern pipelines need it to be, some of its assumptions deserve updating, and it has not evolved in step with the scale and complexity of current sequencing workflows. When a tool sits at the base of thousands of pipelines, those shortcomings stop being minor annoyances, and they become an accumulated tax on every dataset.</p><p>That is why I built <strong><a href="https://github.com/fulcrumgenomics/riker">Riker</a></strong>.</p><p>Riker is a modern successor to Picard for sequencing QC metrics. It is faster, cleaner, and built around the idea that metrics collection should happen on every dataset because the information is too useful and too cheap to ignore.</p><h2><strong>QC should do more than raise a flag</strong></h2><p>Most teams would agree that QC is important, but they probably don&#8217;t think as deeply about it as they could.</p><p>A lot of QC tooling is built to answer a narrow question: did this dataset clear a threshold or not? That is useful, but not enough. The more valuable question is often <em>why</em> the data looks the way it does.</p><p>That is why tools like <a href="https://github.com/broadinstitute/picard/releases/tag/3.4.0">Picard</a> became so useful. Picard doesn&#8217;t just report a summary number. It helps explain where signal is being lost, what kind of bias is showing up, and which parts of the workflow are most likely responsible. Fantastic tools like <a href="https://github.com/brentp/mosdepth">mosdepth</a> and <a href="https://github.com/sstadick/perbase">perbase</a> can give you  mean coverage very quickly, which can tell you that something is off. A richer collector like <a href="https://gatk.broadinstitute.org/hc/en-us/articles/360037269351-CollectWgsMetrics-Picard">CollectWgsMetrics</a> can help tell you where the missing bases went and how to start fixing the problem.</p><p>The diagnostic value is a big part of why sequencing metrics matter. They are not just there to catch failed samples. They help you understand assay behavior, library quality, alignment artifacts, enrichment performance, and process drift over time. They are useful for immediate troubleshooting, but they are also useful for comparing projects, building quality systems, improving operations, and building better models of sample and pipeline performance.</p><h2><strong>Fast enough to run every time</strong></h2><p>Once you accept that QC should be run on every sequencing dataset, performance comes to the forefront of importance.</p><p>Older tooling made it too easy to compromise. When metrics take too long, people start trimming the workflow. They run fewer collectors, or reserve deeper QC for troubleshooting. Over time, that gives you an inconsistent picture of the data and makes it harder to catch process drift.</p><p>I wanted to remove that friction.</p><p>Riker is written in Rust because this kind of systems work benefits from speed, efficiency, and tighter control over performance. But the goal was never just to make Picard faster in a newer language. The real goal was to make routine metrics collection cheap enough that the right default becomes obvious: run in depth QC every time.</p><p>That only matters if the outputs deserve confidence, so I also went back through the metrics themselves. I fixed issues, cleaned up implementations, and updated calculations and assumptions where the older logic no longer matched current sequencing practice or current biological understanding.</p><p>Riker is faster, but it is also a chance to revisit what these metrics should be doing for people now.</p><h2><strong>Why using AI here makes sense</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qU4f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qU4f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 424w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 848w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qU4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png" width="1456" height="1072" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1072,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cartoon in the style of xkcd \&quot;My Hobby\&quot; comics showing the hobby of burning massive amounts of compute on AI coding to save the genomics community even more&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cartoon in the style of xkcd &quot;My Hobby&quot; comics showing the hobby of burning massive amounts of compute on AI coding to save the genomics community even more" title="Cartoon in the style of xkcd &quot;My Hobby&quot; comics showing the hobby of burning massive amounts of compute on AI coding to save the genomics community even more" srcset="https://substackcdn.com/image/fetch/$s_!qU4f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 424w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 848w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!qU4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3758d9a2-5b5f-4ae4-9cba-1aead639d964_1879x1384.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is a lot of justified scrutiny right now around the compute and energy cost of AI. These are real, worthwhile questions.  A lot of energy is likely being spent on work that will be forgotten in a week.</p><p>But sequencing QC is a different category of problem.</p><p>Using AI to help build a foundational tool that will be run thousands or millions of times across real sequencing workflows is a productive use of compute. If that work produces software that is materially more efficient than what came before, the savings compound every time someone runs it. Every faster execution, every reduced resource requirement, every workflow that no longer carries legacy overhead adds up.  Not to mention that catching QC problems sooner can massively reduce waste on the wetlab side.</p><p>I do not find the argument compelling that we should worry about the compute used to build better infrastructure while ignoring the repeated waste of running slower, aging infrastructure at scale. If a focused use of AI helps produce software that saves far more compute over its lifetime than it consumes during development, that is a trade worth making.</p><p>Riker clears that bar.</p><h2><strong>There is no excuse to skip in depth sequencing QC</strong></h2><p>Sequencing QC metrics are useful, signal rich, and cheap enough to run routinely when the tooling is built for it. They help you understand not just whether something went wrong, but why. They support troubleshooting, operations, and machine learning. And they become more valuable when they are collected consistently across every dataset instead of only when someone suspects a problem.</p><p>That is the standard behind Riker.</p><p>If you generate sequencing data, you should be collecting rich QC metrics on every dataset. The information is too useful, and the cost of collecting it is now too low, to justify treating it as optional. </p><p>&#128279; <a href="https://github.com/fulcrumgenomics/riker">https://github.com/fulcrumgenomics/riker</a></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Ambient DNA Preservation Without Compromising Sequencing: Our Role in Evaluating Ensilication]]></title><description><![CDATA[Whole&#8209;genome analysis of storage-induced artifacts in tumor and normal DNA]]></description><link>https://blog.fulcrumgenomics.com/p/ambient-dna-preservation-without</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/ambient-dna-preservation-without</guid><pubDate>Wed, 08 Apr 2026 15:17:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KKiI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KKiI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KKiI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KKiI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg" width="1456" height="1046" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1046,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cartoon depicting cacheDNA in a bottle in the ocean, with a shark fin in the water and a tropical island in the distance&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cartoon depicting cacheDNA in a bottle in the ocean, with a shark fin in the water and a tropical island in the distance" title="Cartoon depicting cacheDNA in a bottle in the ocean, with a shark fin in the water and a tropical island in the distance" srcset="https://substackcdn.com/image/fetch/$s_!KKiI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KKiI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f83fab-c32b-4c1a-82c8-5b43a1cefd21_1600x1149.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At Fulcrum Genomics, we care a lot about what happens <em>before</em> variant calling: how samples are collected, stored, and prepared. A single artifactual C&gt;T mutation in the wrong place can look identical to a cancer driver mutation. If sample storage and preservation introduces thousands of these artifacts, no amount of downstream pipeline tuning will fix it.</p><p>&#8220;Identifying and eliminating sources of error has been central to Fulcrum&#8217;s work since our inception,&#8221; said Nils Homer, Founding Partner at Fulcrum Genomics. &#8220;This work shows that ensilication can preserve samples at room temperature while actually <em>reducing</em> the artifacts that complicate variant interpretation.&#8221;</p><h2>Why DNA Storage Still Matters</h2><p>Today, most nucleic acid preservation depends on cold storage, typically from &#8722;20&#8239;&#176;C to &#8722;80&#8239;&#176;C, and sometimes even colder. That infrastructure is expensive, energy-intensive, and hard to scale globally. As precision oncology and population genomics expand, we need preservation methods that don&#8217;t require a dense network of ultra&#8209;low temp freezers and the associated cold chain.</p><p>As Michael Becich, CEO of CacheDNA, puts it: &#8220;The first era of genomics was built on cold storage. The next belongs to elegant biochemistries that preserve truth at the molecular level without ongoing energy or intervention. Every sample tells a story, and we believe that if a sample can be collected, it should be carefully protected until ready for testing. We&#8217;re building the bridge that makes modern biopreservation possible to reveal those insights.&#8221;</p><p>Ambient-temperature solutions like Cache DNA&#8217;s ensilication are promising, but they must clear a high bar:</p><ul><li><p>Maintain clinical variant detection</p></li><li><p>Avoid introducing artifactual mutations</p></li><li><p>Preserve DNA integrity across temperatures and time</p></li></ul><p><a href="https://doi.org/10.1093/narmme/ugag011">This study</a> tackles those questions directly using clinical FFPE tumor samples, targeted mutation assays, and deep whole&#8209;genome sequencing.</p><h2>What the Study Shows</h2><p>The study evaluates ensilication side-by-side with standard &#8722;80&#8239;&#176;C storage across multiple dimensions:</p><p><strong>Clinical panels showed perfect concordance.</strong></p><p>Lung cancer DNA extracted from FFPE blocks was split, stored either frozen or ensilicated at room temperature for 14 days, and then tested using a routine clinical panel. Across ten samples, there was <strong>100% diagnostic concordance</strong> between storage methods, including low VAF variants down to ~2%, meaning no gained or lost actionable mutations after 14 days of storage.</p><p><strong>Whole&#8209;genome sequencing revealed frozen storage introduced </strong><em><strong>more</strong></em><strong> artifacts.</strong></p><p>For 32 matched tumor&#8211;normal pairs, DNA aliquots were stored frozen (&#8722;80&#8239;&#176;C) or ensilicated at room temperature for 28 days and then sequenced (30x normal, 80x tumor). Overall sequencing metrics, including insert sizes, chimera rates, duplication rates, and library complexity, were comparable between storage conditions, enabling direct comparison of storage-induced mutations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_1Bz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_1Bz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 424w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 848w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 1272w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_1Bz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png" width="1332" height="878" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:1332,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Box plot comparing 12 DNA substitution types between frozen &#8722;80 &#176;C storage (gray) and ensilicated room-temperature storage (green) of FFPE tumor DNA. C>T and G>T substitutions dominate both conditions, but frozen samples show substantially higher rates and greater variance &#8212; with C>T medians near 5,000&#8211;8,500 substitutions per million bases and extreme outliers exceeding 24,000 &#8212; compared to ensilicated samples whose medians are lower and distributions tighter. Other substitution types remain low across both conditions.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Box plot comparing 12 DNA substitution types between frozen &#8722;80 &#176;C storage (gray) and ensilicated room-temperature storage (green) of FFPE tumor DNA. C>T and G>T substitutions dominate both conditions, but frozen samples show substantially higher rates and greater variance &#8212; with C>T medians near 5,000&#8211;8,500 substitutions per million bases and extreme outliers exceeding 24,000 &#8212; compared to ensilicated samples whose medians are lower and distributions tighter. Other substitution types remain low across both conditions." title="Box plot comparing 12 DNA substitution types between frozen &#8722;80 &#176;C storage (gray) and ensilicated room-temperature storage (green) of FFPE tumor DNA. C>T and G>T substitutions dominate both conditions, but frozen samples show substantially higher rates and greater variance &#8212; with C>T medians near 5,000&#8211;8,500 substitutions per million bases and extreme outliers exceeding 24,000 &#8212; compared to ensilicated samples whose medians are lower and distributions tighter. Other substitution types remain low across both conditions." srcset="https://substackcdn.com/image/fetch/$s_!_1Bz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 424w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 848w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 1272w, https://substackcdn.com/image/fetch/$s_!_1Bz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ca1054-7871-45f6-8f6a-8d6483beb8f9_1332x878.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Frozen &#8722;80&#8239;&#176;C storage of FFPE tumor DNA generated substantially more artifactual C&gt;T mutations than ensilication at room temperature, increasing background &#8216;noise&#8217; that can mimic true cancer variants.</em></p><p>The key finding: frozen storage accumulated substantially more artifactual C&gt;T mutations in tumor DNA than ensilication, particularly in CpG contexts. Frozen samples showed up to 65% more C&gt;T substitutions per million bases than ensilicated samples, adding thousands of apparent mutations that are indistinguishable from true somatic events. These artifacts are especially concerning at clinically relevant CpG sites frequently mutated in cancer.</p><p><strong>Ensilication worked across DNA shapes and extreme temperature ranges.</strong></p><p>The study examined both linear ssDNA and circular ssDNA (cssDNA) libraries across a range of temperatures (&#8722;80&#8239;&#176;C to 37&#8239;&#176;C) with and without ensilication over 20 days. Circular libraries showed strong inherent stability even unprotected, while linear DNA benefited markedly from encapsulation, with ensilicated linear samples outperforming unprotected controls across every tested temperature.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YM8q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YM8q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 424w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 848w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 1272w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YM8q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png" width="948" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:948,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart comparing read counts for circular ssDNA libraries (light blue) and linear ssDNA libraries (dark gray) across six storage conditions: 37&#176;C, &#8722;20&#176;C, &#8722;80&#176;C, ambient temperature, ensilicated at 37&#176;C, and ensilicated at ambient temperature. Circular libraries maintain consistently high read counts of approximately 400,000&#8211;500,000 across all conditions with modest replicate variance. Linear library read counts are substantially lower under conventional storage &#8212; roughly 130,000 at both 37&#176;C and &#8722;20&#176;C, rising modestly to around 210,000&#8211;230,000 at &#8722;80&#176;C and ambient &#8212; but recover markedly under ensilication, reaching approximately 330,000 at ensilicated 37&#176;C and 275,000 at ensilicated ambient.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart comparing read counts for circular ssDNA libraries (light blue) and linear ssDNA libraries (dark gray) across six storage conditions: 37&#176;C, &#8722;20&#176;C, &#8722;80&#176;C, ambient temperature, ensilicated at 37&#176;C, and ensilicated at ambient temperature. Circular libraries maintain consistently high read counts of approximately 400,000&#8211;500,000 across all conditions with modest replicate variance. Linear library read counts are substantially lower under conventional storage &#8212; roughly 130,000 at both 37&#176;C and &#8722;20&#176;C, rising modestly to around 210,000&#8211;230,000 at &#8722;80&#176;C and ambient &#8212; but recover markedly under ensilication, reaching approximately 330,000 at ensilicated 37&#176;C and 275,000 at ensilicated ambient." title="Bar chart comparing read counts for circular ssDNA libraries (light blue) and linear ssDNA libraries (dark gray) across six storage conditions: 37&#176;C, &#8722;20&#176;C, &#8722;80&#176;C, ambient temperature, ensilicated at 37&#176;C, and ensilicated at ambient temperature. Circular libraries maintain consistently high read counts of approximately 400,000&#8211;500,000 across all conditions with modest replicate variance. Linear library read counts are substantially lower under conventional storage &#8212; roughly 130,000 at both 37&#176;C and &#8722;20&#176;C, rising modestly to around 210,000&#8211;230,000 at &#8722;80&#176;C and ambient &#8212; but recover markedly under ensilication, reaching approximately 330,000 at ensilicated 37&#176;C and 275,000 at ensilicated ambient." srcset="https://substackcdn.com/image/fetch/$s_!YM8q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 424w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 848w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 1272w, https://substackcdn.com/image/fetch/$s_!YM8q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0665898b-3bca-4f18-a8eb-9321602efe27_948x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GgAF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GgAF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 424w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 848w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 1272w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GgAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png" width="792" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76b90aed-cc86-464d-9236-db4551ea2830_792x650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:792,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart comparing variant allele frequency (VAF, %) for circular ssDNA (light blue) and linear ssDNA (dark gray) libraries across the same six storage conditions. All bars cluster tightly around 4%, with no meaningful difference between library types, storage temperatures, or ensilication status. Replicate scatter is minimal throughout. Variant detection accuracy near the 4% level is preserved uniformly regardless of storage condition.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart comparing variant allele frequency (VAF, %) for circular ssDNA (light blue) and linear ssDNA (dark gray) libraries across the same six storage conditions. All bars cluster tightly around 4%, with no meaningful difference between library types, storage temperatures, or ensilication status. Replicate scatter is minimal throughout. Variant detection accuracy near the 4% level is preserved uniformly regardless of storage condition." title="Bar chart comparing variant allele frequency (VAF, %) for circular ssDNA (light blue) and linear ssDNA (dark gray) libraries across the same six storage conditions. All bars cluster tightly around 4%, with no meaningful difference between library types, storage temperatures, or ensilication status. Replicate scatter is minimal throughout. Variant detection accuracy near the 4% level is preserved uniformly regardless of storage condition." srcset="https://substackcdn.com/image/fetch/$s_!GgAF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 424w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 848w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 1272w, https://substackcdn.com/image/fetch/$s_!GgAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b90aed-cc86-464d-9236-db4551ea2830_792x650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Across &#8722;80&#8239;&#176;C to 37&#8239;&#176;C, circular ssDNA libraries remained highly stable, and ensilication markedly improved the stability of linear ssDNA, while all conditions still supported accurate detection of ~5% variants.</em></p><p>Importantly, even where some loss of amplifiable molecules occurred, variants above 5% VAF remained accurately detectable in all conditions and topologies.</p><h2>Fulcrum Genomics&#8217; Contributions</h2><p>Fulcrum&#8217;s role in this work was to make the storage comparison quantitative at whole&#8209;genome scale, not just qualitative at a few loci. This included:</p><ul><li><p><strong>Processing and aligning</strong> whole&#8209;genome data from matched tumor&#8211;normal pairs, ensuring that differences between storage methods weren&#8217;t confounded by pipeline noise.</p></li><li><p><strong>Calling and filtering somatic variants</strong> to separate true tumor mutations from storage-induced artifacts that could affect downstream interpretation.</p></li><li><p><strong>Analyzing and visualizing substitution rates and sequence context</strong> to reveal the characteristic patterns of damage associated with frozen vs. ensilicated storage.</p></li></ul><p>By standardizing these analyses across all samples, we were able to show not just that ensilication preserves clinical calls, but also how different storage conditions reshape the apparent mutation landscape, especially the excess C&gt;T artifacts seen in frozen FFPE tumor. That level of detail is critical for applications like tumor mutational burden, signature analysis, and regulatory decision&#8209;making.</p><p>&#8220;Our goal has always been maximum sensitivity without sacrificing accuracy for clinical decision-making. This work with Cache DNA represents a significant step in that direction, showing Cache DNA&#8217;s ensilication technology can preserve samples at room temperature while actually reducing the artifacts that complicate variant interpretation,&#8221; said Homer.</p><p>This kind of artifact&#8209;aware, whole&#8209;genome benchmarking is a natural extension of our work: helping teams understand not only <em>what</em> their sequencing data says, but <em>how</em> upstream choices&#8212;from preservation through library prep&#8212;shape the answers they get.</p><p>Working with James Banal, Co-Founder of Cache DNA, and the broader team was a model collaboration. Their rigorous experimental design made the computation analysis straightforward to interpret and the findings unambiguous.</p><h2>Implications for Genomic Medicine</h2><p>The findings suggest that ambient ensilication can match or outperform &#8722;80&#8239;&#176;C storage in preserving sequencing fidelity, at least over the timeframes evaluated. That matters for:</p><p><strong>Clinical oncology</strong> &#8211; Reducing storage-induced artifacts lowers the risk of false-positive somatic calls, especially in FFPE samples where C&gt;T damage is already endemic. This study directly evaluated clinically relevant genomic biomarkers to ensure downstream clinical decisions rest on robust data.</p><p><strong>Regulatory and biomarker development </strong>&#8211; Artifact-aware preservation supports reliable measurement of tumor mutational burden, mutational signatures, and subclonal architecture. Removing temperature requirements also opens opportunities for global drug development programs that rely on sample transit to centralized labs.</p><p><strong>Global and decentralized genomics</strong> &#8211; Ambient storage reduces cost and infrastructure barriers, making it feasible to collect and ship samples from remote or resource-limited settings without sacrificing data quality.</p><p>Of course, more work is needed: multi&#8209;year studies, diverse tissue types, and broader operational and economic analyses will be important to understand where ambient methods can replace or complement cold storage at scale. But this study provides strong, whole&#8209;genome evidence that ensilication is a viable path toward cold&#8209;chain&#8209;free genomic medicine.</p><p>At Fulcrum Genomics, we&#8217;re glad to partner with teams like Cache DNA on this kind of foundational work where careful computational analysis helps clarify not just <em>what</em> variants we see, but <em>why</em> we see them, and whether they&#8217;re real.</p><p>As ensilication and other ambient preservation methods mature, we&#8217;re committed to bringing the same rigor to evaluating them that we&#8217;ve applied to library preparation, sequencing platforms, and variant calling. Because genomic medicine is only as good as the samples it starts with.</p><p>&#128214;<strong>Read the paper:<br></strong><a href="https://doi.org/10.1093/narmme/ugag011">Evaluation of ensilication technology for ambient DNA preservation</a></p><p>&#128187;<strong>Code and data:<br></strong>Analysis code is available at Zenodo (<a href="https://zenodo.org/records/17469053">10.5281/zenodo.17469053</a>); sequencing data will be deposited to EGA upon publication. </p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Introducing fgumi]]></title><description><![CDATA[A New UMI Toolkit for Next-Gen Sequencing]]></description><link>https://blog.fulcrumgenomics.com/p/introducing-fgumi</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/introducing-fgumi</guid><pubDate>Tue, 31 Mar 2026 13:35:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k5_6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k5_6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k5_6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 424w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 848w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 1272w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k5_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png" width="1456" height="927" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:927,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k5_6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 424w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 848w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 1272w, https://substackcdn.com/image/fetch/$s_!k5_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5ca64ed-f6be-4710-8b76-94a78ddf2fd5_1600x1019.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Years ago, when UMIs were becoming standard in high-accuracy sequencing workflows, we (Fulcrum co-founders Tim Fennell and Nils Homer) built <em><a href="https://github.com/fulcrumgenomics/fgbio">fgbio</a></em> to handle extraction, grouping, consensus calling, and the mechanics required to make error-corrected sequencing practical. It became widely adopted across research and clinical pipelines, and we&#8217;ve maintained it ever since.</p><p>And eventually, we ran into its limits.</p><p>Amplicon panels grew. Some assays began stacking hundreds of UMIs at a single locus with thousands of reads in a group. Error-corrected sequencing moved beyond small panels into exomes and other much larger datasets.</p><p>Tim describes what that looked like in practice:</p><blockquote><p>&#8220;When dealing with amplicon sequencing with hundreds of UMIs at the same location and many thousands of reads, runtime just explodes. Some of the algorithms you&#8217;d like to use become infeasible.&#8221;</p></blockquote><p>The underlying issue was straightforward. fgbio is single-threaded. It was written at a time when that design choice wasn&#8217;t a major limitation.</p><p>As Nils puts it:</p><blockquote><p>&#8220;Error-corrected sequencing used to run on small targeted panels, and fgbio could handle that in minutes. As the field moved to exomes, those same tools went from minutes to hours.&#8221;</p></blockquote><p>Around the same time, Tim and Nils were seeing accelerated UMI tools appear in commercial products, often referencing fgbio&#8217;s behavior.</p><blockquote><p>&#8220;If anyone was going to build a faster implementation,&#8221; Tim says, &#8220;we felt like it should probably be us.&#8221;</p></blockquote><p>That work became <em><a href="https://github.com/fulcrumgenomics/fgumi">fgumi</a></em>.</p><h3><strong>What </strong><em><strong>fgumi</strong></em><strong> focuses on</strong></h3><p>fgumi covers the core pieces of a UMI workflow:</p><ul><li><p>Extract UMIs directly from FASTQ files</p></li><li><p>Group reads by UMI</p></li><li><p>UMI-aware deduplication</p></li><li><p>Consensus calling (simplex, duplex, and CODEC)</p></li><li><p>Filtering and metrics generation</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!92ZJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!92ZJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 424w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 848w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 1272w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!92ZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png" width="1456" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!92ZJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 424w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 848w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 1272w, https://substackcdn.com/image/fetch/$s_!92ZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79b94ef9-3c25-4b2a-8272-33f46ed331ac_1600x552.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The overall structure will look familiar if you&#8217;ve worked with fgbio or pipelines like nf-core/fastquorum.</p><p>The intention was to preserve the way these pipelines already operate.</p><p>Tim explains the constraint that guided most design decisions:</p><blockquote><p>&#8220;It really needed to be a drop-in replacement for fgbio for the main workflows. If moving to fgumi required a lot of work or changed how the tools behaved, adoption would be hard.&#8221;</p></blockquote><p>Nils frames the priorities this way:</p><blockquote><p>&#8220;Equivalency first, performance second, scope third.&#8221;</p></blockquote><p>Each tool in fgumi is expected to produce the same results as the corresponding tool in fgbio. During development, this comparison surfaced small areas of non-determinism in fgbio itself, which were corrected there as well.</p><p>After outputs matched, performance work began in earnest. Rewriting in Rust allowed multi-threading and more direct control over memory usage and concurrency.</p><p>The project also kept a fairly tight scope.</p><blockquote><p>&#8220;fgbio does a lot of things beyond UMI processing,&#8221; Nils says. &#8220;fgumi focuses on the core UMI tools and nothing else.&#8221;</p></blockquote><p>Even sorting functionality was implemented directly so that the full processing path could be controlled and tuned.</p><p>On our deepest benchmark dataset, the full consensus pipeline, from extraction through consensus calling and filtering, completes in about 70 seconds compared to 30 minutes in fgbio, roughly a 25x speedup.</p><h2><strong>Building the rewrite</strong></h2><p>fgbio was built incrementally over many years, with Tim and Nils reviewing essentially every line of code.</p><p>fgumi was developed differently.</p><p>Some of the development work was done with the help of AI-assisted coding tools. Reviewing every line at the same level wasn&#8217;t practical at that pace.</p><p>Nils describes the adjustment:</p><blockquote><p>&#8220;Letting go of reviewing every line was probably the hardest tradeoff.&#8221;</p></blockquote><p>Confidence instead came from testing and validation.</p><p>fgbio itself served as the reference implementation. The large unit-test suite that had accumulated over the years was ported across. Automated review tools checked pull requests, and vendor partners provided real assay datasets for validation.</p><blockquote><p>&#8220;The safety net was deep,&#8221; Nils says. &#8220;fgbio was always there as a reference, and the tests tell you whether the outputs match.&#8221;</p></blockquote><h3><strong>What this should enable</strong></h3><p>The immediate impact of fgumi is runtime. Multi-threading and implementation changes make a large difference when grouping and consensus calling have to operate across very deep datasets.</p><p>That matters for several reasons.</p><p>Clinical pipelines often rely on error-corrected sequencing and have tighter turnaround requirements. Faster UMI processing also reduces compute cost when running large numbers of samples. And certain research workflows, such as large ecDNA studies, become easier to scale.</p><p>Looking further ahead, Nils hopes the practical limitations simply fade away:</p><blockquote><p>&#8220;Five years from now, nobody should have to think twice about running error-corrected sequencing on a whole genome at ultra-deep coverage. The answer should just come back fast, and it should be right.&#8221;</p></blockquote><h3><strong>Current status</strong></h3><p>fgumi is currently in alpha. The toolkit is functional and is being tested across a variety of vendor-provided datasets.</p><p>The team is targeting <strong>June 1, 2026</strong> as the point when fgumi can be recommended over fgbio for production use.</p><p>We&#8217;ve also published documentation that includes:</p><ul><li><p>A <strong><a href="https://github.com/fulcrumgenomics/fgumi/blob/main/docs/best-practice-consensus-pipeline.md">best practice pipeline</a></strong> from FASTQ to filtered consensus reads</p></li><li><p>A <strong><a href="https://github.com/fulcrumgenomics/fgumi/blob/main/docs/performance-tuning.md">performance tuning guide</a></strong> for threading and memory</p></li><li><p>A <strong><a href="https://github.com/fulcrumgenomics/fgumi/blob/main/docs/FastqToConsensus-RnD.smk">reference Snakemake implementation</a></strong></p></li><li><p>Tools for <strong><a href="https://github.com/fulcrumgenomics/fgumi/blob/main/docs/simulate-cli.md">simulating UMI data</a></strong> and for <strong><a href="https://github.com/fulcrumgenomics/fgumi/blob/main/docs/compare-cli.md">comparing output files</a></strong></p></li></ul><p>The code is open source under the MIT license.</p><p><em>fgumi</em> grows directly out of the same work that produced fgbio: building and maintaining UMI workflows in real sequencing projects.</p><p>If you&#8217;re already using UMI-based sequencing in your workflows, we encourage you to take a look at <em>fgumi</em> and see how it fits your use cases. The code is open source, the documentation is available, and your feedback will help guide the project as it matures toward production readiness. </p><p>&#128279; <a href="https://github.com/fulcrumgenomics/fgumi">https://github.com/fulcrumgenomics/fgumi</a></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[What Human Genome Is This, Really?]]></title><description><![CDATA[Every bioinformatician has been there.]]></description><link>https://blog.fulcrumgenomics.com/p/what-human-genome-is-this-really</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/what-human-genome-is-this-really</guid><pubDate>Tue, 24 Mar 2026 17:10:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RKBR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every bioinformatician has been there. You receive a file from a collaborator, or dig one out of cold storage, and it references a genome file like <code>human_ref.fa</code> or <code>hg38.fasta</code>. But which hg38? Aligned against what source, with what patch release, with how many alt contigs? The file name is, at best, a hint. At worst, it&#8217;s actively misleading.</p><p>Last year we received an email from a client struggling with exactly this problem. They had downloaded what they believed was the right reference FASTA from UCSC, 455 contigs, but the BAMs they were trying to work with had been aligned to a reference with 595 contigs. Contigs like <code>chr11_KZ559110v1_alt</code> appeared in the BAM headers but were nowhere to be found in the downloaded FASTA. After some sleuthing, the culprit turned out to be a specific GRCh38 patch release. Close, but not the same, and in genomics, &#8220;close but not the same&#8221; can silently corrupt an entire analysis.</p><p>This is a problem we&#8217;ve hit repeatedly in client work over the years, and it&#8217;s surprisingly hard to solve cleanly. Grepping the header for a version comment works maybe half the time. MD5-checking sequences requires having the right sequences to check against. Asking the data provider what reference they used is often met with a shrug or a filename. And trial-and-error alignment is expensive and frustrating.</p><p>So we built something better.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RKBR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RKBR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 424w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 848w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 1272w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RKBR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png" width="674" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:674,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RKBR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 424w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 848w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 1272w, https://substackcdn.com/image/fetch/$s_!RKBR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa997cd12-5ee9-4eeb-83f0-5cfc1969e0e8_674x370.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7mkY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7mkY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 424w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 848w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 1272w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7mkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png" width="677" height="380.7649043869516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:889,&quot;resizeWidth&quot;:677,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7mkY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 424w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 848w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 1272w, https://substackcdn.com/image/fetch/$s_!7mkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ad1d42b-412f-44b9-8d3a-a7d9cb518038_889x500.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IBgu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IBgu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IBgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png" width="500" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IBgu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!IBgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e54c97-0663-4b65-8eea-27ae00b80439_500x500.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Introducing ref-solver</strong></h2><p><a href="https://github.com/fulcrumgenomics/ref-solver">ref-solver</a> is a tool that identifies which human genome reference a file is associated with by comparing its sequence metadata, contig names, lengths, and ordering, against a curated catalog of known references. Crucially, it never looks at the actual sequence data. That makes it fast, lightweight, and appropriate even for sensitive datasets where you wouldn&#8217;t want to upload raw sequences to a third party.</p><p>The tool accepts a wide range of input formats: SAM/BAM/CRAM headers, .dict files, .fai index files, or a full FASTA. It extracts the sequence dictionary and scores it against the catalog, returning a ranked list of the closest matching references, down to the specific patch release.</p><p>You can use it two ways:</p><ul><li><p><strong>Web app</strong>: Head to <a href="https://whatsmygenome.fulcrumgenomics.com/">whatsmygenome.fulcrumgenomics.com</a>, paste or upload your file, and get an answer in seconds. No installation, no accounts, nothing to configure.</p></li><li><p><strong>Command line</strong>: Install via Bioconda (<code>conda install ref-solver</code>) for integration into pipelines and automated workflows.</p></li></ul><h2><strong>How It Works</strong></h2><p>The core idea is simple: two files derived from the same reference genome will have matching sequence dictionaries, the same contig names, the same lengths, in the same order. Different reference versions, sources, or patch releases will differ in at least one of those dimensions.</p><p><code>ref-solver</code> builds a fingerprint from the sequence dictionary and compares it against a catalog that covers the major human genome reference flavors: UCSC (hg19, hg38), NCBI/Ensembl (GRCh37, GRCh38), Broad bundle releases, T2T-CHM13, and a range of GRCh38 patch releases from p1 through p14. When an exact match exists, you get a definitive answer. When the match is partial, for example, a BAM that was aligned to a reference with a subset of the catalog&#8217;s contigs, <code>ref-solver</code> returns a similarity score so you can identify the closest known reference and understand what&#8217;s missing or different.</p><h2><strong>When This Matters</strong></h2><p>The most obvious use case is provenance recovery: you have a BAM and you need to know what it was aligned to before you can do anything useful with it. This comes up constantly when working with legacy datasets, public repositories, or data shared between institutions where documentation is incomplete.</p><p>But it&#8217;s equally valuable as a validation step in active pipelines. Before you run variant calling or any reference-dependent analysis, you want to confirm that the FASTA you downloaded from UCSC last Tuesday is actually what you think it is. Reference files get updated, mirrors can serve stale content, and download errors are real. Spending thirty seconds running ref-solver before kicking off a multi-day pipeline is cheap insurance.</p><p>It&#8217;s also useful in multi-site studies or collaborations where different groups may have independently downloaded &#8220;the same&#8221; reference from different sources, UCSC versus Ensembl versus a Broad bundle, and ended up with subtly different files that will cause headaches downstream when you try to merge or compare results.</p><h2><strong>Try It</strong></h2><p>If you have a BAM, CRAM, FASTA, <code>.dict</code>, or <code>.fai</code> lying around whose exact provenance you&#8217;re not 100% certain of, give it a try at <a href="https://whatsmygenome.fulcrumgenomics.com/">whatsmygenome.fulcrumgenomics.com</a>. The web app takes seconds and requires nothing but the file.</p><p>The source code is on GitHub at<a href="https://github.com/fulcrumgenomics/ref-solver"> fulcrumgenomics/ref-solver</a>, and contributions, especially additions to the reference catalog, are very welcome. If there&#8217;s a reference build you&#8217;d like to see covered, open an issue or submit a PR.</p><p>Reference genomes are the foundation everything else is built on. Getting them wrong quietly is far worse than failing loudly. </p><p></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Introducing ferro-hgvs]]></title><description><![CDATA[Faster, more complete HGVS variant parsing for the whole genomics community]]></description><link>https://blog.fulcrumgenomics.com/p/introducing-ferro-hgvs</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/introducing-ferro-hgvs</guid><pubDate>Fri, 20 Mar 2026 17:27:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-0Jm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-0Jm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-0Jm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 424w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 848w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 1272w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-0Jm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png" width="1456" height="927" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bad08679-824c-436b-8b93-3d58140eb980_1600x1019.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:927,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;FERRO-HGVS depicted as an instrument panel for a high-end vehicle&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="FERRO-HGVS depicted as an instrument panel for a high-end vehicle" title="FERRO-HGVS depicted as an instrument panel for a high-end vehicle" srcset="https://substackcdn.com/image/fetch/$s_!-0Jm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 424w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 848w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 1272w, https://substackcdn.com/image/fetch/$s_!-0Jm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbad08679-824c-436b-8b93-3d58140eb980_1600x1019.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every genetic variant reported in a clinical laboratory has a precise, standardized name. It looks something like <code>NM_000249.4:c.350C&gt;T</code>, and what it communicates is specific: in the MLH1 gene, at position 350 of the coding sequence, a cytosine changes to a thymine. That compact string is how clinical labs communicate findings to each other, how oncology reports describe mutations, and how hundreds of millions of records in global databases like ClinVar are stored, retrieved, and compared.</p><p>This naming system is called HGVS nomenclature, named for the Human Genome Variation Society that maintains it. It is the backbone of clinical genomics, used in hereditary cancer panels, rare disease diagnosis, pharmacogenomics testing, and variant database submissions worldwide. The software tools that process HGVS strings are infrastructure that the field depends on every day, often without thinking about it.</p><p>Fulcrum Genomics is releasing <strong>ferro-hgvs</strong> (v0.1.0), a new open-source HGVS parser and normalizer written in Rust. ferro-hgvs is the fastest HGVS tool available by a wide margin, supports the broadest set of HGVS patterns of any open-source library, has been validated against millions of real clinical variants, and is accompanied by infrastructure that makes the tools you already use work better. A live web service at<a href="https://hgvs.acgt.bio/"> hgvs.acgt.bio</a> lets you try everything described in this post with no installation required.</p><h2><strong>The HGVS Standard</strong></h2><p>The authoritative HGVS specification is maintained at<a href="https://hgvs-nomenclature.org/stable/"> hgvs-nomenclature.org</a> by the HGVS Variant Nomenclature Committee (HVNC), a working group of the Human Genome Organization. The standard covers six coordinate systems: genomic (g.), coding DNA (c.), non-coding (n.), RNA (r.), protein (p.), and mitochondrial (m.). It defines rules for every variant type from simple substitutions to complex repeat expansions, and applies across multiple reference sequence types including NM_, NR_, NC_, NG_, LRG_, and NP_ accessions.</p><p>The standard has been evolving for decades. Beginning with version 21.0.0 in January 2024, the HVNC adopted semantic versioning and introduced formal computational grammar using Extended Backus-Naur Form (EBNF), improving both the precision of the specification and its implementability in software. A December 2024 paper in <em>Genome Medicine</em> (Hart et al.) summarizes these improvements.</p><p>The standard is also a living document. The HVNC manages changes through a public<a href="https://hgvs-nomenclature.org/stable/consultation/"> Community Consultation process</a>, where proposed extensions and clarifications are published for open community comment before ratification. These proposals matter because many of them describe patterns that already appear in real clinical data, in ClinVar submissions, lab reports, and variant databases, before they are formally adopted. A tool that does not track these proposals will reject or mishandle variants that clinical teams encounter every day.</p><p>ferro-hgvs supports all ratified consultation proposals, including SVD-WG001 (reporting variants confirmed to be unchanged, such as <code>c.1823A=</code>, important for negative findings in clinical reporting), SVD-WG002 (non-coding DNA reference sequences with the n. prefix), SVD-WG004 (the ISCN/HGVS named extension for structural variants and chromosomal rearrangements), SVD-WG009 (the discontinuation of the conversion variant type), and the accepted proposal for circular reference sequences such as the mitochondrial genome. Beyond ratified proposals, ferro parses patterns corresponding to open consultation topics including distance-between-variants notation (SVD-WG010), handling the kinds of strings that appear in real data even where the specification is still evolving.</p><h2><strong>Why HGVS Parsing Is Harder Than It Looks</strong></h2><p>Not all variants are simple single-letter substitutions. The notation covers deletions, insertions, duplications, deletion-insertions (delins), inversions, frameshifts, tandem repeat expansions, uncertain positions, and compound variants, each with distinct rules for formatting and normalization. Protein notation adds three-letter amino acid codes, stop codon representations, extension variants, and uncertain amino acid ranges on top of that.</p><p>One of the most clinically significant challenges is intronic variant handling. Many of the most important variants in clinical genetics fall at splice sites, the boundaries between coding exons and non-coding introns, because disrupting splicing often destroys gene function entirely. These variants use an offset notation such as <code>NM_000249.4:c.117-2del</code>, which describes a deletion two bases before the start of exon 12 in MLH1 (a classic splice acceptor variant). Processing these correctly requires knowing not just the transcript sequence but how the transcript maps back to the genome. This is a step that most HGVS tools either skip entirely or handle only through opaque workarounds.</p><p>Normalization is a separate challenge from parsing. The same indel near a repetitive region can be written in dozens of equivalent but non-identical ways, and normalization is the process of resolving all of them to a single canonical form. This matters enormously for matching variants across databases, deduplicating records, and submitting to ClinVar, where a non-normalized form may fail submission or be treated as a novel variant. A simple example: <code>NM_000249.4:c.1852_1853delAA </code>normalizes to <code>NM_000249.4:c.1852_1853del</code>, because the explicit deleted sequence is redundant under HGVS guidelines.</p><p>Finally, HGVS strings in the real world frequently deviate from the formal specification. Clinical labs, VEP annotators, legacy databases, and manual curators have produced decades of HGVS strings that use lowercase amino acids, omit version numbers, use informal shorthand, or reflect older versions of the standard. A production tool for clinical genomics needs to handle these gracefully, with configurable behavior, rather than simply rejecting them.</p><h2><strong>The Current Tool Landscape</strong></h2><p>Three main tools are currently in wide use for HGVS parsing and normalization: mutalyzer (from Leiden University Medical Center), biocommons/hgvs (the Python reference implementation), and hgvs-rs (a Rust port of biocommons). All three are valuable contributions to the field, and ferro-hgvs builds on the work they represent.</p><p>Speed is the most visible limitation. All three tools run at roughly 20 variants per second or fewer when operating locally. In network-dependent mode, which biocommons and mutalyzer require for some operations by default, throughput drops to 0.2 to 1 variant per second. At those rates, processing a complete ClinVar export of over one million variants takes days. For real-time annotation in clinical pipelines, or for researchers running large cohort studies, this is a genuine bottleneck.</p><p>Coverage gaps compound the speed problem. The table below shows validation (V) and normalization (N) support across the four tools, as tested live at<a href="https://hgvs.acgt.bio/"> hgvs.acgt.bio</a>. The most significant gap is intronic c. coordinate normalization, a category that covers a large fraction of clinically actionable splice-region variants. hgvs-rs can validate these but cannot normalize them. biocommons can normalize them but requires a running UTA database. mutalyzer handles them by rewriting to genomic coordinates behind the scenes. Only ferro normalizes them natively and transparently.</p><p><em>Table 1: HGVS Feature Support by Tool (V = validate, N = normalize, V/N = both)</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YPZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YPZE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 424w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 848w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YPZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png" width="950" height="1310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1310,&quot;width&quot;:950,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197322,&quot;alt&quot;:&quot;Table 1 compares ferro, mutalyzer, biocommons, and hgvs-rs for HGVS Feature Suppor&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/191387324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Table 1 compares ferro, mutalyzer, biocommons, and hgvs-rs for HGVS Feature Suppor" title="Table 1 compares ferro, mutalyzer, biocommons, and hgvs-rs for HGVS Feature Suppor" srcset="https://substackcdn.com/image/fetch/$s_!YPZE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 424w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 848w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!YPZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22184060-dbb8-4d07-9e27-f0c4213bbb91_950x1310.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Operational complexity is an additional barrier. biocommons requires a running UTA PostgreSQL database and SeqRepo, a locally stored sequence repository. Configuring and containerizing these dependencies for reproducible clinical pipelines takes significant effort. The end result is that teams often fall back to network-dependent operation, which sacrifices both speed and reproducibility.</p><h2><strong>Introducing ferro-hgvs</strong></h2><p>ferro-hgvs is written in Rust and uses <code>nom</code>, a well-established Rust parsing library, to implement zero-copy parsing of HGVS strings. Variants are parsed without allocating intermediate string representations, which contributes to the tool&#8217;s throughput and makes it suitable for memory-constrained environments. The parser produces a typed abstract syntax tree that covers every valid HGVS form, giving downstream code precise, structured access to every component of a variant without manual string manipulation.</p><p>The name follows Fulcrum&#8217;s growing Rust-based genomics toolchain, where &#8220;ferro&#8221; (iron in Latin and Spanish) reflects the language&#8217;s reputation for performance and reliability. This is the same philosophy that produced fgumi, Fulcrum&#8217;s Rust port of fgbio&#8217;s UMI-handling tools.</p><h3><strong>Performance</strong></h3><p>ferro-hgvs parses approximately 4 million HGVS patterns per second and normalizes approximately 2.5 million variants per second, all offline after a one-time reference data preparation step. The table below compares performance against existing tools. The speedups are large enough that they change what is computationally feasible: a normalization run over all of ClinVar that would take days with existing tools takes minutes with ferro-hgvs.</p><p><em>Table 2: Normalization Performance Comparison</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!evSD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!evSD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 424w, https://substackcdn.com/image/fetch/$s_!evSD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 848w, https://substackcdn.com/image/fetch/$s_!evSD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 1272w, https://substackcdn.com/image/fetch/$s_!evSD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!evSD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png" width="952" height="234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:234,&quot;width&quot;:952,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46383,&quot;alt&quot;:&quot;Table 2 shows a normalization performance comparison of ferro-hgvs, mutalyzer, biocommons/hgvs, and hgvs-rs&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/191387324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Table 2 shows a normalization performance comparison of ferro-hgvs, mutalyzer, biocommons/hgvs, and hgvs-rs" title="Table 2 shows a normalization performance comparison of ferro-hgvs, mutalyzer, biocommons/hgvs, and hgvs-rs" srcset="https://substackcdn.com/image/fetch/$s_!evSD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 424w, https://substackcdn.com/image/fetch/$s_!evSD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 848w, https://substackcdn.com/image/fetch/$s_!evSD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 1272w, https://substackcdn.com/image/fetch/$s_!evSD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527d528b-bbbc-4f27-ba7a-9874b2216151_952x234.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>Error Handling</strong></h3><p>ferro-hgvs provides three configurable error modes to match different workflow needs. Strict mode rejects any non-conformant input and is appropriate for validation pipelines where every variant must be checked carefully. Lenient mode auto-corrects common deviations (for example, converting the lowercase <code>p.val600glu</code> to the correctly capitalized <code>p.Val600Glu</code>) while emitting warnings, which is useful for batch processing real-world data. Silent mode applies the same auto-corrections without logging warnings, useful when processing large legacy datasets where noise from formatting issues would obscure other information.</p><p>Error and warning behavior can be tuned per-code through a <code>.ferro.toml</code> configuration file, and the <code>ferro explain</code> command provides plain-English explanations for every error and warning code, making it practical for teams to understand and act on quality issues in their variant data.</p><h2><strong>Tested Against the Real World</strong></h2><p>Performance numbers only matter if the tool is correct. ferro-hgvs has been validated against multiple large corpora of real HGVS data, and the testing strategy was designed to leave as few gaps as possible.</p><p><strong>ClinVar and major variant databases. </strong>ferro-hgvs has been run against the full ClinVar database, over one million HGVS strings spanning decades of submissions from clinical laboratories worldwide. ClinVar contains variants from every major gene, disease area, and variant type, including many edge cases and historically inconsistent notations that accumulate in any large curated database. In addition to ClinVar, the tool has been validated against variant sets from gnomAD, LOVD (the Leiden Open Variation Database), and other major genomic resources, representing the full breadth of HGVS usage across research and clinical communities.</p><p><strong>VEP-annotated VCFs. </strong>The Variant Effect Predictor (VEP) is the most widely used annotation tool in genomics, and its HGVS output appears in tumor sequencing reports, population studies, and research publications at scale. VEP-annotated HGVS strings frequently deviate subtly from the formal specification in ways that are predictable but that naive parsers reject. ferro-hgvs has been validated extensively against VEP outputs specifically because they represent the kind of real-world data that clinical pipelines encounter most often.</p><p><strong>Client pipeline data. </strong>Fulcrum Genomics works with biotech and clinical genomics teams across oncology, rare disease, and pharmacogenomics. That work has produced a large internal corpus of HGVS strings from diverse laboratory platforms, annotation tools, and reporting systems, which directly informed the edge cases ferro was designed to handle. Real production data surfaces failure modes that no synthetic test suite can fully anticipate.</p><p><strong>Borrowed test suites from competing tools. </strong>One of the most rigorous validation steps was incorporating the test suites from mutalyzer, biocommons/hgvs, and hgvs-rs directly into ferro&#8217;s testing framework. These are the carefully curated sets of specific variants, tricky edge cases, and known failure modes that each tool&#8217;s development team built and refined over years. By running ferro against all of them and checking that it produces equivalent or better results, we can confirm that ferro&#8217;s correctness is at least as strong as each competing tool in their own strongest areas. Where ferro and another tool produce different outputs, the comparison is surfaced explicitly, which is itself useful information for the community about where implementations diverge and why.</p><p><strong>Fuzz testing. </strong>ferro-hgvs includes a fuzz testing harness that generates millions of pseudo-random HGVS-like strings to find crashes, panics, and unexpected behavior at the parser boundary. This kind of robustness testing is rare in bioinformatics software and helps ensure that ferro does not fail silently or unpredictably when it encounters malformed input, which is a common occurrence when processing data from heterogeneous clinical sources.</p><h2><strong>Better Infrastructure for the Whole Ecosystem</strong></h2><p>One of the most time-consuming aspects of running any HGVS tool locally is assembling the reference data it needs: transcript sequences, genome assemblies, transcript-to-genome mappings, and protein sequences. Getting this data, keeping it versioned, and making it available to tools in the right formats is work that every team running HGVS software has to do independently.</p><p>The <code>ferro prepare</code> command solves this once. It downloads and organizes the complete reference dataset needed for comprehensive HGVS normalization from authoritative sources (NCBI, EBI, and MANE), validates the downloads, and structures them in a format that ferro can use offline without any network access during normal operation. The dataset totals approximately 6 GB:</p><p><em>Table 3: Reference Data Prepared by ferro prepare</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QvUH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QvUH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 424w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 848w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 1272w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QvUH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png" width="1132" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1132,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110386,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/191387324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QvUH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 424w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 848w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 1272w, https://substackcdn.com/image/fetch/$s_!QvUH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F606fa5b6-9f10-4093-bcd8-87d49f754448_1132x586.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Crucially, this reference dataset is not ferro-proprietary. The same data is shared with mutalyzer, biocommons/hgvs, and hgvs-rs, enabling all of them to run fully offline with consistently versioned, high-quality reference data. Teams that continue to use existing tools can still run <code>ferro prepare</code> once and immediately benefit from better-quality local reference data for all of their HGVS workflows.</p><p>A related community contribution is the <code>ferro-benchmark</code> harness. mutalyzer, biocommons, and hgvs-rs are all single-threaded by design, which limits how quickly they can process large variant sets even on multi-core hardware. The benchmark harness parallelizes all of them across CPU cores, dramatically improving their throughput for large validation and benchmarking runs. The <code>ferro-benchmark compare results</code> command then surfaces disagreements between tools variant-by-variant, making tool differences visible and actionable. This infrastructure is available to anyone running tool evaluation or validation studies, regardless of whether they adopt ferro as their primary tool.</p><h2><strong>Try It Now: hgvs.acgt.bio</strong></h2><p>The fastest way to experience ferro-hgvs is the live web service at<a href="https://hgvs.acgt.bio/"> hgvs.acgt.bio</a>. No account, no installation, and no configuration is required. Paste any HGVS variant and see results in seconds. The service is backed by ferro-hgvs and exposes its full feature set through a tabbed interface, along with a REST API for programmatic access.</p><p><strong>Multi-tool normalization and comparison. </strong>The normalize tab runs any HGVS string through ferro, mutalyzer, biocommons, and hgvs-rs simultaneously and displays their outputs side by side. The service detects agreement and disagreement automatically, shows processing time per tool, and provides a detailed component breakdown from ferro showing reference, coordinate system, variant type, position, and whether shifting occurred during normalization. Batch mode accepts a list of variants for processing all at once. This is a useful diagnostic for teams evaluating tools or investigating why a variant is producing inconsistent results across systems.</p><p><strong>Coordinate conversion. </strong>The convert tab translates variants between coordinate systems: c. to g., g. to c., c. to p., and n. to g. Provide a coding variant like <code>NM_000249.4:c.350C&gt;T</code> and retrieve the equivalent genomic position on GRCh38, or calculate the protein consequence. An option to return all conversions across all mapped transcripts at once is available for variants where multiple transcripts are relevant.</p><p><strong>Variant effect prediction. </strong>The effect tab predicts variant consequences using standardized Sequence Ontology (SO) terms: splice_site_variant, frameshift_variant, inframe_deletion, missense_variant, stop_gained, and others. Each prediction includes an impact level (HIGH, MODERATE, LOW, or MODIFIER) and optionally a prediction of whether a truncating variant would trigger nonsense-mediated mRNA decay (NMD), a key factor in determining whether a premature stop codon produces a loss-of-function outcome.</p><p><strong>Genomic liftover. </strong>The liftover tab converts coordinates between GRCh37 (hg19) and GRCh38 (hg38) in either direction. It accepts both raw chromosome positions (<code>chr7:117120148</code>) and HGVS genomic notation (<code>NC_000007.13:g.117120148</code>) and returns the lifted position, the equivalent HGVS g. string, and the relevant chain region.</p><p><strong>VCF conversion. </strong>The VCF tab handles bidirectional conversion between HGVS and VCF format. Convert a genomic HGVS variant to VCF fields (CHROM, POS, REF, ALT), or provide VCF fields and optionally a transcript accession to receive the g., c., and p. HGVS representations in a single step.</p><p><strong>REST API. </strong>Every operation is also available via a REST API for integration into existing pipelines: <code>POST /api/v1/normalize</code>, <code>/api/v1/batch/normalize</code>, <code>/api/v1/convert</code>, <code>/api/v1/effect</code>, <code>/api/v1/liftover</code>, <code>/api/v1/hgvs-to-vcf</code>, and <code>/api/v1/vcf-to-hgvs</code>. All endpoints return JSON with results, processing time, and any errors or warnings. A <code>/api/v1/validate</code> endpoint runs ferro-only syntax checking without requiring reference data. The <code>/health/detailed</code> endpoint exposes the live status of all four tools and a pass/fail matrix for a built-in set of test variants.</p><p>A good starting point is to paste <code>NM_000249.4:c.117-2del</code> (an MLH1 splice acceptor deletion) into the normalize tab with all four tools selected. The results make the coverage difference between tools immediately visible.</p><h2><strong>Getting Started</strong></h2><p><strong>Bioconda (recommended for most users). </strong>A Bioconda recipe is in review (PR #62795) and will be available shortly. Once merged, installation is:</p><p><code>conda install -c bioconda ferro-hgvs</code></p><p>The Bioconda build includes the benchmark and hgvs-rs comparison features. After installation, run <code>ferro prepare --output-dir ferro-reference</code> once to download reference data, then ferro normalize to start processing variants.</p><p><strong>Rust library. </strong>Add to your Cargo.toml:</p><p><code>ferro-hgvs = &#8220;0.1&#8221;</code></p><p><strong>CLI (via cargo). </strong><code>cargo install ferro-hgvs</code> installs the ferro binary directly.</p><p><strong>Python. </strong>A Python package backed by PyO3 bindings is available via <code>pip install ferro-hgvs</code>, providing Rust-level performance from Python code.</p><p><strong>Web service.<a href="https://hgvs.acgt.bio/"> </a></strong><a href="https://hgvs.acgt.bio/">hgvs.acgt.bio</a> requires no installation at all and is the quickest way to evaluate the tool.</p><h2><strong>Current Status and What Is Coming</strong></h2><p>ferro-hgvs v0.1.0 is alpha software. The parser and normalizer have been extensively validated against real clinical data, but the API is not yet stable and should be expected to evolve. The alpha designation reflects the early stage of the project, not the level of testing behind it.</p><p>Known gaps in the current release: protein (p.) and RNA (r.) normalization are validate-only in v0.1.0, repeat expansion normalization is not yet implemented, and Ensembl (ENST) transcript accessions are not supported. All of these are on the roadmap. p. and r. normalization and ENST support are the near-term priorities.</p><p>Issue reports and pull requests are welcome at the<a href="https://github.com/fulcrumgenomics/ferro-hgvs"> ferro-hgvs GitHub repository</a>. Real-world HGVS strings that produce unexpected results are among the most valuable contributions the community can make. Contact<a href="https://www.fulcrumgenomics.com"> Fulcrum Genomics</a> to discuss production deployments, custom integrations, or sponsoring specific feature development.</p><h2><strong>Closing Thoughts</strong></h2><p>A variant name is only as useful as the software that can reliably parse, normalize, and compare it. When tools disagree with each other, or when they quietly fail on patterns that appear constantly in clinical data, that uncertainty propagates through pipelines, reports, and databases in ways that are hard to detect and harder to correct.</p><p>ferro-hgvs is built against the living HGVS specification at<a href="https://hgvs-nomenclature.org/stable/"> hgvs-nomenclature.org</a>, validated on the largest and most diverse HGVS corpora we could assemble, and designed to raise the floor for the whole ecosystem rather than just replace individual tools. We hope it is useful to the community and look forward to hearing how people are using it.</p><p>Start with<a href="https://hgvs.acgt.bio/"> hgvs.acgt.bio</a>. Paste a variant you care about. See what all four tools say. </p><h2><strong>Resources</strong></h2><p>Web service:<a href="https://hgvs.acgt.bio/"> hgvs.acgt.bio</a></p><p>GitHub:<a href="https://github.com/fulcrumgenomics/ferro-hgvs"> github.com/fulcrumgenomics/ferro-hgvs</a></p><p>Rust crate:<a href="https://crates.io/crates/ferro-hgvs"> crates.io/crates/ferro-hgvs</a></p><p>API docs:<a href="https://docs.rs/ferro-hgvs"> docs.rs/ferro-hgvs</a></p><p>HGVS specification:<a href="https://hgvs-nomenclature.org/stable/"> hgvs-nomenclature.org/stable</a></p><p>Community consultation proposals:<a href="https://hgvs-nomenclature.org/stable/consultation/"> hgvs-nomenclature.org/stable/consultation</a></p><p>Fulcrum Genomics:<a href="https://www.fulcrumgenomics.com"> fulcrumgenomics.com</a></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Your Bioinformatics Tools Need to be AI-Ready]]></title><description><![CDATA[If you're not building tools that emit rich data for machine learning, you're wasting your compute.]]></description><link>https://blog.fulcrumgenomics.com/p/your-bioinformatics-tools-need-to</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/your-bioinformatics-tools-need-to</guid><dc:creator><![CDATA[Nils Homer]]></dc:creator><pubDate>Mon, 16 Mar 2026 19:08:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SzxR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SzxR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SzxR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SzxR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg" width="1456" height="927" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:927,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cartoon of a person in a space suit preparing data to be AI-ready&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cartoon of a person in a space suit preparing data to be AI-ready" title="Cartoon of a person in a space suit preparing data to be AI-ready" srcset="https://substackcdn.com/image/fetch/$s_!SzxR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SzxR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3ec2660-614a-4ac3-b5c2-ccecbbfb238e_1600x1019.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every bioinformatics tool I&#8217;ve written over the past two decades has had the same job: take biological data in, produce a result out. Align reads. Call variants. Build consensus sequences. And over the years, I&#8217;ve learned (sometimes the hard way) that the primary output alone is never enough. You need QC metrics. You need debug output. You need the evidence trail that lets you and your users understand what happened and why. I&#8217;ve put a lot of work into making tools like<a href="https://github.com/fulcrumgenomics/fgbio"> fgbio</a> produce rich, useful metrics at every step, and it has consistently paid off.</p><p>But I&#8217;ve been designing those metrics for humans. For a scientist staring at a MultiQC report, or for myself trying to track down a subtle bug. The question I keep coming back to is: what if that same data were structured and complete enough to train a model?</p><p>We are in the middle of two big shifts in how bioinformatics gets done. First, AI research and coding assistants are not just writing code; they are reasoning about experimental designs, interpreting analysis results, and proposing next steps. They are becoming junior scientists in our labs. Second, machine learning is eating every problem where sufficient training data exists. In genomics, we have oceans of data. Both shifts demand that we rethink how we design bioinformatics tools.</p><p>I want to make a simple argument: <strong>every new bioinformatics tool and method you write should be AI-ready.</strong> AI assistants need to work with your code, your outputs, and your analysis logic. Machine learning needs to train on the rich data your tools produce. If you&#8217;re not gathering this data as you go, you&#8217;re leaving value on the table.</p><h2><strong>Halfway there</strong></h2><p>The idea that tools should produce rich, structured metrics is not new.<a href="https://broadinstitute.github.io/picard/"> Picard</a>, developed at the Broad Institute (and originally written by my co-founder<a href="https://www.linkedin.com/in/tfenne/"> Tim Fennell</a>, and I later helped maintain along with<a href="https://github.com/samtools/htsjdk"> htsjdk</a>), was doing this over a decade ago. CollectAlignmentSummaryMetrics, CollectInsertSizeMetrics, CollectWgsMetrics, MarkDuplicates: the Picard philosophy was that every tool should emit detailed, structured metrics alongside its primary output. That approach shaped how Tim and I thought about tool design when we founded<a href="https://fulcrumgenomics.com/"> Fulcrum Genomics</a> and built<a href="https://github.com/fulcrumgenomics/fgbio"> fgbio</a>.</p><p>In fgbio, when we call consensus reads from UMI-tagged data, we compute a lot of information along the way and capture much of it in BAM tags and metrics files.<a href="http://fulcrumgenomics.github.io/fgbio/tools/latest/CollectDuplexSeqMetrics.html"> CollectDuplexSeqMetrics</a> alone produces eight output files, continuing that Picard tradition.</p><p>That makes tools like Picard and fgbio halfway AI-ready. The data is there. The metrics exist. But they were designed for human interpretation: summary tables, aggregate statistics, plots you eyeball. They weren&#8217;t designed to be feature vectors that a model can ingest at scale across thousands of samples. The gap between &#8220;useful QC&#8221; and &#8220;ML-ready features&#8221; is smaller than most people think, but it&#8217;s real, and closing it requires intentional design.</p><p>Most tools don&#8217;t even get halfway. Your aligner gives you a BAM with mapping qualities, but not the distribution of sub-optimal alignments it considered. Your variant caller gives you a VCF with QUAL scores, but not the per-site feature vectors that went into that decision. All of that discarded information is training data for models you haven&#8217;t built yet. In the ML engineering world, they call this &#8220;data exhaust&#8221;. In bioinformatics, we are incinerating ours.</p><h2><strong>Two kinds of AI-ready</strong></h2><p>When I say &#8220;AI-ready,&#8221; I mean two things.</p><p><strong>Your tools need to be legible to AI.</strong> Not just to coding assistants that autocomplete your Python, but to AI agents acting as junior scientists in your lab: designing analyses, interpreting outputs, proposing hypotheses, troubleshooting failures. A tool with clean APIs, consistent output formats, well-documented parameters, and structured logs is a tool not only useful to humans but also a tool an AI scientist can reason about. A tool that dumps cryptic column names and unstructured stderr is hostile to humans and AI alike.</p><p>This is already a real problem. The emerging field of &#8220;<a href="https://academic.oup.com/bib/article/26/5/bbaf505/8266996">agentic bioinformatics</a>&#8220; (Phan et al. 2025) is running headfirst into inconsistent interfaces and poorly documented outputs, as tools like<a href="https://arxiv.org/html/2501.06314v1"> BioAgents</a> (Li et al. 2025),<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11600294/"> AutoBA</a> (Fan et al. 2024), and<a href="https://arxiv.org/html/2507.08055v1"> MCPmed</a> (Li et al. 2025) all demonstrate. Our tools were built for humans reading man pages. The next generation of consumers won&#8217;t be human.</p><p><strong>Your tools also need to be generative with metadata.</strong> Every step in a pipeline is an opportunity to emit features: quality scores, distributional summaries, error profiles, alignment characteristics, signal-to-noise ratios. These aren&#8217;t just nice-to-have QC metrics. They&#8217;re input features for downstream ML models that can learn to make better decisions than your hand-tuned heuristics.</p><h2><strong>Where this matters most: filtering</strong></h2><p>If there&#8217;s one place where AI-ready output would have the most immediate impact, it&#8217;s filtering. Every domain in genomics has its own version of the signal-vs-artifact problem. HLA typing, where alignment ambiguity and allele-level read support bury the difference between right and wrong. MSI detection, where true microsatellite length changes hide behind polymerase stutter. SV calling, where split reads, discordant pairs, read depth changes, and assembly contigs form a multi-dimensional feature set that ML thrives on. Somatic variant calling, where the difference between a real low-frequency mutation and a sequencing artifact is a subtle pattern no single hard filter captures well.</p><p>In all of these cases, the path to better filtering is the same: emit the features, not just the calls. Give downstream models (and downstream scientists, human or AI) the evidence they need to find your false positives and recover your false negatives.</p><p>We already have existence proofs.<a href="https://github.com/google/deepvariant"> DeepVariant</a> (Poplin et al. 2018) works because the upstream pileup data, base qualities, mapping qualities, and strand information were already captured in a structured format, enabling a CNN to<a href="https://www.nature.com/articles/s41598-022-05833-4"> outperform</a> hand-tuned statistical models (Barbitoff et al. 2022). GATK&#8217;s<a href="https://software.broadinstitute.org/gatk/"> VQSR</a> works because the variant caller emits rich per-variant annotations (QD, FS, SOR, MQ, MQRankSum, ReadPosRankSum) that a Gaussian mixture model can train on. If those callers had only emitted PASS/FAIL, neither approach would have been possible. The features are the product.</p><h2><strong>Prior art</strong></h2><p>I&#8217;m not the first person to think about this.<a href="https://karpathy.medium.com/software-2-0-a64152b37c35"> Karpathy&#8217;s &#8220;Software 2.0&#8221;</a> (2017) argued that neural networks shift the work from writing code to curating data; if Software 2.0 is coming for bioinformatics, our Software 1.0 tools need to emit the training data it will consume.<a href="https://mitsloan.mit.edu/ideas-made-to-matter/why-its-time-data-centric-artificial-intelligence"> Andrew Ng&#8217;s data-centric AI movement</a> (2021) makes the case that the bottleneck is data quality, not model architecture. Most directly relevant is the<a href="https://bridge2ai.org/"> NIH Bridge2AI program</a> ($130M), whose<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11526931/"> Standards Working Group</a> (Jain et al. 2024) defines AI-readiness criteria for biomedical data and observes that most data generated for other tools is not suitable for ML without significant rework. My argument is that we should stop generating unsuitable data in the first place.</p><h2><strong>The pushback</strong></h2><p><strong>&#8220;You want me to 10x my output size for features nobody uses yet.&#8221;</strong> The marginal cost of emitting structured metrics alongside your primary output is small. Storage is cheap. Compute is expensive. You&#8217;re already doing the computation; I&#8217;m asking you to write down what you learned. The cost of not having this data when you need it is re-running everything, or discovering you can&#8217;t answer a question because the intermediate data is gone.</p><p><strong>&#8220;I&#8217;ll add metrics when someone asks for them.&#8221;</strong> By then it&#8217;s too late. The value of these features comes from having them across large cohorts, computed consistently, from the beginning. Retroactively adding feature emission and re-processing thousands of samples is orders of magnitude more expensive than doing it right the first time.</p><h2><strong>Design principles</strong></h2><p>If I were writing a set of principles for AI-native bioinformatics tools:</p><p><strong>Observable.</strong> Emit structured, semantically rich metadata at every step. Not just final answers, but the evidence trail. Per-read, per-site, per-family, per-molecule. Use well-defined tags, clear column headers, and machine-readable formats.</p><p><strong>Composable.</strong> Consistent, well-documented interfaces that both humans and AI agents can discover, chain, and reason about. Standard formats. Clear help text. Predictable behavior. Outputs parseable by a post-doc who happens to be an LLM.</p><p><strong>Trainable.</strong> Feature-rich representations that serve as training data for downstream ML. Emit the features, not just the conclusions.</p><h2><strong>The pitch</strong></h2><p>You&#8217;re already paying for the compute to run these analyses. The marginal cost of capturing richer output is small. Every time you run a pipeline without capturing intermediate features, you&#8217;re burning money twice: once on the compute you&#8217;re using now, and once on the compute you&#8217;ll need later to regenerate what you threw away.</p><p>I should be honest: AI is already changing how we work at<a href="https://fulcrumgenomics.com/"> Fulcrum Genomics</a>. It has changed how we write code, how we review analyses, and how we think about tool design. We are adapting our business to leverage it, and we think every genomics organization should be thinking about the same.</p><p>But here&#8217;s what we keep seeing: AI makes expert bioinformaticians more productive, but it doesn&#8217;t replace the judgment needed to produce AI-ready data, design the right experiments, or know when the model is wrong. The gap between experts and everyone else is widening, not narrowing. You still need human experts to build the foundation that AI stands on.</p><p>For most of my career, the bottleneck has been doing the analysis: writing the pipeline, wrangling the formats, debugging the failures. AI is changing that. It handles the routine work. We get to spend more time on the science: asking the right questions and directing AI to explore the ideas. But the AI post-doc is only as good as the data you give it. With rich, structured features, it can spot batch effects in your consensus calling, flag GC-correlated false positives in your SV calls, catch allele balance inconsistencies in your HLA typing. With minimal, undocumented output, it&#8217;s working blind.</p><p>That&#8217;s what the fulcrum in<a href="https://fulcrumgenomics.com/"> our name</a> has always meant: a small, well-placed point of leverage that amplifies force. AI is a lot of force. We&#8217;re here to help you apply it well.</p><p>The tools we build today will either be the foundation for tomorrow&#8217;s ML models, or they&#8217;ll be replaced by tools that are. I know which side of that I want to be on. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iWrR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iWrR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg" width="1456" height="924" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:924,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cartoon of a person in a space suit with AI-ready data observing the universe and DNA through the portal window&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cartoon of a person in a space suit with AI-ready data observing the universe and DNA through the portal window" title="Cartoon of a person in a space suit with AI-ready data observing the universe and DNA through the portal window" srcset="https://substackcdn.com/image/fetch/$s_!iWrR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb69dffb-2f9c-42bf-a821-5485c2b03057_1600x1015.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>References</strong></h2><ol><li><p>Barbitoff YA, Abasov R, Tvorogova VE, et al. Systematic benchmark of state-of-the-art variant calling pipelines identifies major factors affecting accuracy of coding sequence variant discovery. BMC Genomics. 2022;23(1):396.<a href="https://www.nature.com/articles/s41598-022-05833-4"> </a><a href="https://link.springer.com/article/10.1186/s12864-022-08365-3">doi: 10.1186/s12864-022-08365-3</a></p></li><li><p>Fan J, Chen Z, Chen J, et al. AutoBA: An Autonomous Bioinformatics Agent. Bioinformatics. 2024.<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11600294/"> PMC11600294</a></p></li><li><p>Fennell T, et al. Picard: A set of command line tools for manipulating high-throughput sequencing data. Broad Institute.<a href="https://broadinstitute.github.io/picard/"> broadinstitute.github.io/picard</a></p></li><li><p>Homer N. fgbio: Tools for working with genomic and high throughput sequencing data.<a href="https://github.com/fulcrumgenomics/fgbio"> github.com/fulcrumgenomics/fgbio</a></p></li><li><p>Jain S, Neumann M, Goenaga-Infante H, et al. Defining AI-Readiness for Biomedical Data: Bridge2AI Standards Working Group Recommendations. Nature Scientific Data. 2024.<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11526931/"> PMC11526931</a></p></li><li><p>Karpathy A. Software 2.0. Medium. 2017.<a href="https://karpathy.medium.com/software-2-0-a64152b37c35"> karpathy.medium.com/software-2-0-a64152b37c35</a></p></li><li><p>Li H, Wang Q, Wang Y, et al. BioAgents: Democratizing Bioinformatics Analysis with Multi-Agent Systems. arXiv. 2025.<a href="https://arxiv.org/html/2501.06314v1"> arxiv.org/html/2501.06314v1</a></p></li><li><p>Li Z, Zeng Y, Zhu X, et al. MCPmed: A Standardized Protocol for Biomedical Tool Integration with LLM Agents. arXiv. 2025.<a href="https://arxiv.org/html/2507.08055v1"> arxiv.org/html/2507.08055v1</a></p></li><li><p>Ng A. Why it&#8217;s time for data-centric artificial intelligence. MIT Sloan Management Review. 2021.<a href="https://mitsloan.mit.edu/ideas-made-to-matter/why-its-time-data-centric-artificial-intelligence"> mitsloan.mit.edu</a></p></li><li><p>Phan L, Gururajan S, Goh B, et al. Agentic Bioinformatics. Briefings in Bioinformatics. 2025;26(5):bbaf505.<a href="https://academic.oup.com/bib/article/26/5/bbaf505/8266996"> doi:10.1093/bib/bbaf505</a></p></li><li><p>Poplin R, Chang PC, Alexander D, et al. A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology. 2018;36:983-987.<a href="https://github.com/google/deepvariant"> github.com/google/deepvariant</a></p></li></ol><div><hr></div><p><em>Nils Homer is a Founding Partner at<a href="https://fulcrumgenomics.com/"> Fulcrum Genomics</a>, where he builds bioinformatics tools and pipelines for the genomics community. He is the creator of<a href="https://github.com/fulcrumgenomics/fgbio"> fgbio</a> and a co-author of the<a href="https://doi.org/10.1093/bioinformatics/btp352"> SAMtools paper</a>. You can find him on<a href="https://www.linkedin.com/in/nilshomer/"> LinkedIn</a> or reach Fulcrum at contact@fulcrumgenomics.com</em></p><div><hr></div><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[fastquorum: Making UMI consensus boring (in the best way)]]></title><description><![CDATA[If you&#8217;ve worked with UMI-tagged sequencing data long enough, you already know the theory.]]></description><link>https://blog.fulcrumgenomics.com/p/fastquorum-making-umi-consensus-boring</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/fastquorum-making-umi-consensus-boring</guid><pubDate>Mon, 16 Feb 2026 18:45:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e_JI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e_JI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e_JI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e_JI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png" width="1200" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e_JI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 424w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 848w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 1272w, https://substackcdn.com/image/fetch/$s_!e_JI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37dfb9ae-9dd0-488d-9fec-b8b6eb09d581_1200x800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you&#8217;ve worked with<a href="https://dnatech.ucdavis.edu/faqs/what-are-umis-and-why-are-they-used-in-high-throughput-sequencing#:~:text=UMI%20is%20an%20acronym%20for,%22%20or%20%22Random%20Barcodes%22."> UMI-tagged sequencing data</a> long enough, you already know the theory. Tag molecules early, group reads that came from the same original fragment, collapse them into a consensus, and dramatically reduce error. In theory, it&#8217;s straightforward.</p><p>In practice, it&#8217;s rarely clean.</p><p>UMI consensus workflows tend to grow organically: a script here to extract tags, another to sort and group reads, a carefully tuned command copied from a past project, plus a handful of assumptions that only live in someone&#8217;s head. The science is sound, but the implementation is fragile. Small changes in library structure, read layout, or scale can quietly break things. Or worse, corrupt results without anyone noticing.</p><p>That&#8217;s the gap <strong><a href="https://github.com/nf-core/fastquorum/tree/1.2.0">fastquorum</a></strong> was built to close.</p><p><a href="https://nf-co.re/blog/2024/fastquorum_intro">fastquorum</a> is an nf-core pipeline built by <a href="https://www.fulcrumgenomics.com/">Fulcrum Genomics</a> that implements the <a href="https://github.com/fulcrumgenomics/fgbio/blob/main/docs/best-practice-consensus-pipeline.md">fgbio FASTQ-to-consensus best-practice workflow</a> in a way that&#8217;s reproducible, inspectable, and boringly consistent. It doesn&#8217;t invent a new approach to UMI consensus. It takes an approach many teams already <em>intend</em> to use and makes it reliable enough to trust across projects, people, and environments.</p><h3><strong>From &#8220;works once&#8221; to &#8220;works every time&#8221;</strong></h3><p>At a high level, fastquorum does exactly what you&#8217;d expect: it takes raw FASTQs, extracts UMIs, aligns reads, groups them by molecular family, and generates single-strand or duplex consensus reads. Quality metrics are captured along the way so you can see what&#8217;s happening, not just accept a final BAM on faith.</p><p>What matters more than the individual steps is that those steps are locked into a tested, versioned workflow. fastquorum runs under Nextflow using the nf-core framework, which means the same pipeline can be executed on a laptop, an HPC cluster, or in the cloud, with the same logic, the same tool versions, and the same outputs.</p><p>If that sounds mundane&#8230; It&#8217;s not.</p><p>Reproducibility is often treated as a compliance box to check, but in UMI-based workflows it&#8217;s foundational. Consensus calling is sensitive to grouping rules, filtering thresholds, and read handling details. When those details drift between runs or between analysts, you can end up &#8220;discovering&#8221; biology that&#8217;s really just pipeline variance.</p><p>fastquorum removes that variable.</p><h3><strong>What it&#8217;s good at &#8212; and what it isn&#8217;t</strong></h3><p>fastquorum shines when UMI consensus is a <em>means</em> <em>to an end, </em>not the end itself. If you&#8217;re doing rare variant detection, duplex sequencing, or any application where error suppression is table stakes, fastquorum gives you a clean, standardized starting point for downstream analysis.</p><p>It&#8217;s especially useful when:</p><ul><li><p>Multiple projects or teams need to process UMI data the same way</p></li><li><p>You want to compare results across runs without second-guessing the pipeline</p></li><li><p>You&#8217;re tired of maintaining bespoke glue code around tools</p></li></ul><p>But it doesn&#8217;t magically fix experimental limitations. Systematic sequencing errors, biased library prep, or insufficient UMI diversity will still show up in the data. fastquorum won&#8217;t hide those problems, and that&#8217;s a feature, not a bug.</p><h3><strong>Why this fits in Fulcrum&#8217;s UMI toolset</strong></h3><p>Like <a href="https://blog.fulcrumgenomics.com/p/mutseqr-open-standards-for-error">MutSeqR</a>, fastquorum reflects our belief that the hardest problems aren&#8217;t caused by missing algorithms, but by brittle implementations of well-understood methods.</p><p>By packaging UMI consensus into a transparent, reproducible workflow, fastquorum makes it easier for teams to focus on interpretation, validation, and decision-making instead of debugging the same pipeline assumptions over and over again.</p><p>If UMI consensus is part of your workflow today, fastquorum is worth a look. It lets this part of your analysis fade into the background, exactly where infrastructure should be. </p><p>&#128187; Access the code: <a href="https://github.com/nf-core/fastquorum/tree/1.2.0">https://github.com/nf-core/fastquorum/tree/1.2.0</a></p><p></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Why Functional Resolution Matters for Interpreting CTNNB1 Cancer Mutations]]></title><description><![CDATA[At Fulcrum, we&#8217;re often brought into projects where variants have already been called, annotated, and grouped.]]></description><link>https://blog.fulcrumgenomics.com/p/why-functional-resolution-matters</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/why-functional-resolution-matters</guid><pubDate>Thu, 05 Feb 2026 16:27:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!abP3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At <a href="https://fulcrumgenomics.com/">Fulcrum</a>, we&#8217;re often brought into projects where variants have already been called, annotated, and grouped. The harder question tends to come later: which of those differences actually matter for interpretation?</p><p>That question sits at the center of a newly published <em>Nature Genetics</em> paper co-authored by Fulcrum Principal Bioinformatics Scientist <a href="https://www.linkedin.com/in/alison-meynert-556b1925/">Alison Meynert</a>, based on work completed prior to her joining Fulcrum. The study offers a concrete example of what becomes visible once functional differences between variants are measured directly, rather than inferred.</p><h2>A closer look at a familiar hotspot</h2><p>CTNNB1 exon 3 mutations are common across multiple cancer types and are typically described as activating &#946;-catenin signalling. While that description is broadly correct, it glosses over meaningful variation within the hotspot.</p><p>In this work, the authors used a saturation mutagenesis strategy to generate and measure all 342 possible missense mutations across the exon 3 region. By combining a &#946;-catenin reporter assay with flow sorting and deep sequencing, they quantified signalling output for each variant under endogenous regulatory control.</p><p>The result is a functional spectrum rather than a single category.</p><h2>What functional measurements add</h2><p>One of the more striking observations is that mutation frequency does not explain functional impact.</p><p>The team calculated mutational likelihood scores based on background nucleotide substitution rates in hepatocellular and endometrial cancers, accounting for all single-nucleotide paths between codons. Those probabilities did not predict which mutations are observed in tumours.</p><p>Instead, different tissues preferentially accumulate mutations that fall within particular ranges of &#946;-catenin activity.</p><p>Mutations that sit close together in sequence space can differ substantially in effect size. And treating them as interchangeable hides that structure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!abP3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!abP3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 424w, https://substackcdn.com/image/fetch/$s_!abP3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 848w, https://substackcdn.com/image/fetch/$s_!abP3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 1272w, https://substackcdn.com/image/fetch/$s_!abP3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!abP3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png" width="1456" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!abP3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 424w, https://substackcdn.com/image/fetch/$s_!abP3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 848w, https://substackcdn.com/image/fetch/$s_!abP3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 1272w, https://substackcdn.com/image/fetch/$s_!abP3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69303c7c-c807-4fc2-9563-c1cd0a9195ec_1600x461.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 1e from Krishna, et al. Mutational spectra changes with strength of B-catenin activity for each flow-selected pool.</em></p><h2>When functional differences surface clinically</h2><p>When hepatocellular carcinoma samples were stratified by measured signalling strength, rather than by mutation presence alone, clinically relevant patterns emerged.</p><p>Tumours with relatively weakly activating CTNNB1 mutations showed poorer survival than those with stronger activating mutations. These same tumours also showed greater immune cell infiltration.</p><p>One interpretation, proposed by the authors, is that tumours may select for a &#8220;sweet spot&#8221; of &#946;-catenin activation within the WNT pathway that&#8217;s strong enough to support growth, but not so strong that it triggers counterproductive immune or regulatory responses. That optimal range appears to vary by tissue type and may interact with other dysregulated pathways.</p><p>From the tumour&#8217;s perspective, not all pathway activation is equally advantageous.</p><p>Without functional stratification, these associations are not apparent.</p><h2>Carrying this perspective forward</h2><p>Although the work for this study predates Alison&#8217;s time at Fulcrum, the perspective it reflects is familiar in her work today: a reluctance to overgeneralize and a focus on resolving heterogeneity before drawing conclusions.</p><p>For clients, that often shows up as how questions are framed early. We ask what assumptions are worth challenging and where additional resolution is likely to change interpretation rather than add noise. </p><p>&#128214;<strong>Read the paper:<br></strong><em><a href="https://www.nature.com/articles/s41588-025-02496-5">Mutational scanning reveals oncogenic CTNNB1 mutations have diverse effects on signalling and clinical traits</a></em></p><p></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Meet Jess Smith]]></title><description><![CDATA[Molecules Don&#8217;t Lie &#8212; If You Know How to Ask]]></description><link>https://blog.fulcrumgenomics.com/p/meet-jess-smith</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/meet-jess-smith</guid><dc:creator><![CDATA[Charlotte Tolonen]]></dc:creator><pubDate>Wed, 04 Feb 2026 18:16:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XaTM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XaTM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XaTM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XaTM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg" width="499" height="398.9258241758242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:499,&quot;bytes&quot;:3667847,&quot;alt&quot;:&quot;Jess Smith, Staff Bioinformatics Scientist, in a line-drawn portrait&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/160500873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Jess Smith, Staff Bioinformatics Scientist, in a line-drawn portrait" title="Jess Smith, Staff Bioinformatics Scientist, in a line-drawn portrait" srcset="https://substackcdn.com/image/fetch/$s_!XaTM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XaTM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfdbbc6c-066b-4a4a-8ff1-914daabcde36_4072x3256.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jess Smith, Principal Bioinformatics Scientist</figcaption></figure></div><p><a href="https://www.linkedin.com/in/jessicasmithbioinformatics/">Jess Smith</a> (<a href="https://github.com/smithjess">GitHub</a>) joined <a href="https://fulcrumgenomics.com/about/">Fulcrum Genomics</a> in December 2023. She has worked in immuno-oncology, antibody discovery, molecular diagnostics, and core sequencing technology improvements &#8212; where her background in physical sciences informs her consideration of the physical processes and molecular mechanisms involved in generating sequencing data. We recently sat down to chat about work and life as a bioinformatics consultant.</p><div><hr></div><p><em><strong>What&#8217;s your area of expertise, and what excites you about your work?</strong></em></p><blockquote><p>Jess: I&#8217;d say I&#8217;m a generalist, in terms of bioinformatics expertise. I do have more of a scientific background and training, though having been in the field for some time now you do find you pick up a lot of software engineering, and in particular cloud architecture expertise. As a generalist I like seeing how these technologies touch many different fields. Most of my jobs have allowed me to use RNA sequencing and DNA sequencing and do some assembly of constructs, and, and, and&#8230; I like that I get to see the broad impact.</p><p>In terms of what excites me, it&#8217;s the scientific problems. I think of my role as a bioinformaticist as &#8216;interrogating molecules&#8217;. I think part of that comes from my background in physics and chemistry. Of course we have to write good software in order to efficiently and accurately interrogate molecules, but ultimately what&#8217;s coming off a sequencer is some sort of physical signal that is correlated to a molecule. What biologists are usually interested in is what those molecules are doing in a biological sense, so providing them an accurate readout of what the molecules are doing is really the job. Really, what excited me about analysis of NGS was the massively parallel scale. To get so much information about so many molecules all at the same time! It&#8217;s really cool.</p></blockquote><div><hr></div><p><em><strong>What&#8217;s a common challenge in our industry that people don&#8217;t talk about enough?</strong></em></p><blockquote><p>Experimental Design</p><p>In the last ten to twenty years it&#8217;s become so easy to take some DNA or RNA and just throw it on a sequencer, see what happens. Doing good old-fashioned hypothesis-based research is what&#8217;s going to get you the answers you want, more than trying mine some big data <em>post hoc</em>. Thinking really hard to focus your question, and then designing your experiment around that, will make the downstream analysis trivial. The analysis is hard and costly and time-consuming and maybe even impossible if you don&#8217;t think carefully about what you put on the sequencer before you do your sequencing.</p></blockquote><div><hr></div><p><em><strong>What&#8217;s one tool, tip, or mindset shift that has made a big impact in your work?</strong></em></p><blockquote><p>There have been a number of people who have mentored me in my career, but most recently Jeff Gentry, at this company, who really emphasized, and helped me hone, my instinct for &#8216;right-sizing&#8217; a solution. Avoiding premature optimization, but also avoiding something so slap-dash that you regret it in two months. I think instinct for right-sizing is something that comes with experience, and not to be too &#8216;sales-y&#8217; but one of the nice things at Fulcrum is that everyone has seen so many projects that even our junior people have a pretty good instinct for the amount of rigor for a given effort, what is the right amount of structure and process. We don&#8217;t want to waste time and money today, but we also don&#8217;t want to waste time and money in the long term. </p></blockquote><div><hr></div><p><em><strong>What&#8217;s a recent project or insight you&#8217;re particularly proud of? </strong></em></p><blockquote><p>I am working on a PacBio long read project right now and I&#8217;m just really excited! Every time I get to work on a new library prep technology, or a new sequencing read type, on a new application with long reads I&#8217;m thrilled. I&#8217;m just stoked about long reads, if you&#8217;ve got long reads bring them to Fulcrum! I want to analyze them.</p></blockquote><div><hr></div><p><em><strong>If you could give biotech startups one piece of advice, what would it be?</strong></em></p><blockquote><p>I have been in three. There&#8217;s fifty-thousand things I could say. If I had to choose one it would be to hire very carefully your initial people. And then this goes back to what we were saying about right-sizing your solution, but think very carefully if you need a whole team for this, or do you need people to put a solution in place that a smaller team can then maintain? When do you need to bring certain kinds of expertise in, and do they need to be full-time employees? And then in terms of your full-time employees, are you promising them growth as employees as a best-case scenario trajectory or are you going to need them to be an individual contributor for a long time and are they going to be happy doing that? If that&#8217;s the case, hire them to be a good individual contributors and not for management opportunities &#8216;down the road&#8217;. </p></blockquote><div><hr></div><p><em><strong>What&#8217;s something outside of work that inspires how you think about problem-solving?</strong></em></p><blockquote><p>My hobby is rock climbing. Lots of people like rock climbing because it&#8217;s both exercise and a little puzzle you get to solve. I&#8217;m not a particularly accomplished climber but I do enjoy it. I think it&#8217;s a pretty good metaphor for a lot of technical things. You stand on the ground and you look at your route and you think <em>&#8220;I know what this is going to be like! I have a plan, it will be fine, I&#8217;ll just do the plan.&#8221;</em> Then you get up there two-thirds of the way and think <em>&#8220;oh, now that I&#8217;m closer I can see why this plan is not going to work.&#8221;</em> You have to pivot, and be flexible. Those are skills that are very important when you&#8217;re doing technical work, particularly doing a new thing that people haven&#8217;t done before. You definitely should go in with a plan! But you should be open-minded about what you&#8217;re going to do if something unexpected comes up or there were unknown variables adding complexity.    </p></blockquote><p></p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.fulcrumgenomics.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Meet Matt Stone]]></title><description><![CDATA[Head of Single-Cell and Spatial Sequencing]]></description><link>https://blog.fulcrumgenomics.com/p/meet-matt-stone</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/meet-matt-stone</guid><dc:creator><![CDATA[Charlotte Tolonen]]></dc:creator><pubDate>Fri, 09 Jan 2026 17:18:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ad2i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ad2i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ad2i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ad2i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg" width="500" height="399.72527472527474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:2719911,&quot;alt&quot;:&quot;Matthew Stone, Principal Bioinformatics Scientist &amp; Head of Single-Cell and Spatial Sequencing, in a line-drawn portrait&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/160491940?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Matthew Stone, Principal Bioinformatics Scientist &amp; Head of Single-Cell and Spatial Sequencing, in a line-drawn portrait" title="Matthew Stone, Principal Bioinformatics Scientist &amp; Head of Single-Cell and Spatial Sequencing, in a line-drawn portrait" srcset="https://substackcdn.com/image/fetch/$s_!ad2i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ad2i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae6cb1b-7037-4f93-9df4-449b224ec5ec_4072x3256.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Matt Stone, Associate Director of Engineering</figcaption></figure></div><p><a href="https://www.linkedin.com/in/mattstonebio/">Matt Stone</a> (<a href="https://github.com/msto">GitHub</a>) joined <a href="https://fulcrumgenomics.com/about/">Fulcrum Genomics</a> in September 2023. His professional expertise spans a diverse range of biological contexts, including immunotherapy, spatial and single-cell transcriptomics, and structural variant discovery. We recently sat down to chat about work and life as a bioinformatics consultant.</p><p><em>What&#8217;s your area of expertise, and what excites you about your work?</em></p><blockquote><p>Matt: I embrace diving deep on both the computational and biology sides of a project, and I care about building software that is well grounded in biology and motivated by a business need. Building breadth in my expertise allows me to speak both languages and act effectively as the bridge between computational and lab teams. I bring a strong sense of product mindedness to my client projects, and I believe in letting data drive our development. The data doesn&#8217;t lie, and working with the stakeholders is the only real way to know if a pipeline is actually solving their problem.</p><p>I&#8217;m always excited by the chance to work with a client on a new assay or experiment. It&#8217;s rewarding to finally reach the moment a client lights up at a new result, and having the chance to reflect that excitement back. I&#8217;m also excited by opportunities to improve our open source software and internal engineering practices. I love learning about a better way to be doing something.</p></blockquote><div><hr></div><p><em>What&#8217;s a common challenge in our industry that people don&#8217;t talk about enough?</em></p><blockquote><p>Getting lab and computational teams to talk with each other effectively.</p><p>I&#8217;ve noticed this can be made worse by imbalanced expectations for in-person work. Obviously, bench scientists have to be in-person, while the computational team may be hybrid or fully remote. I&#8217;ve worked in settings where this created a sense of &#8220;othering&#8221; between the two teams, so I made sure to be on site 2-3 days a week and always for team meetings. Without these interactions, you miss out on the opportunity to have unplanned conversations from which good ideas can spring.</p><p>It&#8217;s really about finding ways to meet people where they&#8217;re at, and being the person to connect the teams and connect the dots. At Fulcrum, this is balancing several different chat clients; in previous environments this was making sure I was on the ground to talk to scientists who had better things to do at the bench than check Slack. Good science doesn&#8217;t happen in silos. </p><p>And nothing is better than a whiteboard for unblocking a project.</p></blockquote><div><hr></div><p><em>What&#8217;s one tool, tip, or mindset shift that has made a big impact in your work?</em></p><blockquote><p>Scale effort to the context. Don&#8217;t reinvent or overcomplicate the wheel, and also make it really easy to build good wheels. </p><p>I do most of my work in Python, where my rule of thumb is to optimize for developer time, not CPU time. At Fulcrum, we rely heavily on strict type checking to catch avoidable bugs early. I&#8217;ve worked with Clint (Valentine) to develop an internal Python package template so it&#8217;s trivially easy to stand up a new project with our recommended configuration. We want the default bar to be high, and we never want a developer to opt out of type checking or unit tests because setup is too much overhead. When we talk about scaling effort to context, we want folks to think about bigger picture concerns, like how thoroughly the code needs to be tested. Is a happy path okay, or do we need robust coverage? And the same goes for refactoring, containerization, or general productionization.</p></blockquote><div><hr></div><p><em>What&#8217;s a recent project or insight you&#8217;re particularly proud of? </em></p><blockquote><p>Recently I was brought in to get a stalled project back on track - a workflow port from Snakemake to Nextflow that had grown beyond its original scope. The client had a critical dataset arriving in November and needed the pipeline ready. I managed three other engineers on the project, made calls about where to refactor versus where to work around existing patterns, and handled code review. A lot of my role was triaging - what do we fix properly, what do we patch, what do we leave alone to hit the deadline. We reached code completion in about two months, then discovered the new workflow wasn&#8217;t producing results consistent with the legacy pipeline. I set up a weekly iteration cycle: run the old pipeline, diagnose differences, implement patches, repeat. After about a month of that disciplined process, the ported workflow is now validated against legacy results, and we&#8217;re on track for the new dataset.</p></blockquote><div><hr></div><p><em>If you could give biotech startups one piece of advice, what would it be?</em></p><blockquote><p>Good software engineering practices complement good lab work. </p><p>I think it&#8217;s easy to perceive testing, code review, and documentation as &#8220;nice to have&#8221;, but they&#8217;re just as necessary as detailed SOPs, lab journals, and disciplined LIMS provenance. Biotech isn&#8217;t Silicon Valley - we can&#8217;t just move fast and break things. </p></blockquote><div><hr></div><p><em>What&#8217;s something outside of work that inspires how you think about problem-solving?</em></p><blockquote><p>Having a child has reshaped how I think about time. Before I had the flexibility to follow interesting tangents and didn&#8217;t worry too much about how long something might take because I could always make up the time later. But now time has become much more zero-sum and that&#8217;s made me more deliberate. I&#8217;m more mindful about where I invest my energy, and I&#8217;ve become better at identifying what really matters. I&#8217;m a perfectionist by nature and I&#8217;ve gotten better at saying &#8220;this is good enough for now and for its purpose.&#8221;</p></blockquote><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.fulcrumgenomics.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading about Fulcrum Genomics! Subscribe to hear more.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Genomics in 2026]]></title><description><![CDATA[Trends and Predictions from the Fulcrum Genomics Team]]></description><link>https://blog.fulcrumgenomics.com/p/genomics-in-2026</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/genomics-in-2026</guid><pubDate>Tue, 30 Dec 2025 18:26:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4VEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As 2025 winds down, genomics is at an inflection point. Long-read platforms are entering clinical workflows, agentic AI tools are everywhere, and the field is moving beyond the genome to the molecules that actually do the work in cells.</p><p>To cut through the noise, we asked members of our own team at Fulcrum Genomics what trends they&#8217;re seeing now and what they expect to shape 2026. Their answers cluster around a common theme: making genomics work in the real world through better tools, better standards, and deeper biology.</p><h2><strong>1. AI in Genomics: Powerful, but Not a Magic Wand</strong></h2><p>AI is already changing how genomics professionals work, but our team is clear-eyed about both the upside and the mess it can create.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4VEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4VEF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4VEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4VEF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!4VEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc34f83d-c439-4723-9b64-df9b239cf4f0_1600x1600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;I&#8217;m seeing some serious time-multiplying advantages to all genomics professionals using AI agents. But I&#8217;m also predicting there&#8217;s going to be a lot of human time needed to clean up some of the messes this creates in 2026 (ironically, with the aid of AI agents no doubt).&#8221;</p></blockquote><p><em>-<strong>Clint Valentine</strong> | Vice President, Operations</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!69EV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!69EV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!69EV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!69EV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!69EV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!69EV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!69EV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!69EV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!69EV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!69EV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa81a0d2a-3386-456c-ab59-a2232193f77d_1600x1600.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;[I&#8217;m seeing] a shift from the previous cycle of &#8216;we&#8217;ll just throw all of our data in a pile, and armed with nothing but the power of friendship we&#8217;ll empower our clinicians to make deep insights&#8217; to &#8216;we&#8217;ll just throw all of our data in a pile and AI will figure it out&#8217;. Curious to see how it goes.&#8221;</p></blockquote><p><em>-<strong>Jeff Gentry</strong> | Distinguished Bioinformatics Engineer</em></p><p>Taken together, their perspectives suggest that in 2026:</p><ul><li><p>AI agents will be indispensable force multipliers for genomics teams</p></li><li><p>Thoughtful data practices, validation, and oversight will matter more than ever</p></li><li><p>&#8220;Just add AI&#8221; will not rescue disorganized data or ad hoc infrastructure</p></li></ul><h2><strong>2. Standards Cross the Academia&#8211;Industry Divide</strong></h2><p>While tools and platforms evolve, data standards are also becoming more central to how genomics gets done.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!omeK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!omeK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!omeK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!omeK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!omeK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!omeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!omeK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!omeK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!omeK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!omeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee10bb5-ff37-4a1a-92a9-4b52cccd65cd_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;I&#8217;m seeing GA4GH standards that have been pushed/originated in academic bioinformatics starting to be used more in industry, and not just file formats e.g. BAM/VCF, but things like Phenopackets.&#8221;</p></blockquote><p><em>-<strong>Alison Meynert</strong> | Principal Bioinformatics Scientist</em></p><p>This matters because:</p><ul><li><p>Standardized data models make it easier to share, integrate, and re-use data across projects and organizations</p></li><li><p>Clinical and phenotypic standards are essential for robust AI and for scaling precision medicine efforts</p></li></ul><p>In 2026, expect interoperability and well-defined standards to move from &#8220;nice to have&#8221; to &#8220;table stakes&#8221; for serious genomics programs.</p><h2><strong>3. The Genomics Stack Grows Up: Tools, Workflows, and Rust</strong></h2><p>On the engineering side, the tooling that underpins genomics is rapidly maturing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HwNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HwNF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HwNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HwNF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!HwNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa72639e4-04c9-4c25-ae8b-efc6479ebe18_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;We&#8217;re seeing a trend of clunky environment management tools (conda, poetry) being replaced with faster and improved versions written in Rust. Specifically, pixi is fantastic as a drop-in replacement for conda and uv replaces poetry. Going into the new year, we also have our eye on ty as a mypy replacement.&#8221;</p></blockquote><p><em>-<strong>Zach Norgaard</strong> | Associate Director, Bioinformatics</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NKM2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NKM2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NKM2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NKM2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!NKM2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901a1e4a-6110-4421-b123-09a9dd359b42_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;We&#8217;re seeing the continuing maturation of some popular workflow languages (snakemake &amp; nextflow) and platform-as-a-service products (e.g., seqera and latch). I&#8217;m predicting that 2026 will be a year where genomics professionals take the time to upgrade their projects to exploit these offerings.&#8221;</p></blockquote><p><em>-<strong>Jason Fan</strong> | Staff Bioinformatics Engineer</em></p><p>The takeaway: the genomics software stack is moving from &#8220;held together with scripts and hope&#8221; toward something more like a modern, robust engineering environment that&#8217;s faster, safer, and easier to maintain.</p><p><strong>4. From Short Reads to Structural Truth: Long Reads, SVs, and Error-Corrected Sequencing</strong></p><p>Several team members highlighted a shift toward technologies that capture more complex and clinically relevant variation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!noVq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!noVq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!noVq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!noVq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!noVq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!noVq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!noVq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!noVq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!noVq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!noVq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3ee99-4595-42b7-9193-8530c4f203bd_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;Error-corrected sequencing expanded to larger target panels this year, with new methods addressing the double-sampling challenge and library preps that preserve native DNA features for epigenetic analysis. In 2026, I expect these advances and more to bring ECS into routine clinical workflows.&#8221;</p></blockquote><p><em>-<strong>Nils Homer </strong>| Founding Partner</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cyqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cyqo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cyqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cyqo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Cyqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a724ab-504c-47dc-94be-5d71c6063cae_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;Long-read sequencing should keep gaining momentum, especially with PacBio HiFi moving further into clinical workflows. I wonder if we&#8217;ll see some tools for Roche SBX processing/analysis start to be developed out in the open.&#8221;</p></blockquote><p><em>-<strong>Erin McAuley</strong> | Staff Bioinformatics Scientist</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fbzx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fbzx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fbzx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fbzx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!Fbzx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0161391-297f-434a-9b0a-6c187d2ac3d4_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;I&#8217;m seeing an interest in structural variants that began in academia shifting into industry, and with it the incorporation of long read data into standard bioinformatics workflows.&#8221;</p></blockquote><p><em>-<strong>Tim Dunn</strong> | Senior Bioinformatics Scientist</em></p><p>Together, these perspectives point to a 2026 where:</p><ul><li><p>Long reads are no longer niche, but an expected part of serious clinical and translational genomics efforts</p></li><li><p>Error-corrected approaches and SV-aware pipelines play a larger role in diagnostics and disease characterization</p></li><li><p>The field moves beyond SNPs and small indels toward a more complete view of genomic architecture</p></li></ul><h2><strong>5. Beyond the Genome: Proteins Take Center Stage</strong></h2><p>Genomics is only one layer of biology, and Yossi expects 2026 to bring much more practical attention to proteins.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-XUu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-XUu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-XUu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-XUu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 424w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 848w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!-XUu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6de663-a1b2-467f-acb1-ee514b9a2c0c_1600x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#8220;In 2026 I expect proteins to get a lot more practical attention. AI-based protein design will become a standard early step in enzyme and therapeutic work, rather than optional or experimental. Improvements in automated prep and quantification will make pilot-scale proteomics studies far more reliable than they are today. Altogether, this will let us go beyond the genome and work with the molecules that do things in cells.&#8221;</p></blockquote><p><em>-<strong>Yossi Farjoun</strong> | Principal Bioinformatics Scientist</em></p><p>In other words, 2026 may be the year where genomics and proteomics feel less like parallel worlds and more like a connected continuum of molecular insight.</p><h2><strong>Looking Ahead: Making Genomics Work in the Real World</strong></h2><p>Across the Fulcrum Genomics team, a coherent story emerges.</p><ul><li><p><strong>AI and agents</strong> will be everywhere, but the organizations that win will be the ones that pair them with sound data strategy, validation, and governance.</p></li><li><p><strong>Modern tools and workflows</strong>, from Rust-based environment managers to mature workflow engines and PaaS platforms, will give genomics teams a stack they can build on instead of battle.</p></li><li><p><strong>Standards like GA4GH&#8217;s</strong> will make it easier to share, integrate, and interpret data across research, clinical, and commercial settings.</p></li><li><p><strong>Advanced sequencing approaches</strong>, including long reads, ECS, and SV-aware analyses, will enable a more accurate and clinically meaningful view of the genome.</p></li><li><p>And <strong>protein-level technologies</strong> will push us beyond sequence toward function, mechanism, and ultimately, better interventions.</p></li></ul><p>Across AI, infrastructure, standards, sequencing, and proteins, one message stands out: the building blocks for real-world genomics are finally in place. The work of 2026 is to turn those capabilities into systems that are dependable, scalable, and clinically meaningful. And to do it without losing scientific rigor along the way.</p><p>If you&#8217;re planning how to evolve your pipelines, platforms, or assays in 2026, we&#8217;d love to partner on it. Get in touch with the Fulcrum Genomics team to design, optimize, or troubleshoot the genomics and multi-omics workflows that will carry your organization into the next phase.</p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[MutSeqR: Open Standards for Error-Corrected Sequencing Analysis]]></title><description><![CDATA[Standardizing Error-Corrected Sequencing Data Analysis]]></description><link>https://blog.fulcrumgenomics.com/p/mutseqr-open-standards-for-error</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/mutseqr-open-standards-for-error</guid><pubDate>Wed, 03 Dec 2025 16:51:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vSQk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vSQk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vSQk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vSQk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png" width="1822" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1822,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:971405,&quot;alt&quot;:&quot;Figure 1 from MutSeqR publication showing an overview of the MutSeqR utilities.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/179153503?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0829e97-81ba-4c35-acf8-6d723678b5bb_1822x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 1 from MutSeqR publication showing an overview of the MutSeqR utilities." title="Figure 1 from MutSeqR publication showing an overview of the MutSeqR utilities." srcset="https://substackcdn.com/image/fetch/$s_!vSQk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vSQk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae0b2eea-e705-4611-9d14-29153a47e9d5_1822x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 1 from MutSeqR publication showing an overview of the MutSeqR utilities.</em></p><p>At <a href="https://fulcrumgenomics.com/">Fulcrum Genomics</a>, we&#8217;ve always believed that open and reproducible methods are essential to advancing science. That&#8217;s why we&#8217;re proud to share that our own <a href="https://www.linkedin.com/in/clint-valentine/">Clint Valentine</a> co-authored a new publication in <em>Bioinformatics Advances</em> introducing <a href="https://bioconductor.org/packages/release/bioc/html/MutSeqR.html">MutSeqR</a>. It&#8217;s an open-source R package designed to bring standardization to error-corrected sequencing (ECS) data analysis for genetic toxicology applications and beyond.</p><p>ECS has become a cornerstone technique in genetic toxicology, environmental health, and cancer research. By <a href="https://doi.org/10.1073/pnas.2013724117">comparing multiple reads of both strands from the same DNA molecule</a>, ECS can dramatically improve accuracy and detect ultra-rare mutations that traditional sequencing might miss in a sea of noise.</p><p>Despite its power, one major challenge has persisted: the lack of open and reproducible methods for analyzing ECS data for what genetic toxicology researchers and regulators care about. Different laboratories often use proprietary or custom-built pipelines, which make it difficult to compare results or reproduce findings.</p><p>MutSeqR addresses that challenge head-on.</p><h2>What is MutSeqR?</h2><p>MutSeqR was developed collaboratively by Health Canada, the University of Ottawa, and our team at Fulcrum Genomics. The goal was to create a shared, open framework for analyzing mutation data across ECS technologies like Duplex Sequencing (DS) and SMM-Seq.</p><p>Key features of MutSeqR:</p><ul><li><p><strong>Variant filtering and classification</strong>: Applies validated filters and identifies mutation types across ECS platforms</p></li><li><p><strong>Mutation frequency and dose-response modeling</strong>: Quantifies how mutation rates change across experimental conditions</p></li><li><p><strong>Benchmark dose (BMD) estimation</strong>: Implements statistical modeling consistent with regulatory methods for chemical risk assessment</p></li><li><p><strong>Mutation spectrum and signature analysis</strong>: Characterizes mutation types and connects them to biological mechanisms</p></li><li><p><strong>Built-in visualization tools</strong>: Generates reproducible plots for mutation frequency, spectra, and statistical comparisons</p></li></ul><p>All analyses can be run in R (v3.4.0 or higher), and the code is openly available on <a href="https://github.com/EHSRB-BSRSE-Bioinformatics/MutSeqR">GitHub</a> and <a href="https://bioconductor.org/packages/release/bioc/html/MutSeqR.html">Bioconductor</a>.</p><h2>Fulcrum Genomics&#8217; Role</h2><p>Our Ops Lead, Clint Valentine, contributed as a co-author on the study and helped establish many of the methods and software foundations that MutSeqR builds upon.</p><p>&#8220;This work reflects Fulcrum&#8217;s commitment to open and reproducible science,&#8221; said Valentine. &#8220;Our team has been <a href="https://summit.nextflow.io/2024/boston/agenda/05-24--fastquorum-the-fgbio-best-practices/">developing tools for error-corrected sequencing</a> for more than a decade, so it&#8217;s meaningful to see those methods evolve into frameworks that support regulatory applications.&#8221;</p><p>Matt Meier, of Health Canada and senior author on the paper, added: &#8220;For technologies like error-corrected sequencing to be used in a regulatory setting, we need open and transparent methods. Annette Dodge, first author on the publication, worked meticulously to build a tool that meets that need. It&#8217;s been rewarding to bring together experts from different disciplines to create something that serves the entire genetic toxicology community.&#8221;</p><p>This project continues a theme in our work at Fulcrum: helping scientists build confidence in their data through robust bioinformatics tools. Whether we&#8217;re consulting on experimental design, developing analysis pipelines, or <a href="https://github.com/fulcrumgenomics">contributing to open-source software</a>, our goal is always the same: <em>to help research teams make sense of complex genomic data with clarity and precision</em>.</p><h2>Why Standardization Matters for Genetic Toxicology</h2><p>In toxicology and environmental genomics, reproducibility is essential for regulatory confidence. Small differences in variant calling or filtering parameters can lead to divergent conclusions about a chemical&#8217;s mutagenic risk.</p><p>MutSeqR brings consistency to these workflows by:</p><ul><li><p>Supporting cross-platform comparability among ECS technologies</p></li><li><p>Offering transparent statistical models for mutation frequency and dose-response</p></li><li><p>Providing regulatory-aligned analysis tools for mutagenicity testing</p></li><li><p>Ensuring data reproducibility across labs and studies</p></li></ul><p>MutSeqR&#8217;s benchmark dose modeling also aligns with methodologies already used by Health Canada, the U.S. Environmental Protection Agency (EPA), and the European Food Safety Authority (EFSA), making it easier for results to be interpreted in a regulatory context.</p><p>Together, these tools make MutSeqR a valuable resource for researchers and regulators who need reliable, open-source methods for evaluating genetic safety data.</p><h2>Looking Ahead: Open Science and Public Benefit</h2><p>We see the publication and release of MutSeqR as part of a broader movement toward open and transparent genomics methods in genetic toxicology. As error-corrected sequencing continues to expand in research, industry, and government, tools like MutSeqR help bridge the gap between data generation, interpretation, and subsequent public health decision-making.</p><p>We&#8217;re excited about what comes next. Our open-source pipeline, <a href="https://nf-co.re/fastquorum/">fastquorum</a>, already takes researchers from raw sequencing data to highly accurate error-corrected DNA sequences. MutSeqR now picks up from variant calls with variant filtering and annotation, dose response modeling, statistics, and visualization. But one automated piece is still missing: variant calling. We&#8217;d love to collaborate with others to develop this step or extend our existing tools toward an end-to-end open workflow for all the various flavors of error-corrected sequencing analysis. We want to see a solution with the same reproducible, regulatory-minded approach, that further helps researchers get the answers they need quickly and openly.</p><p>At Fulcrum Genomics, we remain committed to building open standards and collaborative methods that strengthen scientific integrity and transparency in genomics. </p><p>&#128214; Read the publication:</p><ul><li><p><a href="https://doi.org/10.1093/bioadv/vbaf265">MutSeqR: An Open-Source R Package for Standardized Analysis of Error-Corrected Next-Generation Sequencing Data in Genetic Toxicology</a></p></li></ul><p>&#128187; Access the code:</p><ul><li><p><a href="http://bioconductor.org/packages/release/bioc/html/MutSeqR.html">https://bioconductor.org/packages/release/bioc/html/MutSeqR.html</a></p></li><li><p><a href="http://github.com/EHSRB-BSRSE-Bioinformatics/MutSeqR">github.com/EHSRB-BSRSE-Bioinformatics/MutSeqR</a></p></li></ul><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[10th Anniversary Core Values: The Intersection]]></title><description><![CDATA[How our values connect and guide us forward]]></description><link>https://blog.fulcrumgenomics.com/p/10th-anniversary-core-values-the</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/10th-anniversary-core-values-the</guid><dc:creator><![CDATA[Tim Fennell]]></dc:creator><pubDate>Thu, 27 Nov 2025 20:55:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SwMq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SwMq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SwMq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 424w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 848w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 1272w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SwMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png" width="1456" height="869" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:869,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Subway map of all Fulcrum Genomics core values in one image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Subway map of all Fulcrum Genomics core values in one image" title="Subway map of all Fulcrum Genomics core values in one image" srcset="https://substackcdn.com/image/fetch/$s_!SwMq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 424w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 848w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 1272w, https://substackcdn.com/image/fetch/$s_!SwMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95b7336-f39d-493c-847f-1fc6bccaa54a_2048x1223.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The whole picture: How our values connect</strong></p><p>Over the past weeks, we&#8217;ve shared our core values one at a time: <a href="https://blog.fulcrumgenomics.com/p/core-value-openness">Openness</a>, <a href="https://blog.fulcrumgenomics.com/p/core-value-excellence">Excellence</a>, <a href="https://blog.fulcrumgenomics.com/p/core-value-valuing-people">Valuing People</a>, <a href="https://blog.fulcrumgenomics.com/p/core-value-client-focus">Client Focus</a>, <a href="https://blog.fulcrumgenomics.com/p/core-value-public-benefit">Public Benefit</a>. Each essay stood on its own. But here&#8217;s what we&#8217;ve realized in reflecting on them: they&#8217;re not really separate at all.</p><p>They&#8217;re all different expressions of the same fundamental commitment: <strong>to show up fully, to do work that matters, and to do it </strong><em><strong>with</strong></em><strong> people, not just </strong><em><strong>for</strong></em><strong> them.</strong></p><p>You can&#8217;t have excellence without openness, without the willingness to surface problems early, question assumptions, and say &#8220;I don&#8217;t know, but let&#8217;s figure it out together.&#8221;</p><p>You can&#8217;t truly focus on clients without valuing people, because clients aren&#8217;t abstractions or contracts. They&#8217;re humans trying to solve hard problems, often under real pressure.</p><p>And public benefit ties it all together. It&#8217;s the why that makes the how matter. When your goal is to advance science in ways that help people, excellence isn&#8217;t optional, relationships aren&#8217;t transactional, and openness isn&#8217;t a nice-to-have. It&#8217;s all connected.</p><p>We started Fulcrum with a simple question: Can we do meaningful work with people we really like? Ten years in, the answer is still yes. And if you&#8217;ve followed this series, or worked with us as a client, collaborator, teammate, or friend, thank you for helping us live these values, and for holding us accountable to them. Today and every day we are thankful for you.</p><p>We&#8217;re just getting started. Here&#8217;s to the next chapter, together. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9-P8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9-P8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 424w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 848w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 1272w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9-P8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png" width="550" height="585.75" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:800,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9-P8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 424w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 848w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 1272w, https://substackcdn.com/image/fetch/$s_!9-P8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9422f6-47ae-4a30-bc72-e7d2858607cf_800x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Core Value: Public Benefit]]></title><description><![CDATA[Fulcrum Genomics 10th Anniversary Series]]></description><link>https://blog.fulcrumgenomics.com/p/core-value-public-benefit</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/core-value-public-benefit</guid><dc:creator><![CDATA[Tim Fennell]]></dc:creator><pubDate>Wed, 19 Nov 2025 18:04:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IWjs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Public Benefit</strong> is one of our core values.</p><p>Public Benefit has a global and a local component.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IWjs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IWjs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 424w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 848w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 1272w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IWjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png" width="1456" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:355807,&quot;alt&quot;:&quot;Fulcrum Genomics Core Values subway map showing Public Benefit as a line that runs through the stations Open Source, Disease Research, Therapeutic Development, and Enabling Others&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/167892034?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Fulcrum Genomics Core Values subway map showing Public Benefit as a line that runs through the stations Open Source, Disease Research, Therapeutic Development, and Enabling Others" title="Fulcrum Genomics Core Values subway map showing Public Benefit as a line that runs through the stations Open Source, Disease Research, Therapeutic Development, and Enabling Others" srcset="https://substackcdn.com/image/fetch/$s_!IWjs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 424w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 848w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 1272w, https://substackcdn.com/image/fetch/$s_!IWjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e81a81-d5f7-4e30-a29e-78f7e4dbe369_3945x2356.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Public Benefit: Grounded by Good</strong></h3><p>At Fulcrum Genomics, Public Benefit isn&#8217;t just a principle&#8212;it&#8217;s our purpose.  Each of us brings a deeply personal motivation to this work.  Many of us have been touched by genetic disease, and that experience shapes not only the projects we choose, but how we choose to do them.</p><p>We want our work to matter.  We want to create impact.  We want to move science forward in a way that improves lives.</p><p>This value&#8212;Public Benefit&#8212;inspires the <em><strong>why</strong></em> behind our work.  It fuels our drive to contribute to both basic research and human health, and it guides how we collaborate with clients.  In every project, in every conversation, we stay mindful of the broader implications: What are we building, and who does it help?</p><p>We&#8217;re happier, more motivated, and more fulfilled when we know that what we&#8217;re doing is genuinely making a difference.</p><h3><strong>&#8220;Fix-Forward&#8221;: Small Acts, Big Impact</strong></h3><p>Public Benefit isn&#8217;t just about the big picture.  It also shows up in the small choices we make every day.  At home, many of us live by the simple rule: &#8220;tidy as you go.&#8221;  Put things back where they belong, so the space works better for everyone.  We bring that same mindset to the bioinformatics community.</p><p>A lot of open-source bioinformatics software is under-resourced, a bit rough around the edges.  Being a good community member means noticing those rough edges&#8212;and choosing to smooth them out.  Whether it&#8217;s submitting a bug report, contributing a pull request, improving documentation, or sharing a workaround that might save someone else an hour of frustration, we try to leave things better than we found them.</p><p>Could we fork the code privately and solve the problem for ourselves?  Sure.  But with a little more effort, we can solve it for everyone.  And that&#8217;s the kind of scientist&#8212;and the kind of company&#8212;we want to be.  If we can make even 1% of the world&#8217;s bioinformatics software 5% better, that&#8217;s a meaningful difference.</p><h3><strong>The Big and the Small</strong></h3><p>We see Public Benefit at two levels:</p><ol><li><p><strong>Capital-P</strong> Public Benefit: the big-picture commitment to working in biomedicine, pushing research forward, and improving human health.</p></li><li><p><strong>Lowercase-p </strong>public benefit: the daily acts of generosity, responsibility, and craftsmanship that make the scientific ecosystem stronger for everyone.</p></li></ol><p>Both matter.</p><p>We are part of a community, and we want to help it thrive.  When you look for the helpers, we want you to see us&#8212;not quietly in the background, but out front, leading the charge.</p><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p>]]></content:encoded></item><item><title><![CDATA[Meet Alison Meynert]]></title><description><![CDATA[Between the Lines of Code and Conversation]]></description><link>https://blog.fulcrumgenomics.com/p/meet-alison-meynert</link><guid isPermaLink="false">https://blog.fulcrumgenomics.com/p/meet-alison-meynert</guid><dc:creator><![CDATA[Charlotte Tolonen]]></dc:creator><pubDate>Wed, 12 Nov 2025 18:04:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KmOP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KmOP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KmOP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KmOP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg" width="500" height="399.72527472527474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:3699539,&quot;alt&quot;:&quot;Alison Meynert, Principal Bioinformatics  Scientist, in a line-drawn portrait&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.fulcrumgenomics.com/i/160492520?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alison Meynert, Principal Bioinformatics  Scientist, in a line-drawn portrait" title="Alison Meynert, Principal Bioinformatics  Scientist, in a line-drawn portrait" srcset="https://substackcdn.com/image/fetch/$s_!KmOP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KmOP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe36737c2-eae4-484a-8421-3179a2ff414a_4072x3256.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Alison Meynert, Principal Bioinformatic Scientist</figcaption></figure></div><p><a href="https://www.linkedin.com/in/alison-meynert-556b1925/">Alison Meynert</a> (<a href="https://github.com/ameynert">GitHub</a>) joined <a href="https://fulcrumgenomics.com/about/">Fulcrum Genomics</a> in April 2024. Her professional expertise has focused on maximizing clinical impact with well-engineered workflows generating insights from &#8216;omics data. We recently sat down to chat about work and life as a bioinformatics consultant.</p><p><em><strong>What&#8217;s your area of expertise, and what excites you about your work?</strong></em></p><blockquote><p>Alison: I come from an academic background, where I spent years working with very early-stage research and projects nowhere near therapeutic application. Moving to Fulcrum has been an interesting shift. The assays are much more defined, and each client typically focuses on just one or two. They know them inside out, and my role is to help analyze their data and build production-ready pipelines so they can bring their product to market. That&#8217;s a big change from academia, where you&#8217;re often helping define the assay itself, or juggling many different experiment types across multiple groups. At the Institute for Genetics and Cancer in Edinburgh, where I worked in a bioinformatics core, the remit was broad. It was mostly human-focused, or relevant model organisms, but still&#8212;there&#8217;s a lot you can do in that space. Our bioinformatics core partnered with the National Health Service in Scotland working on rare disease diagnostics for children and babies with very rare developmental disorders. That was another world altogether. There is no profit motive there, the margins are razor-thin, and you&#8217;re trying to do the best you can with publicly-available data. Working with the clinical side was what I enjoyed the most, and in some ways I think that&#8217;s what&#8217;s translated best to working with the Fulcrum clients. It&#8217;s one assay, it&#8217;s one focus, and some of our clients - well they probably have pretty thin margins too! </p><p>I don&#8217;t regret leaving academia. There was a lot of politics that could be tough to navigate, and it&#8217;s been lovely to just focus on science. I was hired at Fulcrum as a Bioinformatics Scientist, not an Engineer, so clearly that analysis background was something Nils and Tim were looking for. But over the past year, I&#8217;ve also had the chance to develop my skills in pipelining and tooling, which has been a lot of fun. I didn&#8217;t realize how much I missed diving into a real programming challenge. My undergrad in Canada was in straight computer science and statistics, and I even worked as a software developer for a bit before heading back for a Master&#8217;s and then a Ph.D. I worked on file format conversion&#8212;which, in hindsight, might be the perfect start for a career in bioinformatics!</p><p>Over the last year I&#8217;ve been happy to get to keep the variety of projects I used to see working at a core facility but now it&#8217;s like a super-professional core facility for the world. So I get to work on loads of different cool things, I have excellent support for the technical things that I&#8217;m learning, and it&#8217;s just a lot of fun.</p></blockquote><div><hr></div><p><em><strong>What&#8217;s a common challenge in our industry that people don&#8217;t talk about enough?</strong></em></p><blockquote><p>Ironically, communication! Making sure you speak the right language for your client. That you really understand what they&#8217;re trying to do. Occasionally figuring out what they actually need instead of what they say they need. You have to be very careful to not talk at cross-purposes with each other. Sometimes that means asking very basic questions, not being offended when people ask the same back, and sometimes just slowing down at the start of a project to make sure that everyone is on the same page, understands the end goals, what might not be able to be answered. Setting expectations is a big part of communicating a project. I have certainly seen when this goes wrong. In academia it can be devastating for a career. In industry for a whole company. So we want to get it right.</p></blockquote><div><hr></div><p><em><strong>What&#8217;s one tool, tip, or mindset shift that has made a big impact in your work?</strong></em></p><blockquote><p>It&#8217;s two sides to the same coin. One is setting aside your ego and saying <em>&#8220;I don&#8217;t know&#8221;</em>. Being honest about that and asking for help with things that you don&#8217;t know about. And the other side of that is battling your own imposter syndrome, to understand what you are good at, to project that confidence when it&#8217;s justified, when you do know your stuff. </p></blockquote><div><hr></div><p><em><strong>What&#8217;s a recent project or insight you&#8217;re particularly proud of?</strong> </em></p><blockquote><p>I have one client who wanted to compare something they were doing with something that is available in the public domain. The public domain tool was a mess in terms of getting it to run. It takes in big data and takes a lot of processing time. Getting it to run and making sure it was running correctly was really hard work, but I finally got it to run end-to-end with the correct input data, correctly formatted. When I finally did the comparison and the client&#8217;s assay performed better, that was nice and the client was very happy!</p></blockquote><div><hr></div><p><em><strong>If you could give biotech startups one piece of advice, what would it be?</strong></em></p><blockquote><p>Understand your assay, your product, and do lots of diagrams. It will help everyone. It&#8217;s the best thing when you come to a client and they have really beautiful diagrams. Particularly when it&#8217;s sequencing and you can see <em>&#8220;these are the pieces we&#8217;re sequencing and this is how they are coming together as we are constructing this particular fragment of whatever it is we&#8217;re going to sequence&#8221;</em>.</p></blockquote><div><hr></div><p><em><strong>What&#8217;s something outside of work that inspires how you think about problem-solving?</strong></em></p><blockquote><p>I am a big fan of just letting my brain work while I&#8217;m not actively thinking about things. People call them shower thoughts. Or you wake up in the morning and think <em>&#8220;oh, that&#8217;s how that works&#8221;</em>. Both letting your unconscious brain do the work, and giving your brain the space to do that work - making sure you get enough sleep and go for walks and give yourself breaks, go for a drive, have some music on, let your brain wander. It&#8217;s amazing what it will come up with.</p></blockquote><p></p><p><a href="http://linkedin.com/company/fulcrumgenomics/">Fulcrum Genomics</a> is a bioinformatics consulting firm built by scientists at the forefront of large-scale genomic research, with deep expertise in sequencing technology, pipeline engineering, and genomic data analysis for biotech, pharma, and academia. Engage us through project-based work, fractional R&amp;D, or hourly consulting. <a href="https://fulcrumgenomics.com">Contact us to discuss your project</a>.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.fulcrumgenomics.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading about Fulcrum Genomics! Subscribe to hear more about our team and some biology talk.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>