# RNA-seq Bioinformatics Workflow Design: Step-by-Step Guide

RNA-seq bioinformatics workflow design is the practice of turning a folder of raw FASTQ files into a statistically defensible table of gene-level expression differences, using a pipeline you can defend in a review or reproduce a year later. This guide walks through that design step by step, from planning the experiment and installing a reproducible environment, through quality control, alignment or pseudoalignment, quantification, normalization, and differential expression, all the way to functional interpretation. You will see real commands, the output each step should produce, the errors that most often appear at each stage, and how experienced analysts decide between competing tools.

By the end of this article you will be able to:

- Build an end-to-end bulk RNA-seq pipeline with a workflow manager rather than a pile of one-off scripts
- Choose between alignment-based and pseudoalignment-based quantification with a clear justification
- Run differential expression with DESeq2 and check the results for the classic failure modes
- Avoid the mistakes that benchmarking studies show cost accuracy, including underpowered designs and mismatched reference files

To follow along you need a Linux or macOS machine (or a cloud instance) with at least 16 GB of RAM, the conda or mamba package manager, Snakemake, R 4.x with Bioconductor, and enough disk space for a reference genome and your FASTQ files. Everything below assumes a bulk RNA-seq experiment comparing two conditions, three biological replicates per condition, human data, and paired-end 150 bp Illumina reads. Adapt the reference files and parameters for your own organism.

## What RNA-seq Bioinformatics Workflow Design Means

![Six-step flow of an RNA-seq pipeline from experiment planning through environment setup, QC, alignment, counting and interpretation.](/article-images/illustrations/rna-seq-bioinformatics-workflow-design-workflow-steps.webp)

A workflow is a chained set of software modules where each module does one job and passes its output to the next. RNA-seq analysis is naturally modular: quality control, trimming, alignment, quantification, normalization, statistical testing, and interpretation are each handled by specialized tools, so the practical problem is joining them into a single cohesive run [1]. Design decisions start before the first command. Guidelines for transcriptome-remodeling studies emphasize integrating bench and computational planning into one rigorous design, because choices like read depth and library strandedness cannot be fixed after sequencing [2].

Two design questions dominate everything downstream:

1. **What biological question does the statistical model answer?** Your design formula in the differential expression step must match the question. If condition and batch are confounded, no tool can separate them later.
2. **What is the right level of resolution?** Gene-level counts, isoform quantification, splice junctions, and single-cell expression each need different pipelines and different standards of evidence [3].

## Step 0: Design the Experiment Before Touching Data

The cheapest computational fix is a good experimental plan. Settle these points first:

- **Biological replicates.** Three is the practical floor for a differential expression test between two groups. More replicates buy power, and power matters most when you expect small fold changes.
- **Blocking and batch control.** Randomize samples across extraction batches, library preparation batches, and sequencing lanes so that batch is not confounded with condition. Record batch in your sample sheet so it can enter the statistical model.
- **Library type.** Stranded libraries (dUTP-style) preserve strand information, which improves gene assignment in overlapping loci. Record the protocol and use the matching counting flag later.
- **Depth.** Standard gene-level differential expression on a well-annotated genome is usually fine at 10 to 30 million reads per sample. If you need isoform-level or splice-junction quantification, benchmarking shows that higher data quality and depth measurably improve accuracy [3].
- **Special modalities.** If your question involves transcript population dynamics, small non-coding RNAs, or host-pathogen co-transcriptomes, the standard pipeline needs modification from the start, not as an afterthought. A dedicated miRNA-seq workflow in R covers [preprocessing](/blog/data-analysis/what-is-data-preprocessing) through target prediction and network construction as its own sequence of steps [4], and co-transcriptome analysis of plant-bacterial interactions requires joint processing of host and bacterial data with ortholog and KEGG-based annotation [5].

Keep a sample sheet with at least: sample ID, FASTQ file paths, condition, batch, library type, and RIN or equivalent RNA quality metric. This sheet becomes the metadata backbone of every downstream step.

