Selected works
Lead Product Designer

Exploring data in every context

Turning crop production and crop performance data into spatial understanding, explorable from national food security policy down to individual field conditions

Design process
I · Frame Spot the fragmentation
II · Define Shape of data + criteria
III · Design V1 ships, then breaks
IV · Iterate Re-render at field scale
V · Scale One pattern, every context
M · 01 The fragmentation Crop data scattered across ministries, formats, timescales. No spatial picture, no shared view.
M · 02 Shape of data Mapped the analytical requirements — behaviours, frequencies, information volumes — before designing anything.
M · 03 Success criteria Benchmarks set against current state: time to gather, time to analyse, confidence in output.
M · 04 V1 ships Provincial block colours. Clean from national view. But averaging hid the failing maize underneath.
M · 05 Epistemically dangerous A province that's 80% performing reads "mostly fine". Averaging is the wrong abstraction.
M · 06 V2 tiles Sentinel-2 native 10m resolution rendered directly. Every field shows its own signal, no smoothing.
M · 07 Five contexts, one pattern Crop Production, Fertiliser, Water Stress, Crop Health, Soil Exposure — same framework, different surfaces.
M · 08 5 months → 2 Pattern became its own multiplier. First context took five months; the fourth took two.
At a glance

5 monitoring contexts shipped on the same pattern

Crop Production, Fertiliser Subsidy, Water Stress, Crop Health, and Soil Exposure, each a distinct surface, all driven by the same spatial layer, navigation, and drill-down model.

From 5 months to 2 months per new context

First context (Crop Production) took five months from design to ship. By the fourth, the pattern was stable enough to ship a new context in two, the system became its own multiplier.

Used across 3 country governments · ~8 sessions/day

Active in production with food security advisors and ministry analysts across three governments, averaging eight monitoring sessions per day.

The problem

A country's food system consists of many variables

Food security is the outcome of many conditions, tracked separately, by different teams, across different timescales, with no shared view.

The key variables:

  • Crop production & performance
  • Weather & rainfall
  • Soil quality
  • Input subsidies & seed quality
  • Water stress
  • Crop health
  • Infrastructure
  • Population & food consumption

Countries can access some of this data, through various ministries and regional offices. What didn't exist was a way to see all of it in the same place.

The result was that decisions were made on guesswork. Officials requested data from regional offices, waited weeks for responses, received inconsistent formats, and manually reconciled everything into a picture already out of date. No one could see how drought in one region connected to food security risk in another. The numbers existed, but they couldn't be read together.

Agricultural system, the interconnected data layers, from atmosphere and weather down to groundwater and bedrock
I
User Goal I As a food security advisor
I need a clear, actionable picture of the food system status and intervention options

So that decision-makers can act on a reliable, current picture of food security, knowing which regions are at risk, which indicators are deteriorating, and what the intervention window is. Without this, decision-making is reactive: action only follows after a crisis has already materialised.

From Agriculture Intelligence, Visual Explorer is the surface that responds to this goal.

Shape of data

Understanding what the analysis actually demands

Before designing anything, we mapped the analytical requirements, the behaviours, frequencies, and information volumes that the system had to support for a user like Mayeso.

An analyst spends weeks gathering and reconciling data, then has days — not weeks — to act on it. Six numbers capture the cost of that gap, and what the system had to compress.

6 wks
Time spent looking for data, typically
3 wks min · ∞ max
2 wks
Time analysing the data once gathered
5 days min · 1 month max
Bi-weekly
How fresh the crop data needs to be
weekly min · real-time max
5 yrs
Years of historical data needed to spot trends
3 yrs min · 20 yrs max
5
Key crops to track across the country
1 min · 50 max
All
Regional levels to drill into for decisions
national · provincial · district · ward · field
Design for scale

How do you build a pattern that replicates?

Each monitoring context had its own question, its own visualisation, and its own level of detail depending on who was looking at it. Building for one context first would have locked the system into a shape that didn't extend. The goal was a replicable framework, something that works for crop production and works equally for water stress, crop health, and any context added later.

The data has to move across four dimensions at once. Build for one and the system locks in. Build for all four and the surface becomes legible at every scale.

01
Multiple contexts

Crop production, water stress, fertiliser, health — each with a different question, visualisation, and audience.

02
Administrative depth

