← Work indexoperating

Case study · 2026

Ticket Pointing

Real-time planning poker built for teams that need to decide together, not merely collect votes.

Try Ticket Pointing ↗
Role
Product designer and full-stack engineer
Outcome
A public collaborative estimation product with a Go primary backend, Node.js fallback, and shared contract tests.
Capabilities
Product engineering · Real-time systems · Production operations
Stack
React · TypeScript · Go · PostgreSQL · WebSockets

Case record

The problem

Estimation meetings lose momentum when the tool gets in the way. The product needed to support anonymous participation, facilitator controls, private rooms, reconnecting clients, and a reveal that stayed synchronized for everyone.

The constraints

  • Real-time state had to survive ordinary browser reconnects.
  • The production backend could change without forcing a client rewrite.
  • Anonymous rooms still needed clear ownership and abuse boundaries.
  • The system had to remain understandable enough to operate on a small server.

Pivotal decisions

The browser speaks one stable event protocol while two backend implementations remain contract-compatible. Go serves production traffic; Node.js remains a health-checked fallback. Backend-independent contract tests make the failover path something that can be exercised rather than merely described.

Connection handling treats short disconnects as expected behavior. A grace period prevents a stale disconnect event from erasing a participant who has already reconnected, while session tokens preserve identity across refreshes and renames.

What it demonstrates

This project is the most direct expression of the workshop: a recognizable problem, a product people can use immediately, and operational details that remain invisible until they are needed.