## Step 1: Set Up a Reproducible Environment

Do not install tools ad hoc into your base environment. Two layers of infrastructure have become standard practice.

### Package environments with conda

Create one environment for the command-line tools and one for R:

```bash
mamba create -n rnaseq -c conda-forge -c bioconda \
  snakemake fastqc multiqc trim-galore hisat2 samtools \
  subread salmon -y

mamba create -n rnaseq-r -c conda-forge -c bioconda \
  r-base=4.3 bioconductor-deseq2 bioconductor-edger -y
```

Record the exact environment files in your repository. The ARMOR workflow, an automated, modular RNA-seq pipeline, is implemented with Snakemake and relies on conda environments so that every tool version is pinned and reinstallable [1].

### Orchestrate with a workflow manager

A Snakemake file turns your steps into a Directed Acyclic Graph that Snakemake can re-run only where inputs changed. A minimal rule for QC looks like this:

```python
rule fastqc:
    input:
        "data/raw/{sample}_R{read}.fastq.gz"
    output:
        "results/fastqc/{sample}_R{read}_fastqc.html",
        "results/fastqc/{sample}_R{read}_fastqc.zip"
    shell:
        "fastqc {input} -o results/fastqc/"
```

Run everything with:

```bash
snakemake --cores 8 --use-conda
```

Expected output on a clean run:

```
Building DAG of jobs...
Job stats:
job        count
-----      -----
fastqc         6
total          6
...
6 of 6 steps (100%) done
```

The payoffs of this design are modularity and transparency. ARMOR was built explicitly because individual software modules each target one pipeline step and must be joined coherently, and because many existing automated pipelines lacked modularity, transparency, or flexibility [1]. Its setup also generates Bioconductor objects to hand off cleanly to R packages for downstream analysis [1].

## Step 2: Raw Read Quality Control

Never analyze reads you have not looked at. FastQC produces per-file reports, and MultiQC aggregates them into one comparison across all samples.

```bash
mkdir -p results/fastqc
fastqc data/raw/*.fastq.gz -o results/fastqc/
multiqc results/fastqc/ -o results/multiqc/
```

Open the MultiQC report. For each sample check:

- **Per-base sequence quality.** Phred scores encode base-call confidence, where a Phred score of Q30 means a 1 in 1,000 chance of a wrong base. Illumina reads typically decay toward the 3' end, which is normal.
- **Per-sequence GC content.** A [normal distribution](/blog/data-analysis/normal-distribution-definition-examples) roughly centered on the expected GC of your organism. A sharp spike often signals rRNA or adapter contamination.
- **Adapter content.** Rising adapter signal at read ends tells you trimming is needed.
- **Overrepresented sequences.** Common culprits are rRNA fragments and poly-A tails.

Expected MultiQC summary line in your terminal:

```
[2026-11-11 14:02] multiqc: Report written to results/multiqc/multiqc_report.html
```

If a whole lane shows uniformly low quality, contact the sequencing provider before spending compute. If one sample is an outlier while others are fine, flag it now and recheck after trimming.

## Step 3: Adapter and Quality Trimming

Trim-galore (a wrapper around Cutadapt) removes adapters and low-quality tail bases:

```bash
for sample in S1 S2 S3 S4 S5 S6
do
  trim_galore --paired \
    --illumina \
    --quality 20 \
    --length 20 \
    data/raw/${sample}_R1.fastq.gz \
    data/raw/${sample}_R2.fastq.gz \
    -o results/trimmed/
done
```

Key parameters:

- `-paired` enforces read-pair consistency so no orphan pairs enter alignment
- `-quality 20` trims bases with Phred quality below 20 from the 3' end
- `-length 20` discards reads shorter than 20 bp after trimming, which protects the aligner from uninformative stubs

Expected output per sample:

```
SUMMARY:
Total reads processed:       24,438,902
  Read 1 with adapter:        1,204,118 (4.9%)
Pairs written (passing filters): 24,111,760 (98.7%)
```