The same signal reads differently at national, district, and field level — resource allocation vs deployment vs irrigation.

03
History

Every context has a temporal axis — week-over-week, season-over-season. Static views can't hold it.

04
Within-context depth

Aggregate signal, per-crop breakdown, field-level anomalies — the hierarchy doesn't stop at the administrative boundary.

We explored four ways to structure the two primary axes — contexts and administrative levels. Approach D won because it kept the country itself as the constant: contexts switch as overlays on top, so the user never loses the geographic frame.

Approach A, Contexts as columns, levels as rows
Visual Explorer
Crop Prod.
Water Stress
Crop Health
+more
National
Provincial
District
Field
All combinations visible simultaneously. Any context, any level, immediately comparable across the full surface.
Approach B, Context sidebar, level toggle
Visual Explorer
Crop Prod.
Water Stress
Crop Health
Fertiliser
Pest Det.
Deforestation
Natl.
Prov.
Dist.
Field
One context at a time. Sidebar for context selection; tab strip to switch administrative level within the detail view.
Approach C, Administrative level as primary tab
Visual Explorer
National
Provincial
District
Field
Crop
Water
Health
Fert.
Pest
+more
Enter at your level, national, district, farm. Contexts appear as a secondary selection within that level.
Chosen
Approach D, Map as primary canvas
Visual Explorer
Map
Crop Prod.
Water Stress
Crop Health
The map is the entry point. Context selected via overlay panel; administrative level changes through zoom or a layer control.
Approach

One framework, every context

Each context — production, subsidy, water stress, crop health — answers a different domain question, but the design framework is the same. Three decisions, repeated for every context the platform supports.

01
What are users actually asking?

Every context starts with the question being answered — what is a ministry official, district analyst, or extension worker trying to decide right now? — not with what data we happen to have.

02
What needs to show at each tier?

The same signal reads differently at national, district, and field level. Each tier needs its own threshold for what to surface.

03
What visualization makes the answer obvious?

Gradient tiles, masks, comparative views — picked from the question, not from the data type.

Crop production

Context 1: Crop production & performance

Production is the credibility layer. If an analyst can load a map and see — at ward level, validated from space, without a data request — the same numbers their team spent two weeks assembling manually, they start to trust the system. That trust is what makes every other context usable. So the questions here are foundational, and the answers have to be unambiguous.

The questions users ask
What an analyst needs to know about production
  • What is the dominant crop in each ward, and where is the country's agricultural land concentrated?
  • Year-on-year, is production rising or falling — by crop, by province?
  • Where is the crop underperforming the seasonal baseline, and by how much?
  • Which specific districts are pulling provincial averages down?
What the map answers
Signals surfaced at every tier
  • Crop distribution tile map by ward, classified from satellite imagery
  • Year-on-year production comparison overlay with provincial groupings
  • NDVI deviation against seasonal baseline rendered as a gradient at 10m
  • Yield-variance heat map drillable from national to field
→ Links to Projects
More detail — visualisation deep-dive coming
Fertiliser subsidy

Context 2: Fertiliser subsidy monitoring

Over nine years, Kenya spent approximately US$310 million per year on fertiliser subsidies. There is no conclusive evidence the programme improved crop production. The subsidy existed; the data did not. The question this context has to answer is the one decision-makers spent a decade unable to: did the money land where it was supposed to, and did it move the signal on the ground?

The questions users ask
What a programme officer needs to know about subsidies
  • Which provinces are entering this season under stress and should be prioritised for allocation?
  • Did the subsidised areas actually show a satellite response within two to three passes?
  • Which wards received vouchers but show no signal change — and why?
  • Is a flat response environmental (water stress) or programme failure (vouchers not redeemed)?
What the map answers
Signals surfaced at every tier
  • Subsidy distribution zones overlaid against pre-season Water Stress and Crop Health masks
  • Nutrient Deficiency mask, week-over-week, across subsidised areas
  • Anomaly flags for areas with vouchers but no NDVI shift after three passes
  • Cross-mask reconciliation separating subsidy failure from environmental constraint
→ Links to Projects
More detail — visualisation deep-dive coming
Satellite contexts

Context 3: The satellite-derived monitoring signals

