# FinSpec: getting macro out of my head

> I built FinSpec to make the relationships between macro indicators easier to follow, with simulations I can question instead of dozens of moving parts to keep in my head.

Canonical: https://firaskafri.com/writing/finspec/
Author: Firas Kafri (https://firaskafri.com/about/)
Published: 2026-07-04T00:00:00.000Z
Language: en
Relative links resolve against the canonical URL above.

Following macro gets tiring. There's always another number to check: inflation, interest rates, unemployment, bond yields, the dollar, oil. Then a CPI release lands, or a central bank makes an announcement, or a conflict changes the outlook for energy, and you have to work through what that means for everything else.

Reading each number isn't usually the hard part. Keeping the relationships straight is.

A cooler inflation report might change expectations for interest rates. That feeds into yields and currencies, which matter for gold and equities. Meanwhile, an oil supply shock can push prices in the other direction. You can understand each of those ideas individually and still find it exhausting to hold all of them together.

That's why I built [FinSpec](/finspec/). I wanted somewhere to put those relationships so I didn't have to keep rebuilding them in my head every time something happened.

I'm not a financial specialist. I built this because I wanted to understand these things better myself, and reading more wasn't solving the problem of keeping them all connected.

## How the model fits together

FinSpec is an educational financial-market simulator. You can change an input, hold a variable at a value you've chosen, or apply a scenario and see how the model responds. Rates, inflation, oil, gold, currencies, and equities sit in the same workspace rather than in separate bits of reading you have to connect yourself.

Underneath, it's a network of relationships. Each connection says what one variable tends to do to another, and how strongly it does so within the model. The same rules are used throughout the simulation; each card isn't doing its own separate calculation.

Take an increase in oil prices. In the model:

- More expensive energy pushes inflation up and puts pressure on growth.
- With automatic policy enabled, higher inflation pushes the simplified central-bank response toward higher rates, while weaker growth pushes back.
- If rates rise, they weigh on borrowing and demand, which feeds back into inflation. They also affect bond yields and the dollar, with further effects elsewhere in the model.

Those effects can reinforce or offset one another. FinSpec recalculates the connected system repeatedly until the values settle under the chosen assumptions. That settling is a calculation, not a claim about how quickly markets will adjust.

That's what I mean by a coherent model: the results have to fit together under one set of rules. It doesn't mean those rules capture everything the real economy does.

You can hold interest rates steady and try the oil change again, then compare that with letting the automatic policy response operate. It gives you a practical way to ask what difference that response makes, rather than trying to work through every connection in your head.

There are scenarios for things like an energy embargo, a banking crisis, and a trade war. These are simplified experiments, not attempts to reproduce every detail of an actual event. They're useful for asking what happens when several pressures arrive together, instead of treating every headline as if it acts alone.

The explanations matter as much as the controls. You can open a metric's “Why?” panel to inspect its modeled drivers, references, and historical examples. If a result seems odd, I want the reasoning to be available to question.

## The mental load was the point

I didn't want another dashboard that gives me more things to watch.

There are already plenty of places to find a CPI number, a jobs report, or the latest policy rate. What I wanted help with was the work after reading them: remembering what connects to what, following the competing effects, and revisiting an assumption without starting the whole exercise over.

FinSpec puts a simplified version of that work on screen. I can change something, look at the consequences, and check the explanation. I still have to think, but I don't have to carry every connection in working memory while I do it.

That's the most important part of the project for me. The simulation is a way to make macro less mentally heavy, and to learn by trying things rather than only reading about them.

## What the numbers don't tell you

The connections have written explanations and supporting references. Those help explain why a relationship is included; they don't prove the strength assigned to it is right. The strengths are hand-tuned, not estimated from a validated forecasting model.

I can build a system that follows its own rules and still leave out something important, or make an assumption a specialist would disagree with. I'd rather make those assumptions visible than ask anyone to trust a number because it came out of a simulator.

Real markets also don't work on one clock. Some responses happen quickly, others take months, and expectations can move prices before an event happens. FinSpec's illustrative lags aren't a schedule, and using available observations as a starting point doesn't turn its results into forecasts.

So I use the simulator to explore questions, not to get trading instructions. It is for education and simulation, not financial advice. It can't tell me where gold will trade next month or what a central bank will decide at its next meeting.

If it helps me understand why two forces might pull in opposite directions, or notice an assumption I'd otherwise gloss over, it's doing something useful. And if I can finish that exercise without having to juggle dozens of indicators in my head, that's what I built it for.

[Try a scenario in FinSpec](/finspec/).
