Refers to software that has been evolved through various versions (e.g., 1.0, 2.0, 3.0, etc.) by adding an additional software layer to the older version, solving certain bugs, and adding functionality. The result is software that can, over time, become bulky, with multiple layers whose interactions are often poorly understood. Layer cake architectures are common where earlier versions of the software were bought in from a third party or were inadequately documented, making it difficult to change the older version of the software by making direct edits to its code. Each successive layer then becomes equally difficult to change, leading to more layers, until the result is a huge, unstable pile of code.