search
Clients cases Gitlab Case Studies – Client Case: PrivatBank

About the company

PrivatBank is Ukraine’s largest state-owned bank, serving over 18 million active customers—more than 70% of the country's population. The bank’s infrastructure includes 1,173 branches, 6,860 ATMs, nearly 10,400 self-service terminals, and over 311,000 POS terminals nationwide, supported by a team of almost 20,000 employees.

A leader in retail banking, PrivatBank continuously introduces and improves services for small and medium-sized businesses while maintaining a powerful digital ecosystem.

Country

Ukraine

Industry

Finance

FinTech

Tech Stack

GitLab Self-Hosted

GitLab CI/CD

Merge Requests / Code Review

SAST, DAST, Vulnerability Scanning

Infrastructure as Code

Stats

1,000+ developers

700+ internal and external platforms

14,119 projects and 150,367 commits in 2 months

15–25% time savings on review cycles

5+ years of stable GitLab performance without incidents

How PrivatBank Built a Secure Environment for Thousands of Developers with GitLab and Cloudfresh

PrivatBank is one of the largest banks in Eastern Europe. From a technical perspective, it is also one of the largest IT organizations in Ukraine.

Over 80% of the software used internally and by customers is built by in-house teams. Simultaneously, the bank must meet rigorous requirements for security, compliance, stability, and change management. To solve this, the bank needed a single platform that could standardize development across the organization.

“We operate like an IT company with a massive development staff, but we are also a state bank with very high stability and compliance standards.”
Dmytro Kondakov Deputy Head of Direction, Head of Development, PrivatBank

Previously, the bank relied on fragmented tools: Jenkins handled CI, code was stored in separate systems, and processes were spread across different platforms.

This led to several challenges:

  • Lack of a unified environment
  • Inconsistent development standards
  • Limited process transparency

To resolve these issues, the bank began transitioning to a unified DevSecOps platform.

Why GitLab?

Over the past two years, GitLab was established as the bank’s standard development platform. Beyond code storage, GitLab became the foundation for project management, CI/CD, code security, change control, auditing, and compliance.

“The core value of GitLab is that it integrates several mechanisms into one system. Previously, we used Jenkins for builds and different systems for code. GitLab allowed us to consolidate all information and provide developers with a single environment.”
Dmytro Kondakov Deputy Head of Direction, Head of Development, PrivatBank

At PrivatBank, GitLab has become the core of the DevSecOps process.

Dev: Standardized Development and Unified Workflow

PrivatBank’s main challenge was not code storage, but establishing one engineering workflow across the organization.

With hundreds of engineers and dozens of teams, even minor process variations can lead to complications. By adopting GitLab as its central platform, the bank integrated all key stages of the code lifecycle:

01
Repositories
02
Merge requests
03
Code reviews
04
Documentation
05
CI/CD pipelines

Developers can now track the full delivery path in one place, from the first commit to production.

Code Review as an Engineering Standard

GitLab now underpins the bank’s engineering standards. Every code change follows a merge request workflow where peer engineers review the changes. During the review, the team can:

  • Verify compliance with coding standards
  • Identify potential issues early
  • Suggest better architectural solutions
  • Ensure the code meets security requirements

The system maintains a full history of changes, providing transparency on how the code evolved and why specific decisions were made.

This is particularly critical for large-scale organizations: GitLab makes the review process transparent and automated, even across distributed teams. As a result, code reviews function as a direct mechanism for improving code quality.

Development Flexibility at Scale

For PrivatBank, another critical advantage is the ability to manage multiple workstreams in parallel.

In banking, long-term projects often run alongside urgent regulatory updates. To manage this, PrivatBank teams use GitLab’s flexible branching model. This allows simultaneous work on:

  • Long-term functional development
  • Critical hotfixes
  • Experimental or R&D projects

In practical terms, this means the team can create a separate branch for an urgent change, implement it, and deliver it to production without halting work on a major project.

Infrastructure-as-Code and Clear Architecture

Another core principle of the bank’s engineering practice is managing infrastructure alongside the code. This approach ensures teams interact with the system as a unified environment rather than a collection of isolated code fragments.

When a new engineer joins a team, they gain immediate access to the full system context, including:

  • Documented code
  • Defined architecture
  • Clear component structures

This shortens onboarding and allows for faster project contributions. Furthermore, GitLab enables the execution of independent branches to test specific changes. Developers can implement updates and deploy them within their own environment to see immediate results—eliminating the need to wait for a full system build.

For an organization of PrivatBank’s scale, this substantially reduces the time between feature development and verification.

Sec: Security Integrated into Development

For a financial institution, security cannot be a final step; it must be part of the build. At PrivatBank, security tools run automatically within the pipeline before changes reach the main repository.

