Skip to main content

Section 2.1 Program Design and Development

90 minutes
In this unit, we will learn how to design and develop programs that meet user needs with more complex Python control structures such as selection and repetition. In this first lesson, we will focus on the development process, user research, documentation, and reusing and citing digital content.

Subsection 2.1.1 The Development Process

Essential Knowledge 2.1.1 2.1.A.1.

Programmers use a development process to plan and build apps and programs that work well for the people who will use them. A typical process includes understanding the problem and the users, designing a solution, building a first version or prototype, testing it, and then reflecting on what worked and what needs improvement. These phases may occur in different orders and may be repeated.

Essential Knowledge 2.1.2 2.1.A.2.

An iterative development process involves revising a program based on feedback, testing, or reflection throughout development. This often requires returning to earlier phases to improve the design or behavior.
We will use an iterative development process called Design Thinking in the next section where design, implementation, and testing are repeated until the design meets user needs. Iterative means that the process is repeated, and each repetition is called an iteration.

Essential Knowledge 2.1.3 2.1.A.3.

An incremental development process breaks a problem into smaller features and builds a program in steps. Each part is checked to ensure it works before it is combined into the whole.
App development can be iterative and incremental where incremental means that you work on small, manageable parts of the app at a time. For example, you could design the user interface first, then add functionality in subsequent iterations.

Activity 2.1.1.

Which statement best describes an iterative development process?
  • Revising a program repeatedly based on testing and feedback.
  • Correct! Iterative development emphasizes improving a program through repeated cycles of testing, feedback, and revision.
  • Building one feature at a time until the program is complete.
  • Incorrect. This describes incremental development, where a program is built in small, manageable pieces.
  • Writing all documentation before programming.
  • Incorrect. Documentation is created and updated throughout the development process, not only before programming begins.
  • Dividing work equally among team members.
  • Incorrect. Assigning work to team members is part of collaboration, not what defines an iterative development process.

Activity 2.1.2.

Which statement best describes an incremental development process?
  • Revising a program repeatedly based on testing and feedback.
  • Incorrect! This describes iterative development, where a program is improved through repeated cycles of testing, feedback, and revision.
  • Building one feature at a time until the program is complete.
  • Correct! Incremental development involves building a program in small, manageable pieces.
  • Writing all documentation before programming.
  • Incorrect. Documentation is created and updated throughout the development process, not only before programming begins.
  • Dividing work equally among team members.
  • Incorrect. Assigning work to team members is part of collaboration, not what defines an incremental development process.

Essential Knowledge 2.1.4 2.1.A.5.

When developing programs with others, teams can use a defined workflow by assigning roles, sharing work, and keeping track of versions so changes can be reviewed and combined responsibly.
Many software development teams use version control systems like GitHub which is a platform for managing code and collaborating on projects. Github allows programmers to upload their code online, track changes, manage different versions of code, and collaborate with others on the same project.

Essential Knowledge 2.1.5 2.1.A.6.

Programmers can gather evidence from users during development by observing where users get stuck or confused. This evidence can guide revisions that improve the usability of apps or programs.

Essential Knowledge 2.1.6 2.1.A.7.

Many apps and programs go through revisions and updates to stay useful for users. Maintaining a program involves making changes after a working version exists, such as fixing bugs, improving usability, or adapting the program as user needs or conditions change.

Activity 2.1.3.

A programmer releases an app and later fixes bugs and adds support for a new phone model. This is an example of
  • Program maintenance
  • Correct! Program maintenance involves updating a program after it has been released, such as fixing bugs, improving usability, or adapting it to changing user needs or new technology.
  • Prototyping
  • Incorrect. Prototyping is the process of creating an early version of a program or app to explore ideas and gather feedback before the final product is complete.
  • User research
  • Incorrect. User research involves learning about users’ needs through methods such as surveys, interviews, observations, or user testing.
  • User testing
  • Incorrect. Testing checks whether a program works correctly and meets user needs. While testing may identify bugs, fixing them after release is part of program maintenance.

Subsection 2.1.2 Design Thinking

Design thinking is a human-centered approach to innovation that involves understanding the user, and iteratively designing creative solutions to meet their needs. Some of the world’s leading brands, such as Apple, Google and Samsung, use the design thinking approach. Watch the introduction to Design Thinking video below.

Essential Knowledge 2.1.7 2.1.B.1.

