You can keep a tide table. You cannot keep the tide.
That sentence decided the architecture of our entire platform.
There are two kinds of data inside a community association, and they behave nothing alike.
The first kind barely moves. Which units exist. Who owns them. Who sits on the board. Who works there. It changes when a house sells or a board gets elected.
We keep that one. Locally. Which is why search comes back in a blink instead of waiting politely on somebody else's server.
The second kind moves constantly, and it's the kind that gets associations sued.
Balances. Open violations. Work orders. Delinquencies. Statements.
We never keep those. Not for an hour. They're fetched live, from the accounting system, at the moment a document is generated.
A cached balance isn't a fast answer. It's a wrong one.Printed, certified, and legally binding on the association.
Now the part nobody demos.
Syncs run on demand, or overnight on a schedule that wakes from nothing, sweeps, and won't accidentally run twice.
Every run compares what we hold against what's actually there, then applies the additions, the edits and the quiet removals. Four communities at a time. One bad record can't take down the batch.
Progress streams live, per module — associations, units, owners, board members, employees — not a spinner and four minutes of faith.
And every run keeps a record. Counts of what succeeded, skipped and failed, a plain-English summary, and a de-duplicated log of exactly what broke and why.
Yes, there is a status called Partially Succeeded.
A two-thousand-unit sweep that trips over one bad record should say so out loud, finish the other 1,999, and tell you which one to fix.
Pretending otherwise has never helped anybody at four in the morning.
Cache or don't cache was never the question.
The question is what a wrong answer costs.Next: what all that syncing fills up — and why there's a whole screen for garden gates.