Documentation
Definitions (Glossary)

Conglomerate ( Group of companies )

A conglomerate is a corporation made up of several different, independent businesses.

In a conglomerate, one company owns a controlling stake in smaller companies that each conduct business operations separately.

Conglomerates can be created in several ways, including mergers or acquisitions.

The parent company can cut back the risks of being in a single market by becoming a conglomerate diversified across several industry sectors.



Company

A company is a legal entity formed by a group of individuals to engage in and operate a business enterprise in a commercial or industrial capacity.

A Conglomerate contains many companies.



Organization

Organization includes schools, nonprofits, and government customers in addition to companies and conglomerates.



Organizational unit

An organization can be divided into multiple organizational units using combinations of below

  • Divide the organization based on the specialization of its workforce.
    • For example : divide the organization into departments consisting of marketing, sales, hr, finance and operations.
  • Divide the organization geographically
    • For example : NA (North America), EMEA (Europe, Middle East and Africa), APAC (Australia and Asia Pacific)
  • Divide the organization based on the products, projects, or subsidiaries it operates.
    • For example : Divide telecommunication provider into mobile prepaid, mobile postpaid, broadband internet, etc. units

One example of an organizational unit is North America sales.

Another example is APAC broadband internet.

As you can see, we have divided the organization using multiple criteria to create organizational units.

Every organization decides the criteria and how to divide the organization into organizational units.



Software application

Manual work done by employees of each organizational unit has been migrated to software applications.

These software applications belonging to one organizational unit are deployed to the same production environment and use one set/cluster/group/fleet of testing environments per release.

One set/cluster/group/fleet of testing environments is used for Release 1 which is currently in production and another set/cluster/group/fleet of testing environments is used for Release 2 which is being currently developed and so on.



Software Application Component

A software application contains multiple software application components.

Each software application component has

  • Internal architecture like monolith, microservice, etc.
  • External architecture which defines how it is deployed and how it interacts with other software application components.

Multiple types

  • Multiple releases tested in sets/clusters/groups/fleets of testing environments and being supported at the same time. Different releases may be deployed to production environments of different organizational units.
    • Example 1 : Kubernetes has releases 27, 28, 29 and 30 released at the same time. HR organizational unit may be using Kubernetes cluster with release 29 and Marketing organizational unit may have already upgraded to release 30. New developments are happening in release 31 which was released in alpha pre release but currently is in beta pre release. 31 will be released when all kubernetes clusters have upgraded from 27 to 28, 29 or 30.
    • Example 2 : Ubuntu has releases 24.04, 22.04, 20,04, 23.10, 18.04, 16.04 and 14.06 currently supported. Some VMs of HR organizational unit may be using Ubuntu 22.04 while some may still be using Ubuntu 18.04.
    • Core code is owned by product organization.
    • Custom code may be owned by customer organization.
  • One release deployed to production and supported. One release being developed and will be deployed to production on next release date.
    • Code is owned by customer organization.
  • SaaS applications are upgraded automatically by the SaaS team. We need to maintain releases of the configuration, customizations and integrations with other application components.


Types of software application components

TypeDescription
Web FrontendReact, Angular, SPA, Microfrontend, HTML, CSS, Javascript, UX Design, Static CMS
Mobile AppAndroid, iOS
Desktop AppElectron
Backend serviceJava, Python, Javascript, Spring, Django, Express, NodeJS, Monolith/ Microservice
Data Ingestion and TransformationPython, Pyspark, Spark, SQL
BI Reports and DashboardsPowerBI
Embedded / IoT
Robotics
Generative AILangchain, Llamaindex
Non-Generative AI
SaaS Applications Configuration and CustomizationSalesforce
IntegrationMulesoft
BPMBizagi
Automation ScriptsInfraOps, CloudOps, NetOps - Python, Shell scripting


Types of software application components according to Atlassian compass

