+ All Categories
Home > Documents > STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps...

STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps...

Date post: 19-Apr-2020
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
28
STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL Julio Pereira Advisory Consultant Dell EMC [email protected] Ricardo Herrmann Data Scientist Dell EMC [email protected] Felipe Miziara Senior Project Manager Dell EMC [email protected] Knowledge Sharing Article © 2018 Dell Inc. or its subsidiaries. Gerson Graciani Senior Solutions Architect Dell EMC [email protected]
Transcript
Page 1: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL

Julio PereiraAdvisory ConsultantDell EMC [email protected]

Ricardo HerrmannData ScientistDell [email protected]

Felipe MiziaraSenior Project ManagerDell [email protected]

Knowledge Sharing Article © 2018 Dell Inc. or its subsidiaries.

Gerson GracianiSenior Solutions ArchitectDell [email protected]

Page 2: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 2

Table of Contents

1 Problem Description .............................................................................................. 4

1.1 Development Tracks .............................................................................................. 5

1.2 Pre-production and Production Tracks ................................................................... 6

2 Our Approach ......................................................................................................... 7

2.1 Future State Workshops......................................................................................... 7

2.2 Interviews ............................................................................................................... 9

2.3 Value Stream Map ................................................................................................. 9

2.4 Center of Excellence .............................................................................................. 9

2.5 Squads ................................................................................................................. 10

2.6 Velocity and Quality ............................................................................................. 11

3 Continuous Delivery Pipeline System ................................................................ 11

3.1 Conceptual Pipeline ............................................................................................. 11

3.2 Architecture and Tools ......................................................................................... 12

3.3 Pipeline in the Cloud ............................................................................................ 14

3.3.1 Git Repositories................................................................................................. 15

3.3.2 Kubernetes installation with Ansible and kubeadm ............................................ 15

3.3.3 The “Hello, world” Continuous Delivery Pipeline ................................................ 16

3.4 Pipeline on Premises ........................................................................................... 17

3.5 Potential Improvements........................................................................................ 18

4 Development Practices (in Theory) ..................................................................... 19

4.1 Feature Flags ....................................................................................................... 19

4.2 Trunk-Based Development ................................................................................... 20

5 Development Practices (in Practice) ................................................................... 22

5.1 Big Bang Approach .............................................................................................. 22

5.2 Componentize Approach ...................................................................................... 24

5.3 And the Selected Strategy Was ............................................................................ 24

6 Conclusions ......................................................................................................... 25

Page 3: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 3

List of Figures

Figure 1: Tracks ........................................................................................................... 5

Figure 2: Development Tracks ..................................................................................... 6

Figure 3: Pre-production and Production Tracks .......................................................... 7

Figure 4; Shared Vision between Leadership and Delivery Teams ............................... 8

Figure 5: Continuous Delivery Common Characteristics .............................................. 8

Figure 6: Center of Excellence ................................................................................... 10

Figure 7: Conceptual Pipeline .................................................................................... 12

Figure 8: Tool Set in Use ........................................................................................... 13

Figure 9: Proposed Tool Set ...................................................................................... 13

Figure 10: Basic Architecture ..................................................................................... 14

Figure 11: Dashboard for the “Hello, world” Pipeline .................................................. 17

Figure 12: Final Dashboard ........................................................................................ 18

Figure 13: Work Around to Allow Downloading New Images ...................................... 18

Figure 14: Anatomy of a very simple Feature Flag ..................................................... 20

Figure 15: Flow vs. Trunk-Based Development .......................................................... 21

Figure 16:Big Bang Strategy ...................................................................................... 23

List of Tables

Table 1: Comparing complexity .................................................................................. 20

Table 2: Strategies to Achieve Trunk-Based Development ........................................ 21

Disclaimer: The views, processes or methodologies published in this article are those

of the authors. They do not necessarily reflect Dell EMC’s views, processes or

methodologies.

Page 4: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 4

1 Problem Description

Seeking to keep up with competition in highly challenging Brazilian telecommunication