Beyond government data, Visual Explorer holds a family of satellite-derived monitoring signals: Water Stress, Crop Health, Nutrient Deficiency, Canopy Structuring, Pest & Disease, Deforestation, Degrading Land, Soil Exposure. Eight contexts, one scaffolding. The design challenge wasn't which spectral indices to use — that's an agronomy decision. It was deciding which signals a ministry official can act on directly, and which need a data specialist to interpret. That distinction shapes what the map shows.

The questions users ask
What an officer needs to know about water stress
  • Where are crops moisture-limited right now, and at what severity?
  • Is this a single-pass anomaly or a persistent pattern across the last four satellite passes?
  • Is this area also showing crop health decline or nutrient deficiency?
  • How does this season's stress compare to the same period last year?
What the map answers
Signals surfaced at every tier
  • NDWI and MSI indices as a gradient tile map at 10m resolution
  • Stress intensity classified mild / moderate / severe per location
  • Pass-by-pass trend showing whether stress is consistent or sporadic
  • Historical season-over-season comparison overlay
→ Links to Projects
More detail — visualisation deep-dive coming
Visual evolution

From provincial averages to field-level signal

The first version of Visual Explorer worked at provincial level. It was the right call for where the engineering was. It was the wrong answer for what users needed. Drag the slider to see what changed.

V2, gradient tiles: 10m-resolution pixels rendered directly across the landscape
V1, provincial block colours: each region rendered as a single averaged colour
V1 · Block colours V2 · 10m tiles Drag to compare

V1 used regional block colours, each province assigned a single colour from its averaged index value. Clean to read from a distance. But averaging is epistemically dangerous in spatial data: a province that is 80% performing and 20% severely stressed reads as "mostly fine." The ward with the failing maize is invisible inside the provincial mean. The data existed, structured in a way that made the signal disappear.

V2 renders Sentinel-2's native 10m data directly through a pre-processed tile system, no aggregation step. Each tile reflects the actual ground-level signal for that specific location. A field under water stress shows as stressed regardless of the provincial average around it. The map is no longer a summary of the data — it is the data, distributed as it actually exists across the landscape.

The shift from V1 to V2 wasn't aesthetic, it changed what the system could be used for. Block colours work for national narrative. They are useless for any decision that requires knowing where within a region a problem is occurring. V2 tiles made Visual Explorer functional across the full hierarchy. An extension worker at field level and a minister at national level see the same data, rendered at the truth relevant to their scope, not a smoothed approximation of it.

Closing

The real shift

If you frame this as "we built a map for crop production," you undersell it.

Visual Explorer solved three problems in the crop production and performance context. First, it grounded abstract data in geography, users could finally see where things were happening, not just what was happening. Second, it enabled hierarchical exploration, users could move from national insights to field-level validation without switching tools or losing context. Third, it supported comparison, across regions, across time, and across levels of detail.

But more subtly, it did something else. It allowed users to build and test their own understanding. They could form a hypothesis at a high level, then zoom in to validate it. They could question the system and either confirm or challenge its outputs. That shifted the platform from a reporting tool to an analytical system.

And everything that came later, subsidies, stress detection, AI-generated insights, scenario planning, only worked because this foundation was in place. You cannot interrogate a system you don't trust. Visual Explorer built that trust. One scale at a time.

Against the benchmarks we set at the start, the shifts looked like this:

Time to gather data
2 wks 1 day
Time to analyse + recommend
3 days 1 day
Confidence in the data
1 / 5 5 / 5
Decision-maker confidence in recommendations
1 / 5 5 / 5
Ease of use
2 / 5 4 / 5
Analyses completed without external validation
2 / 5 4 / 5

"We created a system that allows users to move from uncertain data to informed judgement, across multiple levels of abstraction."

Reflection

Designing for scale

The temptation on a project like this is to stay where it's easy — design the surface, label the layers, ship the map. The harder work is going further down: understanding how a ministry officer in a capital actually thinks about a region, and how a programme worker on the ground actually thinks about a single field, and making the platform fluent in both. Information has to flow both ways — top down when policy is being shaped, bottom up when reality is being reported — and the interaction has to feel the same in either direction.

What I took from this work is that good design comes from grounding decisions in real data, not in what felt elegant in the moment. You learn what to surface and what to leave behind by watching how people who don't think like designers move through the product. Keep the patterns consistent, and the system stays usable long after you stop touching it.

Parent project Making sense of agriculture Next project Absorbing government data