Egis Technical Journal – 2026-02-02

What I have done

Today was largely about consolidation, correctness, and restraint rather than adding raw features.

I made a deliberate effort to reduce ambiguity in Egis by:

  • Hardening BI architecture
    • Reconfirmed a strict separation between writers (background commands) and readers (Admin/User UI).
    • Ensured Strategy Report is the single canonical performance analytics feature.
    • Explicitly removed the Trade Performance Trends feature after realizing it overlapped conceptually and operationally with Strategy Report.
    • This avoided metric duplication, competing truths, and future maintenance debt.
  • Improving Strategy Report correctness
    • Fixed Max Equity Drawdown percentage logic so it always produces a valid number when drawdown exists.
    • Clarified grouping semantics:
      • Normal strategies → group by strategy_key
      • Signal Hooks → group by strategy_key + signal_key
    • This restored analytical meaning for Signal Hooks, where signal_key is the real unit of intent.
  • Strengthening scheduling discipline
    • Moved all heavy analytics (Strategy Report computation, execution-quality metrics) into scheduled background commands.
    • Ensured nothing computationally expensive or Binance-related runs during page load.
    • Added proper scheduling cadence and overlap protection.
  • Improving Admin and User UX clarity
    • Cleaned up Admin UI hierarchy so operational pages (Signal Hooks) retain top priority over analytical ones.
    • Reduced visual noise: smaller text, better alignment, calmer layouts.
    • On User Dashboard:
      • Ensured Available Budget is read from persisted snapshots only.
      • Restored the info (“i”) icon.
      • Moved “last updated” into the breakdown panel where it belongs.
  • Introduced a new BI direction
    • Designed the Trade Execution Quality Report as a non-overlapping BI feature:
      • Focused on slippage, execution efficiency, retries, and time-to-fill.
      • Explicitly separated strategy alpha from execution quality.
      • Kept it background-computed, auditable, and UI-light.

What I have learned

  1. BI features must not compete with each otherThe moment two BI pages answer the same question in different ways, the system loses trust.
    Removing a feature is sometimes more valuable than adding one.
  2. Percentages are dangerous without explicit denominatorsThe Max Drawdown % bug was a reminder:
    • If a denominator can be zero or undefined, the system must prove why it is safe.
    • “—” is acceptable only when the metric is truly non-computable, not because of lazy guards.
  3. Signal Hooks are not just a strategy — they are a dimensionTreating signal_key as optional metadata hides real performance signals.
    Once grouped correctly, Signal Hooks stop being noisy and start being interpretable.
  4. Background-first architecture scales calmnessEvery time I moved logic out of controllers and into scheduled commands:
    • The UI became simpler.
    • The mental model became clearer.
    • Failure modes became observable instead of implicit.
  5. Execution quality is a different axis from profitabilityA system can be profitable despite bad execution.
    Measuring slippage, retries, and fill latency gives earlier warnings than PnL ever will.
  6. Restraint is a form of system designSaying “no”, deleting code, and refusing overlap is not cleanup —
    it’s how a trading system stays explainable under pressure.

Closing thought

Today wasn’t about shipping fast.
It was about making Egis quieter, stricter, and more honest.

And that’s usually a sign the architecture is moving in the right direction.