# Gradle-poet users and scenarios
## Users
1. Build engineer which works with Gradle a lot
2. Kind of ci/cd engineer with software engineer background with JVM i.e. Java backend engineer, android engineer
## Scenarios
### 1.1 User develops independent Gradle plugin for single module project
- Generate a single module project
- Apply their plugin to this project
- Configure plugin extension
- Test plugin's tasks
### 1.2 User develops independent Gradle plugin for multi module project
- Generate a multi module project
- Create dependencies between modules
- Apply their plugin to those projects
- Configure plugin extension
- Test plugin's tasks
### 1.3 User develops Gradle plugin connected with other plugins
- Generate a project
- Apply all needed plugins to the project
- Configure plugins extensions
- Test plugin's tasks
### 1.4 User develops Gradle plugin connected with other plugins, want to test against all supported versions (backward compatibility)
Differs to the previous scenario:
- Apply another version of another/3-rd party plugin, Gradle
- Configure it differently
### 1.5 User develops Gradle plugin related to source code of the project which applied this plugin
I.e. plugins with bytecode transformations, code generation
- Generate a project
- Apply all needed plugins to the project
- Configure plugins extensions
- Generate/Put baseline source code
- Apply dependencies needed by baseline code
- Test plugin's tasks
### 1.6 User develops Gradle plugin related to check or configure execution environment
I.e. gradle doctor, avito build checks plugin
- Generate a project
- Apply plugin
- Setup Environment
- Check environment state
### 1.7 User develops Gradle plugin, wants to check the it complies with all optimizations
To test in all functional scenarios that optimizations works (not disabled implicitly):
- Build cache for tasks
- Configuration cache
- Project isolation
### 1.8 User needs to compare performance of different build configurations
- Generate a project
- Apply plugins
- Configure plugins
- Generate stub files (Kotlin, resources)
- Use this project as an input to run benchmarks (gradle-profiler or others)
> Why can't user use manually created projects?
To make different projects configurations easier.
To reduce cost of maintaining of such test projects (update versions, configuration, ...).
## Non-functional scenarious
### 2.1 If project is configured incorrectly, I want to find the reason easily
Scenario:
- User configured a project
- It fails with unexpected error in runtime
Current implementation:
- Copy generated project manually
- Copy gradle wrapper to be able to run it
- Figure out exact command to reproduce the issue
Ideas:
- Provide an easy way to reproduce and debug this project: ready one line command to run
- Provide more context about generated project and it's internal state