a957@phase-space:~$

biology (dynamical system)

March 12, 2026 13 min read single cell

A Dynamical View of Cell Fate

A snapshot tells you where a cell sits. This is about treating a cell as a dynamical system, and getting its direction back.

I say unto you: one must still have chaos in oneself to be able to give birth to a dancing star.

— Friedrich Nietzsche, Thus Spoke Zarathustra

I have always wondered how things become what they become. We grow, we develop, and at some point we start to devolve. A child’s innocence gets lost somewhere along the way and turns into (let’s be honest) an organic mess. Systems that start simple pick up complexity as they go, and it only ever seems to run one way, the way entropy does (physicists call it the arrow of time, and I have never fully made peace with it).

All of these share a common thread, and it is dynamical systems, the mathematics of anything that changes by a rule. You write down how a state moves from one instant to the next, and then ask where the motion takes it (what it drifts toward, and where it can come to rest). Once you start looking this way you see it everywhere, nature is filled with them. I spent the initial years of my research on exactly these systems: oscillators falling into sync on complex networks, and islands of order in a sea of chaos in Hamiltonian systems (and later, teaching neural networks to respect that physics). Now I have turned to the most complex, most challenging and perhaps the closest one to us humans, biological development. A cell deciding what to become, an embryo folding itself into an animal, these are systems caught partway through turning into something else.

And yet in biology most of it is not studied that way. Most of what we know about cells comes from snapshots, and I think there are two reasons for it. The first is technical. Reading the genes inside a cell in any detail means breaking the cell open (which kills it), so every measurement is one frozen instant, and there has never been an easy way to string those instants into a motion. The second is historical. The field grew up around naming and cataloguing what is there, which is the natural thing to do when a still picture is all you can get.

Single-cell RNA sequencing (scRNA-seq) is the modern, very impressive version of that still picture. You take a tissue, break every cell open at once, count the messenger RNA from every gene in every cell, and get back a table of tens of thousands of genes across thousands of cells. Almost always the next steps are the same: compress that table down to a two-dimensional map so the cells fall into visible clumps, a UMAP; call the clumps cell types; and ask which genes run higher or lower from one clump to the next. Clustering and differential expression on a UMAP is most of what gets done with single-cell data (at least in the papers I read), and it has taught us a lot. But every one of those results is read off a single frozen instant, so it tells you position and says nothing about motion.

Only in the last handful of years have trajectory methods tried to put the motion back, ordering cells along an inferred path, drawing branching trees of lineage, in some cases attaching small arrows of local direction. They are real progress and I lean on them later. But most of them stay descriptive: they will hand you a convincing story about the order cells pass through and where the branches lie, without ever writing down the rule that generates the motion, and without letting you compute with it, ask how fast a cell is moving or how close it sits to a tipping point. That is the gap I kept circling back to. If a cell really is a dynamical system, it ought to be possible to treat it as one and get numbers back, to write down the forces that bend a trajectory, and then compute with them.

The abstract worry comes down to a concrete one. Take a single cell at one spot on the map and ask which way it is going, whether it is a young cell on its way to becoming a neutrophil or one that set out to become a neutrophil and stalled halfway, because those two are the same dot in the same color and nothing in the snapshot separates them. In healthy tissue you can usually live with the ambiguity, but in leukemia you cannot, because when we say the marrow has gone wrong we mostly mean something about motion, cells that should be moving toward a mature fate and are instead just sitting there.

So the question I want to work on is simple to state. Can you take a cell you measured only once (and killed in the process) and still recover the direction it was travelling in? I think you mostly can, if you start reading the map as a system in motion.

A field of arrows

Forget genes for a minute, and take the simplest picture that still has the idea in it.

basinbasinmature cellmature cellprogenitor (unstable)
click anywhere to drop a point
A simple field, ẋ = x − x³ and ẏ = −y. No genes yet, just the shape. The two colored dots are attractors: nearby points settle into them and stay. The point in the middle is a repeller: points near it get pushed away to one side or the other. Each shaded half is a basin, and the line dividing them is the separatrix.