TypeDescription
ServiceAn independently-deployable software unit that is usually is operated by a person or a team. Services can be as large as monoliths or smaller microservices. Service components have a Tier field to indicate how critical the service is to your business.
LibraryA reusable collection of objects, functions, and methods. A library is typically used by other components.
ApplicationA fully-packaged application, like a mobile application, desktop application, or a CLI-type tool.
CapabilityA higher-level product functionality that end-users understand and in which they see value. A capability is an abstraction of one or more underlying software components that power it.
Cloud resourceAn entity or service provided by a cloud vendor, with consumer-managed configuration and monitoring.
Data pipelineA sequence of tools and processes used to automate the transformation and movement of data from a source to a target system.
Machine learning modelAn algorithm that identifies patterns in a data set and makes predictions over it.
UI elementReusable building blocks of a design system that meet a specific interaction or user interface need and work together to create patterns and user experiences.
WebsiteA single web page or a collection of related web pages under a single domain. Websites mainly consist of audio-visual or text content for reading, listening, or viewing. People can't edit, contribute to, or affect the website content. Websites are typically publicly accessible and don't require authentication.
DatasetA collection of data about a specific topic that can be referenced by code, generally a table.
DashboardData visuals that provide views of key performance indicators relevant to a particular objective or business process.
Data productA governed, self-contained, cohesive, read-optimized data unit.
OtherA component that doesn’t match the service, library, or application type.


Software application components dependencies

Software application components import functions and classes from Libraries / Frameworks and call them using defined parameters and return values.

Software application components are deployed to and use middlewares like language runtimes, databases, messaging, caching, etc.

Middlewares are deployed to Operating Systems.

Operating Systems are installed on Servers.

Servers are deployed to data centers, private clouds and public clouds.

Types of software application component dependencies which need to be developed as well.

  • Libraries
  • Frameworks
  • Middleware
  • Operating systems
  • Virtual machine base images
  • Container base images
  • Infrastructure as code modules


DevOps

  • Each software application component will have its own source code repository, CI/CD pipeline and artifact repositories.
  • In addition to the above, from devops perspective, we need to create one code repository, CI/CD pipeline and artifact repositories for each of the below
    • OS and/or middleware combination base images.
    • Common public cloud and private cloud infrastructure code, configuration and secrets of all software application components of each organizational unit.


Platform

  • A platform is a set of tools that are used to serve a common purpose
  • For example : DevOps Platform is a set of tools to implement DevOps practices to improve speed and quality of software delivery from ideation to feedback

Adopting a platform

  • Platform team has the following responsibilities :
    • Maintain and operate platform tools. This includes customer support, infrastructure, CI/CD and, as your platform grows, on-call support.
    • Drive adoption of customers (developers at your company).
    • Work with senior tech leadership and architects to ensure your organization's best practices for software development are encoded into a set of Software Templates.
    • Evangelize platform towards other infrastructure/platform teams.
      • Arrange "Lunch & Learns" and seminars. Frequently offer teams interested in your platform use or development to come to a seminar where you show, for example, how to build a plugin from scratch.
      • Embedding. As contributing teams start development of their first plugin it is often very appreciated to have one person from your platform team come over and "embed" for a Sprint or two.
      • Hack days. Your platform-focused Hackathons or hack days is a fun way to get people into plugin development.
      • Show & tell meetings. In order to build an internal community around your platform, have quarterly meetings where anyone working or using your platform is invited to present their work. This is not only a great way to get early feedback, but also helps coordination between teams that are building overlapping experiences.
      • Observability
      • Pro-actively identify new plugins. Reach out to teams that own internal UIs or platforms that you think would make sense to consolidate into your platform.

IT organisational unit

  • IT employees responsible for all software applications and platforms.

FAQs

What is a set/cluster/group/fleet of testing environments ?

Each set/cluster/group/fleet of testing environments contains the following testing environments

  • One component testing environment with separate namespace for each application component.
  • One end to end testing environment.
  • One performance testing environment.
  • One relability, chaos engineering and disaster recovery testing environment.
  • One deployment strategy and rollback testing environment.

Why cannot we deploy all software application components of an organization to the same production environment ?

Datacenters and public cloud accounts have hard limits on how many resources can be deployed to them. Therefore, we need to divide the deployment of software application components of an organization to multiple production environments. We could have one production environment per software application. This architecture will be more secure but less cost effective. So, it is better to have one production environment per organizational unit. All software application components of the software applications of the organizational unit are deployed to it.


Why do we need to checkin devops code and testing code in the same code repository as the source code ?

If we checkin them in separate code repositories then they will have different version numbers compared to source code. Plus CI/CD pipeline is trigerred if we merge PR to release branch of source code repository. So if we change devops code or test code we will have to make empty commits to source code repository. We need to add checks in the source code repository on push from local repository to remote repository that developers are not able to change the genai generated devops code. They are supposed to change the testing code but they should not remove actually needed testing code just to pass the tests.