The Hidden Art of Making Systems Smaller Than Their Problems

Gleb Sokolov

Hatched by Gleb Sokolov

May 30, 2026

9 min read

27%

0

The first move is not cleverness, it is selection

Most people think performance problems begin with compute. They do not. They begin with choice. What do you keep close, what do you discard, and what do you make expensive on purpose? That question quietly governs everything from machine learning pipelines to version control hygiene, even though it often looks like a purely technical detail.

A model can be powerful, but if it lives in the wrong format, on the wrong hardware, with the wrong context length, it becomes less useful than a smaller model that is easy to run. A repository can be carefully engineered, but if it accumulates heavy artifacts, transient outputs, and oversized files, it becomes harder to move, harder to trust, and harder to work with. In both cases, the deeper issue is not raw capacity. It is what you allow to remain part of the working set.

That is the common thread: successful systems are not the ones that hold the most. They are the ones that keep the right things near at hand while pushing the rest out of the critical path.

The real optimization problem is not “How much can this system store?” It is “How little must it carry in order to stay smart, fast, and usable?”

This reframing matters because it turns a technical nuisance into a design principle. You are not merely trimming waste. You are defining the boundaries of intelligence.


Bigger is easy, but usable is hard

There is a seductive tendency in software to equate scale with progress. More parameters, more context, more files, more history, more everything. But larger systems often fail in a less dramatic way than outright crashes. They become awkward. They slow down just enough to be annoying, opaque enough to be fragile, and bloated enough to discourage experimentation.

Local embedding workflows make this tension obvious. A model can be configured with a large context window, GPU acceleration, and batch settings tuned for throughput. Those knobs are not ornamental. They are how you decide whether the model feels like an interactive tool or a temperamental laboratory instrument. If your embedding pipeline is too heavy, the system may technically work while remaining unpleasant to use. The difference between a useful tool and a dead one is often measured in seconds, not theory.

The same pattern shows up in file management. A repository can contain gigabytes of generated assets, cached data, binaries, and artifacts that are not meant to be versioned. Nothing in the logic of the code requires them to live in the tree. Yet once they are there, they raise the cost of every clone, every diff, every review, every backup. The repository becomes an archive of accidental state.

This is why the question of ignoring files by size is more profound than it sounds. It is not just about saving disk space. It is about protecting the working set from pollution. A good ignore rule is a boundary that says: this belongs in the world of outputs, not in the world of sources.

Think of a kitchen. A good chef does not keep every ingredient on the counter. The counter holds what must be immediate: knife, board, salt, a few active ingredients. Everything else lives in drawers, shelves, or the pantry. The kitchen is not maximally full. It is maximally navigable. That is what good systems design looks like in practice.


The working set is where intelligence lives

The deepest connection between embedding systems and repository hygiene is that both depend on working set discipline. The working set is the slice of reality a system must hold in active memory to do its job. In a model pipeline, it may be the prompt, the chunked documents, the batch size, and the model context. In a codebase, it may be the tracked files, the current branch, the build inputs, and the review surface.

Once you see the working set as the true center of gravity, a lot of old habits start to look misguided. People often try to solve performance problems by adding more capacity. But capacity without discipline just creates a larger arena for clutter. If your model is fed too much context, it can lose focus. If your repository tracks too much garbage, it loses clarity. In both cases, the bottleneck is not memory alone. It is attention.

This is why small constraints can create outsized leverage. A batch size limit forces you to think about throughput and memory together. A context window forces you to think about what information is actually relevant. An ignore policy forces you to decide which files deserve permanence. The system becomes better not because it is freer, but because it is more selective.

A useful mental model here is to separate source truth from operational truth.

  • Source truth is what should be preserved because it is foundational.
  • Operational truth is what should be present because it is currently useful.

Confusing the two creates bloat. You do not want every operational artifact to become source truth. A generated embedding index, a model cache, a compiled binary, or a build directory may be essential for running the system, but they are not essential for defining it. The difference is subtle, and that is why teams get it wrong so often.

Once operational artifacts are mistaken for source, the system starts to fossilize. People become reluctant to clean up because every file looks important. But a healthy system is one that can forget safely.

A system that cannot forget is not robust. It is burdened.


Selective memory is a design philosophy, not an accident