market, our Client established a development process occurring in separate parallel

tracks.

To better understand common issues one must take a close look at the complexity of

delivering a software (e.g. a web portal for over 90 million subscribers) which

integrates several systems (legacy and new). Each of these systems are likely to have

a separate and different life cycle, so it is clear that different parts undergo different

development tracks.

Each track represents a full copy of source code1 (i.e. this is not branching technique),

and due to integration idiosyncrasies, it also represents a separate environment. The

main reasons behind this idea are:

• Development highly outsourced, occurring mainly outside Client’s properties.

• Business Areas pushing many concurrent changes in existing software systems.

• The need to sustain market share.

• Coexistence with legacy systems, many of them mainframe-based.

• Large databases imposing serious issues during system integration phases

(subscriber base is around 100 million).

Apart from the fact that parallel tracks offer some comfort, merging code proved to be

a complicated task: i.e. loss of quality, large number of human resources dedicated to

perform integration tests and rework.

Currently, the Client implemented 5 parallel tracks (Figure 1) to allow matching

corporation release dates:

1 Source code was kept in SVN, however, rather than using SVN as a full capacity source code control, it was merely used

to keep whole copies of each track – at the end of the day, SVN had to be replaced by Git.

Page 5: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 5

Figure 1: Tracks

• Tracks 1 to 3, to accommodate development and acceptance tests of new

features.

• Pre-production, where regression tests and hot fixes occur.

• Production, and eventually emergency fixes (which are replicated manually to

pre-production and downwards development tracks).

1.1 Development Tracks

Each development track is created following a fixed schedule in order to match release

deadlines by cloning production code.

Following this logic, features are planned according to each track. Since each release

takes approximately 60 days, an acceptance tests takes place every 15 days (see

section 2.3).

Note that tracks are completely independent. Therefore, when development

successfully finishes, code must be merged into pre-production track. A track is

destroyed after merging process is completed and recreated further on (Figure 2).

Page 6: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 6

Figure 2: Development Tracks

In this model, it is clear that features are implemented on entirely independent source

codes, and must be planned in such a way that different development teams avoid

touching “common code”. When this situation cannot be avoided, merging tasks grow

with complexity.

1.2 Pre-production and Production Tracks

Pre-production track is used for code merges, user acceptance, regression tests and

hot fixes, and production is eventually used to implement emergency fixes.

This model imposes a catch: each change performed in the pre-production and/or

production tracks must be manually re-implemented in the pre-production track and, of

course, in the development tracks. Since these are most likely implemented while

development is taking place in development tracks, one could say that merging tasks

becomes more complicated as complexity and parallelism grow (see Figure 3).

Page 7: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 7

Figure 3: Pre-production and Production Tracks

2 Our Approach

This section explores actions taken to address the problems described in the previous

section. It is clear that a cultural change is necessary to resolve described issues, so

several steps were taken, some still underway:

• Executing Future State Workshops, where Client’s resources started to be

evangelized on general topics related to DevOps discipline (see section 2.1).

• Performing Interviews, 1-on-1 conversations with selected personnel, particularly

those involved in the pain points this initiative should solve (see section 2.2).

• Sponsoring a Center of Excellence, which is an entity aiming to promote

discussions, education and resolving blocking points (see section 2.4).

• Creating Squads, which are hands-on teams (see section 2.5).

• Implementing a Continuous Delivery Pipeline System, an integrated and

standardized environment (see section 3).

2.1 Future State Workshops

Future State Workshops were meant to evangelize Client’s personnel, establishing a

common ground of concepts, pinpointing what the organization should look like, and

covering aspects of velocity, quality and value of delivered system software (Figure 4).

Page 8: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 8

Figure 4; Shared Vision between Leadership and Delivery Teams

These workshops provided a forum to bring concepts that DevOps should be a culture

with a common view of success, success criteria and measures, an incremental,

iterative approach, collaborative cross functional teams, and, above all, trust.

The workshop was the initial introduction to the concept of Continuous Delivery and its

disruptive philosophy of bringing together Development and Operations Teams in a

