The spreadsheets could not handle building costs or recurring payments. The key was the database design: store each fact once, and calculate the rest when it is read.
Building costs: stored once, shared on read
The obvious design: copy the cost into every flat of the building.
every change has to be repeated in every copy;
if one update fails, the flats no longer add up;
deleting the cost can leave orphan copies behind.
My design: one row, on the building.
One owner per row: a transaction belongs to a building or to a flat, never both, and the database enforces it;
Shared on read: when a flat is opened, it adds each building cost × its share of the building's value;
One fix, every flat: changing an amount or a share means editing one row;
Same rule for all: one-off, recurring and budgeted building costs are shared the same way.
Example: a €10,000 roof in a building with three flats
Recurring payments: store the rule, not every payment
The obvious design: a scheduled job creates one row per payment. A single monthly payment becomes 60 rows in five years, plus flags for the edited or unpaid ones.
My design: one row with the rule.
The rule: the amount, how often, and the start and end dates;
Dates are calculated: the start date plus n times the interval, so no job has to create them;
The date is the key: only the exceptions are stored, keyed by their date (a different amount, an invoice or a note); 0 means unpaid, so no status flags;
A cached difference: total spent = amount × payments so far + the sum of the exceptions;
Sold flats: the count stops on the day of the sale.
Example: €800 a month since January
Renovation budgets: the budget and its payments in one row
One row per renovation: the budget and the list of partial payments, each with its date, amount and invoice.
Real cost: what has been paid, never the budget.
Projection: the larger of the budget and what has been paid, so an overrun is never hidden.
Still to pay: the rest of the budget, which goes into the cash forecast.
Example: a €60,000 renovation with two payments
Checked by tests
199 tests: on the calculations, because a wrong number becomes a wrong decision.
Analytics across the portfolio
The portfolio at a glance
Key figures: total invested, total profit, and the average ROI and annual return.
Rankings: the best and worst flats by annual return, monthly profit, total profit, speed of the works and time to sell.
Good or bad investment: a target annual return splits the sold flats in two, and moving it re-sorts them.
Key figures, rankings, and good and bad investments by a target return.
A whole building, or separate flats?
The rule: once a company owns more than four flats, the transfer tax rises from 10 to 20%.
The question: is it better to buy a whole building, or up to four separate flats?
The answer: a simulator compares both, using the results of the flats already sold.
The "Gran Tenedor" simulator: a whole building at 20% transfer tax against up to four flats at 10%.
Testing hypotheses
Two questions, answered with regression:
does a bigger renovation mean a better return?
does the purchase price per m² explain the return?
An honest answer: each chart shows the trend line, its R² and whether the hypothesis holds, for ROI, annual return or net profit.
An obvious limit: there is little data. With so few sold flats, a trend is a hint, not proof.
Does a bigger renovation pay off? Each chart says whether the hypothesis holds.
Measured against the best flats
A benchmark: the best sold flats, by annual return, ROI or profit, set the reference.
Deadlines: each flat in works is compared with it, phase by phase: before the works, the works, and until the sale.
Target price: the price each flat needs to match the benchmark, which rises with every month that passes.
The best flats set the bar: deadlines and target prices for the rest.
Flats side by side
Metric by metric: the best value is shown in green and the worst in red.
Four flats side by side, from purchase to return.
Architects
Per architect:
renovation cost per m² and how long the works take;
ROI and annual return of their flats;
effectiveness: points of return for every €1,000/m² spent on works;
extras and fees.
Which architect gets the most out of each euro of renovation.
Renovations
Cost per m²: every renovation next to the average, with its return and its effectiveness.
Cheap, medium or expensive: renovations grouped by cost per m², to see which group returns more.
Where the money goes: the cost of each renovation broken down by type of work, fees and permits.
More cost, more return?: cost per m² against return, against the length of the works and against the time to sell.
Which renovations pay off: cost per m², tiers and breakdown by type of work.
Cheap flats, expensive flats and building flats
Three groups: flats in a whole building, expensive flats and cheap flats, with the line between the last two set by a price.
Compared: average investment, annual return and profit per month for each group, and how their cost is made up.
Moving the price threshold re-sorts the flats, and every average updates.
Before buying
Every offer, fully costed
The full cost of the deal:
transfer tax and notary;
agency fees;
renovation, architect and permits.
Minimum sale price: the lowest price that still reaches the target margin.
Exact, not estimated: the commission, the VAT and the taxes depend on the sale price itself, and the formula takes that into account.
A feasibility study: three offers for the same flat, and what each one needs to sell for.
How long can the sale take?
A heatmap: sale price against months to sell, with the annual return of every combination.
Sale price × months to sell: the annual return of every combination.
Whole buildings
Unit by unit:
current rents and contracts;
what each flat would sell for after the works;
what the building as a whole would earn.
Reports to share
Feasibility studies: exported as a consulting-style PDF.
Flats and buildings: each one has its own PDF and Excel reports.
The PDF report of a building study, page by page.
Until the sale
Every cost in its place
Every cost counted: one-off payments, renovations, recurring payments and the flat's share of the building.
Real return: every flat gets its ROI, annual return, and profit per month and per square metre.
Lower the price, or wait?
For a flat on sale: five sale prices against five dates, with the annual return of each.
A flat for sale: annual return by sale price and date.
Control the cash
Renovations are paid in instalments and sales close months later, so the cash has to be planned ahead.
Everything in one view
What is coming:
what is still to be paid on every flat;
the company costs;
the planned payments and income.
Cash needed: projected over the coming months.
Year-end alert: it watches how much of the balance sheet is real estate, and warns before the year-end close.
Upcoming payments, and the cash needed one month and twelve months ahead.
The recordings come from the real app running on my machine, with made-up data: an invented company, flats and figures.