A dynamical system in the plane is a rule that gives every point x=(x,y)\mathbf{x} = (x, y) a velocity, x˙=F(x)\dot{\mathbf{x}} = \mathbf{F}(\mathbf{x}), which is the arrow drawn there: the direction the state moves next, and how fast. Release a point anywhere and it flows along the arrows, tracing out a trajectory. Most of what matters about a system like this happens where the arrows vanish, the fixed points where F(x)=0\mathbf{F}(\mathbf{x}) = 0 and the state, having no velocity, stays where it is.

Whether it actually stays there under a small disturbance is a separate question, and you settle it by linearizing the flow around the point: the Jacobian DFD\mathbf{F} evaluated at the fixed point has eigenvalues whose real parts tell you whether a small displacement grows or decays. When every eigenvalue has a negative real part, every nearby perturbation dies away and the flow carries the state back in, and the point is an attractor, a configuration the system settles into and holds. When some eigenvalue has a positive real part there is a direction along which perturbations grow and the state cannot survive: with all directions unstable you get a repeller, with some stable and some unstable a saddle.

The toy above has two attractors, one to each side, with a single unstable point sitting between them. Every trajectory ends at one attractor or the other, the set of starting points that drain into a given one is its basin of attraction, and the curve separating the two basins, the knife-edge of points that flow to neither, is the separatrix.

Two genes are enough to build exactly this picture, and when they do, it is a cell choosing its fate.

Take a blood progenitor sitting at one particular fork: it can head down the myeloid line, toward the granulocytes and monocytes, or down the red line, toward red cells and platelets. Inside it are two genes, PU.1 and GATA1, and I picked this pair on purpose. It is one of the best-studied fate decisions there is: PU.1 runs the myeloid program, GATA1 the red-and-platelet one, and the two proteins physically grab hold of each other and shut each other down, which people have measured directly in the lab 16 . So the wiring really is this simple: each gene turns itself on, and each gene turns the other off. (This pair is also one of the first places where the abstract switch got pinned to actual genes and worked out carefully as a dynamical system 17 .)

You can see, without any biology, why it is enough to force a choice. Suppose PU.1 gets a little ahead, for no reason in particular. Then it presses harder on GATA1, so GATA1 drops, and a smaller GATA1 presses back on PU.1 less, so PU.1 climbs higher, which pushes GATA1 down further. It runs away with itself. Let it go and it always ends up at one of two extremes: PU.1 up and GATA1 off, or the other way around. One is a myeloid cell, a neutrophil say; the other is a red cell. The one thing it will not do is sit in the middle with the two genes balanced.

Draw it the same way as the toy. Write down how fast each gene changes, put PU.1 along one axis and GATA1 up the other, and every state of the cell is a point on the plane. Here are the equations, in case you want them. With xx for PU.1 and yy for GATA1,

x˙=α xnθn+xn+β θnθn+yn−k x,y˙=α ynθn+yn+β θnθn+xn−k y.\dot{x} = \alpha\,\frac{x^n}{\theta^n + x^n} + \beta\,\frac{\theta^n}{\theta^n + y^n} - k\,x, \qquad \dot{y} = \alpha\,\frac{y^n}{\theta^n + y^n} + \beta\,\frac{\theta^n}{\theta^n + x^n} - k\,y.

The first term on each line is a gene turning itself on, the second is the other gene turning it off, the last is the protein wearing away. Here is its picture.

erythroidprogenitor (undecided)myeloidPU.1 (myeloid) →GATA1 (erythroid) →
click anywhere in the plane to drop a cell
Bistable regime (S=1.0): two committed-fate attractors, myeloid and erythroid, and a single saddle at the center, the undecided progenitor, not a third attractor. The separatrix (roughly the diagonal x=y) divides the plane into their two basins of attraction; "show fate map" floods every point by which fate it's destined for. Inset: the circuit, where each gene activates itself and represses the other.

It is the toy over again, with real genes in it. Two attractors, one in each corner, a myeloid cell and a red one. The only difference is the middle. In the toy that was a plain repeller. Here it is a saddle, which just means the cell falls toward it from two directions and away from it along the other two. Either way it is a spot the cell cannot rest on. That spot is the progenitor, and this is easy to get backwards: the undecided progenitor is the ridge the cell rolls off, and the valleys are where it ends up.