If more than roughly 10 percent of reads carry adapters, note it in your QC report because heavy adapter content suggests over-fragmented libraries. If trimming removes more than a small fraction of each read, the library itself is suspect.

## Step 4: Alignment or Pseudoalignment

![Decision path asking about splice junctions, BAM needs and annotation quality to pick genome alignment or pseudoalignment.](/article-images/illustrations/rna-seq-bioinformatics-workflow-design-align-or-pseudo.webp)

This is the central bioinformatics tools comparison decision in the workflow. Two broad strategies exist.

**Genome alignment.** A splice-aware aligner maps reads to the genome, handling introns. STAR is fast and memory hungry, roughly 30 GB of RAM for the [human genome](/blog/guides/human-genome) index. HISAT2 is lighter and also splice-aware. Aligned BAM files then feed feature counting.

**Transcriptome pseudoalignment and quasi-mapping.** Salmon and kallisto assign reads directly to transcripts without a full base-by-base alignment. They are fast and memory friendly, and Salmon can correct for transcript-level bias effects. Their output is transcript-level abundance, which you collapse to gene level for gene-level tests.

| Tool | Strategy | Typical use | Resource profile | Main caveat |
|--|--|--|--|--|
| STAR | Splice-aware genome aligner | Novel junction discovery, BAM needed downstream | High RAM for index | Alignment rate falls with contaminated libraries |
| HISAT2 | Splice-aware genome aligner | Genome alignment on smaller machines | Moderate RAM | Slightly slower than STAR per sample |
| Salmon | Quasi-mapping to transcripts | Transcript and gene quantification | Low RAM, fast | Needs a well-annotated transcriptome |
| kallisto | Pseudoalignment to transcripts | Fast transcript quantification | Very low RAM | Same annotation dependency as Salmon |
| featureCounts | Read counting on BAM | Gene-level counts from alignments | Low RAM | Requires correct strandness setting |

There is no universal best bioinformatics software, only the tool that matches your question, genome annotation quality, and compute budget. A benchmark of long-read single-cell and spatial methods evaluated ten tools across barcode and UMI detection, demultiplexing, gene-level profiling, and isoform detection, and found method-specific trade-offs rather than one dominant option [6]. The same lesson holds in short-read bulk RNA-seq.

### Running HISAT2

Build the index once, then align each sample:

```bash
hisat2-build -p 8 genome.fa genome_index
```

```bash
hisat2 -p 8 \
  -x genome_index \
  -1 results/trimmed/S1_R1_val_1.fq.gz \
  -2 results/trimmed/S1_R2_val_2.fq.gz \
  --rna-strandness RF \
  | samtools sort -@ 4 -o results/bam/S1.sorted.bam

samtools index results/bam/S1.sorted.bam
```

The `-rna-strandness RF` flag matches a dUTP stranded protocol. Setting it wrong is one of the most common silent errors in RNA-seq analysis, because counts still come out and simply mean the wrong thing in antisense-overlapping genes.

Expected alignment summary:

```
23124432 reads; of these:
  23124432 (100.00%) were paired; of these:
    404113 (1.75%) aligned concordantly 0 times
95.90% overall alignment rate
```

### Running Salmon as the alternative

```bash
salmon index -t transcripts.fa -i salmon_index -k 31
salmon quant -i salmon_index \
  -l A \
  -1 results/trimmed/S1_R1_val_1.fq.gz \
  -2 results/trimmed/S1_R2_val_2.fq.gz \
  -p 8 \
  --validateMappings \
  -o results/salmon/S1
```

Expected quantification file (`quant.sf`) columns: `Name`, `Length`, `EffectiveLength`, `TPM`, `NumReads`. TPM means transcripts per million, a relative abundance measure within a sample.

## Step 5: Quantification and Count Generation

If you aligned to the genome, count reads per gene with featureCounts from the subread package:

```bash
featureCounts -T 8 \
  -p \
  -s 2 \
  -a annotation.gtf \
  -o results/counts/gene_counts.txt \
  results/bam/*.sorted.bam
```

