The Hidden Logic of Naming Things Private

‎

Hatched by

Jun 11, 2026

10 min read

54%

0

The uncomfortable truth about categorization

What if the biggest mistake in software is not a bug in your code, but a bug in your taxonomy?

We like to think of systems as neutral containers. A package is just a package. A sort is just a sort. But both are really judgment machines. They decide what belongs where, what gets shown first, what is public by default, and what must be deliberately hidden or revealed. In other words, the architecture of software is often less about computation than about classification.

That sounds abstract until you notice how often the same question appears in different forms: Who gets to see this? What counts as first? What is implicit, and what requires an explicit act? Those are not separate concerns. They are the same design problem wearing different clothes.

At the heart of that problem is a deep tension: the systems we build must be easy to use, but they also must make boundaries legible. Comparison based sorting and package visibility seem like unrelated technical details. They are not. Both are examples of how software encodes a worldview, and both reveal why the most important decisions in engineering are often invisible until something breaks.


Sorting is not about order, it is about power

We usually describe sorting as if it were a simple act of arranging data. But a sorting strategy always assumes a standard of comparison. By what rule should one item come before another? That rule determines what the system values.

If you sort by price, you privilege affordability. If you sort by relevance, you privilege attention. If you sort by date, you privilege recency. A sort is never just a mechanical step, because it makes a judgment about what matters first. This is why comparison based sorting is a small phrase with a large philosophical shadow: it forces a system to compare unlike things through a single lens.

Imagine a hiring dashboard that sorts candidates by years of experience. It appears objective. But the choice of comparator quietly decides which kind of merit gets recognized. Someone who built a product from scratch, or who learned fast in a compressed timeline, may be buried below a more conventionally experienced applicant. The algorithm is not merely ordering names, it is enforcing a hierarchy of value.

This is the first connection to package visibility. A sort asks, “What should rise to the top?” Visibility asks, “What should be seen at all?” Both are forms of selection. One operates on sequence, the other on access. And in both cases, the default rule shapes behavior more strongly than any manual exception.

Defaults are not conveniences. They are policies that announce themselves after everyone has already adapted to them.

That is why the design of a comparator is not a technical footnote. It is a declaration of what the system regards as comparable in the first place. Any item that cannot be meaningfully compared is either forced into an artificial scale or excluded from the sort entirely. That exclusion is not always obvious, but it is real.


Public by default is a worldview, not a setting

Package visibility looks like a minor distribution detail. In practice, it reveals a core principle of system design: what happens if a human does nothing.

Unscoped packages are always public. Private packages are always scoped. Scoped packages are private by default, and making them public requires an explicit act. That asymmetry matters more than the syntax suggests. It creates a moral geometry for software distribution: some things are open unless constrained, some things are closed unless intentionally released.

Why should that matter? Because defaults are where culture lives.

A public by default world encourages ease, reuse, and broad circulation. A private by default world encourages deliberation, access control, and bounded responsibility. Neither is inherently better. The key is that each one trains people to think differently about trust. In one environment, publishing is cheap and secrecy must be justified. In the other, secrecy is the baseline and disclosure must be earned.

Consider a team building internal tooling. If packages are public by default, a rushed developer might accidentally expose code that was never meant for the outside world. If private is the default, a team can move with more confidence that internal artifacts stay internal until someone consciously opens them up. The system is not just preventing mistakes. It is teaching the team what counts as a mistake.

This mirrors sorting more closely than it first appears. A comparator establishes a default path through complexity. A visibility rule establishes a default boundary around complexity. Both are mechanisms for reducing ambiguity, but they do so by making one interpretation dominant. In one case, the interpretation is “this belongs before that.” In the other, it is “this belongs outside unless invited in.”

The crucial insight is that defaults create habits faster than documentation does. People do not merely follow defaults, they internalize them. After enough repetition, the default becomes common sense. That is why package visibility is really a conversation about organizational memory.


The shared problem: making invisible judgments explicit

Sorting and visibility are usually treated as separate engineering concerns because one affects presentation and the other affects distribution. But they are both answers to the same question: how does a system encode judgment without pretending that judgment is absent?

A comparison based sort says, “We cannot avoid ranking, so we should define the ranking rule explicitly.” Package visibility says, “We cannot avoid boundary setting, so we should define the boundary explicitly.” These are not just implementation choices, they are attempts to make hidden judgments visible before they become accidental policy.

This is where many systems fail. They act as though they are neutral when they are not. A sort that uses the wrong comparator still looks orderly. A package made public by mistake still looks legitimate. The danger is not only technical failure, but the illusion of correctness.

Think about a library shelf in a physical bookstore. Alphabetical order feels objective, but it is only one possible ordering principle. A shelf organized by popularity creates a different story about value. A shelf organized by editor recommendation creates yet another. The store cannot avoid ordering. The question is whether it admits the principle guiding the order.

