# Determining Specifications

You need to consider the **functional** and **non-functional specifications** of your project.&#x20;

Let's first look back at our content:

{% embed url="https://gosford-high-school.gitbook.io/preliminary-software-engineering/unit-1-programming-fundamentals/4-software-development-and-management/software-development-steps/determining-specifications/functional-specifications" %}
Functional Specifications
{% endembed %}

{% embed url="https://gosford-high-school.gitbook.io/preliminary-software-engineering/unit-1-programming-fundamentals/4-software-development-and-management/software-development-steps/determining-specifications/non-functional-specifications" %}
Non-Functional Specifications
{% endembed %}



## Functional Specifications

**What does the system actually NEED to do?**

* **User Requirements**
  * What does the user need to be able to do? List all specifications here.
* **Inputs & Outputs**
  * What inputs will the system need to accept and what outputs will it need to display?
* **Core Features**
  * At its core, what specifically does the program need to be able to do?
* **User Interaction**
  * How will users interact with the system (e.g. command-line, GUI?) and what information will it need to provide to help users navigate?
* **Error Handling**
  * What possible errors could you face that need to be handled by the system?

## Non-Functional Specifications

**What would improve the system but is ultimately not required?**

* **Performance**
  * How quickly should we try to get the system to perform tasks, what efficiency is required to maintain user engagement? How can we ensure our program remains efficient?
* **Useability / Accessibility**
  * How might you make your application more accessible? What could you do with the User Interface to improve usability?
* **Reliability**
  * What could perhaps not crash the whole system, but could be an issue and needs to be addressed? Data integrity? Duplicate data? API retrieval crash?



