A Glossary of Some Software Terminology

by Ian Hellström (8 December 2016)

Continuous integration, Docker, Jenkins, Vagrant, DevOps, PaaS, serverless… If you are sometimes confused as to what the latest buzzwords in the tech industry mean, you have come to the right place

The glossary below is obviously not complete nor do I intend to make it so. If you get your knickers in a twist because your tool is not listed, tough luck. If you’re not happy with the list of tools/alternatives I have provided, please go to Slant for pros and cons on many of them, or use your favourite search engine and some search-fu.

Sofware Development

Version Control

What? Software to record every single change to source code
So what? It enables multiple developers to work on the same projects at the same time and go back in time (in terms of revisions)
Tools Subversion
git
Mercurial
Perforce
TFS
Prerequisites N/A
Buzzwords revision control, source control, repository, SCM, VCS, GitHub, Bitbucket

Build Automation

What? Software to manage the compilation process, including library dependencies and automated tests
So what? It’s a pain to manually keep track of all project files, libraries, compiler flags, and automatically run all tests
Tools make
Maven (Java)
Gradle
sbt (Scala)
Leiningen (Clojure)
MSBuild (.NET)
Rake (Ruby)
Prerequisites version control
Buzzwords dependency management, unit testing

Continuous Integration (CI)

What? Software to manage all developers’ modifications and merge these into the mainline
So what? Frequent check-ins of source code changes minimize the number of potential conflicts due to divergent branches
Tools Bamboo
Codeship
Jenkins
Snap CI
Team City
Travis CI
Prerequisites build automation
Buzzwords XP, integration testing, feature toggle, merge hell, integration hell

Continuous Delivery (CD)

What? Approach in which small changes to software are integrated and tested frequently to ensure that each modification can be deployed
So what? It’s the software development practice that goes with CI and it aims to ‘make releases boring’
Tools N/A
Prerequisites continuous integration
Buzzwords DevOps, continuous deployment

Configuration Management

What? Software to manage all necessary configurations to deploy to production
So what? Manually deploying and maintaining too many servers is a Herculean task that borderlines on Sisyphean
Tools Ansible
Chef
Puppet
Salt
Prerequisites continuous integration
Buzzwords DevOps, deployment management

Continuous Deployment (CD)

What? Software to continuously deliver every release to production
So what? To ‘do’ continuous delivery you need tools to deploy to production; continuous delivery and continuous deployment are often conflated
Tools Bamboo
Codeship
DeployBot
Go CD
Octopus Deploy
Snap CI
Team City
Travis CI
Prerequisites continuous delivery, configuration management
Buzzwords DevOps

Virtualization and Containers

Virtual Machine (VM)

What? Software to isolate applications (software) on the same hardware, in which each image has its own OS
So what? Near-complete separation of applications, in which only the hypervisor stands between the physical hardware and the simulated (virtual) environment
Tools Hyper-V
QEMU
VirtualBox
VMware
Prerequisites N/A
Buzzwords hypervisor, emulator

Container

What? Software to isolate applications (software) on the same hardware, in which all images on the same hardware share the same (host) OS
So what? VMs have their own OS but containers share the OS without the need for a hypervisor, so it’s more lightweight than a VM
Tools Docker
LXC
LXD
rkt
ThinApp
Prerequisites N/A
Buzzwords OS-level virtualization

Container Orchestration

What? Software to abstract away the entire infrastructure to automatically provision, discover, and monitor containers in a cluster
So what? It makes managing many containers in a cluster manageable
Tools Amazon ECS
Azure Container Service
Docker Swarm
Kubernetes
Marathon
Prerequisites N/A
Buzzwords service discovery, load balancing, self-healing, automatic scaling, DC/OS

VM Provisioner

What? Software to provide reproducible VM instances
So what? Creation of portable, disposable development environments can avoid the ‘works on my machine’ excuse
Tools Cobbler
Foreman
Packer
Vagrant
Prerequisites configuration management, VMs, containers, DevOps
Buzzwords machine image

By the way, there is a difference between Packer and Vagrant, but for our purposes they are left in the same bucket.

Unikernel

What? Software to provide an image of an application as well as a near-minimal set of the required OS features
So what? Even though containers are more lightweight than VMs, they still contain an entire OS rather than just the features that are really needed
Tools An overview is available here
Prerequisites N/A
Buzzwords single address space operating system

Software Architectural Patterns

Monolith

What? A stand-alone application that incorporates everything from data storage to the user interface
So what? The traditional, non-modular way to build applications
Buzzwords mainframe

Multi-Tiered Application

What? An application that decomposes the different components into common layers
So what? Modularity enables re-use of code; layers in three tiers: data access, (business) logic, presentation
Buzzwords modular, three-tiered, object-oriented design, OOP

Service-Oriented Architecture (SOA)

What? Decomposition of applications into services that communicate via a network
So what? Autonomous services with clear boundaries and a shared schema enable an enterprise to decouple applications
Buzzwords SOAP, JMS, ESB, messaging, client-server, enterprise

Microservices

What? Independently deployable, asynchronous services that do one thing and do it well
So what? Services in a SOA share schema, which means that individual services cannot be deployed separately
Buzzwords REST, API, DevOps, containers, Lagom

Event-Driven Architecture (EDA)

What? Application architecture, for which applications produce, detect, consume, and react to events
So what? It enables automatic activation of (micro)services in a distributed system based on events to maintain consistency among (micro)services across boundaries
Buzzwords message-driven architecture, event stream processing (ESP), complex event processing (CEP), actor model

Event Sourcing (ES)

What? Store state as a sequence of events
So what? Events are (immutable) facts, which means that by simply replaying events we can reconstruct state, which is not possible with CRUD applications
Buzzwords stream processing, journal, transaction log

CQRS

What? Command Query Responsibility Segregation
So what? A splitting of read (query) and write (command) data models and/or storage systems, so that both can scale (almost) independently
Buzzwords event sourcing, command query separation (CQS)

Serverless

What? An accepted misnomer for (ephemeral) hosted services
So what? It takes microservices to the extreme: by having (third-party) services hosted ‘in the cloud’ you do not have to worry about the infrastructure, including scalability
Buzzwords API gateway, functions as a service (FaaS), containers, AWS Lambda

XaaS: X as a Service

What? Cloud-hosted environments for X: software, infrastructure, platform, database/storage, infrastructure, etc.
So what? By having your X in the cloud you don’t have to worry about the details of maintaining and running X
Buzzwords cloud, serverless computing, SPI model (i.e. Saas, PaaS, IaaS)