# Perspective
## Introduction
#### Perspective Choice & Justifications
One of our [concerns](https://hackmd.io/bWYLQjmpRiCjD_okjztzfA#Concern-List) states that Gradle should be faster than Maven. We further detail this concern in our the [Gradle vs Maven section](https://hackmd.io/_akNR9n0Tg-hRGoQ8AOWGw#Gradle-vs-Maven) of our context view.
As mentioned throughout the AD, one of Gradle's desired quality properties is performance. We believe that our old AD did not properly address stakeholders' performance concerns. Therefore, we have decided to apply the **Performance & Scalability** perspective on the [functional view](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ) and [information view](https://hackmd.io/pxTuGPrNQi2Am2p5z5U8Jw). We believe that scalability is not an issue, therefore we focus on performance.
Our [development view](https://hackmd.io/YI8MuOzvQMGnbYwZPy316Q) is not relevant to performance. The context view should only enumerate the performance related mechanisms used by Gradle (in the [Gradle vs Maven section](https://hackmd.io/_akNR9n0Tg-hRGoQ8AOWGw#Gradle-vs-Maven)). Therefore, we will not discuss changes to these views.
#### Perspective Goals
After applying our perspective, we would like readers to have a detailed understanding of the architectural elements which render Gradle's builds faster than Maven's.
## Functional View
### Gradle Daemon
We have added a [section detailing the Gradle Daemon](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Gradle-Daemon) in our functional view. Our old AD introduced the Gradle Daemon as a functional component but did not attempt to explain why it is important or how it improves performance. The Gradle Daemon is a lingering background process which consumes memory and reuses the bootstrapping of previous builds to save time.
We believe that after reading the Gradle Daemon section, readers should be convinced that the Gradle Daemon is an architectural element responsible for a considerable performance increase and is significant enough to be modeled in our [initialization component diagram](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Initialization-Component-Diagram).
The Gradle Daemon makes use of the **Reuse Resources and Results** architectural tactic by keeping resources (e.g. initialized libraries) in-memory rather than discarding them.
## Information View
### Build Cache
Our old information view did not address performance at all and focused mainly on flexibility. We've decided to add a [build cache section](https://hackmd.io/pxTuGPrNQi2Am2p5z5U8Jw#Build-Cache) to the information view.
The build cache enables some of Gradle's performance related features such as [incremental builds](https://hackmd.io/wlbMQxXaSmuTBk5hLWpKDQ?both#Incremental-Builds) and [skipping the loading](https://hackmd.io/wlbMQxXaSmuTBk5hLWpKDQ?both#Configuration) of some [configuration objects](https://hackmd.io/pxTuGPrNQi2Am2p5z5U8Jw#Configuration-Objects) during the configuration phase of Gradle's [build lifecycle](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Gradle-Build-Lifecycle).
The build cache also clearly makes use of the **Reuse Resources and Results** architectural tactic by storing task output results on the disk for future reuse rather than discarding them.
## Extra Information
### Concurrency View
Gradle makes use of the **Partition and Parallelize** architectural tactic by partitioning tasks according to their related project and allowing for the execution of tasks to be parallelized provided they are from different projects.
After applying the perspective to our other views, we realized that the concurrency view is important and [provided explanations](https://hackmd.io/NnwgquVhQimoaGkDLurstg#Why-is-the-Concurrency-Viewpoint-excluded) as to why it is not included in our AD in the Views & Viewpoints document.