DunneFlow · Working with it
Chasing rabbits
Threads to pull, Worth a look, the trail and Keep this, which together let you follow a detour without losing the thought you were on.
Orienting in an unfamiliar codebase is not a search. You start with one question, notice something odd, follow it, notice something else, and twenty minutes later you have learned five useful things and cannot remember what you were originally doing.
DunneFlow is built for that. Threads give you somewhere worth going, the trail brings you back, and keeping means a detour gains you something.
Threads to pull#
At the bottom of the inspector, for whatever is selected. This is adjacency by interest, not by edge: two routines that never call each other but both write one table are coupled, and no call graph will tell you so.
| Lane | Why it is worth a detour |
|---|---|
| The other end | You write this table; here is who reads it. |
| Runs the same shape | You loop over this table, or branch on this test; so do others. |
| Named like these | Your name follows a convention others follow, or uses a word nothing defines. |
| Shares a plan | The same ticket, plan or decision id. |
| Unusual nearby | An outlier in your own package: the most commented, the most called, the deepest nested. |
Every thread states its own size, and lanes are ordered rarest first: a thread shared with one other routine is worth a detour, one shared with half the program is a category. Threads compare text as written, and say so.
Worth a look#
Explore → Worth a look is the same idea with no selection required: a doorway for when you do not yet know what to ask. It shows twelve measured extremes of the program, each with its middle stated beside it, ordered by how far the extreme is from the middle. Every program has a most-commented routine, so a maximum on its own means nothing; a maximum hundreds of times its middle is a discovery, and a maximum barely above it is stated just as plainly.
A curiosity is a measurement, never a judgement. There is no severity and no suggestion that a number ought to be smaller; that is what the anomaly worklist is for. These cards are measured on the version on screen and are not compared across versions.
show the query gives you the SQL that returned the whole card, value, middle and
population included. Run it yourself with
dunneflow query. Each card also
offers a way to select what it names, and ◇ Keep this.
The trail#
Every selection you make is recorded, and the bar across the top of the centre pane is your route.
- ← Back (
⌘Z, orCtrl+Zon Windows and Linux) and Forward → (⇧⌘Z, orCtrl+Shift+Z) work from anywhere, because the person who needs Back is by definition lost. - Every step carries what it is, not just its name. Two things can share a name, and a trail that stored labels would take you back to the wrong one.
- A change of view is a step too, so switching from Graph to Table can be undone.
- The bar is a window onto the history. It shows a number of steps you can set, and states what falls off either end (+3 behind, +8 ahead). Back reaches further.
- Forward is a real branch. Step back three times and the steps ahead remain until you select something new.
- Clear shortens the trail to where you are standing. It does not drop what you kept.
◇ Keep this#
Anywhere you see ◇ Keep this (the inspector, a thread, a curiosity, a search hit, a row on the Algorithms page) the thing lands on a shelf. The count sits in the trail bar as ◆ 2 kept and opens the shelf, which also appears under Explore as Kept. Each row opens the thing itself; Drop removes it. The shelf is per program and survives a reload.
Kept things have different lifetimes, and the shelf says so:
- A routine, constant or structure is identified by its qualified name, so edits above it do not matter.
- A word your program states (a ticket id, a table name, a naming pattern) survives re-analysis and means the same thing in both versions of a comparison. Its row recounts how many routines it stands for now.
- A line, or a loop at a line, is true only of the version it was kept in, and the row warns you when you switch versions.
- A box in a diagram belongs to the drawing and level it was kept at.
A worked detour#
- You are reading
cmd_serveto learn how the server starts. - Threads to pull → The other end says it reads and writes a
documentstable that many other routines also touch. - You follow it. The table's page shows what loops over it, and one loop runs a
DATABASE UPDATEonce per row. - Interesting, but not what you came for. ◇ Keep this on the loop.
- ← Back, twice. You are on
cmd_serveagain. - When you are done, ◆ 1 kept takes you straight to the loop.
For a hands-on version, see the tutorial Chasing rabbits.
Something unclear or out of date? Tell us.