Agile Acronyms
When you get into any kind of agile software development, you’ll inevitably run into a number of acronyms. Many of these acronyms have been around for a long time, and they represent important concepts and ideas that have been boiled down into a catchy acronym.
Often, an acronym will become so familiar to use that we’ll forget the original meaning. It can be good to go back to first principles and remember the deeper ideas that the acronym is hiding.
Here are some of the acronyms you might uncover:
-
XP: Stands for eXtreme Programming, one of the so-called “light-weight methodologies” whose founders came together and created the Agile Manifesto. XP was created by Kent Beck. Today, even if you’re not “doing XP”, you’re probably using some of its practices, such as TDD, iterative development, or pair programming.
-
TDD: Stands for Test-Driven Development, a style of programming where the developer first writes a test for something the code should do, then writes just enough code to make the test pass, then refactors the code to make sure it is clean and communicates the developer’s intentions. This process, commonly known as the red-green-refactor cycle, is repeated over and over again in very short cycles, taking small steps each time.
-
BDD: Stands for Behavior-Driven Development, a variant of TDD that focuses more on the behavior of the code. BDD uses different terminology in an effort to move away from some of the loaded meanings that the word “test” has in some environments. The same repeated short cycle is still present.
-
ATDD/STDD: Stands for Acceptance-Test Driven Development or Story-Test Driven Development, both extensions to TDD or BDD. These techniques start with a higher level acceptance test or story test from the user, customer, or business perspective. They then use the TDD or BDD cycle to write the code that passes the higher level test.
-
OAOO: Stands for Once And Only Once, the idea that there shouldn’t be duplication in our code. Each idea should be expressed once (because it is important for the idea to be expressed), but only once (so that there isn’t duplication). OAOO is a core part of XP.
-
DRY: Stands for Don’t Repeat Yourself, the same basic idea as OAOO. The DRY principle comes from The Pragmatic Programmer book and is expressed as, “Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.” If there is a difference between DRY and OAOO, it is that DRY might be a bit more focused on knowledge within the code, and OAOO is more focused on the code itself.
-
YAGNI: Stands for You Aren’t Gonna Need It, the idea that we shouldn’t build extra features or flexibility into our software that we don’t have an immediate need for. This is another mantra from XP, and is a way to help us focus on keeping our designs simple. By not “gold-plating”, our code stays simpler and easier to change. Then later, when we do need the feature, it is easy to add because our system has been kept simple.
-
SOLID: Refers to the SOLID design principles outlined by Uncle Bob Martin. The acronym was coined by Michael Feathers. It refers to the Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. Uncle Bob also outlined six additional principles that didn’t make it into a catchy acronym. I’ve written about those packaging principles in a three part series: Part 1 on package cohesion principles, Part 2 on package coupling, and Part 3 on applying the principles.
-
FIRST: Refers to the FIRST properties of good unit tests originally described by Tim Ottinger and Brett Schuchert. Good unit tests should be Fast, Isolated, Repeatable, Self-verifying, and Timely. I wrote about these properties in my recent Getting Testy series, specifically the post on Anti-Patterns.
-
INVEST: Refers to Bill Wake’s INVEST model for user stories. According to this model, a good story must be Independent, Negotiable, Valuable, Estimable, Small, and Testable. See Bill’s original article, INVEST in Good Stories, and SMART Tasks or Mike Cohn’s book, User Stores Applied for more details.
Let me know if there are other agile acronyms you’d like to know more about.