continuous flow (Figure 5).

Figure 5: Continuous Delivery Common Characteristics

Additional covered subjects:

• Pipelines of Continuous Integration/Delivery (see section 3).

• Value Stream Map (see section 2.3).

• Velocity and Quality (see section 2.6).

N.B.: 40 people attended 3 workshop sessions.

Page 9: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 9

2.2 Interviews

Interviews were the perfect occasion to establish a relationship of trust with personnel

suffering daily pressures of a complicated development/deploy cycle.

Interviews2 generated key input to produce a Current State Report, which presented

Client with important findings to help drive a successful DevOps transformation.

N.B.: In this Project, we were able to interview around 15 key Client’s professionals.

2.3 Value Stream Map

One of the key objectives of our team was to create the Value Stream Map of the

selected application. To elicit required information, a series of workshops were

scheduled. However, since these workshops involved a large number of people from

different areas, getting all those stakeholders in the same room at the same time was

a huge challenge.

The following Client’s Areas were involved: Development, Architecture, Middleware,

Configuration Management, Project Manager Office, Infrastructure, Procurement and

Customer Digital Channel.

Main findings of the Value Stream Map workshops were:

• Release model is time-boxed.

• As expected, there are many manually-driven activities (i.e. environment

preparation, build and deploy, and merges) which could be automated by

implementing a Continuous Delivery Pipeline System.

• Team morale is low, since weekends and nights are commonly spent moving

software to production.

• A huge amount of time spent correcting software caused side effects on portions

of code which were running without bugs.

• IT Department is constantly blamed for low customer satisfaction and, eventually,

customer base reduction.

2.4 Center of Excellence

The Center of Excellence is a perennial organization with the goal to provide

knowledge, best practices and coaching, facilitating the implementation and support

for the DevOps processes and practices (Figure 6).

2 Results were anonymously recorded, so each one could feel comfortable in exploring pain points.

Page 10: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 10

Figure 6: Center of Excellence

Stakeholders from multiple organization teams should participate in Center of

Excellence meetings forming two separate groups: strategic and tactical:

• Strategic, is a committee formed by mostly managers and/or stakeholders, whose

main responsibilities are to resolve general deadlocks, define guidelines and

processes. Meetings are taking place every 15 days.

• Tactical, is a committee formed by mostly key professionals, whose main

responsibility is to actually drive DevOps transformation as defined by the

Strategic Committee. Meetings are taking place every week.

2.5 Squads

A Squad in this context is a multidisciplinary team assembled to implement Continuous

Delivery Pipeline for a specific software system (see section 3). Squads are managed

by the Center of Excellence (see section 2.4) – the basic responsibility of each squad

is to develop and maintain:

• Tests during project timeline.

• Automation for infrastructure and applications.

• The DevOps framework and related integrations.

N.B.: In this Project, we were able to put in place two squads.

Page 11: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 11

2.6 Velocity and Quality

To acquire velocity, IT organizations must go through fundamental changes. However,

quality is essential and must be pursued as well. Critical points to achieving velocity

and quality are:

• Automating testing processes (see section 3).

• Removing bottlenecks in the process of creating value to the customer from the

beginning of product life-cycle.

• Implementing trunk-based development (see section 4.2).

• Creating a discipline of development using the concept of Feature Flags (see

section 4.1).

3 Continuous Delivery Pipeline System

This section describes steps taken to implement pipelines of continuous

integration/delivery:

• Conceptual Pipeline Describes what conceptual pipeline should be (see section

3.1).

• Architecture and Tools Briefly describes our work in analyzing and proposing a

set of tools and underlying architecture (see section 3.2).

• Pipeline in the Cloud One of our first challenges was that our Client did not

provide necessary infrastructure upfront, so we decided to build a conceptual

pipeline off-premises, using a commercial cloud service to serve as Proof of

Concept (see section 3.3).

• Pipelines on Premises Immediately after infrastructure was made available we

migrated the Proof of Concept to our Client’s infrastructure (see section 3.4).

• Potential Improvements General discussion on opportunities to improve and

