Plate i. · Frontispiece

iggi.dev

이끼

A Victorian bryologist's cabinet, kept in the quiet hours between commits. These pages are field notes — specimens pressed, observations inked, small green lives catalogued with the patience of someone who has all the time in the world.

$ whoami — a collector of cryptogams & keystrokes
Hypnum cupressiforme coll. Jeju, xi · 2024
Plate ii. · On finding moss

Where the damp things grow

Moss keeps to the places nobody watches. The north face of a stone wall. The joint between two roof tiles. The rotting log nobody thought to clear. If you want to find it, you have to learn to look at the things you have been trained to overlook — the margins, the seams, the undersides of the visible world.

I suspect this is also true of the best code. The elegant function is almost always tucked into a module named utils/, written by someone who left the team four years ago, doing its quiet work without ceremony. Moss and well-factored software share a temperament.

A moss colony is the slowest possible argument that patience is a form of intelligence.

Bryum argenteum pavement cracks, iii · 2025
Plate iii. · Verso — the spore cycle

Alternation of generations

A moss is two plants in a single body. The green cushion you see — the gametophyte — is one generation. The slender stalks rising from it, tipped with capsules like tiny lamps, are another. One produces eggs. One releases spores. They take turns, patiently, under rain.

I think about this when I deploy. The code I write today is one generation; the process it spawns, the data it leaves behind, the logs it accretes — these are a second generation, running quietly long after the commit has scrolled off the history. Every system is two systems. The living one and the one that persists.

// ./lib/cycle.ts
export function alternation<T>(
  gametophyte: () => T,
  sporophyte: (seed: T) => T[],
): T[] {
  const egg = gametophyte();
  return sporophyte(egg); // spores drift into the dark
}
Polytrichum commune sporophyte, vi · 2025
Plate iv. · A field note from Jeju

A granite ledge, in November

I found this one growing on a granite ledge on the east flank of Hallasan, in November, during a typhoon. The rain was sideways and the light was the color of old honey. I lay on my stomach for forty minutes with a hand lens, because Racomitrium lanuginosum looks like grey felt from five feet away and like a forest of silver hairs from five inches.

  • Substrateweathered granite, SW aspect
  • Altitude~840m
  • Humidityabsurd
  • Companionslichen, wind, one startled deer
  • Ink usediron gall, mildly smudged

I take photographs too, of course, but the field notebook is where the specimen becomes mine. The pencil knows something the camera does not. It has to slow down in exactly the places my eye did.

Racomitrium lanuginosum Hallasan, xi · 2024
Plate v. · Verso — the .dev half

What the moss taught me about code

A moss has no vascular tissue. It cannot pump water uphill. It survives by being close to its substrate, by being small, by accepting the humidity of the place instead of engineering around it. This is a design principle I come back to more often than any pattern in any book.

01 ·
Grow close to the substrate. Read the runtime before you reach for an abstraction.
02 ·
Be small, be many. One cushion of moss is a thousand individuals. One well-factored module is a hundred small functions.
03 ·
Accept the humidity. The weather of your system — its latency, its failures — is not noise. It is the climate you have to live in.
04 ·
Wait. Moss measures time in decades. Some refactors should too.
Dicranum scoparium broom moss, column form

Moss grows where others won't.

iggi.dev · MMXXVI · 이끼