CSC 324-01

Spring 2026

Project Portfolios

Your project portfolio captures the ways in which you've mastered the development competencies of the course. Your portfolio consists of a collection of samples drawn from your work on the individual and group projects. Each sample demonstrates how you have mastered one of the course's development competencies.

Grading

Grade Requirements
C All core competencies completed
B All core competencies + 1 adv. competency completed
A All core + 2 adv. competencies + quality competency completed

The Portfolio Website

Your project portfolio consists of a personal website that captures the information described below. To build your website, I recommend using a static site generator, e.g., Hugo, which will free you for writing content (usually in the style of a blog) in Markdown. Such a tool allows you to select a theme and then generate your portfolio website from the Markdown files you've curated. While you are not graded on the look and feel of your portfolio itself, I encourage you to play with your portfolio as a starting point for a future professional website that you might host, e.g., on Github Pages.

You should store your website as a repository hosted on Github, either in your group's organization or your personal repository. Irrespective of where you store your work, you will be required to submit a link to this Github repository as your primary deliverable for the course.

Generative AI Policy

Your portfolio is a reflection of your mastery of the course's developer competencies. Your work will be assessed on whether you answered the questions posed in each competency faithfully and whether that work reflects appropriate mastery of the competency. In particular, you will not be assessed on grammar, spelling, or your demonstrated command of the written word (provided that your meaning is clear).

Consequently, you are not allowed to use text-predictive generative AI tools in the development of your portfolio prose, e.g., ChatGPT, as any use of them will obscure what you know versus what was given to you by the tool. You may use grammar tools such as Language Tool or Grammarly that restrict their assistance to the realm of grammar, but I will emphasize that we will not scrutinize your writing for grammar or spelling errors, so you don't need to worry about such things.

You are, of course, allowed to use generative AI throughout the development of your project as allowed by your group contract. However, explicitly state in your competency write-ups when and how you used generative AI in the development of code or assets that you cite in your portfolio.

The Competencies

Below you can find the required content for each of the course competencies. You should have a page for each competency on your portfolio website.

Most competencies will require you to present one or more samples of your work drawn from your group project and explain them in the context of the competency. Each sample consists of:

  1. A statement of where the sample is located in your project, i.e., the specific repository, files, and line numbers (when applicable).

    • You should also include relevant code snippets and/or screenshots/images in your write-up.
  2. A statement of your specific contributions to the sample, in particular, if the sample is drawn from group work and/or generative AI was used to build portions of the sample. You should state what parts of the sample you built yourself and what parts you relied on others (teammates or AI) to build.

  3. A short description (1-2 paragraphs) of how the sample demonstrates mastery of the given development competency. This description is competency-specific, guided by a set of questions you should answer in your description. Each question should be addressed in a few (2-3 sentences) in your description.

As the semester progresses, you should identify through your one-on-one meetings what you will be writing about for each competency. The purpose of the portfolio is not to test you on whether you can pick an appropriate sample to talk about. The intention is that we agree in advance what samples you will talk about in your portfolio; the writing is just formalizing what we talked about in our one-on-ones!

Dually, if you do not take advantage of your one-on-one meetings to identify and affirm what to write about, you run the risk of producing work that does not meet the competency and subsequently risking failure in the course!

Competency Questions

Required Competencies

Development
Medium-scale abstraction

Choose a part of the project that you (co-)wrote that employs medium-scale abstraction.

  • What functionality does your code sample abstract away?
  • How does it mechanically achieve abstraction?
  • What purpose does this abstraction serve in your larger program?
Medium-scale architecture

Choose one of the components of your project that you (co-)designed according to its architecture, e.g., front-end versus back-end.

  • What architectural pattern does your program employ?
  • What components result from this pattern in your program?
  • What technologies and/or libraries make-up each of the components?
Verification
Testing strategies

Identify a component of your project that you were responsible for testing.

  • According to code coverage tools, what aspects of this component are covered with tests?
  • What kinds of tests are they?
  • For code that is not covered by tests, why did you not cover them?
Testing infrastructure

