Decision Spaces
Decision Spaces organize your decisions into meaningful groups that mirror your organization's structure. As your team grows, spaces prevent the decision graph from becoming noisy by scoping decisions to the right audience while preserving cross-team visibility.
Why Spaces?
Without organizational scoping, a flat list of decisions becomes overwhelming at scale:
| Scale | Problem | Spaces Solution |
|---|---|---|
| 1 team | None - everything is visible | Optional grouping |
| 5 teams | Noise - 80% of decisions irrelevant to you | Filter by your spaces |
| 20+ teams | Invisible conflicts - Team A and B make contradictory choices | Cross-space edges surface hidden dependencies |
| 50+ teams | Strategic drift - no one knows if teams are executing on org-wide decisions | Cascade view tracks alignment |
Space Hierarchy
Spaces form a tree structure with up to 4 levels of nesting:
Organization (tenant root)
-- Engineering
| -- Platform Team
| | -- Q1 Migration Initiative
| -- Product Team Alpha
| -- Product Team Beta
-- Security
-- Architecture (cross-cutting)
Space Types
| Type | Level | Example |
|---|---|---|
| Organization | Top-level | "Acme Corp Engineering" |
| Department | Division or group | "Platform", "Security" |
| Team | Working team | "Platform Team", "Mobile Team" |
| Project | Time-bound effort | "Q1 Migration", "Auth Rewrite" |
| Initiative | Cross-team program | "Zero Trust Rollout" |
Creating Spaces
Manual Creation
Create spaces from the Settings page or via API:
POST /spaces
{
"name": "Platform Team",
"slug": "platform-team",
"space_type": "team",
"parent_id": "<engineering-space-id>",
"description": "Core infrastructure and developer experience",
"color": "#6366f1"
}
Slugs must be lowercase alphanumeric with hyphens (e.g., platform-team).
Auto-Assignment from Connectors
When you map connector channels to spaces, decisions captured from those channels are automatically assigned:
| Connector | Mapping Source | Example |
|---|---|---|
| Slack | Channel | #platform-team maps to Platform Team space |
| Jira | Project key pattern | PLAT-* maps to Platform Team space |
| GitHub | Repository | org/platform-service maps to Platform Team space |
| Teams | Channel | "Platform Engineering" maps to Platform Team space |
| Linear | Team | "Platform" maps to Platform Team space |
Configure mappings in Settings > Connector Mappings or via the API.
Decision Membership
Decisions can belong to multiple spaces simultaneously. This is common for cross-cutting decisions:
- "Adopt OpenTelemetry for all services" might belong to both Platform Team and Architecture spaces
- A security audit finding might belong to Security and Product Team Alpha
Membership Types
| Type | How It's Created |
|---|---|
| Auto-assigned | Connector mapping matched the decision's source channel/project |
| Manual | User explicitly added the decision to a space |
Cross-Space Edges
The most valuable relationships in your decision graph are often the ones that cross space boundaries. Align highlights these automatically:
Platform Team Product Team Alpha
┌──────────────────┐ ┌──────────────────┐
│ "Deprecate REST │───relates──│ "Build new API │
│ gateway v1" │ │ client for v2" │
└──────────────────┘ └──────────────────┘
Cross-space edges reveal:
- Hidden dependencies - Team A's decision affects Team B's roadmap
- Conflicts - Two teams making contradictory technology choices
- Alignment - Multiple teams independently converging on the same approach
- Duplication - Teams building the same thing without knowing
Viewing Cross-Space Edges
The Graph View highlights cross-space edges with distinct colors. Filter by space to see how your team's decisions connect to the broader organization.
The API also exposes cross-space edges directly:
GET /graph-analysis/cross-space-edges?limit=100
Returns edges where the source and target decisions belong to different spaces, along with their space names and relationship type.
Space-Scoped Analysis
All of Align's analysis features can be scoped to a specific space:
| Feature | Tenant-Wide | Space-Scoped |
|---|---|---|
| Health Score | Overall org health | Health of decisions within a space |
| Graph Analysis | Full decision graph | Subgraph within a space + cross-space edges |
| Temporal Analysis | Org-wide velocity | Team velocity and anomalies |
| Drift Detection | All drift signals | Drift within a space's decisions |
| Impact Simulation | Full blast radius | Blast radius within space context |
Use the space-scoped endpoints (e.g., /spaces/:spaceId/health, /spaces/:spaceId/graph, /spaces/:spaceId/velocity) to scope analysis results to a specific space.
Permissions
Space access is controlled through space membership roles:
| Role | Capabilities |
|---|---|
| Owner | Full control - manage members, settings, delete space |
| Member | View decisions and tag decisions to the space |
Additional access can come from organization-level roles and explicit permission grants. For example, an org Admin has access to all spaces regardless of space membership.
API Reference
| Endpoint | Method | Description |
|---|---|---|
/spaces | GET | List all spaces (flat) |
/spaces | POST | Create a space |
/spaces/:id | GET | Get space details |
/spaces/:id | PUT | Update a space |
/spaces/:id | DELETE | Delete a space |
/spaces/tree | GET | Get spaces as hierarchical tree |
/spaces/:id/health | GET | Health score for space |
/spaces/:id/graph | GET | Graph analysis scoped to space |
/spaces/:spaceId/velocity | GET | Temporal analysis scoped to space |
/graph-analysis/cross-space-edges | GET | Cross-space relationship edges |
/spaces/benchmarks | GET | Compare spaces side-by-side |