- `-p` treats mates as fragments from the same molecule
- `-s 2` declares the strandedness, here reverse-stranded for a dUTP protocol. Use `-s 1` for forward-stranded and `-s 0` for unstranded libraries
- `-a` points to a GTF annotation file that must come from the same genome build as the alignment index

Expected output tail:

```
S1.sorted.bam  Assigned  21420987
S1.sorted.bam  Unassigned_Unmapped  392104
```

Check the assignment summary per sample. A healthy run assigns most reads, with smaller bins for ambiguous and multimapping reads. If alignment is high but assignment is low, suspect a GTF and genome build mismatch or a strandedness flag error.

For Salmon output, aggregate transcript counts to gene level with a mapping file from Ensembl transcript IDs to gene IDs, for example using the R package tximport.

Verify each sample independently with samtools:

```bash
samtools flagstat results/bam/S1.sorted.bam
```

Expected core lines:

```
46248864 + 0 in total
37931221 + 0 properly paired (82.02%)
```

Properly paired rates far below this range suggest poor fragment sizing, contamination, or index hopping.

## Step 6: Normalization and Differential Expression

Raw counts are not comparable across samples because [sequencing depth](/knowledge/diagnostics/molecular/how-to-calculate-sequencing-depth-and-coverage-for-your-ngs-run) and library composition differ. DESeq2 handles this with size-factor normalization and a negative binomial model, and it is the standard first choice for gene-level bulk RNA-seq testing.

```r
library(DESeq2)

counts <- read.delim("results/counts/gene_counts.txt",
                     row.names = 1, skip = 1, check.names = FALSE)
counts <- as.matrix(counts[, 7:12])

meta <- data.frame(
  row.names = colnames(counts),
  condition = factor(c("control", "control", "control",
                       "treated", "treated", "treated"),
                     levels = c("control", "treated")),
  batch = factor(c("A", "A", "B", "B", "A", "B"))
)

dds <- DESeqDataSetFromMatrix(countData = counts,
                              colData = meta,
                              design = ~ batch + condition)
dds <- DESeq(dds)
res <- results(dds, contrast = c("condition", "treated", "control"),
               alpha = 0.05)
summary(res)
```

Expected output shape:

```
out of 58347 genes with nonzero read counts:
  adjusted p-value < 0.05
  LFC > 0 (up):       812, 1.4%
  LFC < 0 (down):     1043, 1.8%
```

Explanations of the parameters that matter:

- `design = ~ batch + condition` puts the variable of interest last. DESeq2 adjusts for batch while testing condition. This only works when batch and condition are not perfectly confounded, which is why Step 0 matters.
- `alpha = 0.05` aligns the independent filtering optimization with your intended false discovery threshold.
- The reported LFC values are shrunken log2 fold changes, which stabilizes estimates for low-count genes.

Check three diagnostics before trusting the table:

1. **PCA of variance-stabilized counts.** Samples should cluster by biological condition, and if they cluster by batch instead, the model or the experiment has a problem.
2. **Dispersion fit plot.** Dispersion estimates should shrink around the trend line.
3. **p-value histogram.** For a treatment with a modest number of affected genes you expect a flat distribution under the null with a spike near zero from truly affected genes. A peak near 1.0 signals a confounded design or a filtering artifact.

## Step 7: Functional Interpretation

A table of genes is not a result. Interpretation layers come next, and the field has moved toward frameworks that automate this as part of the pipeline. BILBO, a self-hosted, fully containerized platform, consolidates data retrieval through QC, alignment, quantification, normalization, and differential expression, then adds a functional annotation clustering framework that groups genes with Gene Ontology semantic similarity, separates them by regulatory direction, applies complete-linkage hierarchical clustering with silhouette-based pruning, and selects representative genes as semantic medoids [7].

At minimum, run over-representation analysis on your up- and down-regulated gene lists separately, against a background of all tested genes. Mixing directions muddles the interpretation, because a pathway can contain offsetting increases and decreases.

