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
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.
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.