address common issues (see section 3.5).

3.1 Conceptual Pipeline

A Conceptual Pipeline is, as made clear by its name, a pipeline of continuous

integration/delivery, with steps and quality gates to ensure quality software is deployed

(Figure 7).

Page 12: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 12

Figure 7: Conceptual Pipeline

The conceptual pipeline shown in Figure 7 served as model and, at the same time, as

a road map proposition highlighting important aspects such as:

• Pipelines should support various “states” (pre-commit, commit, QA, acceptance

and production).

• “Everything” is code (application, infrastructure and compliance).

• Quality Gates should also be in place to guarantee if pipeline is healthy, enforcing

only good product is moving forward.

• Compliance is clearly met (for example, COBIT and PCI validation stages).

3.2 Architecture and Tools

An important deliverable was presented as a result of extensive study on which tools

should be put in place to best suit our Client’s needs. We started this analysis based

on a set already in place (Figure 8), and in our Client’s best interest, we proposed a

complementary set of tools that would enable implementation of a Continuous Delivery

Pipeline System (Figure 9).

Page 13: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 13

Figure 8: Tool Set in Use

Figure 9: Proposed Tool Set

Finally, the basic implemented architecture depicted in Figure 10 makes it easy to see

which tools were to be integrated and actually used.

Page 14: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 14

Figure 10: Basic Architecture

3.3 Pipeline in the Cloud

Our project expected the customer to provide the necessary infrastructure to install a

Continuous Delivery Pipeline System. However, since it was not available upfront, we

decided to create an environment in the cloud fully implemented with an “as code”

approach with the sole purpose as Proof of Concept.

This approach proved its value further on, since we successfully moved our

Continuous Delivery Pipeline System to our Client’s premises with “minimal” effort (see

section 3.4).

The following strategy was devised:

• Every tool should be a Docker container, enabling us to avoid the required steps of

its installation and focus solely on the configuration.

• A Git repository should be used for each tool to keep versions of the dockerfile, as

well every configuration file used to create the tool container.

• kubeadm tool to automatically create the Kubernetes cluster.

• Vagrant to start up the whole solution.

• Ansible playbook.

• A cloud provider subscription to hold the servers.

• A “Hello, world” application in Java language managed by Maven.

Page 15: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 15

• Last but not least, a Continuous Delivery Pipeline was created for a “Hello, world”

example application.

3.3.1 Git Repositories

Every container specification, configuration and installation commands were saved in a

Git repository, allowing us to keep track of every change made to the environment:

• framework-vagrant.git. Contains the Vagrant configuration to create the four nodes

used in the solution all together with the provisioning script that installs the whole

solution. This provisioning script does the following tasks: clones Docker

repositories, builds every necessary Docker image, installs the Kubernetes cluster,

and performs the startup of the tools (e.g. Jenkins, Nexus, Grafana, InfluxDB, etc.).

• framework-kubernetes.git. Contains the Ansible playbook which installs the

Kubernetes cluster.

• framework.git. Contains the Kubernetes configuration files that starts the used

services.

• framework-jenkins.git. Contains the dockerfile, configuration files, and test scripts to

build, configure, and test the Jenkins container. Each configuration is specified in

the Groovy Language. No manual configuration is made after the Jenkins server is

running.

• framework-influxdb.git. Contains the dockerfile, configuration files, and test scripts

to build, configure, and test the InfluxDB database container. The outcome is an

InfluxDB with a database called pipeline.

• framework-grafana.git. Contains the dockerfile, configuration files, and test scripts

to build, configure, and test the Grafana dashboard container. The outcome is a

Grafana server with pre-configured dashboards.

• framework-gitlab.git. Contains the dockerfile, configuration files, and test scripts to

build, configure, and test the GitLab container.

• framework-nexus.git. Contains the dockerfile, configuration files, and test scripts to

build, configure, and test the Nexus container.

• framework-sonarqube.git. Contains the dockerfile, configuration files, and test

scripts to build, configure, and test the SonarQube container.

