← Back to portfolio

Featured project

Planning Poker — internal collaboration tool

At a glance: 0-to-1 internal product: WebSocket realtime, Jira integration, .NET services, React UI — adopted across all verticals.

Real-time estimation platform for distributed delivery teams at Forvis Mazars, integrated with Jira for viewing stories and updating estimates. Replaced manual estimation coordination with a single internal workflow that improved session consistency and reduced meeting friction.

Internal tool — no public demo or repo

Problem

Distributed delivery teams at Forvis Mazars were coordinating estimation sessions manually — scattered links, inconsistent session state, and friction that slowed planning meetings. Stories already lived in Jira, but estimation sessions had no shared workflow for viewing those stories, running planning poker in real time, and writing estimates back.

Users

Software delivery teams across all Forvis Mazars verticals — scrum masters, engineers, and product partners running distributed estimation sessions. After launch, every software team adopted the tool as the standard for real-time planning poker.

Tech stack

ReactTypeScript.NETWebSocketJira APIAzure

Jira integration

The tool integrates directly with Jira so teams can pull stories into an estimation session, review context in one place, and push updated information — including estimates — back to Jira when a round completes. That kept planning poker inside the workflow teams already used instead of copying story details between tools.

Architecture

React/TypeScript clients connect to a .NET backend over WebSockets for live session state. REST endpoints handle session setup, Jira story fetch/update, and persistence; the WebSocket hub broadcasts vote reveals, participant joins, and round transitions to every connected client in a room.

React clientsTypeScript UI
.NET API + WebSocket hubSession orchestration
Session state
Jira API
Azure hosting
flowchart TB
  clients[React clients] -->|"WebSocket + REST"| api[".NET API + WebSocket hub"]
  api --> state[Session state]
  api --> jira[Jira API]
  api --> azure[Azure hosting]

What I owned

  • Solo 0-to-1 delivery: frontend, backend services, WebSocket infrastructure, and Azure deployment.
  • Session and room model — creating rooms, joining participants, and managing round lifecycle.
  • Jira integration — loading stories into sessions and writing estimates and updates back to Jira after rounds complete.
  • Integration with existing internal infrastructure so other teams could adopt the tool without bespoke setup per vertical.

WebSocket / realtime design

Each estimation session maps to a room with a persistent connection per participant. Vote submissions stay local until a facilitator reveals — at which point the hub broadcasts the round result to every client simultaneously. Connection lifecycle handling covers reconnects and late joiners so distributed teams stay in sync without manual refresh.

Adoption

After launch, Planning Poker was adopted by every software team across all verticals — replacing the manual coordination workflow that preceded it. The tool became the default for distributed estimation sessions company-wide.

What I learned

Internal tooling rewards the same discipline as customer-facing products: clear contracts, observable deployments, and rollout planning across teams. Realtime sessions surface edge cases fast — reconnect handling and consistent state across participants mattered more than UI polish. Shipping something small that every team actually used beat a larger feature set nobody adopted.