Refractions Research was a small British Columbia consultancy, about six people, whose early contracts came from provincial government managers who refused to use ESRI GIS software. That unusual client base pushed the firm deep into databases, and on a province-wide watershed atlas project the team stored chopped-up spatial data in PostgreSQL tables. The experience made the next idea obvious: if the database could do more with those stored geometries than put them in and take them out, they would have an interactive real-time spatial analysis engine.

Circa 2000, spatial databases meant Oracle 8i's Spatial Data Option, or the OpenGIS Simple Features for SQL specification, and little else. The spec described three ways to store geometry: shredded into side tables of coordinates, as binary large objects, or as a native geometry type. Ramsey first tried to sell Oracle spatial consulting to the BC government and found no takers. Testing the other options in PostgreSQL hit dead ends: side tables were far too slow to be usable, and BLOBs were faster but offered no way to index the geometry. The team nearly stopped.

Dave Blasby, the one developer who had formally studied computer science, read through PostgreSQL's source code and contrib section and said he could build a custom type. In a few days he did: a geometry type with a GiST spatial index which, hooked to the firm's Java map applet, sang — wonderfully quick even on very large tables. Since no commercial ecosystem for PostgreSQL extensions existed, Refractions decided the best business use of the code was to release it as open source and let it generate inbound customer traffic.

On May 31, 2001 the firm announced PostGIS 0.1 under the GPL: a geometry type, a spatial index, and an initial set of functions, with colleagues contributing a Shapefile loader, build files, and documentation. The open-source geospatial world had been waiting: Frank Warmerdam of GDAL and Daniel Morissette of MapServer appeared on the mailing list within the first month, and developers from the GeoTools and GeoServer ecosystems followed quickly.

Go below the documentation to write the native type the spec couldn't reach, then give the code away where clients gather

The spec's implementable designs were dead ends; the winning design, a native type, was only reachable by going below PostgreSQL's user documentation into its source code.

The Oracle consulting route had no buyers, while open source had visibly starved demand: no free spatial database existed for the fast-growing open GIS stack.

With no commercial ecosystem for PostgreSQL extensions, a license sale was impossible; open source was the only distribution channel, and authorship made Refractions the obvious experts to hire.

Releasing early as 0.1 onto a public mailing list let GDAL, MapServer, and Java geospatial leaders adopt within weeks, compounding credibility faster than any advertising could.

The consultancy stayed intact as the revenue engine while the free code acted as the funnel, so the giveaway funded the very work it advertised.

When every documented approach fails, go one level below the documentation; and when the thing you built can't be sold, give it away in the place where buyers for your real work already gather.

PostGIS grew into the spatial engine of the open-source GIS stack, with GDAL, MapServer, and Java geospatial projects integrating within weeks of the 2001 release. Blasby maintained it for its first years; Ramsey left the firm in 2008 to work on PostGIS full time, now at Crunchy Data. On its twentieth anniversary it drew 302 Hacker News points; commenters called PostGIS essentially the industry standard, said even Esri's Portland R&D center used it, and recalled visiting Refractions in Victoria for advice after adopting it — the inbound traffic the release was designed to create.

FOLLOW THE EVIDENCE

The sources

  1. PostGIS at 20, The Beginning blog.cleverelephant.ca
  2. [postgis] Initial Release of PostGIS lists.osgeo.org
  3. PostGIS at 20, the Beginning (Hacker News discussion) news.ycombinator.com