3.3.2 Kubernetes installation with Ansible and kubeadm

An Ansible playbook was implemented to:

• Install all operational system prerequisites.

Page 16: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 16

• Install Kubernetes through the kubeadm utiliy.

• Build every container tool container (Jenkins, SonarQube, Nexus, etc).

• Deploy the Jenkins container in the Kubernetes cluster.

3.3.3 The “Hello, world” Continuous Delivery Pipeline

A “Hello, world” Java application was created to demonstrate how a Continuous

Delivery Pipeline should function.

The pipeline (Figure 11) is composed of the following Jenkins jobs:

• Commit. This job runs after a developer gives a git push command. The git push

command sends all code modification made by the developer to the central

repository. A webhook is triggered automatically, starting the job. The following

steps happen inside the commit stage: build, unit test, static code analysis,

packaging, and publishing to the Nexus artifact server. As a final step, the commit

stage calls a job to publish the new application version to the Infra Job.

• Infra Job. This job runs after any modification to the Infra Git repository occurs or

by being triggered as the last step of the commit stage. It is responsible for

creating a Docker container that contains a Java Tomcat Web Server and installing

the pre-built application inside it. After the Docker image is ready, it is then

published to the Nexus registry server. As a final step, the infra stage calls a job to

publish the new container version to the Dev Deploy Job.

• Dev Deploy Job. This jobs runs after being triggered by the infra repository. It

deploys the new created docker container as a Kubernetes deploy and a

Kubernetes service to access the web interface of the container. Several tests are

then executed to ensure the image and the software are functioning properly.

After the tests are successful, the E1, E2, E3 and PP jobs are called in parallel3.

• E1, E2, E3 and PP Deploy Jobs. These are similar to the Dev Deploy Job – actually

performing a deploy in a specific environment as well performing several tests to

ensure the application is working properly. E1, E2 and E3 Jobs finalize with no

additional steps, and PP Job starts a Prod Deploy Job as its last step.

• Prop Deploy Job. This is the actual final deploy in production, which creates a

Kubernetes service to access the newly deployed application.

3 En stands for tracks 1 to 3 (see section 1).

Page 17: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 17

Figure 11: Dashboard for the “Hello, world” Pipeline

3.4 Pipeline on Premises

Just after the on-premises infrastructure was made available, a Continuous Delivery

Pipeline System was installed. However, a new challenge emerged: per our Client’s

policies, no Internet access was allowed, impeding the installation of Docker containers.

With the project time line under severe pressure, a workaround was devised.

Containers were downloaded and created by connecting a laptop outside Client’s

properties, and finally brought each container as a Docker registry server manually

pushed into the local Nexus repository.

A script was then created to install Kubernetes using these containers from the Nexus

repository. Doing so enabled us to use all the tooling Git repositories to build and

install the tools inside the Kubernetes cluster.

A slight improvement was made to the dashboard – now users may select which

Software Factory (“Fábrica”), Application (“Aplicação”) or Component (“Componente”)

they are willing to watch (Figure 12).

Page 18: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 18

Figure 12: Final Dashboard

3.5 Potential Improvements

While our strategy prescribes full Internet access in order to download images to be

used by the Continuous Delivery Pipeline System, we understand many corporations

may consider this a potential safety breach.

Initially, one may look at this problem with the biased opinion that Information Security

Department “likes to play in the safe zone”. However, the true reason is that all

departments should be involved from the very beginning, creating a culture where risk

is thoroughly discussed, and necessary actions are agreed upon.

In our experience, this was a tough issue that actually put the project plan in jeopardy,

so we believe our initial approach should have proposed a compromise such that

necessary components were made available by a “special task force” with sufficient

privileges to access the Internet to build whatever is necessary (Figure 13).

Figure 13: Workaround to Allow Downloading New Images

Page 19: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 19

Though obvious now, proposing such an alternative during our first meetings with the

Information Security Department might have saved a lot of time and effort.

4 Development Practices (in Theory)

In this section, we discuss two software development best practices that are enablers

of enterprise grade continuous deployment models, and which help the development