Programmers often begin by identifying intended users and their goals rather than starting with a list of features. Focusing on users and goals helps teams prioritize features and design an app or program that meets real needs.
The Design Thinking process has 5 stages: Empathize, Define, Ideate, Prototype, and Test, which are repeated incrementally and iteratively until the user needs are met. The following diagram shows the Design Thinking process.
There are 5 stages in the Design Thinking process, and it all starts with connecting with your users with empathy to understand their needs.
  1. Empathize:Β Investigate and understand your users to identify the program requirements
  2. Define: Analyze the problem and determine the program specifications
  3. Ideate: Brainstorm possible solutions
    • make a list of your ideas
    • draw the interface on paper or online
  4. Prototype: Creatively build simple solutions
  5. Test: Evaluate the solutions and go back to step 2 if needed

Project 2.1.4 Design Thinking: Chair Project.

In this project, you will use the design thinking process to design a chair for one of the Simpsons characters. If you have a GenAI tool available, you may use it to generate images of your chair design. You will work in groups (your class may use POGIL groups: What is POGIL, POGIL Role Cards). You may choose or be assigned a character and follow the Design a Simpsons Chair Handout (do File/Make a Copy). Include the link to your copy of the handout below. After completing the project, reflect on the following questions as a group:
  • Describe the characteristics of your user and how your design addresses their needs.
  • Did you use iterative design where you changed some aspects of your design during implementation? What did you change?
  • Did you use incremental design where you built the chair in steps? What parts did you build in each step?
  • If you used an AI tool in the design process, how did it help you? What were its limitations?

Subsection 2.1.3 User Research and Feedback

Essential Knowledge 2.1.8 2.1.B.2.

User research means learning from the people who will use an app or program. Programmers may gather information from intended users to understand what they need, what limits or challenges they have, and what matters most.

Essential Knowledge 2.1.9 2.1.B.3.

Program requirements describe what a program must do and how it should behave. Requirements may be based on user research and may include user interactions a program must support, information a user interface should display, and feedback the app or program should provide.

Activity 2.1.5.

Which of the following is a program requirement?
  • The app must remind users about upcoming assignments.
  • Correct! A program requirement describes what a program must do or how it should behave to meet user needs.
  • Use Python variables to store data.
  • Incorrect. This is an implementation decision about how to build the program, not a program requirement.
  • The app should be written by at least two programmers.
  • Incorrect. The size of the development team is part of the development process, not a program requirement.
  • The program should contain at least 100 lines of code.
  • Incorrect. The number of lines of code does not describe what the program must do for its users.

Essential Knowledge 2.1.10 2.1.B.4.

Programmers can use user stories to connect requirements to real tasks and to guide interface design and testing. User stories are hypothetical descriptions of who a user is, what they want to do, and why it is important. Teams may also represent user needs with use cases or storyboards, which show how someone would use the app or program step by step.
In the Simpsons chair design project above, you may have read or created user stories for each Simpsons character that described their needs. Use cases are detailed descriptions of how a user interacts with a system to achieve a specific goal. For example, a non-standard use-case of a chair for a child might be to tip it over and pretend it is a rocket ship. Users sometimes use products in ways that the designers did not anticipate!
Storyboards are visual representations of a sequence of events, often used to illustrate how a user interacts with a product or system. Here’s an example of a story board showing how a user might interact with an app called "Study Buddy".

Essential Knowledge 2.1.11 2.1.B.5.

User research can be performed in multiple ways, such as surveys, interviews, direct observation, and user testing.

Activity 2.1.6.

Essential Knowledge 2.1.12 2.1.B.6.

The design phase may include activities such as brainstorming and storyboarding, decomposing a problem into subproblems, creating diagrams or sketches of a user interface layout, and developing a testing strategy based on program requirements and user needs.

Project 2.1.7 Homework Helper App Design Project.

In this activity, you will design a Homework Helper app by learning about your users and planning what the app should do. This activity is a good group project. Your class may use POGIL groups: What is POGIL, POGIL Role Cards.
1. User Research: Interview one or two classmates about how they keep track of homework. Ask questions like:
  • What is the hardest part about managing homework?
  • What would you want a Homework Helper app to do?
Write 2–3 sentences summarizing what you learned.
2. User Story: Write one user story that describes a user, what they want to do, and why it is important. Use the following format: "As a __________, I want to __________, so that __________." For example, "As a student, I want to see all my assignments in one place so that I don’t forget homework."
3. Program Requirements: Based on your research, write 3 program requirements that describe what your app must do. Example: The app must remind users about upcoming assignments.
4. Storyboard: Draw a simple sketch of your app’s main screen and one other screen. Label some features that support your program requirements. You can use Wireframe.cc or this printout.
5. Reflection: How did your user research help you design your app? What would you do next to improve your design? Share your design with the class.

