# Internal Assessment Criterion A
:::success
This is part of a series of notes on the Internal Assessment on the Diploma Program of IB. **First assessment M27**
You can check the index with all the others and the rest of teaching material [here](https://hackmd.io/68GDv_RgT-yh9oERMvdnFw#Internal-Assessment)
:::
The Internal is going to be a long journey of creating a solution to a problem using computational thinking.

_mandatory image of the computational thinking process_
## Problem scenario
This is a problem that you want to solve using computer science. The important part of this is that you _use_ coding for solving this. And code that is yours.
:::danger
No templates, no artificial intelligence made code can be part of your internal assessment!
:::
This can be done in several ways but from previous experiences:
* A website for booking Aula Magna.
* A pipeline that sends emails to parents of boarding.
* A digital garden that is a dynamic webpage to have recipes. https://timrodenbroeker.de/digital-garden/
* A database with an interface to track products from a shop (by the seller) to send information to the clients.
* A geopositional system to (optionally) keep track of students of boarding.
* A videogame that is a turret defense to teach basics of cybersecurity.
* A functioning raspberry pi that reads ph and temperature from a pool and broadcast it in a webserver in the local network.
* An automated system to read the ambient contidions of a room and saves it in a database.
### How it should be described?
This depends if you have client or not, but the idea is that you're going to divide your problem (CAS website helper, videogame, application, etc) into different and measurable solution requirements. These requirements may vary depending on the focus of the project or the specifications from the client.
This specifications are what the solution should address, not specifically how are they going to be addressed.
The guide specifies that the description of the scenario (the problem) should be done in terms of these **measurable** solution requirements. By measurable means that is specific. A game can be fun but fun is difficult to measure. Nevertheless, a game can have specific mechanics.
#### Different specifications of the same project from different clients
Let's supose that we have an application for order pizzas for delivery. One restaurant may have a particular interest in translate their menu in different languages. Another may want to have an animated menu. A third one may be interested to implement a discount code system.
Probably both of them they want to have a menu system and checkout system that interconnects to the systems in the restaurant.


(two differnt types of pizzerias in MatarĂ³)
:::info
This doesn't take into consideration A E S T H E T I C S, we're only taking into consideration elements that can be program or coded. We take into consideration only systems because it's the focus of the Internal Assessment.
:::
These terms will be helpful in working later in the Success Criteria. But these terms are usally something that the _user_ will see.
## Computational solution
Once we have a description of the _problem_, we're going to approach to have our first summary of the _solution_.
We need to explain the nature of the solution itself. Is it going to be an APP? Is it going to be a webserver? Is it going to be a complicated python script? Is it going to be a [RaspberryPi](http://cfpm.org/~peter/connectingItUp.html) inserted into a roomba to feed a dog?

[source](https://www.tomshardware.com/raspberry-pi/maker-turns-old-roomba-vacuum-into-a-raspberry-pi-powered-ai-dog-feeding-robot)
That should be a phrase. Then we need to add the **computational context**, by that they mean the programming languages, the main libraries and frameworks used and if needed, the different parts that are going to go together. If you're using a database, the type of database. Depending on the solution this can be 1-3 phrases.
Finally we need to explain the choice of that computational solution.
### Reasons for choosing or not choosing a specific computational context for a solution
Reasons for choosing a specific programming language/framework/type of database include but are not limited to:
* Optimization. This one is good but you should explain why is more optimal.
* Specificity for the solution. Makes sense that, for example you use a [python library about astronomy](https://www.astropy.org/index.html) if you're doing an internal about astronomy.
* Available documentation or resources.
* Interesting features for the development.
* Licensing
Reasons that you should not write that you're using a specific language/framework/type of database. Even if they are true and they will have a balance in your decision.
* You have previous experience with the programming language/framework
* It is or it seems easy
* You know somebody that can help you with it
* Everybody uses it. (Even if this usually is going to be able to have more documentation and resources)
I'm going to write it again. These reasons are reasons for choosing a computational context, but what is expected from you is that you're able to write about the computational thinking and understanding these more computational reasons is espected.
## Success Criteria
Now that we have our scenario, that we have a brief description of the solution, we need to write, **in bullet points** the Success criteria.
These are a collection of success criteria that need to meet a few requisites.
* **Substantial.** The success criteria need to be part of the global function of the product. An example of substantial success criteria are features spected from the context. If I'm doing a system for measuring the PH of a pool, being able to measure it is a substantial part of the product. Stating that the color of a button of a menu should be red is specific, is testable but is not substantial enough.
* **Specific.** The success criteria need to be specific for the purpose of the IA. An example can be of very specific features is being able to show in the screen the data collected from the internet. Saying "the program will have no bugs" is testable, is substantial but is not specific enough.
* **Testable.** The success criteria need to be testable because later you need to do a test plan and actually test your program with no doubts. This is to avoid "the game is fun" or "it has an intersting aesthetic" that are very difficult to test. It's possible to test if the game has enough levels or options on the menu or if the aesthetic is something specific (for example the aesthetic is from vaporware aseshtetic, modernism or heavy metal).
You will need a list from 6 to 8 success criteria.
These success criterion can be thought of _features_ of your product. Your product probably will be able to be divided in different _features_ that also can be helpful for development (so you only work on a feature at a time).
:::info
:warning: :warning: :warning:
The success criteria are very important because they impact in 4 criteria of the IA. A, B, D and E.
:warning: :warning: :warning:
:::
### Ideas for your Success criteria
Think of your Success Criteria as **Systems**. You may have a login system, a behaviour system. The focus for this internal is computational thinking so features that can be programmed.
This is a non-exhaustive list of some examples.
* Usually for the products that include 1 hardware component (robotics, microcontrollers) there is 1 hardware success criteria. For example for a system to light a backyard we can have a success criteria "The product will be deployed so it can be inspected and the lights illuminate all the backyard properly"
* For the products that include a database, one of the success criteria is the posibility of doing the CRUD operations (Create, Read, Update and Delete). In the case of a recipe manager, one of the success criteria "the client can use the webapp to read/create/update and delete recipes directly from the web". Databases usually requires another consultation with the client/advisor to gather more information about the specifics of the scenario.
* Many webapps have different users with different privileges. This can be one of the success criteria. In an application for managing math homework from students a success criteria can be "There is 2 types of user, one that is a teacher who can update the homework and correct the homework submitted to the students"
* Also in many databases there is some kind of conclusion to achieve with the data. Displaying this data can be a success criterion. For example in a game created to train for being better at Valorant, having access to statistics of the different training course is substantial for the success of the product. These types of statistics usually requires another session with the client for getting more details on what is relevant in the scenario.
* Usually in web pages the different "pages" are different in terms of logic. For example "have an admin panel where the user can do x/y/z" or "general view" where the data is going to be loaded.
### How many?
Around 8-10 but if I prefer 6 that are good rather than 12 that are not substantial, specifica and testable.

## Grading from the IB guide

## The delivery (first term delivery)
For this delivery I'm asking for 2 pdf documents
### $Your_surname, $your_name - Internal Assessment.pdf
Name of the file: $Your_surname, $your_name - Internal Assessment.pdf (substitute $your_surname and $your_name appropiately)
In this pdf you should write Criterion A with a title and then I suggest to use the following subsections:
* **Problem scenario**. Extended writing of 1-2 paragraphs explaing the context of what you plan to do and the solution requirements.
* **Computational solution**. Extended writing of 1-2 paragraphs.
* **Success criteria**. This is a dotted lists. You may name them if you want (SC1, SC2, etc). The description of each success criterion should be 1 phrase.
:::success
This pdf will be updated with the rest of the criteria in the next deadlines until is finished
:::
### $Your_surname, $your_name - Development Journal.pdf
Name of the file: $Your_surname, $your_name - Development Journal.pdf (substitute $your_surname and $your_name appropiately)
The purpose of this file is to proof your work in the internal. Here you can write your advancements.
Not only the advancements but also the resources (videos, webs, tutorials, libraries)
This file could be shared also with other students so in the future (or between groups) if 2 people are doing something similar it will be easier for me to search it and say "hey, this other student is doing something similar!"" and show this development journal.
The proposed template is the following
Date(with year) - Advancements and discoveries
Include the classes where we discussed or worked on the internal and what have you done.
Include the tutorials, libraries that you find. Screenshots of what you have achieved.
:::info
This document is not going to be sent to the IB. It is meant to be seen by me (the teacher) and other students so it's allowed to be a bit more informal and unestructured than the other pdf.
:::
The only important thing here is that is ordered by date so it can be seen the progress over time.
:::success
This pdf will be updated with the next advancements in the next deadlines until is finished
:::
Example 1:
```!
25/10/2025 - Brainstorming ideas in class
27/10/2025 - I think that this idea could be neat (draft of the idea)
29/10/2025 - I found this library that I think it can be handy (link to the library)
31/10/2025 - I have here a draft of the things that my IA needs
# different sketched possible solutions in an ordered but unfinished way
...
```
Example 2:
```!
25/10/2025 - We did some explanation about the criterion A in class. I don't know what to do.
26/10/2025 - I found these ideas:
- Making a minecraft game
- Do a game of life simulator in 4D -> https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
- Balatro but now is mus the game.
29/10/2025 - I found these game engines enviroments [links and screenshots]
...
```
### Useful lexicon for your description of the computational solution
* **Programming language.** Set of syntax and keywords that are meant to be translated into machine code and executed. Examples: java, python, c++, go, javascript
* **Markup language.** A language that tag data for better processing. Examples. HTML, CSS, JSON, Markdown, YAML, XML. They don't have (by themselves) capabilities of being programmed.
* **Library.** Premade code that we can use. Examples, numpy, pandas, pygame, arduino.
* **Framework.** Usually a framework is more than some libraries (but also include them). It's a way of solving a specific problem and they have paradigms. (see next definition). They all have (at least) one programming language underneath. We need to know which one.
* **Paradigm** is a set of ideas that we try to adhere to (even if we fail or not comply totally). In the IB you have the paradigm of the IB student. In programming we may have programming patterns such as Model View Controller, OOP (Object Oriented Programming) etc. They are also called [**Software design patterns**](https://en.wikipedia.org/wiki/Software_design_pattern)

_Dungeons and dragons paladin that probably has som paradigms_
* **Game engine.** Usually is just a framework but for games. It's called engine because they have an render engine (a program that creates images). Usually these game engines have programming languages underneath. We need to know which.
* **Platform** this in gaming usually is the hardware you're using (playstation, switch, pc) but in app development and web development it can refer to the place where you host your application. One example of this would be firebase. This is linked to **Platform as a Service**, a topic we cover in [topic A1.1](/6LgCmT4IToOkOu0CuV3UBQ)
* **IDE** stands for Integrated Development Environment. The program that you use to program such as eclipse, pycharm, arduino IDE, vscode. In general terms the IB doesn't care about which program you use to program, so unless there is a specific reason, don't write it in criterion A. (Still you need to find a program to program)