Skip to content
Back to Work
004

Cactus

Event Ingestion and Growth Analytics Platform

Role

Software Engineer

Duration

2025 – Present

Team

Engineering Team

Status

Active

Private Repo

Overview

The growth team was making decisions on intuition because the data was too slow to argue with. Event data scattered across four tools. A/B tests analyzed in spreadsheets days after the experiment ended. Marketing campaigns managed through separate codebases with no shared state. I built the event pipeline, the analytics dashboards, and the experimentation infrastructure that gave the team a single, real-time view of user behavior. Events process in under a second. Dashboard queries that took 12 seconds now take 200 milliseconds. The team stopped debating what happened and started debating what to do about it.

Problem

Growth teams operate on feedback loops. The tighter the loop, the faster they learn. This team's loop was broken. User events lived in one tool. Conversion data in another. Marketing campaign results in a third. Running an A/B test meant exporting data, joining it manually in a spreadsheet, and hoping the sample size was large enough to mean anything. By the time the analysis was done, the product had already changed. Marketing integrations — email, ads, CRM — each had their own codebase, their own auth patterns, their own failure modes. No one had a unified picture of what users were doing or why.

Approach

  • 01Built a three-stage event pipeline: capture via lightweight SDK, enrichment with session metadata and geo/device context, dual-write to PostgreSQL (historical analysis) and Redis (real-time dashboards)
  • 02Designed React dashboards with D3.js visualizations optimized for the specific questions growth teams ask: conversion funnels, retention cohorts, and experiment results. Each chart type chosen for the decision it supports, not the data it displays
  • 03Shipped A/B testing infrastructure end-to-end: experiment definition, deterministic variant assignment, and statistical significance calculation with guardrails against premature decisions
  • 04Abstracted SendGrid, Google Ads, and HubSpot behind a unified adapter interface. One integration pattern. Shared auth, rate limiting, and error handling. New marketing tools plug in without new architecture
  • 05Optimized analytics queries with materialized views — pre-computed the aggregations the growth team checks daily (DAU, funnel step counts, retention cohorts) on a 5-minute refresh cycle
  • 06Embedded with the growth team to prioritize features against their experimentation roadmap. Built what they would use this week, not what sounded good in a planning doc

Design Decisions

Technology Stack

Frontend

ReactTypeScriptD3.jsTailwind CSS

Backend

Node.jsPostgreSQLRedis

Data

Event PipelinesMaterialized ViewsAnalytics

Integrations

SendGridGoogle AdsHubSpotREST APIs

Impact

Latency

<1s

Event capture to dashboard display — real-time feedback for the growth team

Query Speed

60x

Dashboard queries dropped from 8–12s to <200ms with materialized views

Integration

1–2 days

Time to add a new third-party marketing tool — down from 1–2 weeks

Experiments

Shipped

Full A/B testing infrastructure with statistical significance guardrails

Next Case Study

Archv