info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Application limits development
# Application limits development
This document provides a development guide for contributors to add application
This document provides a development guide for contributors to add application
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Code Intelligence
# Code Intelligence
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/1576) in GitLab 13.1.
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/1576) in GitLab 13.1.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Danger bot
# Danger bot
The GitLab CI/CD pipeline includes a `danger-review` job that uses [Danger](https://github.com/danger/danger)
The GitLab CI/CD pipeline includes a `danger-review` job that uses [Danger](https://github.com/danger/danger)
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Setting Multiple Values
# Setting Multiple Values
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32921) in GitLab 13.5.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32921) in GitLab 13.5.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Delete existing migrations
# Delete existing migrations
When removing existing migrations from the GitLab project, you have to take into account
When removing existing migrations from the GitLab project, you have to take into account
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# GitLab Docs monthly release process
# GitLab Docs monthly release process
When a new GitLab version is released on the 22nd, we need to create the respective
When a new GitLab version is released on the 22nd, we need to create the respective
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Features inside the `.gitlab/` directory
# Features inside the `.gitlab/` directory
We have implemented standard features that depend on configuration files in the `.gitlab/` directory. You can find `.gitlab/` in various GitLab repositories.
We have implemented standard features that depend on configuration files in the `.gitlab/` directory. You can find `.gitlab/` in various GitLab repositories.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Foreign Keys & Associations
# Foreign Keys & Associations
When adding an association to a model you must also add a foreign key. For
When adding an association to a model you must also add a foreign key. For
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# `Gemfile` guidelines
# `Gemfile` guidelines
When adding a new entry to `Gemfile` or upgrading an existing dependency pay
When adding a new entry to `Gemfile` or upgrading an existing dependency pay
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Developing against interacting components or features
# Developing against interacting components or features
It's not uncommon that a single code change can reflect and interact with multiple parts of GitLab
It's not uncommon that a single code change can reflect and interact with multiple parts of GitLab
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Mass inserting Rails models
# Mass inserting Rails models
Setting the environment variable [`MASS_INSERT=1`](rake_tasks.md#environment-variables)
Setting the environment variable [`MASS_INSERT=1`](rake_tasks.md#environment-variables)
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Merge Request Performance Guidelines
# Merge Request Performance Guidelines
Each new introduced merge request **should be performant by default**.
Each new introduced merge request **should be performant by default**.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Migration Style Guide
# Migration Style Guide
When writing migrations for GitLab, you have to take into account that
When writing migrations for GitLab, you have to take into account that
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Modules with instance variables could be considered harmful
# Modules with instance variables could be considered harmful
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# What you should know about Omnibus packages
# What you should know about Omnibus packages
Most users install GitLab using our Omnibus packages. As a developer it can be
Most users install GitLab using our Omnibus packages. As a developer it can be
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Ordering Table Columns in PostgreSQL
# Ordering Table Columns in PostgreSQL
For GitLab we require that columns of new tables are ordered to use the
For GitLab we require that columns of new tables are ordered to use the
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Performance Guidelines
# Performance Guidelines
This document describes various guidelines to follow to ensure good and
This document describes various guidelines to follow to ensure good and
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# GitLab permissions guide
# GitLab permissions guide
There are multiple types of permissions across GitLab, and when implementing
There are multiple types of permissions across GitLab, and when implementing
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# `DeclarativePolicy` framework
# `DeclarativePolicy` framework
The DeclarativePolicy framework is designed to assist in performance of policy checks, and to enable ease of extension for EE. The DSL code in `app/policies` is what `Ability.allowed?` uses to check whether a particular action is allowed on a subject.
The DeclarativePolicy framework is designed to assist in performance of policy checks, and to enable ease of extension for EE. The DSL code in `app/policies` is what `Ability.allowed?` uses to check whether a particular action is allowed on a subject.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Polling with ETag caching
# Polling with ETag caching
Polling for changes (repeatedly asking server if there are any new changes)
Polling for changes (repeatedly asking server if there are any new changes)
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Polymorphic Associations
# Polymorphic Associations
**Summary:** always use separate tables instead of polymorphic associations.
**Summary:** always use separate tables instead of polymorphic associations.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Profiling
# Profiling
To make it easier to track down performance problems GitLab comes with a set of
To make it easier to track down performance problems GitLab comes with a set of
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Projections
# Projections
Projections are a way to define relations between files. Every file can have a
Projections are a way to define relations between files. Every file can have a
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Python Development Guidelines
# Python Development Guidelines
GitLab requires Python as a dependency for [reStructuredText](https://docutils.sourceforge.io/rst.html)
GitLab requires Python as a dependency for [reStructuredText](https://docutils.sourceforge.io/rst.html)
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Rake tasks for developers
# Rake tasks for developers
Rake tasks are available for developers and others contributing to GitLab.
Rake tasks are available for developers and others contributing to GitLab.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Redis guidelines
# Redis guidelines
GitLab uses [Redis](https://redis.io) for the following distinct purposes:
GitLab uses [Redis](https://redis.io) for the following distinct purposes:
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Refactoring guide
# Refactoring guide
This document is a collection of techniques and best practices to consider while performing a refactor.
This document is a collection of techniques and best practices to consider while performing a refactor.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Guidelines for reusing abstractions
# Guidelines for reusing abstractions
As GitLab has grown, different patterns emerged across the codebase. Service
As GitLab has grown, different patterns emerged across the codebase. Service
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Serializing Data
# Serializing Data
**Summary:** don't store serialized data in the database, use separate columns
**Summary:** don't store serialized data in the database, use separate columns
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Storing SHA1 Hashes As Binary
# Storing SHA1 Hashes As Binary
Storing SHA1 hashes as strings is not very space efficient. A SHA1 as a string
Storing SHA1 hashes as strings is not very space efficient. A SHA1 as a string
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Guidelines for shell commands in the GitLab codebase
# Guidelines for shell commands in the GitLab codebase
This document contains guidelines for working with processes and files in the GitLab codebase.
This document contains guidelines for working with processes and files in the GitLab codebase.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Single Table Inheritance
# Single Table Inheritance
**Summary:** don't use Single Table Inheritance (STI), use separate tables
**Summary:** don't use Single Table Inheritance (STI), use separate tables
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# SQL Query Guidelines
# SQL Query Guidelines
This document describes various guidelines to follow when writing SQL queries,
This document describes various guidelines to follow when writing SQL queries,
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Uploads development documentation
# Uploads development documentation
[GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse) has special rules for handling uploads.
[GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse) has special rules for handling uploads.
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# GitLab utilities
# GitLab utilities
We have developed a number of utilities to help ease development:
We have developed a number of utilities to help ease development:
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Verifying Database Capabilities
# Verifying Database Capabilities
Sometimes certain bits of code may only work on a certain database
Sometimes certain bits of code may only work on a certain database
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers