# Architectural Principles
## Introduction
Architectual principles are the overall guiding philosophies that Gradle follows. The following list is not exhaustive but captures key and interesting principles
## Principle List
### 1
**Gradle will not make assumptions about how projects should be built.**
While we usually think of a build as a series of steps such as clean, check, assemble, ... Those may not always be exhaustive or necessary for a build. Assuming that a build is comprised of such steps may simplify development at the cost of rigidity.
This principle molded the architectural decision to put the standard build steps in a [BasePlugin](https://docs.gradle.org/current/userguide/base_plugin.html). The usage of the standard steps is not enforced, developers may write their own tasks and dependencies.
### 2
**Gradle will prioritize performance over memory consumption.**
In software, the opportunity to sacrifice memory for performance often arises. Gradle will capitalize on such opportunities by prioritizing performance over memory.
This principle molded the architectural decision of having a [Gradle Daemon](https://hackmd.io/dGIiC6_sRrqdVqo3gRFUmQ#Gradle-Daemon). One of Gradle's main advantage over Maven is its speed (as described in the [context view](https://hackmd.io/_akNR9n0Tg-hRGoQ8AOWGw#Gradle-vs-Maven)). Part of Gradle's performance can be attributed to the Gradle Daemon which is a lingering build process used to save bootstraping time. In some scenarios, this process can consume gigabytes of memory!