For specialized transcript classes the interpretation layers differ. A verified miRNA-seq workflow in R extends the standard steps with miRNA target prediction, functional enrichment, and miRNA-mRNA regulatory network construction, with Cytoscape used for network visualization [4]. For stress-response meta-analyses across multiple transcriptome datasets, the SRscore package structures the workflow into comparison pairing, calculation of an expression change ratio, and a score computation step, then plugs into standard Bioconductor visualization and enrichment tools [8].

## Step 8: Extensions for Specialized RNA-seq Questions

A well-designed core workflow becomes the chassis for modality-specific extensions.

### Alternative splicing and isoforms

Splicing analysis is far more demanding than gene-level counting. A large benchmark across 42 laboratories and 207 analysis pipelines using Quartet and MAQC reference materials found that high data quality and depth improve splice junction detection and isoform and event quantification, and that the best pipelines reached Pearson and Matthews correlation coefficients of 0.79 and 0.68 for isoform-level quantification and differential analysis, but only 0.41 and 0.41 at the event level [3]. Low expression or coverage and high compositional complexity are general constraints on accuracy [3]. Plan more depth, validate with reference materials where possible, and treat event-level calls more cautiously than isoform-level ones.

### Long-read and single-cell transcriptomics

Long reads resolve full-length isoforms that short reads cannot. A systematic benchmark of single-cell and spatial long-read methods evaluated ten tools across four dimensions, including UMI correction and isoform detection, using paired short-read and Nanopore datasets across protocols, depths, and chemistries, and found that sequencing quality and UMI correction strategy strongly influence accuracy [6]. The benchmarking workflow itself was designed to be reusable [6], which is worth copying: build your comparison harness once, and rerun it as tools change.

Single-cell annotation benefits from explicit tool comparison. The scAnnoX package integrates ten annotation algorithms including SingleR, Seurat, sciBet, scmap, CHETAH, scSorter, sc.type, cellID, scCATCH, and SCINA, and reports that SingleR, Seurat, sciBet, and scSorter emerged as top performers for prediction accuracy, with SingleR and sciBet particularly strong [9]. Running several annotators and checking agreement is a cheap robustness check. For low-input clinical samples, sample hashing protocols such as the Seq-Well S3 workflow reduce cost and technical variation while raising throughput [10]. Visualization systems like scFlowVis are now being designed around the full multi-stage single-cell pipeline rather than isolated steps [11].

For lncRNA-focused single-cell work, scLncR provides modular prediction, expression processing, cell-type-specific analysis, WGCNA, pseudotime trajectory, and enrichment in one framework with both command-line and Shiny interfaces [12].

### Metabolic labeling and RNA dynamics

Nucleotide recoding methods such as SLAM-seq and TimeLapse-seq measure transcript synthesis and degradation. The EZbakR suite pairs a Snakemake preprocessing pipeline with an R package that assigns reads to multiple feature types, supports multi-label analyses, uses a hierarchical model for label incorporation variance, and generalizes dynamical modeling of RNA processing [13].

### Circular RNAs and structured detection problems

circRNA detection requires finding back-splice junctions, and single-tool calls are error prone. circtools 2.0 adds an ensemble-based detection strategy with improved recall, plus Nanopore support for full-length circRNA characterization [14]. The ensemble principle, requiring agreement among multiple detectors, transfers to any high-false-positive detection problem in RNA-seq.

### Host-pathogen and multi-organism samples

When both host and pathogen are sequenced in one experiment, reads must be handled so that cross-mapping does not distort either side. The co-transcriptome pipeline for plant-bacterial interactions separates host and bacterial processing, adds ortholog prediction and KEGG-based functional annotation for bacterial transcripts, and finishes with correlation-based analysis of transcriptional dynamics between organisms [5].

## Common Mistakes and Limitations

These are the errors that appear repeatedly in real projects and in published benchmarking.

