diff --git a/diagrams/organization-reporting.architecture.json b/diagrams/organization-reporting.architecture.json index 4bc9c8d..67a1edf 100644 --- a/diagrams/organization-reporting.architecture.json +++ b/diagrams/organization-reporting.architecture.json @@ -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." ] } ] diff --git a/diagrams/organization-structure.architecture.json b/diagrams/organization-structure.architecture.json index 0dab5b9..983100c 100644 --- a/diagrams/organization-structure.architecture.json +++ b/diagrams/organization-structure.architecture.json @@ -23,7 +23,7 @@ "label": "Management", "sublabel": "CEO / COO", "pos": [ - 680, + 490, 40 ], "size": [ @@ -37,7 +37,7 @@ "label": "Product", "sublabel": "Experience and product outcomes", "pos": [ - 600, + 40, 280 ], "size": [ @@ -51,7 +51,7 @@ "label": "Technology", "sublabel": "Engineering and platform", "pos": [ - 880, + 720, 280 ], "size": [ @@ -66,7 +66,7 @@ "sublabel": "Service, resolution and trust", "pos": [ 40, - 280 + 1450 ], "size": [ 240, @@ -79,8 +79,8 @@ "label": "Marketing", "sublabel": "Brand and customer growth", "pos": [ - 320, - 280 + 370, + 1450 ], "size": [ 240, @@ -93,8 +93,8 @@ "label": "Finance & Accounting", "sublabel": "Financial performance and controls", "pos": [ - 1160, - 280 + 700, + 1450 ], "size": [ 240, @@ -107,8 +107,8 @@ "label": "HR & Administration", "sublabel": "People and workplace", "pos": [ - 1440, - 280 + 1030, + 1450 ], "size": [ 240, @@ -116,114 +116,100 @@ ] }, { - "id": "shared-delivery", + "id": "product-team-1", "type": "frontend", - "label": "Product & Technology Squads", - "sublabel": "Up to seven cross-functional squads", + "label": "Product Management", + "sublabel": "Strategy, priorities and outcomes", "pos": [ - 660, + 40, 520 ], "size": [ - 360, + 280, 80 ] }, { - "id": "squad-discovery", + "id": "product-team-2", "type": "frontend", - "label": "Discovery & Categories", - "sublabel": "Browse, search and conversion", + "label": "Product Design", + "sublabel": "Research and experience design", "pos": [ 40, - 760 + 680 ], "size": [ - 200, - 80 - ] - }, - { - "id": "squad-orders", - "type": "frontend", - "label": "Orders & Delivery", - "sublabel": "Purchase and post-purchase", - "pos": [ 280, - 760 - ], - "size": [ - 200, 80 ] }, { - "id": "squad-seller", + "id": "technology-team-1", "type": "frontend", - "label": "Seller Platform", - "sublabel": "Seller tools and integrations", + "label": "Product Engineering", + "sublabel": "Marketplace software delivery", "pos": [ - 520, - 760 + 720, + 520 ], "size": [ - 200, + 280, 80 ] }, { - "id": "squad-payments", + "id": "technology-team-2", "type": "frontend", - "label": "Payments & Wallet", - "sublabel": "Checkout, balances and payouts", + "label": "Platform & IT", + "sublabel": "Reliability and internal systems", "pos": [ - 760, - 760 + 720, + 680 ], "size": [ - 200, + 280, 80 ] }, { - "id": "squad-trust", + "id": "technology-team-3", "type": "frontend", - "label": "Trust & Safety", - "sublabel": "Risk and resolution tooling", + "label": "Architecture & Security", + "sublabel": "Technical standards and protection", "pos": [ - 1000, - 760 + 720, + 840 ], "size": [ - 200, + 280, 80 ] }, { - "id": "squad-data", + "id": "technology-team-4", "type": "frontend", - "label": "Data & Intelligence", - "sublabel": "Ranking, analytics and ML", + "label": "Quality Engineering", + "sublabel": "Testing and release quality", "pos": [ - 1240, - 760 + 720, + 1000 ], "size": [ - 200, + 280, 80 ] }, { - "id": "squad-platform", + "id": "technology-team-5", "type": "frontend", - "label": "Platform & AI", - "sublabel": "Reliability and engineering AI", + "label": "Data & AI", + "sublabel": "Analytics, ML and AI enablement", "pos": [ - 1480, - 760 + 720, + 1160 ], "size": [ - 200, + 280, 80 ] } @@ -233,134 +219,99 @@ "id": "management-product", "from": "management", "to": "product", - "label": "Coordinates", "variant": "default" }, { "id": "management-technology", "from": "management", "to": "technology", - "label": "Coordinates", "variant": "default" }, { "id": "management-operations", "from": "management", "to": "operations", - "label": "Coordinates", "variant": "default" }, { "id": "management-marketing", "from": "management", "to": "marketing", - "label": "Coordinates", "variant": "default" }, { "id": "management-finance", "from": "management", "to": "finance", - "label": "Coordinates", "variant": "default" }, { "id": "management-people", "from": "management", "to": "people", - "label": "Coordinates", "variant": "default" }, { - "id": "product-squads", + "id": "product-1", "from": "product", - "to": "shared-delivery", - "label": "Shared delivery", + "to": "product-team-1", "variant": "default" }, { - "id": "technology-squads", + "id": "product-2", + "from": "product", + "to": "product-team-2", + "variant": "default" + }, + { + "id": "technology-1", "from": "technology", - "to": "shared-delivery", - "label": "Shared delivery", + "to": "technology-team-1", "variant": "default" }, { - "id": "delivery-discovery", - "from": "shared-delivery", - "to": "squad-discovery", - "label": "Squad", + "id": "technology-2", + "from": "technology", + "to": "technology-team-2", "variant": "default" }, { - "id": "delivery-orders", - "from": "shared-delivery", - "to": "squad-orders", - "label": "Squad", + "id": "technology-3", + "from": "technology", + "to": "technology-team-3", "variant": "default" }, { - "id": "delivery-seller", - "from": "shared-delivery", - "to": "squad-seller", - "label": "Squad", + "id": "technology-4", + "from": "technology", + "to": "technology-team-4", "variant": "default" }, { - "id": "delivery-payments", - "from": "shared-delivery", - "to": "squad-payments", - "label": "Squad", - "variant": "default" - }, - { - "id": "delivery-trust", - "from": "shared-delivery", - "to": "squad-trust", - "label": "Squad", - "variant": "default" - }, - { - "id": "delivery-data", - "from": "shared-delivery", - "to": "squad-data", - "label": "Squad", - "variant": "default" - }, - { - "id": "delivery-platform", - "from": "shared-delivery", - "to": "squad-platform", - "label": "Squad", + "id": "technology-5", + "from": "technology", + "to": "technology-team-5", "variant": "default" } ], "cards": [ - { - "dot": "cyan", - "title": "Shared delivery squads", - "items": [ - "Product owns priorities and outcomes; Technology owns engineering capability.", - "Each squad combines product ownership, engineering, design, QA and data skills.", - "Functional teams support squads; they are not extra delivery squads." - ] - }, { "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" ] }, { diff --git a/docs/organization/structure.mdx b/docs/organization/structure.mdx index 43206ff..cd12118 100644 --- a/docs/organization/structure.mdx +++ b/docs/organization/structure.mdx @@ -22,52 +22,34 @@ Functional leaders translate company priorities into departmental plans. Team le **Management coordinates the six departments.** Each department has a clear business responsibility and a set of teams that deliver it. -## Product & Technology squads - -Product and Technology share a delivery structure of **up to seven cross-functional squads**. Product sets priorities and business outcomes; Technology provides engineering leadership, technical standards and delivery capability. - -| Squad | Scope | -| --- | --- | -| **Discovery & Categories** | Browsing, search, category journeys and marketplace conversion. | -| **Orders & Delivery** | Purchase and post-purchase experience, order tracking, delivery and customer feedback. | -| **Seller Platform** | Seller Portal, onboarding, integrations and seller-facing tools. | -| **Payments & Wallet** | Checkout, balances, withdrawals and payout integrations, working with Finance. | -| **Trust & Safety** | Risk controls, dispute tooling and safety workflows, working with Operations. | -| **Data & Intelligence** | Analytics, experimentation, offer ranking, recommendations and marketplace ML. | -| **Platform & AI** | Shared platform, reliability, delivery infrastructure and engineering AI tools. | - -Each squad brings together product ownership, engineering, design, quality and data expertise according to its scope. Departmental teams and specialist functions below support these squads; they are not additional delivery squads. Operations retains ownership of customer cases and risk decisions, while Finance retains ownership of financial controls. - ## 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 **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 @@ -119,7 +101,7 @@ The CFO coordinates Finance & Accounting and works with executive leadership on | 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 @@ -127,21 +109,21 @@ HR partners with department leaders on team capacity and development. People Ope The diagram shows management responsibility from leader to role or team: -- **CTO → Head of Engineering → Group Engineering Managers → Engineering Managers → Product Engineering teams.** +- **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 teams combine product ownership, design, engineering, quality and data expertise. Functional management develops people and professional standards; cross-functional teams deliver business outcomes. +Product and Technology retain separate team ownership and reporting lines. Their teams coordinate priorities, design, engineering, quality and data work to 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. | +| 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 | AI Enablement supports engineering; Data & Intelligence develops marketplace intelligence; Operations improves service and quality workflows. | +| 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. diff --git a/scripts/portal.test.mjs b/scripts/portal.test.mjs index 63069cf..b676c15 100644 --- a/scripts/portal.test.mjs +++ b/scripts/portal.test.mjs @@ -59,14 +59,22 @@ test('Archify is pinned, licensed and rebuilt, not a remote embed', () => { assert(!wrapper.includes('target="_blank"')); assert(wrapper.includes('Close full-screen diagram')); }); -test('Product and Technology share seven delivery squads', () => { +test('Product owns two teams and Technology owns five separate teams', () => { const spec = JSON.parse(read('diagrams/organization-structure.architecture.json')); - const squads = spec.components.filter(n => n.id.startsWith('squad-')); - assert.equal(squads.length, 7); - for (const dept of ['product','technology']) assert(spec.connections.some(e => e.from === dept && e.to === 'shared-delivery')); - for (const squad of squads) { - assert(spec.connections.some(e => e.from === 'shared-delivery' && e.to === squad.id)); - assert(read('docs/organization/structure.mdx').includes(squad.label)); + 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('organization page presents an operating model, not research notes', () => { diff --git a/scripts/verify.mjs b/scripts/verify.mjs index 9872dca..b8392a1 100644 --- a/scripts/verify.mjs +++ b/scripts/verify.mjs @@ -21,10 +21,13 @@ if (process.argv.includes('--build')) { } 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 id of ['discovery','orders','seller','payments','trust','data','platform']) assert(diagram.includes(`node-squad-${id}`)); + 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));