---
# System prepended metadata

title: Views & Viewpoints

---

# Views & Viewpoints

## Introduction

To properly demonstrate that Gradle's satisfies its desired quality properties and meets its functional requirements, we have derived views from a set of common viewpoints. The viewpoints were picked to best describe how Gradle is configured to achieve a user's desired build behavior. We picked viewpoints that allow us to demonstrate Gradle's flexiblity and performance. 

Our context view serves as an introduction to Gradle. Readers will acquire a fundamental understanding of Gradle's functionality, its scope and its interactions with external entities. This hopes to answer simple questions such as "What is Gradle used for?", "Who uses Gradle?" and "Why use Gradle over other tools?".

The functional and information view work together to detail the Gradle [build lifecycle](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Gradle-Build-Lifecycle). After reading both views, readers will have a good understanding of how Gradle achieves its functional requirements. The views also detail the main architectural elements responsible for Gradle's flexibility and performance.

Finally, since Gradle is an open-source project, we describe Gradle's development environment in our development view to address the concerns of Gradle Developers.

## Views
| View | Description |
|--|--|
|[Context View](https://hackmd.io/_akNR9n0Tg-hRGoQ8AOWGw)| Details Gradle's scope and highlights the interactions between Gradle, developers and other external systems. Introduces some of Gradle's functional requirements and desired quality properties.
|[Functional View](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ)| Describes how Gradle's initialization system, configuration system and execution system interact to dictate build behavior as per Gradle's configuration.|
|[Information View](https://hackmd.io/pxTuGPrNQi2Am2p5z5U8Jw)|Describes Gradle's cache and its contribution to Gradle's performance. Addresses flexibility concerns, by describing the role of configuration objects and their relationship to script files.|
|[Development View](https://hackmd.io/YI8MuOzvQMGnbYwZPy316Q)| Shows how Gradle's development environment is arranged to facilitate contributions from the open-source community. |

#### Why is the Concurrency Viewpoint excluded?

Since Gradle needs to be performant, parallelism is crucial. One of the viewpoints that was deemed somewhat important, yet not necessary for a concise architectural description is the Concurrency Viewpoint. 

Gradle currently only parallelizes tasks belonging to different projects. Therefore, once the [task dependency tree is built](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Execution-System), concurrency becomes architecturally insignificant and can be summarized to "execute tasks in parallel that belong to different projects as per the dependency tree". 

This is evidenced by the Gradle [documentation](https://docs.gradle.org/current/userguide/performance.html#parallel_execution).