team to directly address two of their main pain points.

One of the consequences of the old development model is that developers (from

multiple companies) periodically had to work during weekends, late shifts and, in some

cases, pull all-nighters, in order to push features into production or merge changes into

testing environments at the right time. Both feature pushing and code merging can

benefit from a simple software development practice, namely the introduction of

Feature Flags (or Toggles [17]) in the applications’ code.

There may be a spectrum of Feature Flags characteristics [17], but two distinguishing

dimensions are their activation dynamism and their span of life (“longevity”). Two main

groups in this space immediately serve our purposes:

1. Short-lived, statically-configured Feature Flags are enablers of the so-called

Trunk-Based Development practice, which avoids excessive repository branching

and merging; and

2. Long-lived, strategy-activated flags enable behavioral changes in a running

application, turning features on/off at the right time, for the right users, with no

downtime and hands-free operation.

We will discuss the theory behind both practices in the sub-sections below and how we

applied them in practice in the subsequent section (Sec. 5).

4.1 Feature Flags

Developing software using Feature Flags allows developers to conditionally execute

alternative code blocks – whether encapsulated within if-then-else statements (Figure

14) or using polymorphic dispatching –to better control software releasing. The

practice of using feature flags while deploying software with new features that are

initially turned off but that will be turned on at a future point (manually or automatically)

is also called dark launching.

Page 20: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 20

Figure 14: Anatomy of a very simple Feature Flag

This technique – a central component of the DevOps practice – allows for granular

control of features going into production. Its main characteristics are:

• Enables developers/operators to modify system behavior without changing code

• To deliver new functionality to users rapidly but safely, as features can be turned

off quickly in face of problems.

There are also a few downsides in their use since feature flags introduce complexity

and technical debt, which easily accumulate if not dealt with in time. When developing

in this manner, developers should remember to:

• Constrain the number of toggles

• Guarantee that flags should be queried only once

• Remove flags as soon as possible

To clarify these concepts, Table 1 presents a simple comparison between concerns

developers should be aware of when working using Branching Codebases and Trunk-

Based Development.

Table 1: Comparing complexity

Technique When developing... When releasing...

Branching Codebases Changes being made. Merging, testing, and

rewriting a lot of code.

Trunk-Based

Development

Changes being made and

how these changes can be

safely deployed.

No work.

N.B.: As Proof of Concept we implemented a feature flag example in the “Hello,

world” Java application (see section 3.3.3) using Togglz.

Page 21: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 21

4.2 Trunk-Based Development

When multiple teams are changing the same software module, the first one that

reaches final user approval must be promoted to production. As this process is being

repeated for each new version of the same module, and since testing is not

systematically performed, it is easy to perceive that this new version of the same

module will probably disrupt the version that was in production. This is commonly

called “merging hell”.

One technique often used to avoid merging hell, is Trunk-Based Development, where

software branching is eradicated from the development process. Therefore, each

developer actually works in the main trunk of the source code. Each change must be

tested and checked so modules are always updated and merging conflicts are early

identified and corrected (Figure 15).

Figure 15: Flow vs. Trunk-Based Development

The concept seems simple, but its implementation might be tricky since it had to be

applied to a live software system. In other words, we had to provide options that would

allow moving from the development in tracks adopted by our Client (see section 1).

With this in mind, two strategies were presented (Table 2):

Table 2: Strategies to Achieve Trunk-Based Development

# Description Pros Cons

1 Big Bang, i.e. convert

each track to Trunk-

Based Development in

waves according to its

release date (see

section 5.1).

Nothing is left behind

and could be

implemented in quite

short time span.

Developers not trained

in Feature Flags and

Trunk-Based

Development

techniques could spoil

the whole thing.

Page 22: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 22

2 Convert by

modularizing the code

(see section 5.2).

Smaller portions of

code would be moved

into Trunk-Based

Development, low

impact in current

working flow.

Software architecture

had to be redesigned

(since it was not

modularized).

“Trunk-based development is likely the most controversial practice

discussed in this book [...] However, the data from Puppet Labs’ 2015 State

