AP CSP Create Task Guide - Complete Performance Task Tutorial with Sample Projects
The Ultimate Guide to the AP CSP Create Performance Task
Master every requirement, avoid common mistakes, and see exactly what earns full credit with real sample project breakdowns.
The Create Performance Task (PT) requires you to design, develop, and document a program that demonstrates your understanding of algorithms, abstraction, and programming fundamentals. You will submit your program code and written responses explaining how your program works. During the AP Exam, you will have 60 minutes to answer questions about your submitted work.
Official Requirements Overview
Your program must include all of the following:
Complete Scoring Rubric Breakdown
| Row | Requirement | Points | What Graders Look For |
|---|---|---|---|
| Row 1 | Program Purpose and Function | 1 pt | Describes the purpose (the problem being solved or creative expression) AND describes the program's functionality (what it does when run) AND describes the input and output |
| Row 2 | Data Abstraction | 1 pt | Shows a list being used AND explains what data the list contains AND explains how the list manages complexity (why a list is better than individual variables) |
| Row 3 | Managing Complexity | 1 pt | Explains how the list manages complexity in your program AND explains why the program could not be written (or would be significantly more complex) without the list |
| Row 4 | Procedural Abstraction | 1 pt | Shows a student-developed procedure with at least one parameter AND shows where the procedure is called AND describes what the procedure does |
| Row 5 | Algorithm Implementation | 1 pt | Shows an algorithm that includes sequencing, selection, AND iteration AND explains how the algorithm works in enough detail that someone else could recreate it |
| Row 6 | Testing | 1 pt | Describes two different calls to the procedure AND describes the conditions being tested AND identifies the results of each call |
The most common mistake is confusing purpose and function. Purpose is WHY the program exists (the problem it solves). Function is WHAT the program does (its behavior). "My program helps users track their fitness goals" is purpose. "The program takes exercise data as input and displays weekly progress charts" is function.
Sample Project 1: Quiz Game
Geography Quiz Game
Educational Game - Demonstrates all required elementsProgram Description
A multiple-choice quiz that tests users on world capitals. The program stores questions and answers in lists, tracks the user's score, and provides feedback after each question.
Code Implementation - Try It Live!
Choose your preferred language. Both versions demonstrate the same Create Task concepts:
Click "Run Code" to execute the program...
Click "Run Code" to execute the program...
Tip: JavaScript runs instantly in your browser. Python requires Skulpt to load - if it doesn't work, try Trinket.io.
Rubric Analysis
Purpose: Help users learn world capitals through interactive practice
Function: Displays questions, accepts user input, checks answers, tracks and displays score
Input: User's typed answers
Output: Feedback messages and final score
EARNS POINT
List used: questions and answers lists
Data contained: Quiz questions (strings) and correct answers (strings)
How it manages complexity: Stores all Q&A pairs in organized, indexable collections
EARNS POINT
Why lists are needed: Without lists, would need separate variables like question1, question2, question3, question4, answer1, answer2, etc. This would make the loop impossible and require duplicating code for each question.
EARNS POINT
Procedure: checkAnswer
Parameters: questionIndex, userResponse
Called at: Line with result = checkAnswer(i, response)
What it does: Compares user's answer to correct answer and updates score
EARNS POINT
Sequencing: Get answer, call checkAnswer, print result
Selection: if/else comparing userResponse to correctAnswer
Iteration: for loop iterating through all questions
EARNS POINT
Call 1: checkAnswer(0, "Paris") - Tests correct answer, returns "Correct!", score increases
Call 2: checkAnswer(0, "London") - Tests incorrect answer, returns "Incorrect. The answer was Paris", score unchanged
EARNS POINT
This project successfully demonstrates all required elements with clear explanations.
Sample Project 2: Playlist Manager
Music Playlist Organizer
Utility Application - Common Create Task choiceProgram Description
A program that allows users to manage a music playlist by adding songs, removing songs, shuffling the playlist, and searching for songs by artist.
Code Implementation - Try It Live!
Choose your preferred language:
Click "Run Code" to execute the program...
Click "Run Code" to execute the program...
Tip: JavaScript runs instantly. For Python, if Run doesn't work, use Trinket.io.
Written Response Example for Row 5 (Algorithm)
The searchByArtist procedure contains an algorithm that uses sequencing, selection, and iteration. The algorithm works as follows:
- Initialization (Sequencing): First, the algorithm creates an empty list called foundSongs to store matching results.
- Iteration: The for loop iterates through each index of the songArtists list, checking every artist in the playlist.
- Selection (first if): For each iteration, the algorithm checks if the artistName parameter (converted to lowercase) is contained within the current artist name. If true, the corresponding song title is appended to foundSongs.
- Selection (second if/else): After the loop completes, the algorithm checks if foundSongs is empty. If empty, it returns a message saying no songs were found. Otherwise, it returns the list of found songs.
This algorithm efficiently searches the entire playlist and returns all songs by the specified artist, handling both the case where songs are found and where no matches exist.
- Identifies all three components (sequencing, selection, iteration)
- Explains step-by-step how the algorithm processes data
- Detailed enough that someone could recreate the logic
- References specific code elements (foundSongs, artistName parameter)
- Simply restating the code in English
- Not explaining WHY each step happens
- Missing one of the three required components
- Being too vague ("the loop goes through the list")
Sample Project 3: Expense Tracker
Personal Budget Tracker
Financial Application - Practical utilityProgram Description
An expense tracking application that categorizes spending, calculates totals by category, and alerts users when they exceed budget limits.
Code Implementation - Try It Live!
Choose your preferred language:
Click "Run Code" to execute the program...
Click "Run Code" to execute the program...
Tip: JavaScript runs instantly in your browser. For Python, if Run doesn't work, use Trinket.io.
Testing Response Example (Row 6)
First Call: calculateCategoryTotal("Food")
- Condition tested: Category where total ($82.24) is under the budget limit ($100)
- Result: Returns [82.24, "$17.76 remaining"] because the loop found three Food expenses (45.99 + 12.50 + 23.75 = 82.24), which is less than the $100 limit
Second Call: calculateCategoryTotal("Entertainment")
- Condition tested: Category where total ($89.00) exceeds the budget limit ($50)
- Result: Returns [89.0, "OVER BUDGET by $39.0"] because the single Entertainment expense of $89 exceeds the $50 limit by $39
These two calls test different execution paths through the procedure: one where spending is under budget (triggering the else branch) and one where spending exceeds budget (triggering the if branch inside the budget check).
Common Mistakes That Cost Points
The Mistake: Writing "The purpose of my program is to display a quiz and check answers" - this describes function (what it does), not purpose (why it exists).
Purpose: "Help students practice geography knowledge through interactive learning"
Function: "Displays multiple-choice questions, accepts user input, validates answers, and calculates a final score"
The Mistake: Creating a list with only 2-3 items where individual variables would work just as well, then struggling to explain why a list is necessary.
Use lists for data that naturally belongs together and could be expanded. Your complexity explanation should describe how without a list you would need: (1) many separate variables, (2) duplicate code for each variable, and (3) inability to use loops to process the data efficiently.
The Mistake: Creating a procedure where the parameter does not actually affect what the procedure does, or using only global variables inside the procedure.
The parameter must influence the procedure's behavior. If you remove the parameter, the procedure should break or behave differently. Good parameters: search terms, index values, user input values. Bad parameters: parameters that are never used or could be removed.
The Mistake: For the testing response, describing two calls that test the same execution path (e.g., both test correct answers, or both test valid input).
Your two test calls must test DIFFERENT conditions that cause DIFFERENT code paths to execute. Common pairs: valid vs. invalid input, found vs. not found, under limit vs. over limit, empty list vs. populated list.
The Mistake: Having selection and iteration but no clear sequencing, or having a loop that does not actually contain selection.
Your algorithm must demonstrably include ALL THREE: sequencing (multiple steps in order), selection (if/else), and iteration (loop). The selection should ideally be INSIDE the iteration for the strongest submission. Document each component clearly in your written response.
The Mistake: "The algorithm loops through the list and checks each item" - this is too vague for someone to recreate the logic.
Be specific: "The for loop iterates from index 0 to the length of the list minus 1. For each index i, the algorithm compares the element at songArtists[i] to the artistName parameter using case-insensitive comparison. If they match, the corresponding song title at songTitles[i] is appended to the foundSongs list."
Top Tips for Success
Before coding, plan how your program will satisfy each of the 6 rubric rows. Design your list, procedure, and algorithm with scoring in mind.
Complex programs are not scored higher. A simple program that clearly demonstrates all requirements will outscore a complex program with unclear abstractions.
Draft your written responses while coding. If you cannot clearly explain how your list manages complexity, redesign your program.
Variable names like "studentScores" and "checkIfPassing" are easier to explain than "x" and "func1". Clear names make written responses easier.
When planning your testing response, identify the different paths through your procedure (if branch vs. else branch) and design calls that exercise each path.
Your procedure parameter should directly affect the output. Ask yourself: "If I change this parameter, does the result change?" If not, redesign.
Pre-Submission Checklist
Project Ideas by Category
| Category | Project Ideas | Good List Use |
|---|---|---|
| Games | Quiz game, Trivia, Hangman, Number guessing with history, Word scramble | Questions/answers, word banks, guess history, high scores |
| Utilities | To-do list, Expense tracker, Grade calculator, Unit converter with history | Tasks, transactions, scores/weights, conversion history |
| Educational | Flashcard app, Vocabulary builder, Math practice generator | Terms/definitions, word lists, problem sets |
| Creative | Story generator, Mad Libs, Playlist manager, Recipe organizer | Story elements, word categories, songs/artists, ingredients |
| Data | Survey analyzer, Sports stats tracker, Weather log analyzer | Responses, statistics, temperature readings |
Need More Help?
Get personalized guidance on your Create Task from an experienced AP CSP teacher
Schedule 1-on-1 Tutoring Daily Practice Questions