Research note
N / 261011

More Trading Rules, Fewer Layers: Why I Simplified the Decision Architecture

A research-driven trading system can accumulate too many decision layers. Here is why a unified architecture, scoped dependencies, and auditable outcomes matter more than simply adding rules.

Software updates tend to celebrate additions: another feature, another signal, another exception handled.

But after enough research-driven iterations, a harder question appears: can we still explain, test, and reproduce the decision that comes out of the entire system?

That was an important engineering motivation behind reorganizing the decision architecture in a recent BTC five-minute automation upgrade.

Rule accumulation does not have to mean endless processing layers

When new research reveals a previously under-covered market condition, adding a narrowly scoped decision adjustment can be practical. It minimizes changes to the original system and allows an idea to be reviewed separately.

Over time, however, repeated layering creates hidden costs:

  • One decision may be processed by several successive components.
  • Debugging requires reconstructing what each layer saw and changed.
  • Data dependencies and exception handling become scattered.
  • Old and new capabilities coexist without one understandable audit view.
  • Regression testing becomes harder because interactions are implicit.

The real problem may not be the number of rules. It may be the number of undocumented relationships between rules.

What does simplifying an architecture actually remove?

It does not mean throwing away validated work to make a diagram look cleaner.

In this upgrade, capabilities accumulated over several research iterations were organized behind one unified decision layer, while the underlying baseline and trading execution workflow were kept intact.

The public engineering lessons are broader than this particular implementation:

  1. Clear responsibility. A supplementary decision should operate only within the scope it is intended to cover.
  2. Scoped dependencies. Missing information needed by one optional decision should not automatically invalidate unrelated, otherwise valid decisions.
  3. Auditable outcomes. A final decision should have a traceable explanation, rather than requiring someone to guess which intermediate component silently modified it.

These are principles of maintainable software. They do not require publishing proprietary model rules or internal processing details.

Cleaner code is not enough: preserve the behavioral contract

A refactor can make code easier to read while accidentally changing what the product does.

That is why a structural upgrade needs an explicit list of invariants: properties that must not drift merely because the implementation changed.

Examples include keeping baseline inputs and outputs consistent, preserving required state transitions, and reproducing final historical decisions under the same test conditions. Checking only the final total score is insufficient; two incorrect paths can accidentally end with the same total.

The v2.4 code-level historical replay covered 18,920 eligible contexts and reported no discrepancies in its stated consistency checks. That supports confidence in the checked implementation boundaries—not certainty about all future operating conditions.

Why the audit trail matters more than a final action label

A log entry saying “no action” is rarely sufficient for research or support.

Did the system deliberately decline the opportunity? Was required data unavailable? Did an execution dependency fail? These situations can look identical in a minimal dashboard but demand different responses.

A maintainable architecture needs to distinguish a legitimate decision not to act from an inability to decide or execute safely. That distinction matters for historical reconciliation, live monitoring, user support, and rollback.

A system is not more trustworthy because it constantly produces activity. It is more understandable when both action and non-action can be investigated.

Did the simplification itself improve the backtest?

The updated historical replay reported improvements in several standardized quality and stability measures. But it would be misleading to attribute the entire score difference to reducing the number of architectural layers.

The version included research-driven changes as well as structural consolidation. These are related but distinct propositions: one concerns the clarity of the implementation, the other concerns outcomes under the chosen historical scoring method.

Both need evidence on their own terms.

My preferred description of the work is simple: we did not make a complicated problem trivial; we made the complexity explicit, bounded, and testable.


This article concerns public engineering principles, not proprietary decision logic or parameters. Historical code consistency is not proof of future live profitability.

Further reading: From Signal to Automated Execution · Trade-by-Trade Production Validation · A Maintainable Trading System