of DevOps Report is clear: trunk-based development predicts higher

throughput and better stability, and even higher job satisfaction and lower

rates of burnout.” [2]

5 Development Practices (in Practice)

While planning development strategy migration paths alongside the Client, we were

faced with a few possible scenarios, each of which exhibiting different tradeoffs. We

discuss the main aspects of our decision below.

5.1 Big Bang Approach

This approach proposes the following (Figure 16):

1. Migrate pre-production track from SVN to Git (historical information will then be

kept in SVN, only to be used as reference).

2. For each track, at the end of its each deployment and acceptance cycle, also

migrate to Git (i.e. checking-in code to Git instead of SVN). Traditional branching

technique still applies.

3. While Git conversion is taking place, implement automation for build, unit testing,

compliance and change management.

4. After all three development tracks are finished converting to Git – and only then –

start Trunk-Based Development (this also means that Feature Flags must have

been absorbed by the development team).

Page 23: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 23

Figure 16: Big Bang Strategy

N.B.: Production track, after conversion, will contain only deployed code. Therefore,

no “source code” would be kept for it.

General considerations:

• Conversion occurs in a relatively short period.

• Only one pipeline shall be created.

• Drives the whole team to practice quality gates for any new feature, or

maintenance for existing ones.

• Manual build and deploy tasks are kept to a minimum.

• Measurement of unit test, code static analysis and compliance made possible for

the whole system.

• Merging hell is eliminated very early in the process.

• Ceases the growth of technical debt.

• There will be higher effort and complexity.

• It will be necessary to massively resolve eventual issues, probably indicating that

a larger team should be put in place.

• All development teams will be affected, however expected transition time will to

be short.

• Probable productivity reduction in the beginning due to necessary change in the

development culture, especially as a side effect of the implementation of quality

gates.

• The whole team will face the complexity of applying Trunk-Based Development

and Feature Flags.

Page 24: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 24

5.2 Componentize Approach

As an alternative, this approach forebodes a transition in steps by “extracting” parts of

the whole system into smaller components. Each new component is then migrated to

Trunk-Based Development using Feature Flags technique as needed.

In this case, software system architecture must undergo an important change by

creating libraries of common code which will be used by “more specialized”

subsystems. This construction will be in the following phases:

1. Componetization.

2. Implementation of continuous integration for the common code.

3. Implementation of continuous delivery for generated artifacts.

General considerations:

• Allows for a fast delivery upfront, since it will be applied for an isolated part of the

application.

• Requires a long term planning in order to allow partial migrations of source code

to the new model.

• Imposes a different method of work for each portion of the source code.

• Isolation of the source code will lower the risk and will serve as “lessons learned”

for the future work.

• Will not create a DevOps culture upfront.

• Each development track will likely have its own independent code.

• It will be necessary to implement five different pipelines (production, pre-

production, tracks 1 to 3).

• Merging code complexity will be likely increased.

• There will be a high effort in changing the entire software architecture.

5.3 And the Selected Strategy Was...

Considering the software system complexity and the fact that development is currently

being performed by a third party, our Client chose option #2. We believe the main

reasons for this choice were:

• Fear of applying such change in culture.

• Unfamiliarity with the advocated techniques (Trunk-Based Development and

Feature Flags).

Page 25: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 25

• Criticality of the software system under analysis.

• Poor software architecture.

• Pressure from the third party in charge of the development.

6 Conclusions

It is clear that velocity and quality are key factors in gaining and sustaining customer

base, especially in a challenging market such as telecommunications, where

competition is fierce. Today, customers anticipate and expect the same experience as

they receive from Amazon, Uber, Airbnb and so on – and they expect that from the

same enterprises that provide access to these services.

These enterprises are pursuing velocity and quality by moving traditional software

development life cycles to another level, breaking barriers from teams that used to

work apart – from conception to operation, from ethereal definitions to actual product

delivering, changing the concept of “done” to something that provides the final user

with quality.

Citing just a few known issues is easy and most certainly common to usual product