Package visibility works the same way. A code registry cannot avoid deciding whether an artifact is exposed or contained. The question is whether the rule is visible enough that engineers can reason about it. Hidden policies are the enemy of both reliability and trust.

This suggests a broader design principle:

Whenever a system forces comparison or exposure, the default should favor explicitness over convenience when the cost of error is irreversible.

That does not mean every system should be private by default or every sort should be heavily customized. It means the more consequential the mistake, the less acceptable it is for the system to make that mistake easy.


A mental model: the difference between ranking and releasing

One useful way to connect these ideas is to distinguish between two kinds of system decisions:

  1. Ranking decisions, which determine sequence or priority.
  2. Releasing decisions, which determine access or availability.

Sorting belongs to ranking. Package visibility belongs to releasing. The two are related because they both operate on flows of attention and control.

A ranking decision says, “Here is the path attention should take.” A releasing decision says, “Here is the set of things attention is allowed to reach.” The first changes what is most visible. The second changes what is possible to see at all.

This distinction helps explain why some engineering mistakes feel cosmetic while others feel catastrophic. A bad sort can mislead a user or hide an important item. A bad visibility rule can leak intellectual property, expose secrets, or collapse trust. Yet both mistakes originate from the same class of assumption: the system silently chose a default comparison or boundary.

In product terms, you can think of this as the difference between a lens and a door.

  • A lens changes what comes into focus.
  • A door changes what is allowed through.

Sorting is a lens. Package visibility is a door. The skill of good system design is knowing when each should be open, closed, or adjustable. And the most dangerous systems are those that pretend a lens is harmless or a door is trivial.

This is why great engineering teams obsess over “small” configuration choices. They are not small. They are compressed value systems.


Designing for intention, not accident

If there is a practical lesson here, it is that systems should make the intended path easier than the accidental one, especially when the stakes are high.

For sorting, that means choosing comparison logic carefully and naming it well enough that the rule is obvious. If a list is sorted by recency, say so. If it is sorted by business relevance, define relevance. If comparison is unstable, document why and accept the tradeoff consciously. The goal is not perfect sorting, but auditable sorting.

For package visibility, it means aligning defaults with the cost of exposure. If a package contains internal logic, treat privacy as the baseline. If public distribution is desired, require an intentional publication step. This does not slow teams down in any meaningful way. It simply makes boundary crossing a deliberate act instead of an accident waiting for a deadline.

Here is the deeper principle behind both:

Good systems do not eliminate judgment. They move judgment to the moment where it can still be inspected.

That is the essence of robust design. A comparator makes ranking visible at the point of implementation. A visibility policy makes release visible at the point of publishing. In both cases, the system becomes safer when its assumptions are easier to name.

An organization that understands this will start to notice similar patterns everywhere. Feature flags are about controlled release. Access controls are about deliberate boundaries. Recommendation systems are about comparison. Even onboarding flows are about defaults that shape habit before users have formed preferences of their own.

Once you see this, software design stops looking like a collection of unrelated best practices. It becomes a discipline of making decisions legible.


Key Takeaways

  1. Treat defaults as policy. A default is never neutral. It is a silent instruction that shapes behavior at scale.
  2. Separate ranking from release. Ask whether your system is deciding what comes first or what is allowed through. These are different powers and should be handled differently.
  3. Make judgments explicit early. Comparison rules and visibility rules should be named, documented, and reviewed before they become hidden assumptions.
  4. Prefer auditable mistakes over invisible ones. It is better for a system to be slightly inconvenient than silently wrong when the consequences are serious.
  5. Design for intention, not accident. The best systems make the desired action easier than the unintended one.

The real lesson: software is a theory of what deserves precedence

In the end, sorting and visibility are not just technical mechanisms. They are small, precise expressions of a much larger idea: software is constantly deciding what deserves precedence.

Precedence can mean order in a list. It can also mean access, permission, or trust. That is why these two seemingly unrelated details belong together so naturally. They both ask the same question in different dialects: what should happen first, and what should be allowed at all?

The deeper lesson is that every system has to answer this question, whether it says so or not. If you do not define the comparator, the system will still rank. If you do not define visibility, the system will still expose or conceal. There is no truly neutral option, only choices that are more or less conscious.

That is a liberating thought, because it gives engineers a better standard than “does it work.” The better question is: what kind of judgment is this system making, and is that judgment visible enough to be trusted?

Once you start asking that, the small details stop looking small. A sort order becomes a philosophy. A package scope becomes a boundary ethics. And software, at its best, becomes not just machinery, but a carefully explained way of deciding what matters, what belongs, and what should stay private until we mean to share it.

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