The most interesting thing about constrained systems is that they are not merely smaller versions of unconstrained systems. They are different philosophies of knowledge. They assume that recall has a cost, that relevance is local, and that what is omitted can matter more than what is included.

That is why embedding workflows are so revealing. An embedding model does not need the whole world. It needs enough signal to map meaning into usable coordinates. The art lies in deciding what to chunk, what to truncate, what to batch, and what to leave out. These are not purely technical choices. They are epistemic choices. They determine what the model gets to “know.”

Version control makes the same point from the opposite direction. A good .gitignore is a curated forgetfulness mechanism. It protects the history of the project from being overwhelmed by the noise of its execution. Without it, the repository becomes a landfill of temporary objects masquerading as memory. With it, the repo becomes a disciplined record of intention.

This is a powerful general principle: mature systems are curated, not comprehensive. They do not attempt to retain everything. They retain what supports the next action.

Consider a notebook from a researcher, a log file from an application, and a library of source code. Each has a different memory policy. The notebook can be messy because it is exploratory. The log file is append only because it is diagnostic. The source tree should be selective because it is collaborative and durable. Problems begin when these memory modes get mixed together. A notebook becomes unmanageable when it is treated like a textbook. A repository becomes unmanageable when it is treated like a dump site.

That is exactly why size based ignoring is attractive. File size is not a perfect proxy for importance, but it is a strong signal that something has crossed from source into artifact. A huge file in a codebase often means one of three things: it is generated, it is binary, or it is a data dump. All three are signs that the file probably belongs elsewhere, where it can be managed according to its real lifecycle instead of the lifecycle of source code.


The paradox: the less you keep, the more capable you become

It sounds counterintuitive, but systems often become more capable when they carry less. A local model with the right parameters, the right context window, and the right hardware can feel dramatically more responsive than a larger, more abstract setup that spends all its time shuttling information around. A lean repository is easier to clone, inspect, and maintain. In both cases, the reduction of friction creates new possibilities.

This is the paradox of productive subtraction. You do not remove things because you are giving up. You remove things because you are making room for flow.

Here is a concrete comparison:

  1. A model with excessive context may appear informed, but it can dilute relevance, increase latency, and consume memory.
  2. A repository with oversized tracked files may appear complete, but it can slow every operation and confuse every contributor.
  3. A system with disciplined boundaries may look less ambitious, but it is often more usable, more portable, and more resilient.

The lesson is not that bigger is bad. It is that scale must be governed by boundaries. Without boundaries, scale becomes drag.

There is also a social dimension here. Systems that are too large to comprehend invite disengagement. Developers avoid touching them. Users stop exploring them. Contributors hesitate to make changes. By contrast, a well bounded system communicates confidence. It tells people, “This is what matters, and this is where you can act.” That invitation is one of the most underrated forms of design.

If you want a shorthand for the whole idea, use this:

A system is not intelligent because it remembers everything. It is intelligent because it remembers selectively and acts quickly.

That principle applies whether you are tuning embeddings, managing a repository, or designing any complex workflow where the temptation is to keep every option open forever.


Key Takeaways

  • Treat the working set as sacred. Optimize the information, files, and artifacts that must be active right now, not the ones that merely exist.
  • Separate source truth from operational truth. Generated outputs, caches, and binaries are often necessary, but they should not be promoted into the permanent record.
  • Use selectivity as a design tool. Context limits, batch sizes, and ignore rules are not inconveniences. They are mechanisms for clarity.
  • Assume forgetting is part of health. A system that can safely leave things out is often more robust than one that stores everything.
  • Audit large files and large contexts together. Whenever something feels slow or bloated, ask the same question in both domains: what belongs in the active path, and what does not?

The real question is not what a system can hold

We tend to praise systems for their capacity, but capacity is only impressive when paired with judgment. Otherwise it becomes a storage problem disguised as an intelligence problem. The deeper discipline is not accumulation. It is curation.

That is the hidden connection between embedding configuration and file hygiene. Both are ways of saying that a system becomes useful when it stops treating every piece of information as equally present. The best tools, repositories, and workflows are not the ones that remember the most. They are the ones that know what to keep within reach and what to let recede.

In the end, that may be the most important design move available to us: to build systems that are not burdened by their own history, and not distracted by their own excess. The highest form of capability is not abundance. It is well governed absence.

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 🐣