The problem
Florida’s legislature began floating ways to cut property taxes: about ten different bills, each with its own exemptions, caps, and phase-ins. The Property Appraiser, an elected official, needed to know what each one would actually do. Nobody in the office had a way to answer that. There was no model, no spreadsheet, nothing. He gave the job to me.
My role
I built it alone, from the data model to the dashboards. Where the law left room for interpretation, I worked out the business rules directly with the Property Appraiser.
How I built it
- Statute to code. I read each bill and turned its exemption and cap rules into SQL, parcel by parcel. Then I rolled the results up across every kind of taxing authority: county, city, school, and tax increment (TIF) districts.
- Forecasts. Each scenario projected assessed value, taxable value, and tax revenue through 2030.
- Dashboards anyone could use. Every scenario got its own tab, and everything was dynamic. Leadership could flip between proposals and drill down to a single parcel without asking me to rerun anything.
- Built to change. Over the months, the list went from ten ideas, to the ones that were actually possible, to the final proposal. The model changed every time new information came in.
The hardest call: an exemption with no data
One bill gave an exemption to homeowners who carried property insurance. We had no data on who had insurance. My first idea was to estimate it statistically. Instead, we chose the conservative route and assumed every homesteaded owner qualified. That gave leadership the largest possible impact, a ceiling, instead of a guess that could have come in low. The bill later died, but the habit stuck: when the data isn’t there, state the assumption plainly and lean toward the safe side.
Getting it right, then fast
Right: I checked totals against the official tax roll and hand-checked sample parcels. When the state later released its own estimates, mine lined up with them.
Fast: At first a lot of the math lived in Power BI calculated columns. As the model grew, that broke down, so I moved the logic into Oracle SQL views and tuned them. The math got faster and easier to check, and parcel-level accuracy held across every scenario.
Results
- Answers to a question the office had no way to answer before.
- Information local taxing authorities used to prepare for the proposals.
- In the final months before the vote on Florida’s Amendment 3 (2026), a way to see what different millage rates could do if it passed.
What I learned
- SQL views are the right home for modeling math. I’ll never put anything important in a Power BI calculated column again.
- Florida tax law, in detail. You can’t model a statute you don’t understand.
- AI as a second pair of eyes. I used ChatGPT to check my SQL and DAX. That was my first step toward building with AI, which I later took much further (see Resonance).
- Pick a conservative assumption, and say it out loud. When data is missing, a clearly stated upper bound is more useful than a hidden guess.