Decisions worth keeping.

A connected notebook on software architecture, DevOps platforms and geospatial data systems. Start with a question, follow a decision, then inspect the public evidence.

These notes distil published project work. The lessons are engineering interpretations; the linked sources provide the context and the limits. Institutional work belongs to its teams and does not imply endorsement.

GeoServer JMS clustering

Read the project case study

Configuration replication is not data replication

The JMS module distributes catalog and configuration changes. Spatial datasets need a separate sharing or synchronization strategy; a healthy broker alone cannot establish that every node reads the same data.

Choice and tradeoff

Design the configuration path and the dataset path as separate operational contracts. When investigating a stale layer, first distinguish a catalog mismatch from a changed or unavailable source.

Lesson: Name what is replicated before describing a system as clustered.

Public sources

Back to the knowledge index

CKAN JSON Schema extension

Read the project case study

A valid record is not yet a searchable record

The public extension documents input validation, metadata views and custom Solr indexing. These are connected capabilities with different responsibilities: a schema describes accepted metadata, while an index decides how it can be searched.

Choice and tradeoff

Review validation rules and search field mappings together. A schema change can be valid at the record boundary yet require an explicit indexing change before users can find the new information.

Lesson: Treat search as a representation of metadata with its own contract.

Public sources

Back to the knowledge index

DynaStore DuckDB case study

Read the project case study

Choose ingestion by ownership, not by habit

The published file-backed example reads supported geospatial files through DuckDB rather than first copying their rows into a durable database. The source file remains the reference; an optional search projection serves another purpose.

Choice and tradeoff

Use ingestion when the platform owns transactional writes and the dataset lifecycle. Use a read-in-place path when an existing file is the trusted source, while accounting for its availability and query costs. The documented file driver is read-only by default, not a transactional store.

Lesson: Storage routing should express the operation you need, not imply every dataset must be copied.

Public sources

Back to the knowledge index

GeoID persistent identifier design

Read the project case study

Let identity survive a change of storage

The public GeoID design separates stable resource identity from the location to which it resolves. A storage migration or catalog reorganization should not force downstream references to adopt a new identifier.

Choice and tradeoff

Give resolution and lifecycle history an explicit boundary. In the Tellurion discovery workflow, carry the collection, item and asset identities into preview instead of replacing them with an anonymous layer title.

Lesson: A useful identity contract remains understandable after the implementation underneath it changes.

Public sources

Back to the knowledge index

Tellurion STAC-to-map validation

Read the project case study

Keep discovery separate from execution

In the documented WorldCover workflow, browsing STAC results did not register or fetch their assets. Preview was an explicit transition that revalidated the selected descriptor and registered one temporary source.

Choice and tradeoff

Treat catalog metadata as input from another trust domain. Make the transition from discovering a resource to executing work visible, bounded and inspectable; do not let selecting another result silently replace an active source.

Lesson: A read-only catalog interaction should not conceal a costly or state-changing action.

Public sources

Back to the knowledge index

Tellurion WorldCover COG validation

Read the project case study

Verify pixels with an explicit independent contract

The field note reports exact RGBA agreement for five selected tiles against an independent oracle. A broader warp initially disagreed at lower zoom because it exercised a different sampling operation.

Choice and tradeoff

Fix the selected image level, pixel-centre mapping, source-coordinate rounding, palette and nodata rules before comparing outputs. Agreement matters only when the two paths are intended to compute the same result. This evidence is limited to one WorldCover object and the tested palette path.

Lesson: A plausible screenshot is an observation; an explicit pixel comparison is a reproducible correctness check.

Public sources

Back to the knowledge index

Tellurion COG delivery observations

Read the project case study

Measure the path you actually exercised

The WorldCover field note separates driver metadata reads from the registration probe. Repeating the measured tile did not reduce range requests or returned bytes, so that observation cannot support a warm-cache improvement claim.

Choice and tradeoff

Record the measurement boundary, workload and repeat behavior. Keep pixel correctness, request counts, latency and capacity as separate questions. A temporary hosted demonstration or a local smoke-scale measurement is insufficient evidence of a production service-level agreement.

Lesson: Include the limits in the result so another engineer can tell what remains untested.

Public sources

Back to the knowledge index