Quick answer: Bulk RNA-seq tells you the average expression of thousands of cells mixed together; single-cell RNA-seq tells you the expression of each cell individually, so you can see that a sample is really a mixture of cell types instead of one blurred signal. The computational core of a single-cell workflow is: build a cells-by-genes count matrix, clean it with QC, normalize it, reduce its dimensions with PCA and a neighbor graph, cluster cells, and label clusters by marker genes.
A complement to the existing Next Generation Sequencing: Types and Workflow overview on this blog. Here the focus is what changes when the unit of measurement stops being the tissue and becomes the cell.
Table of Contents
Why single-cell exists at all
Bulk RNA-seq homogenizes a sample before capturing it. That is efficient and cheap for questions framed in averages: compare one condition group to another, quantify a big fold change, sum expression per gene. The cost emerges when tissues are heterogeneous, which in practice means almost always. In blood, one sample is simultaneously hundreds of B cell classes, T cell states, and granulocytes. The mean expression of a gene over the mixture reveals nothing about which cell owns it: a gene that doubles in 5 percent of cells and stays flat in 95 percent shows as nearly unchanged in bulk.
Single-cell RNA sequencing measures expression separately per cell, typically tens of microliters sorted into droplets or plates with one cell (or a few: call this a doublet problem) each. What you lose in volume you gain in geometry: cells can be placed in an expression landscape where shape tells the researcher the structure.
What the data actually looks like
The output is not reads; it is a count matrix. For every cell (a row) and every gene (a column), the matrix stores the number of transcript molecules the cell produced after sequencing and mapping. Two conventions define the field:
- UMIs (unique molecular identifiers) tag each captured transcript, which corrected for amplification distortion. The raw count is commonly a molecule count, not a read count.
- Sparsity. Most cells show zero for most genes, since depth per cell is shallow and expression is bursty; electricity gets wasted on zeros, which drives almost every algorithmic choice downstream (dimensionality reduction, efficient file formats).
The standard beginner workflow, stage by stage
The field standardizes a pipeline that Seurat in R and Scanpy in Python both follow nearly one-to-one. Know the stage names first; the tools matter less than the goal of each stage:
- QC and filtering. Drop empty droplets and dying cells using per-cell total counts, number of detected genes, and the fraction of reads attributed to mitochondrial genes. Also flag doublets — cells that absorbed two nuclei and read as chimeric.
- Normalization and log transform. Because cells are captured at uneven depths, scale per-cell totals (commonly to 10,000 counts) and log the result so fold changes behave like ordinary distances.
- Highly variable gene selection. Most signal for separating cell types comes from a few thousand genes that vary across cells. The selection step deserves care: naive pipelines throw it out and lose the real structure downstream.
- Dimensionality reduction. Run PCA on the selected genes to compress the matrix into the top principal components (often 10–50), then build a nearest-neighbor graph in that space, typically visualized in two dimensions with UMAP.
- Clustering. Apply graph-based community detection (scanpy and Seurat both default to variations of Leiden or Louvain) over the neighbor graph. Clusters are not cell types yet; they are groups of cells with integrated expression patterns.
- Cluster annotation. Assign each cluster a biological identity by comparing its marker genes with known references: cluster enriched for hemoglobin genes, in blood, is presumably erythroid; many workflows compare markers against a curated reference map.
Each stage cuts a different kind of noise; running them in order is the playbook.
The genuinely different questions single-cell answers
With each cell carrying its own profile, research questions that were unreachable in bulk become natural:
- Cell type composition. What fractions of immune, stromal, and tumor cells are inside one tumor? Bulk cannot resolve this; single-cell quantifies cluster sizes directly.
- States, not only types. A T cell in an exhausted state and a naive one share most expression; state-specific markers separate them when clustering is sharp.
- Trajectories and pseudotime. Sequence the cells you measured (differentiation, cell cycles, response) and reorder them along a developmental axis; expression dynamics over pseudotime are a legitimate layer of inference.
- Cell-type-specific effects. A diagnostic gene may rise only in one cell type under a condition. Bulk averages it away, single-cell localizes it.
This arbitrage is exactly why single-cell has become standard rather than exotic.
The honest limitations
- Drops count-based information. Depth-per-cell is shallow compared with bulk; a 10x run yields a few thousand UMI counts per cell, so genes expressed at low absolute levels sit near the detection floor. Aggregation across cells recovers some power, but not what bulk sees.
- Batch effects are the dominant technical hazard. Sequencing date, capture chemistry, and library prep differences create structure indistinguishable from biology. Planet-class integration or a scrubbed batch design is a genuine subfield, not a footnote.
- Doublets and empty droplets stem from how the technology works; their detection is a standard QC stage, not an extra.
- Cell-type annotation remains expertise-laden. Labeling the clusters biologically is where the interpretation lives; just pointing at cluster three will not do it for you.
Bulk and single-cell as complements, not rivals
Bulk RNA-seq remains the workhorse for cheap, powerful, averagely-questioned comparisons; single-cell is the right answer when the unit of measurement has to be the cell. Practically:
- Use bulk when the question is about averages and a few samples has high power, and when budgets limit depth.
- Use single-cell when cell-type composition, states, or heterogeneity IS the question.
- Use pseudobulk to connect them: sum counts per cell type per sample, and you can run standard bulk-style differential expression on single-cell data with real replication.
Beginners commonly mistake this for a replacement tug-of-war. In reality they answer cross-scales of the same tissue and the strongest studies use both.
Key takeaways
- Bulk measures per-gene means across a homogenized mix; single-cell measures each cell separately.
- Single-cell data is a cells-by-genes UMI count matrix, very sparse, and this sparsity is why dimension reduction is non-optional.
- The standard pipeline is QC, normalization, variable-gene selection, PCA, neighbor graph, clustering, annotation.
- Cell type composition, cell states, and trajectories are questions single-cell can answer that bulk cannot.
- Batch effects, doublets, and shallow depth per cell are the technical traps where beginners lose signal.
- Bulk and single-cell complement each other, with pseudobulk analysis as the bridge.
Challenge
Sketch the pipeline on paper, then pick one stage and name what would go wrong without it — for instance what happens if you skip normalization, or what noise appears if variable-gene selection includes nothing. If you can justify every stage from its failure case, you understand the workflow in the way tools expect you to about their defaults.
Want guided practice on a real single-cell dataset? Ampersand Academy offers one-to-one mentoring in bioinformatics, R, and Python — part of Mahadhi, a development and digital marketing company.
—
FAQ
Bulk measures the average expression of many mixed cells; single-cell measures individual cells, which reveals cell-type composition and states hidden inside the bulk average.
- What is the main difference between single-cell RNA-seq and bulk RNA-seq?
Each row is one cell, each column is a gene, and the entries are UMI-corrected molecule counts. It is normally extremely sparse because shallow depth means most genes were not detected in any given cell.
- What does the single-cell count matrix mean?
Because depth per cell is low, most entries are zeros, and the zeros outnumber real signal. This is the main reason pipelines rely on dimensionality reduction and variable-gene selection rather than operating on the full matrix directly.
- Why is sparsity such a big deal?
A doublet is a capture event that absorbed two nuclei and reads as one chimeric cell. It can create a fake intermediate cell type in a cluster, so it is a standard QC concern rather than an exotic embarrassment.
- What is a doublet, and why does it matter?
No. They implement the same conceptual pipeline in R and Python respectively. Choose by your preferred language; concepts carry over one-to-one, which is the only part worth memorizing first.
- Do I have to learn both Seurat and Scanpy?
You sum counts per cell type within each sample and treat the sums as a bulk-style sample. This is a way to apply standard differential-expression tests to single-cell data while preserving sample-level replication.
- What is pseudobulk analysis?
Because the per-cell signal is so shallow, systematic technical differences between capture runs dominate and can masquerade as biological clusters. A good experiment design or a careful integration step is the standard defense.
- Why are batch effects a serious problem in single-cell work?
What is the main difference between single-cell RNA-seq and bulk RNA-seq?
Bulk measures the average expression of many mixed cells; single-cell measures individual cells, which reveals cell-type composition and states hidden inside the bulk average.
What does the single-cell count matrix mean?
Each row is one cell, each column is a gene, and the entries are UMI-corrected molecule counts. It is normally extremely sparse because shallow depth means most genes were not detected in any given cell.
Why is sparsity such a big deal?
Because depth per cell is low, most entries are zeros, and the zeros outnumber real signal. This is the main reason pipelines rely on dimensionality reduction and variable-gene selection rather than operating on the full matrix directly.
What is a doublet, and why does it matter?
A doublet is a capture event that absorbed two nuclei and reads as one chimeric cell. It can create a fake intermediate cell type in a cluster, so it is a standard QC concern rather than an exotic embarrassment.
Do I have to learn both Seurat and Scanpy?
No. They implement the same conceptual pipeline in R and Python respectively. Choose by your preferred language; concepts carry over one-to-one, which is the only part worth memorizing first.
What is pseudobulk analysis?
You sum counts per cell type within each sample and treat the sums as a bulk-style sample. This is a way to apply standard differential-expression tests to single-cell data while preserving sample-level replication.
Why are batch effects a serious problem in single-cell work?
Because the per-cell signal is so shallow, systematic technical differences between capture runs dominate and can masquerade as biological clusters. A good experiment design or a careful integration step is the standard defense.

