We build modular systems owned by empowered streams who ship
small, safe, frequent changes that deliver customer outcomes.
We measure what matters. We own what we build. We learn from what breaks.
We translate vision into code — building the technical foundation for the 3D design community so creators, educators, and engineers can focus on creativity, not complexity.
A fragmented technical foundation that slows our ability to deliver value and makes change expensive.
Our Strategic Response
Consolidate around a modular, well-documented architecture with empowered teams who own outcomes end-to-end.
The Diagnosis · Four Observable Symptoms
Symptom
How It Manifests
Inconsistent Architecture
Multiple patterns across applications; difficult onboarding. No shared architectural contract.
Outdated Technology
Legacy systems hard to update, secure, or scale. Fragmentation makes modernization high-risk.
Slow Velocity
Features take longer than they should. Engineers spend cognitive load navigating inconsistency.
Quality Concerns
Insufficient testing; bugs escape to production. No unified quality bar.
The Bottleneck · Stocks & Flows
The bottleneck is not any single technology or team — it's the rate at which we can safely change the system. When change is expensive and risky, everything slows.
↓ Inflow · Grows the stock
Rushed features
Inconsistent patterns
Team churn
Skipped documentation
Stock · Accumulates
Technical Debt
Tribal knowledge Undocumented decisions
Outflow · Drains the stock ↑
Documentation
Refactoring
Knowledge sharing
Small, safe deploys
OutcomesMagic Wand · 2-year horizon
What Success Looks Like
If everything went perfectly over the next two years, what would be unmistakably different?
Efficient investment — every dollar traceable to impact.
Scalable foundation — new products build on the platform, not around it.
Decision FrameworkOrdered by priority · 1 outranks 6
Six Guiding Principles
Principles only matter when they're hard — when following them has a cost. Each names a real tension and declares which side we choose when forced to pick.
Ownership only works if teams can sustain the load.
06
Learning over Knowing
Continuous learning enables everything above.
1Customer Outcomes Over Internal Convenience
Tension: It's easier to optimize for our own workflows than for user experience.
Our stance: When internal convenience conflicts with customer value, customer value wins.
What This Looks Like
Kill features that don't serve users — even if we spent months building them.
Instrument user behavior, not just system health.
Talk to customers regularly — not just about customers.
Measure by user outcomes (learning velocity, time-to-value), not engineering output.
Anti-pattern: Building what's easy instead of what's needed. Celebrating launches instead of adoption.
When it bends: When serving customers requires unsustainable pace (see #5). Burnout doesn't serve customers long-term.
2Small, Safe, and Frequent Over Big and Risky
Tension: Large releases feel significant. Big launches carry big risk.
Our stance: Small, incremental changes deployed frequently. We make change safe by making it small.
What This Looks Like
Features ship behind feature flags, enabled incrementally.
Deploy to production daily (or more).
PRs small enough to review in one sitting.
Break large projects into shippable slices, not phases.
Celebrate learning from small experiments — not just big wins.
Anti-pattern: The "big bang" release. Branches that live for weeks. "We'll test it all at the end."
When it bends: Some changes (infra migrations, security patches) genuinely can't be sliced small — invest extra in testing, rollback, and blast-radius limits.
3Clarity Over Speed
Tension: Moving fast feels productive. Stopping to document feels like overhead.
Our stance: Slower with clarity beats faster with ambiguity. Confusion is more expensive than deliberation.
What This Looks Like
Write down decisions (ADRs) and share them.
Define "done" before starting, not after finishing.
Ownership boundaries are explicit and documented.
Ask clarifying questions even when it slows the meeting.
Say "I don't understand" without embarrassment.
Anti-pattern: Tribal knowledge. Hallway decisions that never get documented. Two teams accidentally building the same thing.
When it bends: In genuine emergencies (P1 incidents, security breaches) — act first, document after. Always come back to document.
4Ownership Over Delegation
Tension: It's tempting to push problems to other teams. Fragmented ownership creates fragmented accountability.
Our stance: Teams own outcomes end-to-end — from user need to production operation.
What This Looks Like
Stream-aligned teams own their entire domain — not just pieces.
The team that builds it runs it. No handoffs to "ops."
On-call rotation is within the owning team.
Fix the problem first, then discuss root cause.
Ownership is documented and discoverable.
Anti-pattern: "That's not my job." Systems with no clear owner. Finger-pointing post-mortems.
When it bends: True cross-cutting concerns (auth, infrastructure) belong to platform teams. But stream-aligned teams still own integration and experience.
Our stance: Sustainable velocity over time beats maximum output in any single sprint.
What This Looks Like
Staff for sustainable capacity, not minimum viable headcount.
Celebrate teams that maintain velocity, not individuals who sacrifice weekends.
Say "no" or "not yet" to protect focus.
Measure team health as seriously as system health.
Burnout = systemic failure, not personal weakness.
Anti-pattern: Hero programmers. "We'll rest after launch." Celebrating 80-hour weeks.
When it bends: Genuine, rare emergencies (critical security, major outages). Acknowledged, followed by recovery.
6Learning Over Knowing
Tension: It feels good to have the answer. Admitting uncertainty feels weak.
Our stance: We value learning over performing expertise. The smartest thing we can say is often "I don't know — let's find out."
What This Looks Like
Run experiments before committing to large investments.
Say "I was wrong" and "I changed my mind" publicly.
Post-mortems are blameless and focused on learning.
Hire for growth mindset, not just current skill.
Create space for failure in service of learning.
Anti-pattern: "We've always done it this way." Punishing reasonable risks that didn't pan out. Only celebrating successes.
When it bends: Some decisions are not experiments — they're commitments. Once we've learned enough, we commit and execute.
Worked Example
When Principles Conflict
Scenario: A team has discovered a significant user pain point. Fixing it requires a large, complex change that's hard to slice. The team is already at capacity.
Applying the Hierarchy
#1 Customer Outcomes says: we should fix it.
#2 Small, Safe, Frequent says: find a way to slice it.
#5 Sustainable Pace says: don't overload the team.
Resolution: Find the smallest slice that addresses the core pain (honor #2). If no safe slice exists, negotiate scope reduction or timeline rather than crunching (honor #5). Document why and communicate to stakeholders (honor #3).
MeasurementOutcomes > activity
How We Measure Success
We measure outcomes, not activity. We connect engineering metrics to business results. We treat team health as a leading indicator.
Lines of code — incentivizes bloat ·
Features shipped — features without adoption are maintenance burden ·
Overall test coverage % — 80% wrong < 50% critical ·
Hours worked — incentivizes presence over impact, inversely correlated with sustainable pace.
Team State · Diagnostic
Adapted from Will Larson's team-state model. Diagnose where each team needs support.
Fix: Add capacity or reduce scope. Find quick wins to rebuild confidence.
Treading Water
Critical work gets done but no improvement work happens.
Fix: Reduce WIP. Consolidate focus. Shift to team-based metrics.
Repaying Debt
Active improvement work · velocity increasing.
Fix: Protect the time. Don't interrupt with new priorities.
Innovating
Debt is low · team focused on new value creation.
Fix: Maintain slack. Make work visible and valued.
Governance & Cadence
Cadence
Activity
Participants
Weekly
Team-level Tier 2 review
Pod leads
Bi-weekly
Cross-team blockers, dependencies
Eng leadership
Monthly
Tier 1 + Tier 3 review
Eng + People
Quarterly
Full review · OKR check-in · T4-T5
Eng + Product + Exec
Annually
Strategy refresh · target updates
Eng leadership
02
People · Who
Who owns what. How teams are designed.
OwnershipIf you can't point to exactly one stream, that's a gap
SP Ecosystem · Who Owns What
Every system, module, and data domain has exactly one owning stream. When something breaks or evolves, there's no ambiguity. Streams own, consume, or collaborate.
Unresolved within 48 hours → escalate to Engineering Leadership.
Decision documented within 1 week. ADR created if significant.
Team TopologiesConway's Law in reverse
Team Design Philosophy
We design teams around cognitive load — the amount of complexity a team can effectively own. Stable, empowered teams with clear boundaries that deliver value without constant coordination overhead.
The test of good team design: Can each team wake up, understand their mission, do meaningful work, and ship it to users without waiting on other teams?
Cognitive Load · The Organizing Constraint
Domain
Business rules, workflows, edge cases.
Technical
Codebase size, patterns, integrations.
Operational
Deploys, monitoring, on-call.
Coordination
Cross-team dependencies, comms overhead.
Team Size · 7 ± 2 Principle
Communication paths grow quadratically with team size. We target 5–9 people.
5
10 paths
Tight, full shared context.
7
21 paths
Manageable; some info loss.
9
36 paths
Overhead rising; subgroups form.
12
66 paths
Two teams pretending to be one.
Three Team Types
Stream-aligned
Direct customer value
Own a business segment end-to-end. Build, test, deploy, operate. Minimal dependencies on other stream teams.
Healthy: ships frequently, clear boundaries, on-call manageable, new engineers productive in 2-4 weeks.
Platform
Self-service capabilities
Treat platform as an internal product. Stream teams are customers. Aim for the Thinnest Viable Platform.
Healthy: streams self-serve, docs current, changes rarely break consumers, capacity goes to capability not requests.
Enabling
Capability transfer
Temporary. Teach teams to fish. Success = no longer needed. Work across teams but not simultaneously.
Healthy: stream becomes self-sufficient, engagement has a clear end date, capability transferred (not performed).
Three Interaction Modes
Mode
Purpose
Duration
Best For
Warning Sign
Collaboration
Discover solutions together
Days-weeks
New APIs, novel problems
Never ends → split or graduate
X-as-a-Service
Consume capabilities self-serve
Ongoing
Mature, stable capabilities
Can't self-serve → still collaboration
Facilitating
Transfer knowledge & skills
Weeks-months
Building new capabilities
Creates dependency, not capability
Evolution pattern: Collaboration → Facilitating → X-as-a-Service. Example: Core Platform introduces feature flagging. (1) Collab with one stream to design the API. (2) Facilitate other streams adopting. (3) X-as-a-Service — all streams self-serve via docs.
Streams waiting on Platform · Platform backlog growing
Invest in self-service · push back on customs
Enabling = dependency
Same team repeatedly enabled · no end date
Set exit criteria · assess transfer
Fuzzy ownership
"I thought your team owned that" · dropped balls
Document & publicize ownership
Cognitive overload
Long onboarding · tribal knowledge · firefighting
Split team · transfer ownership · simplify domain
03
Systems · How
Modular architecture. Operating practices.
ArchitectureEarly draft
Modular Monolith
A single deployable application organized into well-bounded domain modules. Modularity's organizational benefits without the operational complexity of distributed systems.
Modular Monolith is our default. Deviate only when:
Scenario
Possible Response
Extreme isolated scaling
Extract to service (e.g., real-time analytics)
Fundamentally different tech
Separate service (e.g., Python for ML inference)
Strict team autonomy
Micro-frontend or microservice
Before deviating: Document in an ADR. Extraction is the exception, not the norm.
Anti-Patterns
Direct DB access across modules · hidden coupling. Circular dependencies · modules must have clear dependency direction. God modules · one module doing everything defeats the purpose. Premature extraction · don't build microservices until you've proven you need them.
Delivery FlowIdea → Customer · in hours, not days
Operating Practices
We optimize for flow — the speed at which value moves from idea to customer. Small batches, fast feedback, automated pipelines, clear ownership.
Short-lived branches (< 1 day) · frequent merges to main
Feature flags
Decouple deploy from release · ship dark · enable incrementally
Continuous testing
Tests run on every commit · broken builds block merges
Ownership
The stream that builds it runs it and fixes it
Deployment & Release
Strategy
When Used
Rolling
Default for most changes
Feature flags
New features · gradual rollout
Blue-green
Infrastructure · zero-downtime
Canary
High-risk · subset validation
Cadence
Rule
Target
Daily deploys per stream
Hotfixes
Ship immediately when needed
Code freezes
None — except critical incidents
Incident Response
Severity
Definition
Response
Resolution
P1
Service down · major user impact
< 15 min
< 4 hr
P2
Degraded · significant impact
< 1 hr
< 24 hr
P3
Minor · workaround exists
< 4 hr
< 1 week
P4
Low impact · scheduled fix
Next sprint
As prioritized
Post-incident: Blameless post-mortems for all P1/P2 · root cause + timeline + remediation documented · action items tracked to completion · learnings shared across engineering.
Observability
Pillar
Tool
Purpose
Monitoring
Datadog
System health, dashboards
Logging
Datadog
Centralized logs, search
Alerting
Datadog
Notify on-call for issues
Tracing
Datadog
Request flow across services
Strategic Initiatives · Current Priorities
Initiative
Goal
Metrics Impacted
Unified Observability
Consolidate monitoring in Datadog
MTTR ↓
Enhanced IaC
All infra via Terraform
Deployment reliability ↑
Vue 3 Migration
Complete frontend modernization
DevEx ↑ · Web Vitals ↑
Modular Monolith
Align codebase with stream boundaries
Cycle time ↓ · Onboarding ↓
Automated Incident Response
Self-healing for common issues
MTTR ↓ · Incident rate ↓
Anti-Patterns
Long-lived branches · merge conflicts, delayed feedback. Manual deployments · error-prone bottlenecks. Testing in production only · customers find bugs. Hero deployments · one person knows how to ship. Ignoring flaky tests · erodes trust in the suite. Big bang releases · high risk, hard to debug, stressful.
For the daily playbook · processes, rituals, and standards
This section is the strategy view of how we ship. The tactical view — branching, code review, PR sizing, feature flags, testing standards, work types, on-call recipes — lives in the Playbook.