Iteration 1B: A single CustomersDot BillingAccount can have multiple CustomersDot Users
[[_TOC_]]
## Purpose
[Overall Account Data Architecture Proposal documentation](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/main/doc/architecture/data_architecture.md)
In the parent epic, https://gitlab.com/groups/gitlab-org/-/epics/8331+, we are looking to improve the data architecture of CustomersDot by better aligning to Zuora, our subscription management vendor. This involves creation of new models (`BillingAccount` and `BillingAccountMembership`) and adjusting associations with existing models like `Customer` (to be renamed `User`), `Order`, `License`, etc.
This is 2nd iteration of that epic and follows the work completed in https://gitlab.com/groups/gitlab-org/-/epics/8950+. In this iteration, the new data models and relationships are in place and being used. Despite the app using the new data architecture, the behavior and UI of the app is the same as before in that one `Customer` (to be renamed `User`) can only be associated with one `BillingAccount` (and one `BillingAccountMembership`). The `Customer` (to be renamed `User`) still has no awareness that a `BillingAccount` can have multiple `Customer` (to be renamed `User`) associations.
In this iteration, we want to improve the UX to allow users to view and manage multiple CustomersDot `User`s for each `BillingAccount`. We will be relying on the new designs (TBD) to determine the exact work involved.
**Related issues**
1. https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/4510+
## Implementation plan
<table>
<tr>
<th>
:hash:
</th>
<th>Body of work</th>
<th>Why is it important / Notes</th>
<th>Status</th>
</tr>
<tr>
<td>
:one:
</td>
<td>
[Bill To / Sold To Contact Management in CustomersDot](https://gitlab.com/groups/gitlab-org/-/epics/9831)
</td>
<td>
Decouple the customer address from the CDot User record, because Zuora BillTo/SoldTo controls that information once BillingAccount is created.
**<span dir="">Deliverable:</span>**<span dir=""> </span>CDot Admins will be able to see and manage this information on existing Profile page.
Customers will be able to manage this info in :four:.
</td>
<td>
:white_check_mark: [Complete](https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/5874#note_1525549297)
</td>
</tr>
<tr>
<td>
:two:
</td>
<td>
[Consolidate Customer.company and BillingAccount.zuora_account_name](https://gitlab.com/groups/gitlab-org/-/epics/9829)
</td>
<td>Customer.Company transitions to BillingAccount.AccountName once the account is created. We need to have a consistent and predictable usage of Company vs Billing Account Name.</td>
<td>
:white_check_mark: Complete
</td>
</tr>
<tr>
<td>
:three:
</td>
<td>
[Managing Account details](https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/4975)
</td>
<td>
With the new BillingAccount data structure, many of the details (company name, address, payment methods) that are currently managed on the user level will move to the Account level.
**Deliverable:** Design and Solution validation for the new page, which will incorporate backend changes from :one: and :two:.
This page will be implemented and released in :four:.
</td>
<td>
:white_check_mark: Complete
[See designs](https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/4975)
</td>
</tr>
<tr>
<td>
:four:
</td>
<td>
[New Navigation for CDot to represent User/BillingAccount data structure and display Billing Account Managers](https://gitlab.com/groups/gitlab-org/-/epics/10367)
</td>
<td>
The concept of a BillingAccount vs individual User that is logging in to CDot requires a new way to present and navigate that data to the customer.
**Deliverable:** new Customers Portal navigation, new Account Details page (BillTo/SoldTo contact management, show Billing Account Managers without ability to edit), and the rest of the pages remain the same as today.
</td>
<td>
:white_check_mark: [Complete](https://gitlab.com/groups/gitlab-org/-/epics/10367#note_1702495667)
</td>
</tr>
<tr>
<td>
:star: :five:
</td>
<td>
[Enable Managing Multiple Billing Account Managers per Billing Account](https://gitlab.com/groups/gitlab-org/-/epics/10495)
</td>
<td>
**Final deliverable:** Allow CDot Users to invite multiple Billing Account Managers for the BillingAccount. <br><br>We will need to think about how purchasing experiences will change with this new architecture. TBD on whether it should be part of this iteration, or OK as a follow-up.
</td>
<td>
:construction: In progress
</td>
</tr>
</table>
## Related OKRs
1. [Deliver on improvements on Bill To and Sold To contact management for customers in CDot](https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/1808)
2. [Complete designs and solution validation for Managing Multiple Billing Account Managers per Account](https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/1825)
3. [Deliver New Navigation for CDot to represent User/BillingAccount data structure and display Billing Account Managers](https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/1824)
4. [Deliver Managing Multiple Billing Account Managers per Billing Account](https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/2685)
---
**Support Priority Score:** 25 (Highest score of child items)
epic