Software Development Terms

The process of creating software.

Agile
Agile is an iterative approach to project management and software development that helps teams deliver value to their customers faster and with fewer headaches. Instead of betting everything on a "big bang" launch, an agile team delivers work in small, but consumable, increments.
Scrum
Scrum is a framework for project management that emphasizes teamwork, accountability and iterative progress toward a well-defined goal. The framework is structured around fixed-length iterations called sprints, which typically last one to four weeks.
Kanban
Kanban is a method for managing knowledge work with an emphasis on just-in-time delivery while not overloading the team members. It uses a Kanban board to visualize the workflow, limit work in progress (WIP), and maximize efficiency.
DevOps
DevOps is a set of practices, tools, and a cultural philosophy that combine software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality.
CI/CD
CI/CD stands for Continuous Integration and Continuous Delivery/Deployment. It is a cornerstone of modern DevOps. Continuous Integration is the practice of merging all developer working copies to a shared mainline several times a day. Continuous Delivery is the practice of automatically deploying all code changes to a testing and/or production environment after the build stage.
Unit Testing
Unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures—are tested to determine whether they are fit for use.
Integration Testing
Integration testing is the phase in software testing in which individual software modules are combined and tested as a group. It occurs after unit testing and before validation testing.
End-to-End Testing
End-to-End (E2E) testing is a methodology used to test whether the flow of an application is performing as designed from start to finish. The purpose of carrying out end-to-end tests is to identify system dependencies and to ensure that data integrity is maintained between various system components and systems.
TDD
Test-Driven Development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test, and finally refactors the new code to acceptable standards.
BDD
Behavior-Driven Development (BDD) is an agile software development process that encourages collaboration between developers, QA and non-technical or business participants in a software project. It extends TDD by writing tests in a natural language that non-programmers can read.
Code Review
Code review is a software quality assurance activity in which one or several people check a program mainly by viewing and reading parts of its source code. At least one of the people must not be the code's author.
Pull Request
A pull request (PR) is a mechanism in version control systems (like Git) for a developer to notify team members that they have completed a feature. It lets everyone involved know that they need to review the code and merge it into the main branch.
Waterfall Model
The Waterfall model is a sequential, linear approach to software development. In this model, each phase must be completed before the next phase can begin, with no overlapping of the phases. The phases are typically: Requirements, Design, Implementation, Verification, and Maintenance.
Pair Programming
Pair programming is an agile software development technique in which two programmers work together at one workstation. One, the "driver," writes code while the other, the "navigator," reviews each line of code as it is typed in. The two programmers switch roles frequently.
DRY
Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy.
KISS
The KISS principle ("Keep It Simple, Stupid") states that most systems work best if they are kept simple rather than made complicated; therefore, simplicity should be a key goal in design, and unnecessary complexity should be avoided.
YAGNI
"You Ain't Gonna Need It" (YAGNI) is a principle of Extreme Programming (XP) that states a programmer should not add functionality until it is deemed necessary.
Extreme Programming
Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and higher quality of life for the development team. XP is the most specific of the agile frameworks regarding appropriate engineering practices for software development.
Lean Software Development
Lean Software Development is a translation of lean manufacturing principles and practices to the software development domain. It is an agile framework that focuses on optimizing the whole development process to deliver value, and eliminating waste.
SOLID
SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible, and maintainable. These principles are: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion.
Design Patterns
In software engineering, a design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code.
Gherkin
Gherkin is a business-readable, domain-specific language that lets you describe software’s behavior without detailing how that behavior is implemented. It is a line-oriented language that uses indentation to define structure.
Cucumber
Cucumber is a software tool that supports Behavior-Driven Development (BDD). It reads executable specifications written in a natural language (Gherkin) and validates that the software does what those specifications say.
Cypress
Cypress is a next-generation front-end testing tool built for the modern web. It is designed to make it easy to set up, write, run, and debug end-to-end tests.
Playwright
Playwright is a Node.js library developed by Microsoft to automate Chromium, Firefox and WebKit with a single API. It enables cross-browser web automation that is ever-green, capable, reliable and fast.
Sprint
In Agile software development, a sprint is a set, time-boxed period when a scrum team works to complete a set amount of work. Sprints are at the very heart of scrum and agile methodologies, and getting sprints right will help your agile team ship better software with fewer headaches.
Sprint Retrospective
A sprint retrospective is a meeting held at the end of a sprint in which the team reflects on what went well, what didn't, and what they want to change in the upcoming sprint. It is a key part of the "inspect and adapt" philosophy of Scrum.
Product Owner
The Product Owner is a role on a Scrum team responsible for defining the features of the product and managing the product backlog. The Product Owner is responsible for maximizing the value of the product resulting from the work of the Development Team.
Product Backlog
The product backlog is an ordered list of everything that is known to be needed in the product. It is the single source of requirements for any changes to be made to the product. The Product Owner is responsible for the product backlog, including its content, availability, and ordering.
User Story
A user story is an informal, general explanation of a software feature written from the perspective of the end user or customer. Its purpose is to articulate how a software feature will provide value to the customer.
Acceptance Criteria
Acceptance Criteria are the conditions that a software product must meet to be accepted by a user, a customer, or other stakeholder. They are a set of statements, each with a clear pass/fail result, that specify both functional and non-functional requirements.
Definition of Done
The Definition of Done (DoD) is a formal description of the state of the Increment when it meets the quality measures required for the product. It is a shared understanding of what it means for work to be complete.
Software Development Life Cycle
The Software Development Life Cycle (SDLC) is a process used by the software industry to design, develop, and test high-quality software. The SDLC aims to produce high-quality software that meets or exceeds customer expectations, reaches completion within times and cost estimates.
Source Code
Source code is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text.
Programming Language
A programming language is a formal language comprising a set of instructions that produce various kinds of output. Programming languages are used in computer programming to implement algorithms.
Bug
A software bug is an error, flaw or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways.
Debugging
Debugging is the process of finding and resolving defects or problems within a computer program that prevent correct operation of computer software or a system.
Code Smell
A code smell is any characteristic in the source code of a program that possibly indicates a deeper problem. It is a symptom of poor design or implementation that might lead to bugs or difficulties in the future.
Monorepo
A monorepo (monolithic repository) is a software development strategy where code for many projects is stored in the same repository.
Polyrepo
A polyrepo is a software development strategy where code for each project or microservice is stored in its own separate repository.
Static Site Generator
A static site generator (SSG) is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, an SSG automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time.