Two vocabularies are describing the same picture, and it helps to lay them side by side, since the rest of this post uses both. What a dynamicist calls an attractor, a biologist calls a cell type. The basin around it, all the states that drain to the same place, is every cell on its way to that one fate. The saddle in the middle is the progenitor, a state the cell passes through and cannot stay in. I suspect a good deal of the arguing over what a “cell type” really is comes from people each holding one of these two dictionaries (without noticing).

And now the question is the same as it was for the toy. Start a cell somewhere, and which fate does it reach? Follow the arrows and you land in one corner or the other, so every point on the plane belongs to a fate. Color the plane by that fate, which is what the “show fate map” button does, and it splits into two basins with the separatrix between them. A cell a step to one side of that line becomes myeloid; a step to the other, red. On the map I started with, those two cells could be neighbors, the same color, and you could not tell them apart. In the dynamics they were never going to the same place.

There is a wrinkle here, and it comes from watching the thing happen live. Hoppe and colleagues put fluorescent tags on PU.1 and GATA1 and filmed single progenitors right through the decision 22 . If the switch were what makes the choice, you would expect the two genes to seesaw, one pulling ahead of the other, in cells that have not yet committed. They do not. The levels only start to pull apart after the cell has, by other signs, already chosen. So the mutual repression may be what locks a fate in place, while something further upstream decides which fate that will be. I am keeping the switch because it is still the clearest way to watch a network make any choice at all (with the caveat that it may describe how a decision gets locked in, more than how it gets made).

Waddington’s landscape

There is an older picture of this, and you have probably seen it. In 1957 Conrad Waddington drew a cell’s fate as a ball rolling down a hilly landscape, picking a valley at each fork and never rolling back up 1 . Muscle down one valley, blood down another. He drew it by hand, as a picture, because he did not have the genes. It took a long time before anyone could show it was more than a picture: that a cell type really does behave like an attractor of the gene network, a state the dynamics fall into and hold 2 . That is cleanest for a finished cell type. The half-made states in the middle, the ones still deciding, hold a good deal less firmly.

We can build Waddington’s landscape now, out of the two genes. The trick is to squeeze them down to one number. Let Δ\Delta be PU.1 minus GATA1, the lead of one gene over the other: zero in the middle, large one way for one fate, large the other way for the other. Then you can write down a height, a potential, that the cell rolls down. The bottoms of the valleys are the attractors. The tops of the hills are the saddles.

phase portrait
potentialmultipotent (single valley)Δ = PU.1 − GATA1 →U(Δ)
single well, S_c ≈ 1.554
The developmental signal lowers the threshold at which each gene switches itself on; drop it past a point and the single attractor splits in two. High signal (above S≈1.55): one attractor at the center, the multipotent progenitor, seen here as one valley (right) and one point the field converges on (left). Lower the signal and both panels split at once. The valley becomes two wells around a hilltop, and the flow field reorganizes into two new attractors, myeloid and erythroid, with a saddle where the progenitor used to be.

Now watch what the landscape does as I turn one knob. Start with the knob high and there is a single valley in the middle. A cell rolls to the bottom and sits there, and here the progenitor really is a resting place, a genuine valley, which is how a multipotent progenitor manages to hold still for a while instead of falling apart into something else right away. Now turn the knob down. At a sharp value the single valley humps up in the middle and splits into two. The old resting spot is now a hilltop, and the cell cannot stay on it. It has to roll down one side. That splitting of one valley into two, at a threshold, is called a bifurcation, and it is exactly Waddington’s fork in the road. And notice that the fork lives in the landscape itself, and it shows up once the signal crosses a threshold. Differentiation, in this picture, is a sequence of these splits, run in order.

A physicist will (rightly) object here. The two-gene system does not really roll down a fixed height in the strict sense; a true potential only exists in special cases. What I am drawing is an effective potential along Δ\Delta. It gets the shape right and it is a standard move, but it is a reduction, and I would not read it as the actual energy of the cell.

Disease

In this language, a disease is a landscape with the wrong shape. A valley that is supposed to be shallow and temporary is instead deep, and a cell that rolls in cannot climb out. Or a fork that should send a cell on to a mature fate is flattened, so cells pile up in front of it.

