Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d760c14dab | ||
|
|
db427f99da | ||
|
|
033d9bf8fd | ||
|
|
353a04588c | ||
|
|
01e2b4df39 | ||
|
|
5bc1263be0 | ||
|
|
ecc234234e | ||
|
|
59b4075113 | ||
|
|
6e1503d31b | ||
|
|
ea2d1e889b |
No files matched your search
@@ -77,7 +77,7 @@
|
||||
"id": "engineers",
|
||||
"type": "frontend",
|
||||
"label": "Software engineers",
|
||||
"sublabel": "Product Engineering teams",
|
||||
"sublabel": "Product Engineering team",
|
||||
"pos": [
|
||||
1480,
|
||||
40
|
||||
@@ -220,10 +220,10 @@
|
||||
},
|
||||
{
|
||||
"dot": "amber",
|
||||
"title": "Cross-functional execution",
|
||||
"title": "Interdepartmental collaboration",
|
||||
"items": [
|
||||
"Product Owners, Designers and Tech Leads align on product outcomes.",
|
||||
"AI Enablement works across engineering teams."
|
||||
"Data & AI enables AI adoption across Technology."
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"label": "Management",
|
||||
"sublabel": "CEO / COO",
|
||||
"pos": [
|
||||
660,
|
||||
820,
|
||||
40
|
||||
],
|
||||
"size": [
|
||||
@@ -41,7 +41,7 @@
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -51,11 +51,11 @@
|
||||
"label": "Technology",
|
||||
"sublabel": "Engineering and platform",
|
||||
"pos": [
|
||||
320,
|
||||
360,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -65,11 +65,11 @@
|
||||
"label": "Operations",
|
||||
"sublabel": "Service, resolution and trust",
|
||||
"pos": [
|
||||
600,
|
||||
680,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -79,11 +79,11 @@
|
||||
"label": "Marketing",
|
||||
"sublabel": "Brand and customer growth",
|
||||
"pos": [
|
||||
880,
|
||||
1000,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -93,11 +93,11 @@
|
||||
"label": "Finance & Accounting",
|
||||
"sublabel": "Financial performance and controls",
|
||||
"pos": [
|
||||
1160,
|
||||
1320,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -107,11 +107,165 @@
|
||||
"label": "HR & Administration",
|
||||
"sublabel": "People and workplace",
|
||||
"pos": [
|
||||
1440,
|
||||
1640,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "product-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Product Management",
|
||||
"sublabel": "Strategy, priorities and outcomes",
|
||||
"pos": [
|
||||
100,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "product-team-2",
|
||||
"type": "frontend",
|
||||
"label": "Product Design",
|
||||
"sublabel": "Research and experience design",
|
||||
"pos": [
|
||||
100,
|
||||
620
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "technology-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Product Engineering",
|
||||
"sublabel": "Marketplace software delivery",
|
||||
"pos": [
|
||||
420,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "technology-team-2",
|
||||
"type": "frontend",
|
||||
"label": "Platform & IT",
|
||||
"sublabel": "Reliability and internal systems",
|
||||
"pos": [
|
||||
420,
|
||||
620
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "technology-team-3",
|
||||
"type": "frontend",
|
||||
"label": "Architecture & Security",
|
||||
"sublabel": "Technical standards and protection",
|
||||
"pos": [
|
||||
420,
|
||||
760
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "technology-team-4",
|
||||
"type": "frontend",
|
||||
"label": "Quality Engineering",
|
||||
"sublabel": "Testing and release quality",
|
||||
"pos": [
|
||||
420,
|
||||
900
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "technology-team-5",
|
||||
"type": "frontend",
|
||||
"label": "Data & AI",
|
||||
"sublabel": "Analytics, ML and AI enablement",
|
||||
"pos": [
|
||||
420,
|
||||
1040
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "operations-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Operations Squad",
|
||||
"sublabel": "Service, resolution, risk and quality",
|
||||
"pos": [
|
||||
740,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "marketing-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Marketing Squad",
|
||||
"sublabel": "Brand, acquisition and retention",
|
||||
"pos": [
|
||||
1060,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Finance & Accounting Squad",
|
||||
"sublabel": "Planning, controls and payments",
|
||||
"pos": [
|
||||
1380,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "people-team-1",
|
||||
"type": "frontend",
|
||||
"label": "People & Administration Squad",
|
||||
"sublabel": "Talent, people and workplace",
|
||||
"pos": [
|
||||
1700,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
220,
|
||||
80
|
||||
]
|
||||
}
|
||||
@@ -121,43 +275,137 @@
|
||||
"id": "management-product",
|
||||
"from": "management",
|
||||
"to": "product",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "management-technology",
|
||||
"from": "management",
|
||||
"to": "technology",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "management-operations",
|
||||
"from": "management",
|
||||
"to": "operations",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "management-marketing",
|
||||
"from": "management",
|
||||
"to": "marketing",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "management-finance",
|
||||
"from": "management",
|
||||
"to": "finance",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "management-people",
|
||||
"from": "management",
|
||||
"to": "people",
|
||||
"label": "Coordinates",
|
||||
"variant": "default"
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "top"
|
||||
},
|
||||
{
|
||||
"id": "product-1",
|
||||
"from": "product",
|
||||
"to": "product-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "product-2",
|
||||
"from": "product",
|
||||
"to": "product-team-2",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "technology-1",
|
||||
"from": "technology",
|
||||
"to": "technology-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "technology-2",
|
||||
"from": "technology",
|
||||
"to": "technology-team-2",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "technology-3",
|
||||
"from": "technology",
|
||||
"to": "technology-team-3",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "technology-4",
|
||||
"from": "technology",
|
||||
"to": "technology-team-4",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "technology-5",
|
||||
"from": "technology",
|
||||
"to": "technology-team-5",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "operations-1",
|
||||
"from": "operations",
|
||||
"to": "operations-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "marketing-1",
|
||||
"from": "marketing",
|
||||
"to": "marketing-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "finance-1",
|
||||
"from": "finance",
|
||||
"to": "finance-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "people-1",
|
||||
"from": "people",
|
||||
"to": "people-team-1",
|
||||
"variant": "default",
|
||||
"fromSide": "bottom",
|
||||
"toSide": "left"
|
||||
}
|
||||
],
|
||||
"cards": [
|
||||
@@ -165,24 +413,26 @@
|
||||
"dot": "cyan",
|
||||
"title": "Product",
|
||||
"items": [
|
||||
"Orders; Categories",
|
||||
"Sellers & Operations",
|
||||
"Data & Intelligence; Product Design"
|
||||
"Product Management",
|
||||
"Product Design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "amber",
|
||||
"title": "Technology",
|
||||
"items": [
|
||||
"Product Engineering; Quality Engineering",
|
||||
"Platform & Reliability; Architecture & Security",
|
||||
"AI Enablement; Internal IT"
|
||||
"Product Engineering",
|
||||
"Platform & IT",
|
||||
"Architecture & Security",
|
||||
"Quality Engineering",
|
||||
"Data & AI"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "cyan",
|
||||
"title": "Operations",
|
||||
"items": [
|
||||
"Operations Squad",
|
||||
"Customer Support; Trust & Resolution",
|
||||
"Risk & Fraud",
|
||||
"Operational Quality"
|
||||
@@ -192,6 +442,7 @@
|
||||
"dot": "amber",
|
||||
"title": "Marketing",
|
||||
"items": [
|
||||
"Marketing Squad",
|
||||
"Brand & Community; Creative; SEO",
|
||||
"PPC & Affiliate; Influencer",
|
||||
"CRM"
|
||||
@@ -201,6 +452,7 @@
|
||||
"dot": "cyan",
|
||||
"title": "Finance & Accounting",
|
||||
"items": [
|
||||
"Finance & Accounting Squad",
|
||||
"Financial Planning & Analysis",
|
||||
"Accounting, Tax & Controls",
|
||||
"Treasury & Payment Operations"
|
||||
@@ -210,6 +462,7 @@
|
||||
"dot": "amber",
|
||||
"title": "HR & Administration",
|
||||
"items": [
|
||||
"People & Administration Squad",
|
||||
"Talent Acquisition",
|
||||
"People Operations",
|
||||
"Office & Administration"
|
||||
|
||||
@@ -21,7 +21,7 @@ The standalone viewer provides pan/zoom, node inspection, search/focus, relation
|
||||
|
||||
Create `diagrams/<name>.<type>.json` using the matching schema and authoring guidance in `vendor/archify/schemas/` and `vendor/archify/references/`. Use stable IDs, explicit relationships, and honest evidence labels. Do not include private information merely because the source repository is private: Pages access is a separate platform policy.
|
||||
|
||||
Set `meta.output` to `static/diagrams/<name>/index.html`. The build validates the typed source with the upstream showcase profile, renders locally, checks the artifact, and publishes the standalone HTML and a downloadable JSON source.
|
||||
Set `meta.output` to `static/diagrams/<name>/index.html`. The build validates the typed source with the upstream showcase profile, renders locally, checks the artifact, and publishes the standalone HTML. Editable JSON stays in the repository; the portal does not publish source-download files.
|
||||
|
||||
```sh
|
||||
pnpm diagrams:build
|
||||
@@ -37,7 +37,7 @@ import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
|
||||
<ArchifyDiagram name="organization-structure" title="Eldorado organization structure" />
|
||||
```
|
||||
|
||||
Supply a text alternative below each diagram. The wrapper uses a local, base-path-aware iframe with a descriptive title, scripts and downloads enabled, and no same-origin or parent-navigation permissions. The Open full viewer button expands the diagram in a full-screen modal on the current page, with the same iframe sandbox. Close it with the Close button or Escape; focus returns to the opener. It does not open a new tab. The separate standalone HTML asset remains directly addressable and is not itself iframe-sandboxed, so publish only reviewed, trusted diagrams. Generated output is ignored by Git and rebuilt in CI.
|
||||
Supply a text alternative below each diagram. The wrapper uses a local, base-path-aware iframe with a descriptive title, scripts and downloads enabled, and no same-origin or parent-navigation permissions. The top-right expand icon expands the diagram in a full-screen modal on the current page, with the same iframe sandbox. Close it with the Close button or Escape; focus returns to the opener. It does not open a new tab. The separate standalone HTML asset remains directly addressable and is not itself iframe-sandboxed, so publish only reviewed, trusted diagrams. Generated output is ignored by Git and rebuilt in CI.
|
||||
|
||||
## Integration boundaries
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: Collaboration
|
||||
description: How Eldorado departments combine their responsibilities to deliver shared business outcomes.
|
||||
---
|
||||
|
||||
Departments collaborate around shared outcomes while retaining their own team ownership and accountability. See [Structure](./structure.mdx) for department and squad responsibilities.
|
||||
|
||||
## How the departments work together
|
||||
|
||||
| Business outcome | Collaboration |
|
||||
| --- | --- |
|
||||
| Better buyer experience | Product defines improvements; Technology delivers them; Operations brings customer feedback; Data & AI measures the result. |
|
||||
| Stronger seller experience | Product and Technology develop seller tools; Operations supports sellers; Finance manages financial processes. |
|
||||
| Safe and trustworthy trading | Risk & Fraud, Trust & Resolution, Architecture & Security, and Finance coordinate controls and incident responses. |
|
||||
| Sustainable growth | Marketing develops demand; Product improves conversion and retention; Finance measures profitability. |
|
||||
| AI-powered execution | Data & AI supports engineering and develops marketplace intelligence; Operations improves service and quality workflows. |
|
||||
|
||||
Department leaders remain accountable for outcomes, controls and service quality as AI becomes part of everyday work.
|
||||
|
||||
## Related pages
|
||||
|
||||
- [Structure](./structure.mdx) — departments, squads and responsibilities.
|
||||
- [SDLC — Software Delivery Life Cycle](./sdlc.mdx) — leadership and delivery responsibilities.
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: SDLC — Software Delivery Life Cycle
|
||||
sidebar_label: SDLC
|
||||
description: Leadership, reporting lines and team responsibilities supporting software delivery at Eldorado.
|
||||
---
|
||||
|
||||
import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
|
||||
|
||||
Software delivery brings together Product and Technology, supported by the departments responsible for marketplace operations and growth. This page describes the leadership and delivery responsibilities that support that work.
|
||||
|
||||
## Leadership and delivery structure
|
||||
|
||||
<ArchifyDiagram name="organization-reporting" compact title="Eldorado leadership and delivery structure" />
|
||||
|
||||
The diagram shows management responsibility from leader to role or team:
|
||||
|
||||
- **CTO → Head of Engineering → Group Engineering Managers → Engineering Managers → the Product Engineering team.**
|
||||
- **CTO → AI Architect**, coordinating engineering AI enablement.
|
||||
- **COO → Operational Quality**, providing independent quality oversight.
|
||||
- **CMO → Brand Team Lead**, leading Brand & Community.
|
||||
|
||||
Product and Technology retain separate team ownership and reporting lines. Their teams coordinate priorities, design, engineering, quality and data work to deliver business outcomes.
|
||||
|
||||
## Related pages
|
||||
|
||||
- [Structure](./structure.mdx) — departments, squads and responsibilities.
|
||||
- [Collaboration](./collaboration.mdx) — how departments coordinate around business outcomes.
|
||||
@@ -24,40 +24,40 @@ Functional leaders translate company priorities into departmental plans. Team le
|
||||
|
||||
## Departments and teams
|
||||
|
||||
Product has **two teams** and Technology has **five teams**. Operations, Marketing, Finance & Accounting, and HR & Administration each have **one squad** covering their departmental workstreams. Each team belongs to one department, with its own leadership and responsibilities. The departments collaborate on delivery without sharing team ownership.
|
||||
|
||||
### Product
|
||||
|
||||
**Purpose:** improve the buyer and seller experience and turn marketplace opportunities into valuable product capabilities.
|
||||
|
||||
| Team | Responsibilities |
|
||||
| --- | --- |
|
||||
| Orders | Purchase and post-purchase journeys, order status, delivery experience, dispute flows, feedback and loyalty. |
|
||||
| Categories | Category experiences, including Boosting and Currency, discovery, conversion and category-specific user journeys. |
|
||||
| Sellers & Operations | Seller Portal, seller integrations, onboarding and verification, balances and withdrawals, invoicing and operational tooling. |
|
||||
| Data & Intelligence | Product analytics, experimentation, offer ranking, recommendations and decision support. |
|
||||
| Product Design | User research, interaction design, design consistency and accessible buyer and seller experiences across product teams. |
|
||||
| Product Management | Product strategy, roadmaps, priorities and outcome measurement across discovery, categories, orders, seller tools, payments and operational workflows. |
|
||||
| Product Design | User research, interaction design, design consistency and accessible buyer and seller experiences. |
|
||||
|
||||
Product Owners, Designers and Tech Leads work together on each product area. Product owns priorities and outcomes; Technology owns engineering execution and technical quality.
|
||||
Product Management owns what to improve and why. Product Design shapes the experience. Both work with Technology teams while remaining within Product.
|
||||
|
||||
### Technology
|
||||
|
||||
**Purpose:** build and operate a secure, reliable marketplace and improve the effectiveness of engineering.
|
||||
|
||||
| Team / function | Responsibilities |
|
||||
| Team | Responsibilities |
|
||||
| --- | --- |
|
||||
| Product Engineering | Develop and maintain marketplace capabilities in cross-functional product teams. |
|
||||
| Platform & Reliability | Shared platform services, delivery infrastructure, observability, availability and performance. |
|
||||
| Architecture & Security | Technical standards, system design, infrastructure security and secure engineering practices. |
|
||||
| Product Engineering | Build and maintain marketplace capabilities, including search, orders, seller tools, checkout, wallet and operational tooling. |
|
||||
| Platform & IT | Platform services, delivery infrastructure, observability, reliability, performance, internal systems, employee devices and identity administration. |
|
||||
| Architecture & Security | Technical standards, system design, security architecture and secure engineering practices. |
|
||||
| Quality Engineering | Test strategy, automation, release quality and defect prevention. |
|
||||
| AI Enablement | AI-assisted engineering workflows, developer tools, adoption, standards and safe use of AI. |
|
||||
| Internal IT | Identity and access, employee devices, internal systems, software administration and joiner–mover–leaver processes. |
|
||||
| Data & AI | Analytics, experimentation, ranking, recommendations, marketplace ML and safe AI-assisted engineering workflows. |
|
||||
|
||||
The CTO owns technology direction. The Head of Engineering leads engineering delivery through Group Engineering Managers and Engineering Managers. The AI Architect coordinates AI enablement across engineering, working with Architecture & Security and team leaders.
|
||||
The CTO owns technology direction. The Head of Engineering leads engineering delivery through Group Engineering Managers and Engineering Managers. The AI Architect coordinates AI enablement within Data & AI, working with Architecture & Security and the other Technology teams. These are leadership roles within the five-team structure, not additional teams.
|
||||
|
||||
### Operations
|
||||
|
||||
**Purpose:** keep marketplace trading dependable and resolve customer issues fairly and efficiently.
|
||||
|
||||
| Team | Responsibilities |
|
||||
**Operations Squad** delivers the department’s responsibilities across the following workstreams.
|
||||
|
||||
| Workstream | Responsibilities |
|
||||
| --- | --- |
|
||||
| Customer Support | Buyer and seller assistance, knowledge management, self-service and support workflow automation. |
|
||||
| Trust & Resolution | Disputes, appeals, refunds, warranties, chargebacks and complex customer cases. |
|
||||
@@ -70,7 +70,9 @@ The COO coordinates Operations. Team leads manage specialists and daily service
|
||||
|
||||
**Purpose:** attract and retain customers, build the Eldorado brand and grow marketplace demand.
|
||||
|
||||
| Team / workstream | Responsibilities |
|
||||
**Marketing Squad** delivers the department’s responsibilities across the following workstreams.
|
||||
|
||||
| Workstream | Responsibilities |
|
||||
| --- | --- |
|
||||
| Brand & Community | Brand positioning, campaigns, organic social, community and brand partnerships. |
|
||||
| Creative | Campaign concepts, visual assets and performance creative. |
|
||||
@@ -85,7 +87,9 @@ The CMO coordinates Marketing. The Brand Team Lead owns Brand & Community, with
|
||||
|
||||
**Purpose:** maintain financial control, support business decisions and keep marketplace money flows dependable.
|
||||
|
||||
| Team / function | Responsibilities |
|
||||
**Finance & Accounting Squad** delivers the department’s responsibilities across the following workstreams.
|
||||
|
||||
| Workstream | Responsibilities |
|
||||
| --- | --- |
|
||||
| Financial Planning & Analysis | Budgets, forecasts, profitability, management reporting and investment analysis. |
|
||||
| Accounting, Tax & Controls | Accounting, financial reporting, tax, audit coordination and internal controls. |
|
||||
@@ -97,35 +101,17 @@ The CFO coordinates Finance & Accounting and works with executive leadership on
|
||||
|
||||
**Purpose:** help teams attract, develop and retain people and provide an effective working environment.
|
||||
|
||||
| Team | Responsibilities |
|
||||
**People & Administration Squad** delivers the department’s responsibilities across the following workstreams.
|
||||
|
||||
| Workstream | Responsibilities |
|
||||
| --- | --- |
|
||||
| Talent Acquisition | Recruitment, candidate experience, hiring coordination and workforce demand support. |
|
||||
| People Operations | Employee onboarding, development, performance processes, policies and employee experience. |
|
||||
| Office & Administration | Workplace services, office operations and administrative coordination. |
|
||||
|
||||
HR partners with department leaders on team capacity and development. People Operations works with Internal IT on employee onboarding, role changes and offboarding.
|
||||
HR partners with department leaders on team capacity and development. People Operations works with Platform & IT on employee onboarding, role changes and offboarding.
|
||||
|
||||
## Leadership and delivery structure
|
||||
## Related pages
|
||||
|
||||
<ArchifyDiagram name="organization-reporting" title="Eldorado leadership and delivery structure" />
|
||||
|
||||
The diagram shows management responsibility from leader to role or team:
|
||||
|
||||
- **CTO → Head of Engineering → Group Engineering Managers → Engineering Managers → Product Engineering teams.**
|
||||
- **CTO → AI Architect**, coordinating engineering AI enablement.
|
||||
- **COO → Operational Quality**, providing independent quality oversight.
|
||||
- **CMO → Brand Team Lead**, leading Brand & Community.
|
||||
|
||||
Product teams combine product ownership, design, engineering, quality and data expertise. Functional management develops people and professional standards; cross-functional teams deliver business outcomes.
|
||||
|
||||
## How the departments work together
|
||||
|
||||
| Business outcome | Collaboration |
|
||||
| --- | --- |
|
||||
| Better buyer experience | Product defines improvements; Technology delivers them; Operations brings customer feedback; Data measures the result. |
|
||||
| Stronger seller experience | Product and Technology develop seller tools; Operations supports sellers; Finance manages financial processes. |
|
||||
| Safe and trustworthy trading | Risk & Fraud, Trust & Resolution, Architecture & Security, and Finance coordinate controls and incident responses. |
|
||||
| Sustainable growth | Marketing develops demand; Product improves conversion and retention; Finance measures profitability. |
|
||||
| AI-powered execution | AI Enablement supports engineering; Data & Intelligence develops marketplace intelligence; Operations improves service and quality workflows. |
|
||||
|
||||
Department leaders remain accountable for outcomes, controls and service quality as AI becomes part of everyday work.
|
||||
- [Collaboration](./collaboration.mdx) — how departments work together on business outcomes.
|
||||
- [SDLC — Software Delivery Life Cycle](./sdlc.mdx) — leadership and delivery responsibilities.
|
||||
@@ -24,7 +24,6 @@ for (const file of readdirSync('diagrams').sort()) {
|
||||
run(['deliver',type,input,output,'--quality','showcase','--json']);
|
||||
run(['check',output,'--json','--require-provenance']);
|
||||
renameSync(`static/diagrams/${name}/index.delivery.json`, `.cache/archify/${name}.delivery.json`);
|
||||
copyFileSync(input,`static/diagrams/${name}.json`);
|
||||
}
|
||||
copyFileSync('vendor/archify/LICENSE','static/diagrams/ARCHIFY-LICENSE.txt');
|
||||
copyFileSync('vendor/archify/THIRD_PARTY_NOTICES.md','static/diagrams/THIRD-PARTY-NOTICES.md');
|
||||
+67
-1
@@ -20,6 +20,7 @@ test('real build removes stale diagrams, keeps receipts private and rejects coll
|
||||
writeSpec('old');
|
||||
let result = build(); assert.equal(result.status,0,result.stderr);
|
||||
assert(existsSync(join(root,'static/diagrams/old/index.html')));
|
||||
assert(!existsSync(join(root,'static/diagrams/old.json')));
|
||||
assert(!readdirSync(join(root,'static/diagrams'),{recursive:true}).some(p=>p.endsWith('.delivery.json')));
|
||||
unlinkSync(join(root,'diagrams/old.architecture.json'));
|
||||
writeSpec('new');
|
||||
@@ -42,7 +43,7 @@ test('three independent section menus and Structure first', () => {
|
||||
for (const section of ['Organization', 'Strategy', 'Contribution']) assert(config.includes(`label: '${section}'`));
|
||||
assert(!config.includes("label: 'Documentation'"));
|
||||
assert(!config.includes("label: 'Maintainer guide'"));
|
||||
assert(read('sidebars/organization.ts').includes("organizationSidebar: ['structure']"));
|
||||
assert(read('sidebars/organization.ts').includes("organizationSidebar: ['structure', 'collaboration', 'sdlc']"));
|
||||
for (const section of ['organization','strategy','contribution']) assert(config.includes(`id: '${section}'`));
|
||||
});
|
||||
test('Archify is pinned, licensed and rebuilt, not a remote embed', () => {
|
||||
@@ -58,6 +59,71 @@ test('Archify is pinned, licensed and rebuilt, not a remote embed', () => {
|
||||
assert(wrapper.includes('showModal()') && wrapper.includes('onClose='));
|
||||
assert(!wrapper.includes('target="_blank"'));
|
||||
assert(wrapper.includes('Close full-screen diagram'));
|
||||
assert(!wrapper.includes('JSON source') && !wrapper.includes('download>'));
|
||||
assert(!wrapper.includes('Open full viewer'));
|
||||
assert(wrapper.includes('aria-label={`Expand ${title}`}'));
|
||||
assert(wrapper.includes('aria-hidden="true"'));
|
||||
assert(read('src/css/custom.css').includes('justify-content: flex-end'));
|
||||
});
|
||||
test('Product owns two teams and Technology owns five separate teams', () => {
|
||||
const spec = JSON.parse(read('diagrams/organization-structure.architecture.json'));
|
||||
const page = read('docs/organization/structure.mdx');
|
||||
assert(!/shared-delivery|squad-/i.test(JSON.stringify(spec)));
|
||||
assert(!/shared squads|share a delivery structure|cross-functional teams/i.test(page));
|
||||
for (const [dept, count, heading, next] of [['product',2,'Product','Technology'],['technology',5,'Technology','Operations']]) {
|
||||
const teams = spec.components.filter(n => n.id.startsWith(`${dept}-team-`));
|
||||
assert.equal(teams.length, count);
|
||||
const section = page.split(`### ${heading}\n`)[1].split(`### ${next}\n`)[0];
|
||||
const rows = section.split('\n').filter(l => l.startsWith('| ')).slice(2);
|
||||
assert.equal(rows.length, count);
|
||||
for (const team of teams) {
|
||||
const parents = spec.connections.filter(e => e.to === team.id);
|
||||
assert.deepEqual(parents.map(e => e.from), [dept]);
|
||||
assert(rows.some(row => row.startsWith(`| ${team.label} |`)));
|
||||
}
|
||||
}
|
||||
});
|
||||
test('departments share one row and each has delivery teams below it', () => {
|
||||
const spec = JSON.parse(read('diagrams/organization-structure.architecture.json'));
|
||||
const page = read('docs/organization/structure.mdx');
|
||||
const departments = ['product', 'technology', 'operations', 'marketing', 'finance', 'people'];
|
||||
const nodes = new Map(spec.components.map(n => [n.id, n]));
|
||||
assert.equal(new Set(departments.map(id => nodes.get(id).pos[1])).size, 1);
|
||||
for (const [i, id] of departments.entries()) {
|
||||
const department = nodes.get(id);
|
||||
const teams = spec.connections.filter(e => e.from === id).map(e => nodes.get(e.to));
|
||||
assert.equal(teams.length, i === 0 ? 2 : i === 1 ? 5 : 1);
|
||||
for (const team of teams) {
|
||||
assert(team.pos[1] > department.pos[1] + department.size[1]);
|
||||
assert(team.size[0] < department.size[0]);
|
||||
assert.equal(team.pos[0] + team.size[0], department.pos[0] + department.size[0]);
|
||||
const edge = spec.connections.find(e => e.from === id && e.to === team.id);
|
||||
assert.equal(edge.toSide, 'left');
|
||||
assert.equal(edge.fromSide, 'bottom');
|
||||
assert.equal(spec.connections.find(e => e.from === 'management' && e.to === id).toSide, 'top');
|
||||
assert.deepEqual(spec.connections.filter(e => e.to === team.id).map(e => e.from), [id]);
|
||||
assert(page.includes(team.label));
|
||||
}
|
||||
}
|
||||
for (const [i, a] of spec.components.entries()) for (const b of spec.components.slice(i + 1)) {
|
||||
assert(!(a.pos[0] < b.pos[0] + b.size[0] && a.pos[0] + a.size[0] > b.pos[0] && a.pos[1] < b.pos[1] + b.size[1] && a.pos[1] + a.size[1] > b.pos[1]), `${a.id} overlaps ${b.id}`);
|
||||
}
|
||||
});
|
||||
test('organization content is split into linked focused pages', () => {
|
||||
const structure = read('docs/organization/structure.mdx');
|
||||
const collaboration = read('docs/organization/collaboration.mdx');
|
||||
const sdlc = read('docs/organization/sdlc.mdx');
|
||||
assert(!structure.includes('## How the departments work together'));
|
||||
assert(!structure.includes('## Leadership and delivery structure'));
|
||||
assert(!structure.includes('name="organization-reporting"'));
|
||||
assert(collaboration.includes('## How the departments work together'));
|
||||
for (const outcome of ['Better buyer experience', 'Stronger seller experience', 'Safe and trustworthy trading', 'Sustainable growth', 'AI-powered execution']) assert(collaboration.includes(outcome));
|
||||
assert(sdlc.includes('title: SDLC — Software Delivery Life Cycle'));
|
||||
assert(sdlc.includes('name="organization-reporting"'));
|
||||
for (const role of ['Head of Engineering', 'AI Architect', 'Operational Quality', 'Brand Team Lead']) assert(sdlc.includes(role));
|
||||
for (const [name, page] of [['structure',structure],['collaboration',collaboration],['sdlc',sdlc]]) {
|
||||
for (const other of ['structure','collaboration','sdlc'].filter(n => n !== name)) assert(page.includes(`./${other}.mdx`));
|
||||
}
|
||||
});
|
||||
test('organization page presents an operating model, not research notes', () => {
|
||||
const page = read('docs/organization/structure.mdx');
|
||||
|
||||
+6
-2
@@ -16,14 +16,18 @@ const workflow = read('.gitea/workflows/pages.yml');
|
||||
assert(workflow.includes('mountpoint -q'));
|
||||
assert(workflow.includes("gitea.event_name == 'push' && gitea.ref == 'refs/heads/main'"));
|
||||
if (process.argv.includes('--build')) {
|
||||
for (const route of ['index.html','docs/overview/index.html','docs/maintain/index.html','docs/reference/index.html','404.html','organization/structure/index.html','strategy/index.html','contribution/index.html','contribution/diagrams/index.html','diagrams/organization-structure/index.html']) {
|
||||
for (const route of ['index.html','docs/overview/index.html','docs/maintain/index.html','docs/reference/index.html','404.html','organization/structure/index.html','organization/collaboration/index.html','organization/sdlc/index.html','strategy/index.html','contribution/index.html','contribution/diagrams/index.html','diagrams/organization-structure/index.html']) {
|
||||
assert(existsSync(join('build',route)), `Missing route: ${route}`);
|
||||
}
|
||||
assert(!readdirSync('build/diagrams', {recursive: true}).some(f => f.endsWith('.delivery.json')), 'Private build receipts must not be published');
|
||||
const diagram = read('build/diagrams/organization-structure/index.html');
|
||||
assert(diagram.includes('Coordinates') && diagram.includes('node-technology'));
|
||||
assert(diagram.includes('node-product-team-2') && diagram.includes('node-technology-team-5'));
|
||||
assert(!diagram.includes('shared-delivery'));
|
||||
assert(!/A: placement|E: careers|J: advertised/.test(diagram));
|
||||
assert(!diagram.includes('Example leadership'));
|
||||
for (const [dept, count] of [['product', 2], ['technology', 5]]) {
|
||||
for (let i = 1; i <= count; i++) assert(diagram.includes(`node-${dept}-team-${i}`));
|
||||
}
|
||||
const reporting = read('build/diagrams/organization-reporting/index.html');
|
||||
assert(reporting.includes('AI Architect') && reporting.includes('Leads'));
|
||||
assert(!/A: assumed|J: direct/.test(reporting));
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||
export default {organizationSidebar: ['structure']} satisfies SidebarsConfig;
|
||||
export default {organizationSidebar: ['structure', 'collaboration', 'sdlc']} satisfies SidebarsConfig;
|
||||
@@ -1,10 +1,9 @@
|
||||
import React, {useEffect, useId, useRef, useState} from 'react';
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
export default function ArchifyDiagram({name, title}: {name: string; title: string}): React.ReactElement {
|
||||
export default function ArchifyDiagram({name, title, compact = false}: {name: string; title: string; compact?: boolean}): React.ReactElement {
|
||||
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error('Invalid diagram name');
|
||||
const source = useBaseUrl(`/diagrams/${name}/`);
|
||||
const json = useBaseUrl(`/diagrams/${name}.json`);
|
||||
const dialog = useRef<HTMLDialogElement>(null);
|
||||
const opener = useRef<HTMLButtonElement>(null);
|
||||
const headingId = useId();
|
||||
@@ -17,8 +16,8 @@ export default function ArchifyDiagram({name, title}: {name: string; title: stri
|
||||
return () => {document.body.style.overflow = previousOverflow;};
|
||||
}, [expanded]);
|
||||
const close = () => {dialog.current?.close();};
|
||||
return <section className="archify-panel" aria-label={title}>
|
||||
<div className="archify-toolbar"><strong>Interactive diagram</strong><div><button ref={opener} type="button" className="archify-expand" onClick={() => setExpanded(true)}>Open full viewer ⛶</button><a href={json} download>JSON source ↓</a></div></div>
|
||||
return <section className={`archify-panel${compact ? ' archify-panel--compact' : ''}`} aria-label={title}>
|
||||
<div className="archify-toolbar"><button ref={opener} type="button" className="archify-expand" aria-label={`Expand ${title}`} title="Expand diagram" onClick={() => setExpanded(true)}><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true"><path d="M8 3H3v5M16 3h5v5M21 16v5h-5M8 21H3v-5" /></svg></button></div>
|
||||
<iframe src={source} title={title} sandbox="allow-scripts allow-downloads" loading="lazy" referrerPolicy="no-referrer" />
|
||||
<dialog ref={dialog} className="archify-modal" aria-labelledby={headingId} onClose={() => {setExpanded(false); opener.current?.focus();}}>
|
||||
<div className="archify-modal-toolbar"><strong id={headingId}>{title}</strong><button type="button" onClick={close} autoFocus aria-label="Close full-screen diagram">Close ×</button></div>
|
||||
|
||||
+4
-4
@@ -97,12 +97,12 @@ a:focus-visible, button:focus-visible {outline: 3px solid #b88719; outline-offse
|
||||
@media (max-width: 996px) {.navbar {padding: 0 1rem;} .hero-inner {gap: 15px; padding: 55px 25px;} .hero-art {transform: scale(.85);} .start-section {padding: 35px 25px;} .start-card {padding: 20px;}}
|
||||
@media (max-width: 700px) {.hero-inner {grid-template-columns: 1fr; padding: 45px 24px;} .hero-art {display: none;} .hero-copy h1 {font-size: 3rem;} .start-grid {grid-template-columns: 1fr;} .section-heading {align-items: flex-start;} .foundation-badge {display: none;} .start-section {padding: 32px 20px;} .navbar__title {font-size: 1.45rem;} .navbar__logo {height: 31px;} .navbar input {max-width: 145px;} .button--lg {font-size: .95rem;} .button--primary span {padding-left: 10px;}}
|
||||
.archify-panel {border: 1px solid var(--line); margin: 1.5rem 0;}
|
||||
.archify-toolbar {display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; padding: 12px 16px; background: var(--surface); font-size: .85rem;}
|
||||
.archify-toolbar div {display: flex; gap: 20px; flex-wrap: wrap;}
|
||||
.archify-toolbar {display: flex; justify-content: flex-end; padding: 4px; background: var(--surface);}
|
||||
.archify-panel iframe {width: 100%; height: 720px; border: 0; display: block; background: #f6f6f6;}
|
||||
.archify-panel--compact > iframe {height: 500px;}
|
||||
@media (max-width: 700px) {.archify-panel iframe {height: 650px;}}
|
||||
.archify-expand {border: 0; padding: 0; background: transparent; color: var(--ifm-link-color); font: inherit; cursor: pointer;}
|
||||
.archify-expand:hover {text-decoration: underline;}
|
||||
.archify-expand {display: grid; place-items: center; width: 44px; height: 44px; border: 0; padding: 0; background: transparent; color: var(--ifm-link-color); cursor: pointer;}
|
||||
.archify-expand:hover {background: var(--ifm-hover-overlay);}
|
||||
.archify-modal {position: fixed; inset: 0; margin: 0; padding: 0; width: 100vw; height: 100dvh; max-width: none; max-height: none; border: 0; background: var(--surface); color: var(--ifm-color-content);}
|
||||
.archify-modal[open] {display: flex; flex-direction: column;}
|
||||
.archify-modal::backdrop {background: #000b;}
|
||||
|
||||
Reference in new issue
Block a user