Subsection 2.1.4 Documentation

Essential Knowledge 2.1.13 2.1.A.4.

Development processes often include creating and updating design documentation to help track decisions, guide what to build next, and support testing, debugging, maintenance, and improvement.

Essential Knowledge 2.1.14 2.1.C.1.

Program documentation is a written description of the purpose and behavior of a code segment or program, including how it is intended to be used, how it accomplishes its task, and how it was developed.

Activity 2.1.8.

Which of the information below is appropriate to include in program documentation? (Select all that apply.)
  • The program’s purpose and intended use.
  • Correct! Documentation should explain what the program is designed to do and why it exists.
  • The expected inputs and required data formats.
  • Correct! Documentation should describe what information the program needs in order to run correctly.
  • The expected outputs and results produced by the program.
  • Correct! Documentation should explain what users can expect the program to produce.
  • Important algorithms, design decisions, or limitations of the program.
  • Correct! This information helps other programmers understand, maintain, and improve the program.
  • A list of every variable name used in the program.
  • Incorrect. A list of names alone does not help users understand how the program works.
  • The programmer’s reflection about how they wrote the program.
  • Incorrect. Program documentation should focus on useful information about the program, not personal reflections.
  • A record of every time the program has been run by users.
  • Incorrect. Execution records are logs or analytics, not typical program documentation.

Essential Knowledge 2.1.15 2.1.C.2.

Comments are a form of documentation included in code for humans to read. Comments do not affect how a program runs.

Essential Knowledge 2.1.16 2.1.C.3.

Not all programming environments support comments within the code. Documentation may also be written in other formats, such as design notes, a test plan, or a change log.
In Python, use # to mark a line as a comment. Comments are very useful for collaboration and future reference. They are ignored by the Python interpreter when the program runs.
# This program calculates the area of a rectangle
width = 5
height = 10
area = width * height  # Area is width times height
print("The area of the rectangle is:", area)

Activity 2.1.9.

Which statement about comments is true?
  • Comments change how a program executes.
  • Incorrect. Comments are ignored by the Python interpreter and do not affect how a program runs.
  • Comments help programmers understand code but do not affect execution.
  • Correct! Comments document a program for people to read, but they are ignored when the program executes.
  • Comments are required in every Python program.
  • Incorrect. Although comments are highly recommended, Python programs can run without any comments.
  • Comments are executed before the program runs.
  • Incorrect. Comments are never executedβ€”they are ignored by the interpreter.

Essential Knowledge 2.1.17 2.1.C.4.

Documentation helps programmers understand code that has already been written. Clear descriptions of purpose and behavior make it easier for a programmer to understand and update code without having to figure out how it works.

Essential Knowledge 2.1.18 2.1.C.5.

Useful documentation may describe important details such as a program’s overall purpose, key variables and algorithms, expected inputs, and expected outputs. Comments can clarify the purpose or behavior of specific abstractions or sections of code. Clear and concise documentation helps others understand, use, and update a program correctly.

Essential Knowledge 2.1.19 2.1.C.6.

Programmers should document a program throughout development to improve clarity, support collaboration, and record decisions and resources used, such as code written by others and AI tool use.
AI tools can actually help programmers to write comments and documentation for their code, but programmers should always review and edit AI-generated content to ensure it is accurate, clear, and relevant to the program. Programmers should always cite any AI tools used to generate content, just as they would cite any other source of information or code.

Subsection 2.1.5 Reusing and Citing Digital Content

Essential Knowledge 2.1.20 2.1.D.1.

Programmers often reuse or build on existing code, images, sounds, and other digital content because it can save time, improve reliability, and help them meet user needs without reinventing common solutions. Because programmers often build with existing online tools and code, they should acknowledge code that is reused, adapted, or co-developed, including code from other people, online sources, or AI tools.
When borrowing code or images or text, programmers need to first determine the following:

Essential Knowledge 2.1.21 2.1.D.2.

Digital works are considered the intellectual property of their copyright owner, who is often the work’s creator but may be another person or organization. This means the copyright owner has legal control over the original work and can decide whether others may use, share, modify, or distribute it. To respect intellectual property, people should follow a work’s license or obtain permission before reusing material, and provide attribution when required.
Material created on a computer is the intellectual property of the creator or an organization. This means they are the legal owner of their created work and can decide whether others may use, share, modify, or distribute it. Copyright is a legal right that protects the creator’s work from being used without permission. Measures should be taken to safeguard intellectual property, for example by citing work that is used but not your own. The use of material created by someone else without permission and presented as one’s own is plagiarism and may have legal consequences.