1. **Wrong strandedness flags.** Passing `-rna-strandness` or featureCounts `-s` values that contradict the library protocol silently halves or corrupts your counts. Fix: read the library prep documentation, run featureCounts on a known highly expressed gene in both strand settings, and confirm which setting recovers the expected signal.
2. **Mismatched reference files.** A genome FASTA from one source with a GTF from another build or release produces assignment failures or wrong coordinates. Fix: use one source, such as Ensembl or GENCODE, for both, and record release numbers.
3. **Confounded design.** If all controls were prepared in one batch and all treated samples in another, batch and condition are inseparable. No tool can repair this. Fix: randomize and record batch metadata before sequencing.
4. **Using TPM for differential expression.** TPM is a within-sample relative measure. Statistical testing needs count-based models with appropriate normalization, such as DESeq2 or edgeR. Fix: feed raw counts to the DE tool and use TPM only for visualization or cross-sample comparison where appropriate.
5. **Treating technical replicates as biological.** Three lanes from one library are not three observations of biology. Fix: pool or average technical replicates and count only independent biological samples in the model.
6. **Underpowered depth for the question.** Gene-level testing succeeds at modest depth, but isoform and event-level splicing accuracy depends strongly on depth and data quality [3]. Fix: match depth to the resolution you claim in the paper.
7. **Ignoring the p-value distribution and PCA.** Reviewers increasingly ask for these diagnostics because they expose hidden confounding. Fix: make the PCA and p-value histogram standard figures in your QC report.
8. **Undocumented one-off scripts.** Analyses run as loose scripts with unstated tool versions cannot be reproduced or debugged. Fix: move every step into a workflow manager with pinned environments, the pattern validated by ARMOR and other modular pipelines [1].
9. **Over-trusting a single tool in noisy tasks.** Benchmarking in long-read single-cell analysis [6] and circRNA detection [14] both show that single tools carry method-specific weaknesses. Fix: use ensembles or compare at least two tools on a subset before committing.
10. **Skipping metadata discipline.** Analyses that cannot connect each FASTQ to its condition and batch in a machine-readable sheet produce wrong model matrices more often than any other single cause. Fix: validate the sample sheet programmatically before the first run.

A final limitation belongs here rather than in the conclusion. Bioinformatic results are inference from a model of the library, not a direct measurement of the cell. Every count table carries assumptions about annotation completeness, fragment bias, and library composition. Individual projects, especially those with unusual organisms, degraded RNA, or small cohorts, deserve expert statistical review before their results drive decisions.

## RNA-seq Workflow Design Tips That Pay Off

- **Copy a proven skeleton, then modify.** ARMOR works by cloning a repository, replacing input and reference files, and editing one configuration file, with a modular design that welcomes alternative tools [1]. Starting from that pattern beats starting from a blank file.
- **Containerize the whole stack.** Fully containerized platforms like BILBO bundle acquisition through interpretation in a single environment, which removes environment drift between collaborators [7].
- **Aim for FAIR compliance from day one.** A roadmap based on long practical experience recommends standardized, FAIR-compliant workflows spanning the full range from de novo assembly on unannotated organisms to reference-based differential expression, precisely so that analysis becomes transferable and democratic [15]. FAIR means findable, accessible, interoperable, and reusable.
- **Benchmark before you commit.** Run two quantification strategies on one sample and compare gene-level counts. If they diverge wildly, the annotation or parameters, not the biology, are usually at fault.
- **Separate the pipeline from the interpretation.** Keep raw processing outputs (BAM, count matrices, QC reports) immutable, and do all exploratory work on copies. This makes reruns cheap and prevents accidental overwrite of the ground truth.
- **Budget for the interpretive layer.** Containerized platforms that end in publication-ready outputs, including annotation clustering, exist because the last mile from gene list to biological story is where projects stall [7].
- **Match the pipeline to the modality.** Standard bulk pipelines do not apply directly to specialized assays. Record-seq data, for example, require transcription-unit-based feature counting instead of gene-body counting because spacer acquisition samples the transcriptome nonuniformly [16]. Fraction-based subcellular localization of small non-coding RNAs likewise needs its own integrated experimental and analytical design [17].

