18th February 2019
Here’s a handy list of commonly-used terms, acronyms and buzzwords that you’ll need to know if working with or within the world of software development, digital design and open source. Whether you are a business-user needing to understand the meaning of the tools, technologies & methodologies used by your IT department or a developer exploring new topics, tutorials & documentation, this will help you get there faster!
A technical project management methodology with a philosophy centred on enabling rapid product iteration to improve both time-to-market and market responsiveness.
While a significant industry has grown around Agile with instituted norms, conventions and disciplines the Agile philosophy only describes four binary prioritizations:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
The antithesis to Agile is Waterfall, in fact, Waterfall implicitly reverses the above prioritizations. Enterprise organisations undergoing Digital Transformation typically adopt an Agile planning approach in isolation to pre-existing Waterfall strategies.
Here is a Glossary of Agile Terms.
Apache Kafka is an open-source, stream-processing, software platform written in Scala and Java. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. Its storage layer is essentially a “massively scalable pub/sub message queue designed as a distributed transaction log,” making it highly valuable for enterprise infrastructures to process streaming data
An acronym standing for Application Programming Interface. An API is essentially a contract. Systems are composed of groups of logic. Whenever a group of logic has a discrete boundary, a predefined way to interact with that group of logic must be exposed. These logic groupings may be in the form of Components, Services, Classes, Modules, Lambdas, Middleware, Plugins, Functions, or Servers. These words can also mean different things in different contexts, but they are always groups of logic. In every case, an API is required to allow for coordination between logic groups. In an Enterprise engagement context, developers would need to know relevant API’s in order to integrate a solution against pre-existing technologies in the business.
API access controls and gateways
Essential technical security layers that are responsible for allowing or denying access based on authorized identity, quotas, geographical origin and any other aspects as specified by business or legal policy.
Generally the server-side. Depending on the context, may also refer to the logic that is further back than logic close to the front. For instance, Back end could refer to a Node.js implementation when spoken of in the context of a React + Node implementation, whereas it may refer to a legacy system when spoken of in the context of a Node implementation built atop a clients Legacy API.
Business Intelligence. A key focus for Enterprise organisations undergoing Digital Transformation. Requires the integration of tools, processes, workflows and cultural changes in order to provide a technology backbone that allows for the collection, analysis and reporting of Big Data such that it informs the decision-making and strategic outcomes.
In order to allow collaboration with minimal conflict, developer teams use a Version Control System. A commit can be thought of as a snapshot of development work that a developer creates in order to add code to a project. These snapshots are linked together so that the entire development history of the project is available. This allows for a project to be distributed across people, all one needs to do is keep the commits synchronized. A remote repository is typically the source of truth for all commits, developers will push their commits to this repository and pull others commits from it.
Someone who regularly commits to a remote repository. See Commit.
An isolated environment which provides a discrete boundary around code. Containers support the decomposition of functionality into Microservices by providing a light-weight way to isolate each service – essentially sandboxing it from other services to reduce risk. Services could be deployed on multiples Virtual Machines or on multiple Bare Metal machines to achieve the same effect but this would be vastly more expensive. Enterprise organisations undergoing Digital Transformation will typically use Containers to deploy their Microservices. Docker is the tool of choice for Container development while Kubernetes is the winning platform for the deployment of Containers.
Continuous Integration/Continuous Deployment. When used in a discussion this acronym relates to the tooling required to enable incremental changes to a code base (integration) and incremental deployments of that code base. This tooling is essential for projects that have adopted an Agile approach.
A system which has been carved up into logical pieces which are independently deployed. These lead to the need for communication between parts of the system over a network, and the need to think differently as to how state is managed. The Microservices architecture is a common example of a distributed system.
In a Distributed System there must necessarily be communication between parts of that system. In order to effectively manage a system diagnostic tooling is essential. A centralized system (often referred to as a Monolith) can be inspected with relative ease, whereas a decentralized system is communicating state and causing chain reactions over a distance. Distributed Tracing provides holistic insights into the interactions of different parts of a Distributed System.
As a basic level, integrating an awareness of User Experience (UX) into every aspect of the business. The idea behind Design-Thinking is to inject design intelligence into an organisation by connecting the organisation more closely with user feedback, design principles and prototyping. Design-Thinking closely aligns with Agile planning. Enterprises undergoing Digital Transformation my move their culture towards Design-Thinking in order to improve their understanding of the market and build more valuable products.
A methodology arising from the intersection of multiple cultures, primarily UX and Agile development. Part of the Design-Thinking movement, Design Sprints follows the same methodology as a typical Agile Sprint at a holistic planning level whilst mandating a five-phase process that centres around rapid exploration and iteration on user feedback within each sprint. The term “Design” here has less to do with visual design, and far more to do with Product Design and UX.
A portmanteau of Development and Operations. A person in the DevOps role is responsible for automating, configuring and managing the deployment of a system. DevOps are important to Agile development because traditional Operations (or SysAdmins) are geared towards the more traditional Waterfall workflows. That is, they are used to Big Bang deployments rather than the incremental iteration required by Agile development. The only way to keep up with the speed of development that Agile produces is to automate Operations, but automation tends to require a developer mindset, hence DevOps.
Once Operations has been automated, due to a lack of context Security teams typically become the next bottleneck in Enterprise operations. While DevOps seeks to remove the logistical barriers typically caused by traditional Operations (or SysAdmin) workflows, DevSecOps also represents a restructuring away from a siloed Security Team and instead puts the security onus on DevOps.
A Container management tool.
Depending on the reference point, this can either refer to the code used to build the UI (client-side code), or to the code that runs at the “front of the back”, that is server-side code that is public facing. More commonly the former, but Enterprise clients can sometimes use it to refer to the latter. To further explain by association, the client-side code would be built in React, whereas server-side would be built in Node.js.
Concerns core competencies with all (or most) parts of an application stack. For instance, one who is proficient in both Back end and Front end programming (in the sense of client and server side) may be referred to as Full stack. The term is subjective however, client/server ability may not be enough to be considered Full stack by some, who may throw in DB admin, DevOps or CSS requirements in order to be considered “real” Full stack.
InnerSource is the use of best practice open source methods inside your organisation to get some of the advantages of the collaborative way of building open source software. It brings a change of culture to the business allowing employees to free up their work through transparency and cross-collaboration. Speed, quality and typically much happier developers result.
A dynamic programming language that is used for both Browser programming and Node.js programming. Dynamic here means it can understand code straight away and run it (that is, it can read and act out a script), whereas Compiled languages must first go through a transformational process that turns them binary code that is executed independently. This dynamic aspect allows for a rapid development feedback loop vs compiled languages.
An extremely popular Container deployment platform. The DevOps juggernaut that is Kubernetes seems unstoppable. We’ve been using it longer than most and it’s our de-facto standard for customer deployments, whether stock, AKS, EKS or OpenShift. However, it’s not the solution to every problem and there are many use cases where a Serverless approach may be more appropriate.
Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano. It was developed with a focus on enabling fast experimentation.
A portmanteau of Middle and Software. Every technical product has a Software Stack. Middleware is an independent piece of logic that is designed to be inserted somewhere in the middle of that stack. In a Node.js context, Middleware is typically associated with Web Frameworks and supply generic/shared functionality for Web-facing products.
A distributed architectural approach centring around the division of logic into business domains that correspond to logic deployed in individual processes. This is opposed to centralizing all logic into one process (Monolith) or a small number of processes (Service Oriented Architecture/Coarse-Grained Services). One reason for using Microservices is to isolate risk. If functionality is grouped into one process, the risk of 100% malfunction is high. If functionality is divided across many independently deployed services, failure is isolated only to a small portion of the product. Another reason is it allows for an organisational transformation through de-siloing. By grouping functionality into domains, Enterprise organisations can gradually restructure a few very homogenous teams into many small cross-discipline specialists teams.
For these (and other) reasons, Enterprise organisations undergoing Digital Transformation typically choose a Microservices architecture. The trade-off of Microservices is in exchange for reducing development maintenance overhead it adds Operational complexity, which drives a need for DevOps.
Minimum Viable Product. When following an Agile methodology the goal is to get the product to the market as soon as possible and then use market feedback to iterate upon the product. In order to find the fastest path to market, the product must be defined with the minimum amount of functionality and features required for it to meet the business case. Due to stakeholder politics, enterprise companies tend to find it challenging to commit to an MVP, so there is usually pressure on the design and development teams to extend the scope of the product. This, in turn, causes delays which then causes friction between design/developers and the business.
Open innovation is a term used to promote a progressive mindset toward sustainable innovation that runs counter to the ‘not invented here’ silo mentality of traditional corporate R&D. Embracing and adopting open innovation is to build from open and in the open – building from open source software (OSS) and hardware; being open to new ideas; with open collaboration across the organisation and with external parties; and with a more open approach to continuous user-centric development.
Throughout the years several factors have emerged that paved the way for open innovation:
- The increasing availability and mobility of skilled workers
- The growth of the venture capital market
- External options for ideas sitting on the shelf
- The increasing capability of external suppliers
These four factors have resulted in a new market of knowledge. Knowledge is not anymore proprietary to the company. It resides in employees, suppliers, customers, competitors and universities.
Open-Source Software (OSS)
A competing philosophy against Proprietary Software. Popularized by the Linux Operating System, one of the first OSS projects, this is an approach to development where Intellectual Property is publically developed. While this seems counterintuitive, it allows for alternative business models, encourages pro-bono collaboration from industry-leading engineers and when properly wielded can have powerful marketing value. Enterprises undergoing Digital Transformation typically adopt an OSS consumption strategy because it allows them to quickly use free, publicly available IP to rapidly grow their product. The trade-off is that if the organisation’s in-house talent does not have the skill level to modify every part of the OSS products they are using, it can cause maintenance friction and potentially lead to security vulnerabilities.
Progressive Web Apps are web applications that conform to the PWA checklist (https://developers.google.com/web/progressive-web-apps/checklist). Essentially an offline-first responsive web application that can be also added as a native application on mobile and desktop. Adding applications natively can be good for branding, whilst developing one web application (rather than one web app and one native app) drastically cuts the costs of a dual approach.
A very popular Front end (UI) framework.
A hosted application environment, using the Function as a Service (FaaS) paradigm. It requires logic to be broken into isolated single functions (the smallest feasible unit of functionality, smaller than Microservices) that are then independently deployed into a ready-made Distributed System. The operational overhead for Serverless deployment is very low since it’s entirely managed by the Serverless provider. However, fees are calculated on resource usage, and the compute cost is higher relative to managed deployments. Serverless can provide an even higher level of development iteration speed, however, it lacks some of the flexibility of self-managed deployments and almost always needs to work in tandem with a more traditional solution due to the stateless quality of Serverless functions. Enterprise organisations may consider adopting Serverless hosting as a counter-option to training/hiring System Admin/Operations/DevOps staff.
A Sprint is an Agile term. It is a reoccurring block of time where development work is done. Prioritization of tasks for the next Sprint and a retrospective of the current Sprint is performed at the end (or beginning) of each Sprint.
Twelve-factor application technology
An application (or system, or product) that he been built using conventions that cover the twelve technical areas of product development, as specified by the Twelve-factor App document (https://12factor.net/). All modern development should broadly comply with the Twelve-factor methodology.
UI – (User Interface)
In a web development context, the visual pieces of the site that we click, touch or otherwise interact with.
UX – (User Experience)
Concerns the ergonomics of user interaction with an application, the behaviour of an application. UX is applied to both make it easy for a user to achieve their objectives and to guide the user into fulfilling business objectives. Due to the complexity of predicting human behaviour, UX starts with basic assumptions and is then continuously iterated upon and improved based on analysis of user interaction.
A workflow whereby a code base is developed in many tiny phases, called Commits, which can be thought of as snapshots, or versions. The code base can be returned to any former version of itself due to this approach. Version Control requires a Version Control System. Git is the VHS of Version Control Systems.
Virtual Machine (VM)
A machine that is simulated using software. This allows one “real” machine (known as Bare Metal), to run many Virtual Machines. Cloud offerings such as AWS and AZURE consist of thousands of Virtual Machines.
A Front end (UI) framework that is rising in popularity.
An outline of a page/application structure for a particular part of the user journey. These are typically used in storyboarding user journeys and to convey layout/semantic structure to the development team.
A traditional technical project management methodology. It involves abstractly defining the entire product up-front and has several phases which are executed in sequential order. For instance, full analysis and documentation of business rules and state management must be defined before designing an architecture. While this seems intuitive, it’s a seductive oversimplification of the real world and leads to rigidity that can stifle innovation and lead to friction and overhead. Waterfall also tends to propagate the misconception that a product can be “finished”, whereas Agile acknowledges and supports the notion that competing in the market requires constant evolution.
We hope you find this list useful and if you have any questions, please feel free to get in touch or reach out to us on Twitter.