Friday, August 1

Developing Useful Applications (Part 1) Breaking It Down

1 comment:

Alexey said...

I especially support the passage on Naming. This is exactly the drum I kept beating in every team I’ve been part of. “Managers,” “Processors,” “Helpers,” “Storage”—or even worse, “Visitors,” “Singletons,” and other GoF “patterns”—are the bane of any codebase. Surely, recognizing a pattern is important, but the value of a software product and the team building it lies not in how broadly it matches generic conventions, but rather in the opposite: how specifically it addresses the team’s or customer’s problem. Any naming scheme that hints at specificity beats generic convention seven times over.

As a result, we’ve often had *Custodians* and *Wranglers* instead of “Managers”; *Cauldrons*, *Garages*, *Warehouses* in place of “Storage”; and *Furnaces*, *Mincers*, *Mungers*, *Munchers* for “Processors.” And many more. It takes only a short time before these names become part of the team’s vocabulary, and from then on, such concepts contribute greatly to the overall comprehension of the system—especially in the most valuable way: by clarifying and exemplifying where and how the system diverges from generic convention to serve the specific goal it was designed for.

Another episode springs to mind. I once witnessed a migration from on-prem to cloud, which was bundled with a change in naming convention for infrastructure items—from “Pet”-style Pokémon-based names (“squirtle,” “ponyta”) to “Cattle”-style generic `--` schemes (“au-vic-prod-comms-vm”). While on paper this should be seen as beneficial—the names now convey a lot of information—I maintained back then, and still believe, it was a mistake.

Yes, “squirtle” doesn’t immediately convey much to a new dev on the team and requires a lookup in some registry. But it rolls off the tongue and presents itself in one’s mental map as a vivid image (even if you’re not into Pokémon!), which “au-nsw-test-front-vm” cannot dream of replicating. Plus, you *still* need a lookup—because from the name alone, you don’t know: is this primary or secondary? What VPN does it sit behind? And so on.

In my view, such a move detracts greatly from comprehension and shared vocabulary, while adding very little—and mostly superficial—value in return. I’d love to hear your thoughts on this, Geoff.