## Frequently Asked Questions

### What does an RNA-seq bioinformatics workflow actually do?

It converts raw sequencing reads into biologically interpretable tables through a fixed chain of steps: quality control, adapter trimming, alignment or pseudoalignment, gene or transcript quantification, normalization, statistical testing for differential expression, and functional enrichment, all under a reproducible execution framework.

### Should I align reads to the genome or use pseudoalignment?

Align to the genome when you need splice junctions, novel transcripts, or BAM files for downstream tools, and use pseudoalignment or quasi-mapping with tools like Salmon or kallisto when your question is quantification against a good transcriptome annotation and speed and memory are the constraints.

### Which tools count as the best bioinformatics software for RNA-seq?

There is no single best suite. STAR and HISAT2 dominate genome alignment, Salmon and kallisto dominate transcript quantification, and DESeq2 and edgeR dominate differential expression, and published benchmarks consistently find method-specific trade-offs rather than one winner [6].

### How many biological replicates do I need?

Three biological replicates per group is the practical minimum for differential expression, and more replicates improve power, especially for small fold changes and variable tissues.

### Can I use TPM values for differential expression?

No. TPM is a within-sample relative abundance and lacks the count-based variance structure statistical tests require, so feed raw counts into DESeq2 or edgeR and use TPM only for reporting relative abundance.

### Do single-cell, miRNA, and long-read data use the same workflow?

No. Each modality adds steps and tools, such as UMI handling and cell annotation for single-cell, small-RNA-aware preprocessing for miRNA-seq, and isoform-aware methods for long reads, though all share the QC and reproducibility skeleton described here.

### How do I make my RNA-seq pipeline reproducible?

Pin tool versions with conda environments, orchestrate steps in Snakemake or an equivalent manager, containerize where possible, version your reference files, and keep a validated sample sheet, which is the approach proven by established modular workflows [1].

### How do I check that my workflow results are correct?

Inspect alignment and assignment summaries per sample, confirm PCA clusters by biology rather than batch, check the p-value histogram shape, validate strandedness on known genes, and where available compare against reference materials, an approach benchmarking studies show substantially improves confidence in accuracy [3].

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What does an RNA-seq bioinformatics workflow actually do?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It converts raw sequencing reads into biologically interpretable tables through a fixed chain of steps: quality control, adapter trimming, alignment or pseudoalignment, gene or transcript quantification, normalization, statistical testing for differential expression, and functional enrichment, all under a reproducible execution framework."
      }
    },
    {
      "@type": "Question",
      "name": "Should I align reads to the genome or use pseudoalignment?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Align to the genome when you need splice junctions, novel transcripts, or BAM files for downstream tools, and use pseudoalignment or quasi-mapping with tools like Salmon or kallisto when your question is quantification against a good transcriptome annotation and speed and memory are the constraints."
      }
    },
    {
      "@type": "Question",
      "name": "Which tools count as the best bioinformatics software for RNA-seq?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "There is no single best suite. STAR and HISAT2 dominate genome alignment, Salmon and kallisto dominate transcript quantification, and DESeq2 and edgeR dominate differential expression, and published benchmarks consistently find method-specific trade-offs rather than one winner."
      }
    },
    {
      "@type": "Question",
      "name": "How many biological replicates do I need?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Three biological replicates per group is the practical minimum for differential expression, and more replicates improve power, especially for small fold changes and variable tissues."
      }
    },
    {
      "@type": "Question",
      "name": "Can I use TPM values for differential expression?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. TPM is a within-sample relative abundance and lacks the count-based variance structure [statistical tests](/blog/guides/statistical-tests-choosing-the-right-one-for-your-data) require, so feed raw counts into DESeq2 or edgeR and use TPM only for reporting relative abundance."
      }
    },
    {
      "@type": "Question",
      "name": "Do single-cell, miRNA, and long-read data use the same workflow?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Each modality adds steps and tools, such as UMI handling and cell annotation for single-cell, small-RNA-aware preprocessing for miRNA-seq, and isoform-aware methods for long reads, though all share the QC and reproducibility skeleton described here."
      }
    },
    {
      "@type": "Question",
      "name": "How do I make my RNA-seq pipeline reproducible?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Pin tool versions with conda environments, orchestrate steps in Snakemake or an equivalent manager, containerize where possible, version your reference files, and keep a validated sample sheet, which is the approach proven by established modular workflows."
      }
    },
    {
      "@type": "Question",
      "name": "How do I check that my workflow results are correct?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Inspect alignment and assignment summaries per sample, confirm PCA clusters by biology rather than batch, check the p-value histogram shape, validate strandedness on known genes, and where available compare against reference materials, an approach benchmarking studies show substantially improves confidence in accuracy."
      }
    }
  ]
}
</script>

