# Extra Reading

#### Functional Requirements

Functional requirements describe what the system should do. They define the specific behaviors, functions, or tasks the system needs to accomplish. For a Machine Learning (ML) system, functional requirements might include:

1. **Input Data Requirements:**
   * What data sources will be used?
   * What format will the data be in?
   * How often will the data be updated?
2. **Output Specifications:**
   * What form should the output take?
   * What actions or decisions should the system support?
3. **Model Requirements:**
   * What type of model is needed (e.g., classification, regression)?
   * What performance metrics are important (e.g., accuracy, precision, recall)?
4. **Integration Points:**
   * How will the ML system integrate with other systems or components?
   * What APIs or interfaces are required?

#### Non-Functional Requirements

Non-functional requirements describe how the system performs a task rather than the specific behaviors or functions. They include quality attributes, constraints, and performance measures. For an ML system, non-functional requirements might include:

1. **Performance:**
   * How quickly should the system produce results?
   * What are the latency requirements?
2. **Scalability:**
   * How should the system handle increasing amounts of data?
   * Can the system scale horizontally or vertically?
3. **Reliability and Availability:**
   * What is the expected uptime?
   * How will the system handle failures?
4. **Security:**
   * How will data be secured in transit and at rest?
   * What authentication and authorization mechanisms are needed?
5. **Maintainability:**
   * How easy is it to update the model?
   * What processes are in place for monitoring and improving model performance?
6. **Compliance:**
   * Are there any regulatory requirements that need to be met (e.g., GDPR)?

#### Driving the Conversation

Once you have clarified these requirements, you can structure the conversation around key aspects of ML system design:

1. **Data Collection and Preparation:**
   * Discuss the sources, volume, and quality of the data.
   * Outline the steps for data cleaning, transformation, and augmentation.
2. **Feature Engineering:**
   * Identify the key features that will drive model performance.
   * Discuss methods for feature extraction and selection.
3. **Model Selection and Training:**
   * Compare different algorithms and justify your choice.
   * Explain the training process, including any hyperparameter tuning.
4. **Evaluation and Validation:**
   * Define how the model's performance will be measured.
   * Discuss validation techniques such as cross-validation and A/B testing.
5. **Deployment:**
   * Describe the steps for deploying the model into a production environment.
   * Consider how the model will be monitored and maintained post-deployment.

By starting with a clear understanding of both functional and non-functional requirements, you can guide the discussion through the critical stages of ML system design. This approach ensures that you address all necessary aspects and demonstrate a thorough understanding of the entire ML lifecycle.