Leukemia looks a lot like that. In acute myeloid leukemia the cells wear the marks of early progenitors and mostly never mature; they stall in states they were supposed to pass through. When people sequenced a large amount of AML marrow, they found the malignant cells spread across the same hierarchy as healthy blood, but with the traffic sent to the wrong places, piling up early 14 . Huang and his colleagues made this argument years ago, and I find it the most convincing way to think about this kind of cancer 3 . The idea is that the cell mostly runs the normal landscape wrong (a basin worn too deep, a ridge worn too low), rather than inventing a brand-new state. That changes the question you ask. Instead of only asking which genes are mutated, you ask what the mutation does to the shape of the landscape, and so to the flow. A mutation that barely touches the genes you would sort cells by can still be a catastrophe if it turns a resting spot into a trap, and that would not show up in a list of which genes differ between clusters (it would show up in the flow).

Measuring the flow

Everything so far is a model: two genes, a pair of equations, and a landscape computed from them. The real question, the one I started with, is whether any of this can be recovered from actual cells, which you only ever measure once.

Some of it can, and the easiest piece is just putting the cells in order. If becoming a blood cell takes a few days and you catch thousands of cells at one instant, then you have caught some early, some late, and everything in between. Sort them by how far along they look and you have rebuilt a rough timeline you never actually filmed. That is called pseudotime, and it works well enough that people use it all the time 11 10 . Somebody went and compared the many ways of doing it and found they really do differ in how well they get the order and the branch points right, so it is not automatic, but it is real 12 . Still, pseudotime only gives you an axis. It does not tell you which way along the axis is forward.

For the arrow you need a cleverer idea, and one showed up around 2018 6 . It uses an accident of the measurement. When a gene switches on, the first RNA the cell makes still has its introns in it, and the cell splices them out afterward. Ordinary sequencing counts both the unspliced RNA and the spliced RNA. So for each gene, in each cell, you can compare how much fresh unspliced message there is against how much finished spliced message. If a gene is turning on, there is too much unspliced. If it is turning off, too little. And that imbalance tells you which way the gene is heading, out of a single frozen snapshot.

Write it as a simple rate. If uu is unspliced message and ss is spliced,

s˙=βu−γs,\dot{s} = \beta u - \gamma s,

with β\beta the splicing rate and γ\gamma the rate the message decays. The gap between the spliced count you actually see and the count the current unspliced would hold steady tells you s˙\dot{s}: how fast, and which way, that gene is moving. Do it for every gene and you have a direction for the cell, which is the same arrow the two-gene model produced in the phase portrait, except this time it is measured from the data instead of coming out of an equation. scVelo made the estimate better by fitting each gene’s own kinetics instead of assuming it sits at steady state 7 , and CellRank took the per-cell arrows and turned them into fate probabilities by letting cells wander along the flow 8 .

None of this is free, and the people who built it were upfront about where it breaks. There are two ways. The plain estimator assumes each gene has settled into a steady balance of splicing and decay somewhere in the data. Where nothing is changing, in resting blood instead of blood being made, there is no flow to find, and the method will still hand you arrows, and they will mean nothing. scVelo’s fuller model drops that steady-state assumption, but it buys a subtler failure in exchange: it assumes each gene switches on and then off just once, cleanly, and a gene that cycles more than that, or runs its kinetics differently in different cell types, can make the arrows point confidently the wrong way (not just wobble a bit) 9 . That second one is the dangerous case, because nothing about the output looks broken. Either way it is an estimate, tuned for a system that is actually going somewhere. The further you get from that, the less you should believe it.

Blood

Blood is close to the best case for all of this, which is why it keeps turning up in these papers. One stem cell in the marrow gives rise, through a graded line of progenitors, to every kind of mature blood cell: red cells, platelets, the white cells. Early single-cell work already found more kinds of progenitor than the old tree allowed, each one already leaning toward a fate before it had formally committed 4 . Look inside the stem compartment and the sharp categories mostly melt away; commitment looks like a slow drift across a smooth landscape, with no clean instant where the cell decided 15 . Which is, almost exactly, the landscape the two-gene model produced: one broad shallow valley at the top, forks partway down, separate valleys at the bottom.