## Sources

1. [ARMOR: An Automated Reproducible MOdular Workflow for Preprocessing and Differential Analysis of RNA-seq Data.](https://pubmed.ncbi.nlm.nih.gov/31088905/)
2. [Guidelines to Study Transcriptome Remodeling by Proteins Using Deep Sequencing (RNA-Seq).](https://pubmed.ncbi.nlm.nih.gov/42862224/)
3. [Benchmarking RNA-seq with the Quartet and MAQC reference materials to establish best practices for accurate alternative splicing analysis.](https://pubmed.ncbi.nlm.nih.gov/42702621/)
4. [A Verified Workflow for MiRNA-Seq Data Processing and Bioinformatics Analysis Using R.](https://pubmed.ncbi.nlm.nih.gov/41212781/)
5. [Bioinformatics Workflow for Co-Transcriptome Analysis of Plant-Bacterial Interactions.](https://pubmed.ncbi.nlm.nih.gov/41642524/)
6. [A systematic benchmark of bioinformatics methods for single-cell and spatial RNA-seq nanopore long reads data.](https://pubmed.ncbi.nlm.nih.gov/42441075/)
7. [BILBO: a self-hosted platform for large-scale RNA-Seq analysis with a functional annotation clustering framework.](https://pubmed.ncbi.nlm.nih.gov/42955413/)
8. [SRscore: An R Package for Quantifying Gene Stress Responsiveness Across Multiple Transcriptome Datasets Using Meta-Analysis.](https://pubmed.ncbi.nlm.nih.gov/41732110/)
9. [scAnnoX: an R package integrating multiple public tools for single-cell annotation.](https://pubmed.ncbi.nlm.nih.gov/38560451/)
10. [A scalable, low-cost, sample hashing workflow for multiomic single-cell analysis using the Seq-Well S(3) platform.](https://pubmed.ncbi.nlm.nih.gov/41792497/)
11. [Designing scFlowVis: Visual Analytics for Single-Cell RNA Sequencing Analysis.](https://pubmed.ncbi.nlm.nih.gov/42391086/)
12. [scLncR: an integrated and flexible pipeline for lncRNA analysis in single-cell RNA sequencing data.](https://pubmed.ncbi.nlm.nih.gov/42557881/)
13. [Expanding and improving analyses of nucleotide recoding RNA-seq experiments with the EZbakR suite.](https://pubmed.ncbi.nlm.nih.gov/40609070/)
14. [Circtools 2.0: a comprehensive framework for enhanced circular RNA bioinformatics.](https://pubmed.ncbi.nlm.nih.gov/42316034/)
15. [Strategic roadmap for FAIR-compliant transcriptomic workflows: from technical challenges to bioinformatics democratization.](https://pubmed.ncbi.nlm.nih.gov/42935694/)
16. [An end-to-end computational framework for "Record-seq" transcriptional recording data.](https://pubmed.ncbi.nlm.nih.gov/42635226/)
17. [Fraction-Seq: An Integrated Experimental and Computational Workflow for Determining the Localization and Abundance of Small Non-Coding RNAs in Subcellular Compartments.](https://pubmed.ncbi.nlm.nih.gov/42646360/)