Maya, thank you for sharing the failed startup story. That kind of vulnerability helps all of us learn.
The Team Context Point Is Critical
Your decision framework - REST for production, GraphQL for internal tools - makes perfect sense for an 8-person team.
At different team sizes, different trade-offs:
5-15 engineers: Keep it simple. REST, familiar stack, boring technology. Ship fast.
15-50 engineers: Can start specializing. Platform team can own GraphQL infra. Product teams benefit from flexibility.
50+ engineers: Multiple API styles make sense. Different teams, different needs, different expertise.
We’re at 25 engineers scaling to 80+. The question I’m wrestling with: When do we have enough bandwidth to support GraphQL for some use cases?
Currently all REST. But our mobile team (like David mentioned) really wants GraphQL for the reasons you listed.
The Hiring and Onboarding Lens
Your contractor story highlights something we track closely: time to first commit for new hires.
With familiar tech (REST, PostgreSQL, React):
- New hires productive in 1-2 weeks
- Can hire from broader talent pool
- Less specialized knowledge required
With specialized tech (GraphQL, CQRS, event sourcing):
- 3-4 weeks to productivity
- Narrower hiring pool (or train them)
- More documentation and mentorship needed
At our stage, time to productivity matters enormously. We’re doubling the team - that’s ~40 new engineers to onboard this year.
Question: How did your 8-person team handle knowledge transfer? Bus factor with GraphQL expertise concentrated in one person seems risky.
The Design System Connection
Your point about API design affecting component architecture is something I don’t see discussed enough in engineering leadership circles.
We’re building a design system for our EdTech platform. The questions we’re grappling with:
- Should components handle their own data fetching? Or stay pure and presentational?
- How do we make components reusable across different data sources?
- What’s the contract between design and engineering on data requirements?
The API architecture choice (REST vs GraphQL) directly impacts these decisions.
With REST and container/presentational split:
- Design system stays pure and portable
- But more boilerplate in app code
- Clearer boundaries between concerns
With GraphQL co-located queries:
- Less boilerplate, faster iteration
- But components coupled to GraphQL
- Harder to reuse in different contexts
For a design system team, which approach do you recommend? Pure components, or co-located data?
The Maturity Progression
What I’m taking from this entire thread series (tRPC, database choices, CQRS, API versioning, GraphQL):
Technology choices should match organizational maturity:
Early stage (Product-market fit):
- Simple stack
- Fast iteration
- Technical debt okay
Growth stage (Scaling):
- Can add complexity where it delivers clear value
- Invest in platform/infra
- Strategic technology choices
Mature stage (Optimization):
- Multiple technologies for different use cases
- Strong governance and standards
- Operational excellence focus
We’re transitioning from early to growth stage. These discussions help me understand what complexity is worth adding when.
Thank you for the honest, pragmatic take. More of this, less hype!