PrivatBank utilizes the following GitLab security mechanisms:

  • SAST — Analyzing source code for vulnerabilities
  • Dependency Scanning — Checking third-party libraries
  • Vulnerability Scanning — Identifying known risks in dependencies

These checks run directly within the CI/CD pipeline, allowing the team to identify issues before the code even reaches the test environment.

By integrating security checks earlier, engineers get feedback while code is still being written. If a library contains a vulnerability, the system alerts the developer during the coding phase, eliminating the need for late-stage rework.

This change fundamentally alters the development lifecycle. Previously, the workflow followed this sequence:

  1. The developer writes code.
  2. Performs a commit.
  3. The build process starts.
  4. Security and policy checks occur.
  5. An issue is detected.
  6. The developer must rework the code and restart the entire cycle.

Now, many of these repetitive steps are removed. Engineers identify problems instantly and resolve them while still working on the code, increasing overall output.

The bank estimates this approach has removed multiple redundant verification steps, saving 15–25% of the time previously spent on these cycles. The primary outcome, however, is code quality. When security is part of the workflow, engineers produce code that inherently meets organizational standards. They account for security requirements, organizational standards, and architectural rules from the outset. Consequently, the code entering the system aligns with internal policies on the first attempt.

This shift drives several key outcomes:

Increased test coverage and documentation
Reduced production incidents
Faster incident root-cause analysis
Looking to scale DevSecOps in your company? Cloudfresh helps implement GitLab, standardize CI/CD, and integrate security directly into the development process. Contact us →
CTA Image

Open Source and License Compliance

Another critical priority for the bank is the management of open-source components.

“Over 80% of commercial development today consists of open-source components. On one hand, this offers significant business benefits: increased development speed, access to innovation, and resource optimization. On the other hand, it introduces new risks, particularly regarding licensing. Automating license management at the scale of commercial development is now a mandatory requirement, and GitLab effectively addresses this challenge.”
Oleksii Zaiets Head of IT, PrivatBank

Different licenses can impose serious limitations:

  • Requiring the disclosure of proprietary source code
  • Creating legal conflicts
  • Leading to fines or reputational issues

For an organization of PrivatBank’s scale, manual control of such risks is virtually impossible, which is why the bank automated this process using GitLab.

During the CI/CD pipeline, the system generates a Software Bill of Materials (SBOM) — a comprehensive list of components included in the software product. For this purpose, industrial standards CycloneDX and SPDX are used.
Based on this information, the bank’s team configures its own open-source usage policies.

This means the system automatically:

  • Identifies dependency licenses
  • Verifies them against internal rules
  • Notifies the developer of potential violations

If a new library does not comply with organizational policies, the developer receives a signal directly during the merge request. They can either obtain the necessary approval or immediately choose another dependency.

Thus, license control ceases to be a separate process that occurs after development. It becomes a natural part of the engineer’s workflow.

Full Transparency of Changes and Auditing

For a financial institution, controlling changes in the code is equally important. Any change must be traceable and understandable.

That is why PrivatBank uses GitLab’s policy and access control mechanisms to regulate the process of making changes.

Specifically, the team has configured:

  • Approval policies for critical changes
  • Mandatory review of merge requests
  • Commit restrictions for certain roles
  • A full audit trail of all changes

This means that at any moment, the bank can answer three key questions: who introduced the change to the code, who reviewed and approved it, and why it made it into the release.

For a large financial organization, such transparency is critical. It allows for quick internal audits, incident analysis, and ensuring compliance with regulatory requirements.

As a result, security ceases to be a separate function or process controlled only by a specific team. It becomes an integral part of the daily work of engineers, integrated into the development platform itself.

Ops: Controlled Delivery of Changes

In an environment where dozens of teams change hundreds of systems every day, writing code is only half the task. Equally important is how this code is delivered to the system. Every change must follow a clearly controlled path — from commit to production.

After GitLab was approved as the standard development platform, the team created internal rules for working with CI/CD. The bank even developed separate regulations defining how pipelines should be built and how teams should manage code delivery.

The majority of projects today use GitLab CI/CD as their primary automation mechanism. This has allowed for the standardization of build, testing, and delivery processes across different teams.

At the same time, pipelines remain flexible enough to account for the specifics of various systems. In the CI/CD processes, the bank integrates not only the standard capabilities of GitLab but also its own quality and security control tools.

Specifically, the following can be connected to the pipeline:

  • Internal security tools
  • Proprietary SAST scanners
  • Compliance checks for the bank’s technological standards

This approach allows combining GitLab automation with the internal control mechanisms the bank has developed over the years.

Working with Legacy Systems

A distinct challenge for a large financial organization is the presence of a significant number of legacy systems.

