Loading…
The Engineering Story Behind Flex Comp
2023-10-18
- Source
- Shopify
- Published
- Added to Yomu
Summary
Shopify’s Flex Comp lets employees allocate total rewards among base salary, Restricted Stock Units (RSUs), and Stock Options, with allocation changes during windows and no one-year equity cliffs. Building the system required a prioritized backlog, cross-functional teams, early API contracts, and privacy controls around its code and data. For sensitive analytics events, the team encrypted entire Kafka payloads with RSA, using 4096-bit keys for ordinary events and 6144-bit keys for larger payloads, while later identifying hybrid encryption as a better design. On the frontend, typed hooks, mocked data, and artificial delays allowed business logic and interface work to proceed in parallel while contracts evolved. Version one shipped to Shopify’s employees, with documented technical and design debt and future decisions retained for subsequent iterations.
Context
Shopify wanted to turn a product-thinking approach inward by building a new compensation system quickly, while coordinating pay periods and allocation windows and protecting sensitive compensation data. The project was novel and required development teams to manage changing requirements, privacy concerns, and an ambitious delivery timeline.
Approach / What changed
The team used a prioritized backlog, dedicated front-end and back-end contributors, early API contracts, tightly scoped GitHub permissions, encrypted Kafka event payloads, and typed frontend hooks with mocks. These practices enabled parallel development, controlled access to sensitive code and data, and preserved context about technical debt and future decisions for later iterations.
Takeaways
- Flex Comp allows employees to divide total rewards among base salary, RSUs, and Stock Options, change allocations during designated windows, and avoid one-year equity cliffs.
- The team used 4096-bit RSA for most encrypted Kafka payloads and 6144-bit RSA for larger payloads, but concluded that hybrid symmetric and asymmetric encryption would better handle large events.
- Early API contracts, typed hook return values, and mock implementations let frontend and backend work proceed independently and enabled artificial-delay testing of different page conditions.