# Plan and Prioritize Features

Once your problem statement and intended outcome is well defined. You'll want to create and prioritize the features that will be included in the bicycle rental application.

This involves breaking down the user stories into smaller tasks and estimating the time and effort required to complete each task. Features should be prioritized based on their importance to the customer and their impact on the overall project.

Test-driven feature development is one the best ways to write and identify features for an application.&#x20;

## Given-When-Then

Given-When-Then is a testing framework that helps to write and organize automated tests by breaking them down into three distinct parts:

* Given: The setup or precondition for the test.
* When: The action or event being tested.
* Then: The expected outcome or result of the test.

This approach helps to create more readable, reusable, and maintainable test cases by making them easier to understand and debug. In the same way this is used to write test cases, we will use it to write the basis of our features.&#x20;

Example features of a bicycle rental application web app using Given-When-Then:

<table data-full-width="true"><thead><tr><th>Feature</th><th>Given</th><th>When</th><th>Then</th></tr></thead><tbody><tr><td>User Registration</td><td>A user is on the registration page</td><td>The user enters their details and submits the form</td><td>The user should be redirected to the login page</td></tr><tr><td>Search Bicycles</td><td>A user is on the homepage</td><td>The user enters a location and a date range to search for available bicycles</td><td>The user should see a list of available bicycles with details such as location, type, and price.</td></tr><tr><td>Rent Bicycle</td><td>A user has selected a bicycle to rent</td><td>The user enters the rental duration and completes the payment process</td><td>The user should receive a confirmation email with the rental details and instructions.</td></tr><tr><td>Return Bicycle</td><td>A user has rented a bicycle</td><td>The rental duration has ended, and the user returns the bicycle to the designated location</td><td>The user should receive a notification confirming the return and the rental charges should be deducted from their account.</td></tr></tbody></table>

While the above provides a great starting place for the core features of our app, it needs further refinement. To refine these features further, we will turn them into user stories.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gdf.ai/gdf-full-stack-engineering/subject-knowledge-areas/ideation/plan-and-prioritize-features.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
