Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01e2b4df39 | ||
|
|
5bc1263be0 |
No files matched your search
@@ -23,7 +23,7 @@
|
||||
"label": "Management",
|
||||
"sublabel": "CEO / COO",
|
||||
"pos": [
|
||||
490,
|
||||
820,
|
||||
40
|
||||
],
|
||||
"size": [
|
||||
@@ -41,7 +41,7 @@
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -51,11 +51,11 @@
|
||||
"label": "Technology",
|
||||
"sublabel": "Engineering and platform",
|
||||
"pos": [
|
||||
720,
|
||||
360,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -65,11 +65,11 @@
|
||||
"label": "Operations",
|
||||
"sublabel": "Service, resolution and trust",
|
||||
"pos": [
|
||||
40,
|
||||
1450
|
||||
680,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -79,11 +79,11 @@
|
||||
"label": "Marketing",
|
||||
"sublabel": "Brand and customer growth",
|
||||
"pos": [
|
||||
370,
|
||||
1450
|
||||
1000,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -93,11 +93,11 @@
|
||||
"label": "Finance & Accounting",
|
||||
"sublabel": "Financial performance and controls",
|
||||
"pos": [
|
||||
700,
|
||||
1450
|
||||
1320,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -107,11 +107,11 @@
|
||||
"label": "HR & Administration",
|
||||
"sublabel": "People and workplace",
|
||||
"pos": [
|
||||
1030,
|
||||
1450
|
||||
1640,
|
||||
280
|
||||
],
|
||||
"size": [
|
||||
240,
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
@@ -122,7 +122,7 @@
|
||||
"sublabel": "Strategy, priorities and outcomes",
|
||||
"pos": [
|
||||
40,
|
||||
520
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -136,7 +136,7 @@
|
||||
"sublabel": "Research and experience design",
|
||||
"pos": [
|
||||
40,
|
||||
680
|
||||
620
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -149,8 +149,8 @@
|
||||
"label": "Product Engineering",
|
||||
"sublabel": "Marketplace software delivery",
|
||||
"pos": [
|
||||
720,
|
||||
520
|
||||
360,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -163,8 +163,8 @@
|
||||
"label": "Platform & IT",
|
||||
"sublabel": "Reliability and internal systems",
|
||||
"pos": [
|
||||
720,
|
||||
680
|
||||
360,
|
||||
620
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -177,8 +177,8 @@
|
||||
"label": "Architecture & Security",
|
||||
"sublabel": "Technical standards and protection",
|
||||
"pos": [
|
||||
720,
|
||||
840
|
||||
360,
|
||||
760
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -191,8 +191,8 @@
|
||||
"label": "Quality Engineering",
|
||||
"sublabel": "Testing and release quality",
|
||||
"pos": [
|
||||
720,
|
||||
1000
|
||||
360,
|
||||
900
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -205,8 +205,64 @@
|
||||
"label": "Data & AI",
|
||||
"sublabel": "Analytics, ML and AI enablement",
|
||||
"pos": [
|
||||
720,
|
||||
1160
|
||||
360,
|
||||
1040
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "operations-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Operations Squad",
|
||||
"sublabel": "Service, resolution, risk and quality",
|
||||
"pos": [
|
||||
680,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "marketing-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Marketing Squad",
|
||||
"sublabel": "Brand, acquisition and retention",
|
||||
"pos": [
|
||||
1000,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "finance-team-1",
|
||||
"type": "frontend",
|
||||
"label": "Finance & Accounting Squad",
|
||||
"sublabel": "Planning, controls and payments",
|
||||
"pos": [
|
||||
1320,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
80
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "people-team-1",
|
||||
"type": "frontend",
|
||||
"label": "People & Administration Squad",
|
||||
"sublabel": "Talent, people and workplace",
|
||||
"pos": [
|
||||
1640,
|
||||
480
|
||||
],
|
||||
"size": [
|
||||
280,
|
||||
@@ -292,6 +348,30 @@
|
||||
"from": "technology",
|
||||
"to": "technology-team-5",
|
||||
"variant": "default"
|
||||
},
|
||||
{
|
||||
"id": "operations-1",
|
||||
"from": "operations",
|
||||
"to": "operations-team-1",
|
||||
"variant": "default"
|
||||
},
|
||||
{
|
||||
"id": "marketing-1",
|
||||
"from": "marketing",
|
||||
"to": "marketing-team-1",
|
||||
"variant": "default"
|
||||
},
|
||||
{
|
||||
"id": "finance-1",
|
||||
"from": "finance",
|
||||
"to": "finance-team-1",
|
||||
"variant": "default"
|
||||
},
|
||||
{
|
||||
"id": "people-1",
|
||||
"from": "people",
|
||||
"to": "people-team-1",
|
||||
"variant": "default"
|
||||
}
|
||||
],
|
||||
"cards": [
|
||||
@@ -318,6 +398,7 @@
|
||||
"dot": "cyan",
|
||||
"title": "Operations",
|
||||
"items": [
|
||||
"Operations Squad",
|
||||
"Customer Support; Trust & Resolution",
|
||||
"Risk & Fraud",
|
||||
"Operational Quality"
|
||||
@@ -327,6 +408,7 @@
|
||||
"dot": "amber",
|
||||
"title": "Marketing",
|
||||
"items": [
|
||||
"Marketing Squad",
|
||||
"Brand & Community; Creative; SEO",
|
||||
"PPC & Affiliate; Influencer",
|
||||
"CRM"
|
||||
@@ -336,6 +418,7 @@
|
||||
"dot": "cyan",
|
||||
"title": "Finance & Accounting",
|
||||
"items": [
|
||||
"Finance & Accounting Squad",
|
||||
"Financial Planning & Analysis",
|
||||
"Accounting, Tax & Controls",
|
||||
"Treasury & Payment Operations"
|
||||
@@ -345,6 +428,7 @@
|
||||
"dot": "amber",
|
||||
"title": "HR & Administration",
|
||||
"items": [
|
||||
"People & Administration Squad",
|
||||
"Talent Acquisition",
|
||||
"People Operations",
|
||||
"Office & Administration"
|
||||
|
||||
@@ -24,7 +24,7 @@ Functional leaders translate company priorities into departmental plans. Team le
|
||||
|
||||
## Departments and teams
|
||||
|
||||
Product has **two teams** and Technology has **five teams**. Each team belongs to one department, with its own leadership and responsibilities. The departments collaborate on delivery without sharing team ownership.
|
||||
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
|
||||
|
||||
@@ -55,7 +55,9 @@ The CTO owns technology direction. The Head of Engineering leads engineering del
|
||||
|
||||
**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. |
|
||||
@@ -68,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. |
|
||||
@@ -83,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. |
|
||||
@@ -95,7 +101,9 @@ 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. |
|
||||
|
||||
@@ -77,6 +77,27 @@ test('Product owns two teams and Technology owns five separate teams', () => {
|
||||
}
|
||||
}
|
||||
});
|
||||
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.equal(team.pos[0], department.pos[0]);
|
||||
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 page presents an operating model, not research notes', () => {
|
||||
const page = read('docs/organization/structure.mdx');
|
||||
assert(page.includes('operating model') && page.includes('## Departments and teams'));
|
||||
|
||||
Reference in new issue
Block a user