AP CSP Create Task Guide - Complete Performance Task Tutorial with Sample Projects

30% of Your AP Exam Score

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.

6 Points Maximum
30% of Exam Score
12+ Hours Recommended
4 Written Responses
What Is the Create Performance Task?

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:

A List (or other collection type) - Used to store multiple data values and manage complexity in your program
A Student-Developed Procedure (Function) - With at least one parameter that affects the procedure's functionality
An Algorithm - Including sequencing, selection (if/else), and iteration (loops)
Procedure Call - Your student-developed procedure must be called somewhere in your program
Program Output - Based on input or program state, your program must produce output

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
Critical: Purpose vs. Function

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 elements
Beginner Friendly

Program 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:

geography_quiz.py
OUTPUT
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

Row 1: Purpose and Function

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

Row 2: Data Abstraction

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

Row 3: Managing Complexity

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

Row 4: Procedural Abstraction

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

Row 5: Algorithm Implementation

Sequencing: Get answer, call checkAnswer, print result

Selection: if/else comparing userResponse to correctAnswer

Iteration: for loop iterating through all questions

EARNS POINT

Row 6: Testing

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

Total Score: 6/6 Points

This project successfully demonstrates all required elements with clear explanations.

Sample Project 2: Playlist Manager

Music Playlist Organizer

Utility Application - Common Create Task choice
Intermediate

Program 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:

playlist_manager.py
OUTPUT
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)

Sample Written Response

The searchByArtist procedure contains an algorithm that uses sequencing, selection, and iteration. The algorithm works as follows:

  1. Initialization (Sequencing): First, the algorithm creates an empty list called foundSongs to store matching results.
  2. Iteration: The for loop iterates through each index of the songArtists list, checking every artist in the playlist.
  3. 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.
  4. 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.

Why This Response Works
  • 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)
Common Mistakes to Avoid
  • 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 utility
Advanced

Program 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:

budget_tracker.py
OUTPUT
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)

Sample Testing Response - Full Credit

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

1
Confusing Purpose and Function

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).

The Fix

Purpose: "Help students practice geography knowledge through interactive learning"
Function: "Displays multiple-choice questions, accepts user input, validates answers, and calculates a final score"

2
Using a List Unnecessarily (Weak Complexity Argument)

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.

The Fix

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.

3
Procedure Without Meaningful Parameter

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 Fix

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.

4
Testing Same Condition Twice

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).

The Fix

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.

5
Algorithm Missing One Component

The Mistake: Having selection and iteration but no clear sequencing, or having a loop that does not actually contain selection.

The Fix

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.

6
Vague Algorithm Explanation

The Mistake: "The algorithm loops through the list and checks each item" - this is too vague for someone to recreate the logic.

The Fix

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

1
Start with the Rubric

Before coding, plan how your program will satisfy each of the 6 rubric rows. Design your list, procedure, and algorithm with scoring in mind.

2
Keep It Simple

Complex programs are not scored higher. A simple program that clearly demonstrates all requirements will outscore a complex program with unclear abstractions.

3
Write Responses First

Draft your written responses while coding. If you cannot clearly explain how your list manages complexity, redesign your program.

4
Use Meaningful Names

Variable names like "studentScores" and "checkIfPassing" are easier to explain than "x" and "func1". Clear names make written responses easier.

5
Test Different Paths

When planning your testing response, identify the different paths through your procedure (if branch vs. else branch) and design calls that exercise each path.

6
Parameter Must Matter

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

Program runs without errors - Test your complete program multiple times with different inputs
List stores multiple values - Your list should have at least 3-4 meaningful elements
List is used in your program - Not just declared but actually accessed/modified during execution
Procedure has at least one parameter - And that parameter affects the procedure's behavior
Procedure is called - Show the actual line where your procedure is invoked with arguments
Algorithm has all three components - Sequencing, selection (if), and iteration (loop) together
Purpose is distinct from function - Purpose = why it exists; Function = what it does
Complexity explanation is specific - Explain what would happen WITHOUT the list
Two test calls test different conditions - Different inputs that cause different execution paths
Algorithm explanation is detailed - Someone could recreate your logic from your description

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

Contact form