Identify relevant components from your development infrastructure (IDE, build, etc.) that you use to test your project.

  • How have you automated your tests so that they both take "1-click" to run and run automatically as part of build validation?
  • Describe a specific occurrence in which your testing infrastructure saved you and/or your team work?
Design
Needfinding

Identify relevant artifacts from the human-centered design process that address the following points.

  • What techniques did you employ to discover users' needs?
  • What did you learn about users' needs from this process?
Ideation

Identify relevant artifacts from the human-centered design process that address the following points.

  • What techniques did you use to discover solutions to users' needs?
  • What solution(s) did you ultimately pursue and why did you choose them?
Prototyping

Identify relevant artifacts from the human-centered design process that address the following points.

  • What design questions did you intend to answer with your prototype(s)?
  • How did you design your prototype(s) and subsequent user studies to address these questions?
  • What answers to your design questions did your efforts unveil?
Evaluation

Identify relevant artifacts from the human-centered design process that address the following points.

  • What was the design of your user study to evaluate your artifact?
  • What were the results of this user study?
  • What were the main points of future development that you took away from this activity?
Engineering
Infrastructure
  • What development tools did you use through the process to help write code and automate the build/deployment process?
  • What is one specific problem (e.g., debugging an issue) that you encountered while writing code and how did your tools help or hinder your ability to address that problem?
Self-learning

Identify a portion of your tech tutorial that you developed.

  • Describe the technology that the tutorial addresses and how it fits into your project.
  • Evaluate how useful the tool was in your work. What were its strengths and weaknesses, especially in comparison with other tools you have used.
  • Identify one particular sticking point to using this technology that you would want your team to know about when adopting the tool and how you resolved it.
Process
  • What software engineering practices did your group employ to manage, distribute, and execute on their work?
  • In your estimation, how well did your group follow through on using these processes throughout the semester?
  • What, if anything, got in the way of integrating these processes into your workflow?
Collaboration

Identify four different instances where you participated in collaborative work with your team as identified by specific commits, pull requests, and/or issue numbers on Github. These instances should not simply be "committing code" but situations that required back and forth with your peers, e.g., a substantial bug or a code review. You should have one instance each of (1) filing and/or resolving a bug, (2) filing a pull request, and (3) performing a code review of a pull request.

  • Identify the work you did in each of these instances.
  • Describe the difficulties that necessitated communication with your peers in each instance.
  • Did you encounter any difficulties in collaboration with team during these instances? If so, how did you resolve those difficulties?

Advanced Competencies

Development
Domain-specific architecture

Identify a portion of your codebase that you worked on that exemplifies domain-specific architecture.

  • What aspects of your software architecture arise because of the domain your program operates in or the technology it employs?
  • What domain-specific/technology-specific problem does your architectural choices solve?
  • How does your solution solve these issues?
Security

Run a threat model analysis on your project.

  • What is the "surface area" of your project, i.e., what are the potential points of interaction that users have with the system?
  • What are the possible threats against your project? State these threats in terms of actors/actions/attacks/assets/objectives.
  • Triage each threat, describing how you will handle the threat in your project (if any).
Verification
Testing technologies

Identify a portion of your test suite that utilizes advanced testing tools or techniques.

  • What advanced testing tool or technology did you employ in your code?
  • What did this tool/technology validate in your program?
  • How effective was it in this task?
  • In what contexts did you envision yourself utilizing this tool/technology in the future?
Design
User interface design

Identify a portion of the user interface that you designed.

  • How does your design adhere to one or more of the principles of interaction design?
  • What alternative designs did you consider (describe at least one) and why did the current design prevail, appealing to the principles of interaction design?
Accessible design

Identify a portion of the user interface that you designed.

  • How does your design adhere to one or more of the principles of accessible design?
  • How did you use validation tools (if at all) to ensure that your design was accessible?
Engineering
Quality

Imagine that you were up for promotion and your case rests on the quality of your project's codebase. Provide an overall evaluation of its quality.

  • In what ways does your codebase exemplify engineering excellence? Be as exhaustive as possible in your analysis.
  • In what ways does it fall short? How would you have addressed these issues if given more time?