Many of them were created before the emergence of modern DevOps practices and do not always easily integrate into standard automation processes. Completely rebuilding such systems in a short time is practically impossible.

Therefore, the bank’s team used GitLab’s flexibility to gradually integrate these systems into the CI/CD process as well.

Even if certain stages for legacy projects remain partially manual, GitLab allows building a controlled pipeline around them. This means:

  • All changes pass through a single build process
  • Verification results are stored in the system
  • The release history remains transparent

Ultimately, even old systems become part of the bank’s unified engineering process.

Less Manual Work — More Control

For the PrivatBank team, the main value of CI/CD lies not just in release speed. More importantly, code delivery becomes a predictable and controlled process.

When a pipeline automates system checks and builds, teams can be confident that every change passes through the same stages. This reduces the risk of errors and makes the release process more stable.

In combination with Dev and Sec mechanisms, this creates a unified work model:

  • Code undergoes a standardized review
  • Automatically checked for vulnerabilities
  • Delivered through a controlled pipeline

In this way, GitLab has helped PrivatBank build a full-fledged DevSecOps process, where development, security, and operations function as a single system.

Code Quality as the Primary Metric of Success

At PrivatBank, the results of GitLab implementation are evaluated not by individual speed indicators, but by the quality of the code the organization receives as a result.

“Previously, we just got code. Now, we get documented code covered by tests. GitLab has helped us improve quality—code is delivered without vulnerabilities and meets our organizational standards from the start.”
Dmytro Kondakov Deputy Head of Direction, Head of Development, PrivatBank

This changes not only the technical process but also the way teams work. Engineers spend less time troubleshooting issues in production and more time on product development.

Another important effect is faster onboarding for new developers. When code is structured, documented, and passes standardized checks, it is much easier for new engineers to dive into projects.

Engineering Scale

To understand why process standardization is so vital, one only needs to look at the scale of development at PrivatBank. Today, GitLab is used to work on hundreds of systems and thousands of components. In particular:

  • 700+ internal and external platforms
  • 1,000 developers working simultaneously
  • Dozens of teams operating 24/7

And this scale is clearly visible not only at the organizational level but also in the daily interaction with the platform. In the last two months alone, the GitLab environment at PrivatBank has recorded:

14,119
projects
150,367
commits
1,115
contributors
143.2
million lines of code added
68.4
million lines of code deleted

At this scale, any lack of standards quickly turns into a serious problem. This is why the centralization of development processes became a key factor for success.

Platform Stability

GitLab at PrivatBank operates in a self-hosted environment, which allows full control over the infrastructure and ensures compliance with the security requirements of a financial institution.

According to the bank’s team, the platform demonstrates a very high level of stability.

“Over at least the past five years, we do not recall a single incident related to GitLab failures.”
Dmytro Kondakov Deputy Head of Direction, Head of Development, PrivatBank

For an organization where thousands of engineers work with code every day, this is a critically important factor. Platform reliability means that teams can focus on product development without spending time resolving infrastructure issues.

Partnership with Cloudfresh

PrivatBank’s transition to the commercial version of GitLab took place in cooperation with Cloudfresh—the official GitLab partner.

The Cloudfresh team supports the bank in several key areas: from platform licensing to supporting engineering teams during the scaling of DevSecOps processes.

In particular, the collaboration includes:

  • Consulting on licensing and the optimal GitLab usage model
  • Technical expertise during the implementation of new platform capabilities, such as Duo Agent Platform
  • Support for engineering teams working with GitLab
  • Assistance in resolving technical issues

For a large organization where thousands of engineers use the platform daily, it is important to have access to expertise and fast support.

“Cloudfresh is always available. You can always reach out to them and resolve issues. Our problem-related requests receive very fast and high-quality responses—sometimes we resolve them right in an online session.”
Dmytro Kondakov Deputy Head of Direction, Head of Development, PrivatBank

This format of collaboration allows PrivatBank not only to maintain stable platform operations but also to gradually expand its use. Together with Cloudfresh, the bank’s team tests new GitLab capabilities and implements them into its engineering processes.

AI-Driven Approach to Development

The next stage of platform development is the integration of AI tools into the development process. The team is already testing new IDEs and AI agents, as well as experimenting with the capabilities of GitLab Duo Agent Platform.

Among the potential areas of use:

  • Automated code quality checks
  • Analysis of compliance with technology stack standards
  • Optimization of CI/CD processes
  • Additional support for engineers during code writing

At the moment, these capabilities are used in pilot scenarios, but the bank’s team is actively exploring how to integrate AI into developers’ day-to-day workflows.

Ultimately, GitLab has become more than just a code storage system for PrivatBank. The platform has unified development, security, and operations into a single engineering ecosystem, which allows for further scaling of one of the country’s largest financial organizations.

Get in touch with Сloudfresh