A cell type, in this picture, is a boundary we drew around a clump of dots. It is a fair enough name for a place where the flow slows down and cells pile up (and we need names to count and sort), but the cell underneath keeps moving whether or not the label says so.

Before trusting any of this, there is one test worth knowing about. Weinreb and his colleagues tagged cells with heritable barcodes and actually watched which fate the descendants took, instead of guessing it from the snapshot. What they found is that a cell’s state predicts its fate only partway, and much better for cells already near a fate than for the young multipotent ones 5 . So position is a real clue, but only a clue, which is why you want the flow laid over it.

loading 5,780 real cells…
Real data: 5,780 human CD34+ bone marrow cells, embedded and given an RNA-velocity field computed with scVelo, from Setty et al. 201913. Click a legend entry to isolate a lineage; toggle flow to see the velocity field this whole essay has been arguing for.

These are real cells: 5,780 human bone marrow cells, sorted for CD34, a marker that picks out stem and early progenitor cells, which is exactly the population where the snapshot tells you the least. Setty and colleagues sequenced and ordered them 13 , and their data has become a standard thing to test velocity on. I ran it through scVelo, took the stochastic-mode velocity, and laid the measured flow over a t-SNE map of the cells.

The clusters the arrows pour into are the attractors from the toy, only now they are real mature blood cells; the colored regions feeding each one are the basins; and the small arrows are the flow, the same arrows the two-gene model produced, here measured for thousands of real cells at once. The t-SNE map alone gives you position, and with the arrows on top you can see which way each cell is going.

Two things to notice. First, most of the arrows point the way the known hierarchy says they should. That is the test the method has to pass before you trust it anywhere harder, and here it passes. Second, the weakest arrows are not where you would guess. They are not on the stem cells, whose arrows are among the longest and surest on the plot. They are on the thinnest branch, the one with the fewest cells, because velocity is worked out from each cell’s neighbors, and a thin branch gives the method almost nothing to go on. So the method does tell you (if you look) where its own signal runs out.

Where this goes

Don’t get me wrong, snapshots are most of what we have, and clustering, pseudotime and marker genes (all built from one frozen instant) taught us most of what we know about blood. But a snapshot answers where a cell is, and many of the questions I care about are about which way it is going, and how fast.

And once you start asking which way, blood and cancer are only the first stop. An embryo turning into an animal is nothing but decisions like this, run over and over. So is a wound closing. So is an immune cell being switched on, or a resting fibroblast being pushed backward into a stem cell in a dish. Every one of these is a system moving through time, so the same framework should carry over (all it needs is something that is changing).

And the good part is that people are now getting the time back from both ends. On the bench, you can make cells carry their own history: CRISPR “recorders” that scar a cell’s DNA a little more each time it divides, so its descendants spell out the lineage tree of a whole embryo 20 , and metabolic labels that tag only the RNA a cell made in the last hour, so you measure real elapsed time instead of guessing it 19 . On the computer, you can go past one arrow per cell and learn the whole vector field, and the landscape under it, and then use it to predict where a cell will go next 21 ; or you can take snapshots from several days and sew them into a single flow with optimal transport 18 . RNA velocity and CellRank, from before, are early members of this family.

What I want, in the end, is to write down for a real piece of tissue both the landscape and the flow running on it. Then you could say what a cell is about to do (and not only what it is), and maybe catch the moment a healthy decision starts bending toward a bad one, before the cell has finished making it. We are not there yet. And I still don’t know whether the flow we measure is the one the cell actually follows, or only our best-looking guess at it. That is the part I want to find out.

