Commit bed28b7f authored by Cynthia "Arty" Ng's avatar Cynthia "Arty" Ng
Browse files

Remove engineering exclusion and fix related errors

parent 091022d9
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@
  },
  "ignores": [
    "content/handbook/customer-success/**/*.md",
    "content/handbook/engineering/**/*.md",
    "content/handbook/marketing/**/*.md",
    "content/handbook/sales/**/*.md",
    "content/handbook/company/culture/all-remote/remote-work-report-2020.md",
+0 −1
Original line number Diff line number Diff line
@@ -89,4 +89,3 @@ documents that are being used to align team members across multiple iterations.
Following our [Transparency](/handbook/values/#transparency)
value, our [architecture roadmap](roadmap/) and
[design documents](https://docs.gitlab.com/ee/architecture) are public.
+1 −16
Original line number Diff line number Diff line
@@ -8,22 +8,16 @@ title: "Scalability"
* A framework to evaluate technical scalability-related decisions in context
* Best practices guidelines to lead our scalability design and implementation



## The framework

Frameworks help contextualize our thinking around a problem by breaking it into manageable conceptual parts, providing vantage points from which we can *evaluate* choices in both the present and the future. Our design becomes more predictable, our discussions more focused, our decisions likely more accurate and correct. We can make tradeoffs more visible, and, hopefully, easier to understand and reason about.

[**Swimlanes**](https://akfpartners.com/growth-blog/fault-isolation-swim-lane) and the [**Scale Cube**](https://akfpartners.com/growth-blog/scale-cube) are widely adopted models to manage both fault isolation and scalability in a structured fashion.



## Swimlanes

*A “swim lane” or fault isolation zone is a failure domain. A failure domain is a group of services within a boundary such that any failure within that boundary is contained within the boundary and the failure does not propagate or affect services outside of the said boundary.*



## The Scale Cube

*The Scale Cube is a model for segmenting services, defining them and scaling products. It also creates a common language for teams to discuss scale related options in designing solutions.*
@@ -39,18 +33,12 @@ Under this model, the axes represent the following scalability strategies:

These are well-known strategies we are intuitively familiar with. The power of formally adopting the framework lies in that we can now contextualize these strategies and potentially *consider* several moves ahead in a systematic fashion. The following figure (source: https://upload.wikimedia.org/wikipedia/commons/5/5f/Scale_Cube.png) depicts these axes:



![https://upload.wikimedia.org/wikipedia/commons/5/5f/Scale_Cube.png](img/scale_cube.png)



The Scale Cube model starts at coordinates `[0,0,0]`, where a single instance runs on one system: scalability is entirely dependent on the compute resources associated with the system, and it is scaled by adding more and faster computing resources (CPU, memory, disk). The limiting factor becomes the largest available computing resource, closely followed by cost.

The Scale Cube can be applied to any component in all iterations.



## Example: Postgres current state

GitLab.com is currently running at `[1,1,0]`:
@@ -62,8 +50,6 @@ GitLab.com is currently running at `[1,1,0]`:

A [recent analysis](https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10340) indicates our database capacity is well beyond the 12-month range (and estimate that will be updated weekly). As we ponder scalability options, the question is whether the next iteration implements `[1,2,0]` or `[1,1,1]`. Current proposals essentially advocate for the latter strategy, but there is a case to be made for choosing an entirely different direction.



## Scalability Best Practices

This section collects scalability best practices, gathered over time through experience (ours and others’). They are **guidelines, not rules**, that we apply to work through these problems in a structured fashion, leveling the cognitive playing field.
@@ -84,7 +70,7 @@ Never attempt to scale across two axes at the same time.

**Componentization** breaks down a system into logical, interconnected components. **Federation** refers to [TODO: definition].

![](img/yz.png)
![''](img/yz.png)

Componentization provides scale by creating headroom throughout the freed up resources extracted from the system. It also allows us to scale them relatively independently of other components, as locally optimize and scale individual components as necessary: in general, we need only worry about appropriately scaling downstream dependencies, so as to not overwhelm them. In extreme cases, we may choose an entirely different class of datastore (for instance, we may determine that storing comments in a document database is more effective than doing so in a relational database; we are already doing this by migrating diffs off of Postgres into object storage).

@@ -148,4 +134,3 @@ It is important to articulate scalability objectives before embarking on scalabi
## Scope the Solution

What potential solutions(s) would meet the objectives? Use the Scale Cube and Best Practices to scope it (them), and evaluate what future steps might look like (step-functions). Engage through the Architecture Workflow.
+1 −3
Original line number Diff line number Diff line
@@ -14,14 +14,12 @@ These are the expected competencies of team members at GitLab by Job Title.
1. [Staff](/handbook/engineering/careers/matrix/staff/)
1. [Principal](/handbook/engineering/careers/matrix/principal/)


## Engineering Departments


|   | Sub Departments Career Frameworks                                                                                                                                                                                                              |
| ---- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **[Development](/handbook/engineering/careers/matrix/development/)** | [Dev](/handbook/engineering/careers/matrix/development/dev/), [Core Platform](/handbook/engineering/careers/matrix/infrastructure/core-platform/), Growth, Ops, Package & Release, Secure & Govern, Verify |
| **[Incubation Engineering](/handbook/engineering/careers/matrix/development/incubation/)** | Incubation Engineering |
| **[Infrastructure](/handbook/engineering/careers/matrix/infrastructure/)** | Infrastructure, Delivery & Scalability, Reliability                                                                                                                                                                                            |
| **[Quality](/handbook/engineering/careers/matrix/quality/)** | Dev, Ops, Secure, Core Platform, Engineering Productivity, Growth, Fulfillment, Govern                                                                                                                                                            |
| **[Support](/handbook/engineering/careers/matrix/support/)** | [Support](/handbook/engineering/careers/matrix/support/)                                                                                                                                                                |                                                                                                                                                                                     |
| **[Support](/handbook/engineering/careers/matrix/support/)** | [Support](/handbook/engineering/careers/matrix/support/)  |
+0 −1
Original line number Diff line number Diff line
@@ -26,4 +26,3 @@ These are the expected competencies of the Dev Sub Department team members at Gi
## Principal

- [Principal Engineer](/handbook/engineering/careers/matrix/development/dev/principal/)
Loading