Putting every sale on the right house: the mapping engine behind an Australian property platform

Client
Homiee (homiee.au)
Sector
Property technology, Australia
Engagement
Full platform build — architecture, data engineering, deployments, CI/CD, team leadership
Duration
Nov 2023 – Sep 2025
Role
DevOps Engineer, promoted to CTO & Engineering Lead
  • 95%

    of addresses placed on the right building automatically — so every sale shows on the correct house

  • 18

    people led — 11 developers, 3 designers, 2 scraping engineers, 2 data-pipeline engineers

  • 15M

    addresses and 2.7M sales records served from MongoDB

  • ≤500 ms

    worst-case API latency across those collections

Context

Homiee is an Australian real estate platform whose core feature is a map that shows the sales history of every individual building — not just the suburb or the street. I joined as its DevOps engineer and was promoted to CTO and engineering lead, owning architecture, hiring, roadmap, deployments and security.

Problem

Australia's national address file gives every address a point, not a building. To colour each building on the map by when it last sold, every address point had to be resolved to the correct building footprint — including apartments that share one building, buildings split across map tiles, and points that land in a garden or on the street rather than inside a roof outline. A wrong match puts one property's sale history on a neighbour's house.

Constraints

National scale, built by hand without AI tooling in 2024. Correctness mattered more than coverage: a skipped address is a gap, a wrong match is misinformation shown to buyers.

What I did

  1. Street-geometry pre-pass. Before any geocoding, each address was checked against its street's name and shape, where its coordinates landed, and how the neighbouring addresses sat. Only the addresses this left uncertain went on to the verification cascade — which is what lifted the match rate from 92% to 95%.
  2. Geometry acquisition. For each address, decode the building layer from zoom-18 vector tiles covering the point and its eight neighbouring tiles, with a per-tile disk cache so dense suburbs don't refetch the same tiles.
  3. Tile-boundary stitching. Buildings cut in half by tile edges were merged back together by shared feature ID into single multi-polygons, and anything more than 200 m from the address was discarded.
  4. A verification cascade instead of "nearest wins". Point-in-polygon first. If the point falls outside every footprint, rank the five nearest buildings by distance to their edges, reverse-geocode each candidate, and fuzzy-match its street address — accepting only above 0.98 similarity. Anything below that is skipped and logged with a reason, never guessed.
  5. Multi-part buildings. A graph traversal over footprints that cross or overlap assembles complex buildings from their parts, memoised so each building is solved once.
  6. Apartments. Sub-addresses sharing a street number and name resolve to one footprint.
  7. Throughput. Addresses processed in 50-record chunks across a worker farm using every CPU core but one, with unordered bulk inserts into MongoDB so one bad record never stalls a batch. The national run of 15 million addresses finished in 30 hours on a single workstation (12th-gen Core i9, 64 GB RAM).
  8. Map API. A precomputed map collection groups every suburb's buildings by sale status, resolving buildings that hold several properties by a fixed status priority so each building gets exactly one colour. Each suburb's layer is cached in Redis and refreshed when its data changes; geospatial queries serve nearby listings; address search runs on a text index with a month-long cache. Against 15 million addresses and 2.7 million sales in MongoDB, worst-case API latency stayed at 300–500 ms.

Result

95% of addresses resolved to their exact building footprint — 92% from the verification cascade alone, 95% with the street-geometry pre-pass in front of it. Everything in scope was built and delivered: the building-level sales map, the agent portal, paid listing products, Stripe checkout and subscriptions with free trials, and agency onboarding with ABN/ACN business-register lookups and listing approvals. Launch timing was a business decision taken after my tenure; the platform has since launched.

Stack

  • Node.js
  • Next.js
  • MERN
  • MongoDB
  • Python
  • Mapbox vector tiles
  • Turf.js
  • Amazon EC2
  • Stripe
Other case studyDesigning and building a compliance-grade observability and audit system for a fintech, as its lead engineerRead the case study

Start with a $500 audit.

See exactly where you stand. Actionable findings in a week.

The full report and debrief call. Delivery in 5–7 business days.