References

  1. 1. Waddington, C.H. (1957). The Strategy of the Genes . George Allen & Unwin ↩
  2. 2. Huang, S., Eichler, G., Bar-Yam, Y., & Ingber, D.E. (2005). Cell Fates as High-Dimensional Attractor States of a Complex Gene Regulatory Network . Physical Review Letters, 94, 128701 ↩
  3. 3. Huang, S., Ernberg, I., & Kauffman, S. (2009). Cancer attractors: A systems view of tumors from a gene network dynamics and developmental perspective . Seminars in Cell & Developmental Biology, 20(7), 869–876 ↩
  4. 4. Paul, F., Arkin, Y., Giladi, A., et al. (2015). Transcriptional Heterogeneity and Lineage Commitment in Myeloid Progenitors . Cell, 163(7), 1663–1677 ↩
  5. 5. Weinreb, C., Rodriguez-Fraticelli, A., Camargo, F.D., & Klein, A.M. (2020). Lineage tracing on transcriptional landscapes links state to fate during differentiation . Science, 367(6479), eaaw3381 ↩
  6. 6. La Manno, G., Soldatov, R., Zeisel, A., et al. (2018). RNA velocity of single cells . Nature, 560, 494–498 ↩
  7. 7. Bergen, V., Lange, M., Peidli, S., Wolf, F.A., & Theis, F.J. (2020). Generalizing RNA velocity to transient cell states through dynamical modeling . Nature Biotechnology, 38, 1408–1414 ↩
  8. 8. Lange, M., Bergen, V., Klein, M., et al. (2022). CellRank for directed single-cell fate mapping . Nature Methods, 19, 159–170 ↩
  9. 9. Bergen, V., Soldatov, R.A., Kharchenko, P.V., & Theis, F.J. (2021). RNA velocity—current challenges and future perspectives . Molecular Systems Biology, 17(8), e10282 ↩
  10. 10. Haghverdi, L., Büttner, M., Wolf, F.A., Buettner, F., & Theis, F.J. (2016). Diffusion pseudotime robustly reconstructs lineage branching . Nature Methods, 13, 845–848 ↩
  11. 11. Trapnell, C., Cacchiarelli, D., Grimsby, J., et al. (2014). The dynamics and regulators of cell fate decisions are revealed by pseudotemporal ordering of single cells . Nature Biotechnology, 32(4), 381–386 ↩
  12. 12. Saelens, W., Cannoodt, R., Todorov, H., & Saeys, Y. (2019). A comparison of single-cell trajectory inference methods . Nature Biotechnology, 37, 547–554 ↩
  13. 13. Setty, M., Kiseliovas, V., Levine, J., Gayoso, A., Mazutis, L., & Pe'er, D. (2019). Characterization of cell fate probabilities in single-cell data with Palantir . Nature Biotechnology, 37, 451–460 ↩
  14. 14. van Galen, P., Hovestadt, V., Wadsworth II, M.H., et al. (2019). Single-Cell RNA-Seq Reveals AML Hierarchies Relevant to Disease Progression and Immunity . Cell, 176(6), 1265–1281.e24 ↩
  15. 15. Velten, L., Haas, S.F., Raffel, S., et al. (2017). Human haematopoietic stem cell lineage commitment is a continuous process . Nature Cell Biology, 19(4), 271–281 ↩
  16. 16. Rekhtman, N., Radparvar, F., Evans, T., & Skoultchi, A.I. (1999). Direct interaction of hematopoietic transcription factors PU.1 and GATA-1: functional antagonism in erythroid cells . Genes & Development, 13(11), 1398–1411 ↩
  17. 17. Huang, S., Guo, Y.-P., May, G., & Enver, T. (2007). Bifurcation dynamics in lineage-commitment in bipotent progenitor cells . Developmental Biology, 305(2), 695–713 ↩
  18. 18. Schiebinger, G., Shu, J., Tabaka, M., et al. (2019). Optimal-Transport Analysis of Single-Cell Gene Expression Identifies Developmental Trajectories in Reprogramming . Cell, 176(4), 928–943 ↩
  19. 19. Battich, N., Beumer, J., de Barbanson, B., et al. (2020). Sequencing metabolically labeled transcripts in single cells reveals mRNA turnover strategies . Science, 367(6482), 1151–1156 ↩
  20. 20. Chan, M.M., Smith, Z.D., Grosswendt, S., et al. (2019). Molecular recording of mammalian embryogenesis . Nature, 570(7759), 77–82 ↩
  21. 21. Qiu, X., Zhang, Y., Martin-Rufino, J.D., et al. (2022). Mapping transcriptomic vector fields of single cells . Cell, 185(4), 690–711 ↩
  22. 22. Hoppe, P.S., Schwarzfischer, M., Loeffler, D., et al. (2016). Early myeloid lineage choice is not initiated by random PU.1 to GATA1 protein ratios . Nature, 535, 299–302 ↩
comments