releasing: no source code control, no systematic testing, no traceability of changes,

conflicts generated by multiple parallel software developments and poor system

architecture.

Particularly when software development occurs on uncontrolled multiple parallel

environments, situations derail what is usually called merging hell, when changes must

be finally converged to what is really going into production. This can be avoid by using

Trunk-Based Development.

As developers converge to Trunk-Based Development, issues may appear that are

related to deployments of evolving features in the same modules upcoming integration

situations. This can be avoided by using Feature Flags.

Of course, it is not easy to shift from development being performed on branches to

Trunk-Based Development and Feature Flags, as this requires a transformation in

culture and establishing a mind-set of writing code with quality.

The final step to achieve quality and velocity is to implement a Continuous Delivery

Pipeline System, where each new software feature is created, logged in the source

code tool, compiled, tested and automatically deployed in an ephemeral, immutable

and idempotent infrastructure.

It is necessary to point out that engaging personnel from our Client was one of the

toughest jobs, so we advise that an effective communication plan be put in place and

several meetings and workshops must occur to evangelize all hierarchy levels.Keep in

mind that we are advising a deep change in development methods and techniques,

Page 26: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 26

introducing fundamental remodeling in software architecture, and advocating that

barriers should never exist in a corporation.

Last but not least, such profound transformations are likely to directly impact how third-

party software factories are contracted, measured and/or remunerated.

References

[1] Vincent Driessen. A successful Git branching model

http://nvie.com/posts/a-successful-git-branching-model/

[2] Gene Kim, Jez Humble, Patrick Debois and John

Willis. DevOps Handbook

[3] Ansible. Simple IT Automation

https://www.ansible.com/

[4] Docker. Software technology providing containers

https://www.docker.com

[5] Java. The Java Programming Language

https://java.com/

[6] Jenkins. Continuous Integration and Continuous

Delivery https://jenkins.io/

[7] Git. Git is a free and open source distributed version

control system https://git-scm.com/

[8] GitLab. Web-based Git repository manager

https://gitlab.com/

[9] Grafana The open platform for analytics and

monitoring https://grafana.com/

[10] Groovy. The Apache Groovy programming language

http://groovy-lang.org/

[11] InfluxDB. Time Series Database Monitoring &

Analytics https://www.influxdata.com/

[12] Kubernetes. Open-source system for automating

deployment, scaling, and management of

containerized applications https://kubernetes.io/

[13] Maven. Apache Maven is a software project

management and comprehension tool

https://maven.apache.org/

[14] Nexus. Open Source Governance for DevSecOps

Innovation https://www.sonatype.com/

Page 27: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 27

[15] SonarQube. Continuous Code Quality

https://www.sonarqube.org/

[16] SVN. Apache Subversion

https://subversion.apache.org/

[17] Pete Hodgson. Feature Toggles

(aka Feature Flags). October 9,

2017. https://martinfowler.com/articles/feature-toggles.html

[18] Togglz. Feature Flags for the Java platform

https://www.togglz.org/

[19] Vagrant. Tool for building and managing virtual

machine environments in a single workflow

https://www.vagrantup.com/

Page 28: STARTING A DEVOPS JOURNEY IN A TELCO IN BRAZIL...evangelized on general topics related to DevOps discipline (see section 2.1). • Performing Interviews, 1-on-1 conversations with

2018 Dell EMC Proven Professional Knowledge Sharing 28

Dell EMC believes the information in this publication is accurate as of its publication

date. The information is subject to change without notice.

THE INFORMATION IN THIS PUBLICATION IS PROVIDED “AS IS.” DELL EMC

MAKES NO RESPRESENTATIONS OR WARRANTIES OF ANY KIND WITH

RESPECT TO THE INFORMATION IN THIS PUBLICATION, AND SPECIFICALLY

DISCLAIMS IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A

PARTICULAR PURPOSE.

Use, copying and distribution of any Dell EMC software described in this publication

requires an applicable software license.

Dell, EMC and other trademarks are trademarks of Dell Inc. or its subsidiaries


Recommended