Essential Knowledge 2.1.22 2.1.D.3.

Digital content can be copied, edited, and shared quickly, which can make it harder to determine who owns it and what permissions are required. Content is also often shared online without crediting the creator or getting permission.

Essential Knowledge 2.1.23 2.1.D.4.

Despite how easy it is to share content online, presenting material created by someone else as your own is plagiarism. Using another person’s work without permission or proper credit may have legal consequences.

Essential Knowledge 2.1.24 2.1.D.5.

Knowing how to reuse and cite digital content correctly helps programmers build projects more efficiently while avoiding plagiarism and misuse. Following reuse and attribution requirements helps others understand what was reused, where it came from, and what permissions apply, which supports transparency and responsible sharing.
Often when creating an app, the first step is to gather assets like images to use. However, many images online are copyrighted. App creaters will have to get permission and possibly pay to use them, or they can search for free media. For example, the following sites offer free image files that can be used in apps and programs:
AI-generated content typically lacks copyright protection altogether because U.S. and international laws require human authorship for copyright. However, some AI tools may have terms of service that restrict how their output can be used. Programmers should check the terms of service for any AI tool they use to generate content and provide attribution if required.

Activity 2.1.10.

A programmer wants to use an image they found online. What should they do first?
  • Check who owns it and what license or permissions apply.
  • Correct! Before reusing digital content, programmers should identify the copyright owner and determine whether the license or permissions allow reuse and whether attribution is required.
  • Assume it is free to use because it is online.
  • Incorrect. Material found online is often protected by copyright and cannot be reused without following its license or obtaining permission.
  • Edit the image slightly so it is no longer copyrighted.
  • Incorrect. Making small changes to copyrighted material does not automatically give you the right to use it.
  • Use it without attribution if it is for school.
  • Incorrect. Educational use does not automatically allow copyrighted material to be reused without following the license or giving attribution when required.

Essential Knowledge 2.1.25 2.1.D.6.

Some licenses and tools make reuse easier by clearly stating permissions. Open source and Creative Commons licenses provide standardized terms that tell others how they may use, modify, and redistribute software or creative works.
Open source software is software that is made freely available and may be redistributed and modified. Creative Commons is a public copyright license that enables the free distribution. This is used when the content creator wants to give others the right to share, use, and build upon the work they have created.
Watch the following video which explains Open Source vs Closed Source Software:

Essential Knowledge 2.1.26 2.1.D.7.

License terms vary in what they allow and require. Some licenses require attribution, while others allow unrestricted reuse. Creative Commons Zero (CC0) allows creators to waive copyright restrictions to the extent possible so others can reuse the work.

Activity 2.1.11.

Which license is designed to make reuse as unrestricted as possible?
  • Creative Commons Zero (CC0)
  • Correct! Creative Commons Zero (CC0) allows creators to waive copyright restrictions to the extent possible so others can reuse the work with few or no restrictions.
  • Copyrighted
  • Incorrect. Copyright protects a creator’s work and does not automatically allow others to reuse it.
  • Proprietary software license
  • Incorrect. Proprietary licenses typically restrict how software or other digital content may be used, modified, or shared.
  • AI generated
  • Incorrect. AI-generated content is not copyrighted but may have unique licensing considerations. It is not a standard license type.

Essential Knowledge 2.1.27 2.1.D.8.

To decide whether reuse or sharing is appropriate, people should identify the source and its license or permissions, follow any requirements, and avoid using material in ways the license does not allow.

Activity 2.1.12.

Search for a copyright-free image to use for your Homework Helper app. Make sure to check the license. Put in a link to the image below and cite the source of the image you choose.

Subsection 2.1.6 Learning Objectives Review

Learning Objective 2.1.28 2.1.A.

Develop a program using an iterative or incremental process.

Learning Objective 2.1.29 2.1.B.

Design an app or program and its user interface based on user research and program requirements.

Learning Objective 2.1.30 2.1.C.

Describe the purpose and behavior of a code segment or program by writing documentation.

Learning Objective 2.1.31 2.1.D.

Determine when it is appropriate to reuse, cite, and share digital content.

Subsection 2.1.7 Vocabulary Review

Activity 2.1.13 Design Vocabulary.

Subsection 2.1.8 App Inventor Lights Off and Design Project (Optional)

If your class wants to create mobile apps using MIT’s App Inventor, visit the Lights Off App Lesson and do the first two sections 2.14.1 Tutorial and 2.14.2 Design your Own App Iteration 1 using Design Thinking. The rest of the sections can be completed after the next two lessons.
You have attempted of activities on this page.