Skip to main content

Semester Project

Required Output Classification

Required outputClassificationPublic/private guidance
Runnable project implementation and repository structurePortfolio candidatePolish the public repo only after tests pass, secrets are removed, and setup steps work from a clean checkout.
README with setup, inspection, verification instructions, and known limitationsPortfolio candidateMake this public-facing if the project is safe to share; keep internal coursework notes in a private evidence folder.
Tests, traces, proofs, diagrams, benchmark outputs, or review notes required by the briefCheckpoint evidenceKeep raw logs, benchmark runs, and reviewer comments private by default; publish summarized or reproducible versions when useful.
ADRs, design memos, runbooks, benchmark reports, and other high-effort engineering writeupsPortfolio candidateThese are worth polishing publicly when they tell a clear tradeoff story; otherwise keep them as private coursework evidence.
Final reflection, retrospective, or carry-forward notesCheckpoint evidenceKeep candid self-assessment private unless rewritten as a concise public learning note.

Build a small systems toolkit in C that proves you can move from source code to machine behavior to operating-system interaction without losing control of the details.


Project Goal

Create a command-line toolkit with at least three cohesive components:

  1. one file-processing utility
  2. one process or pipe-based utility
  3. one debugging, memory, or measurement artifact that shows how you verified correctness

The project should feel like one small systems repo, not five disconnected exercises.


Use a repo structure like this:

  • src/ for implementation files
  • include/ for public headers
  • tests/ or scripts/ for smoke checks
  • Makefile for reproducible builds
  • notes/ for debugger output, memory diagrams, benchmark notes, and design reflections

Possible toolkit themes:

  • a mini shell plus helper utilities
  • a file-inspection and text-processing toolkit
  • a small systems lab pack with one networked utility and one process-control utility

Choose one theme and keep the interfaces consistent.


Required Technical Scope

Your project must include all of the following:

Module 1 requirements

  • clean multi-file C organization
  • headers with clear declarations and no duplicate-definition mistakes
  • warnings enabled during build

Module 2 requirements

  • at least one part that uses dynamic allocation or explicit memory layout reasoning
  • a written note on one bug you prevented or fixed using memory reasoning

Module 3 requirements

  • one short performance or architecture note
  • either disassembly inspection, cache/locality reasoning, or a small benchmark

Module 4 requirements

  • at least one of: fork/exec/wait, pipe/dup2, mmap, threads, or sockets
  • correct error handling for system calls

Module 5 requirements

  • one short reflection on abstraction boundaries in your design
  • one explanation of where a higher-level design choice simplified a low-level implementation

Strong Project Examples

Option A: Mini Shell Plus Utilities

Build:

  • a simple shell that supports one pipeline and basic redirection
  • a custom wc-style utility
  • a small diagnostic command that prints process or file-descriptor state

Best fit for students who want to lean heavily into Module 4.

Option B: Memory-Safe File Toolkit

Build:

  • a file reader or search tool
  • a memory-mapped analyzer or indexed reader
  • a benchmark comparing buffered I/O vs mmap

Best fit for students who want stronger Module 2 and Module 3 integration.

Option C: Tiny Networked Service

Build:

  • a TCP echo or line-oriented server
  • a client or load script
  • one debugging or profiling note showing how you investigated behavior

Best fit for students who want sockets, concurrency, and operational tooling.


Milestones

MilestoneDeliverableStandard
1Repo skeleton and build loopCompiles cleanly with warnings enabled and organized headers
2Core utility implementedOne meaningful command works end-to-end from the terminal
3Systems feature addedProcess, pipe, thread, socket, or mmap path is working and explained
4Verification passAt least one debugger, sanitizer, or tracing artifact captured and interpreted
5Final integrationREADME or notes explain architecture, tradeoffs, and known limits

Required Evidence

Submit the project with:

  • source code and build instructions
  • one command transcript showing a successful run
  • one debugging or sanitizer transcript
  • one short architecture or performance note
  • one short reflection on abstraction boundaries and tradeoffs

If the code works but there is no evidence of how you verified it, the project is incomplete.


Rubric

CriterionMeetsNotes
The repo builds cleanly and is organized as a real small C project[ ]
The project demonstrates systems-level behavior, not just ordinary application logic[ ]
Memory, process, I/O, or concurrency reasoning is explicit and correct[ ]
Debugging and verification artifacts are present and interpreted accurately[ ]
The design shows deliberate abstraction boundaries instead of ad hoc code growth[ ]

Submission Checklist

  • Multi-file C project compiles cleanly
  • At least one systems primitive is used correctly
  • At least one verification artifact is included
  • Notes explain one low-level bug or risk and how it was handled
  • Notes explain one architecture or abstraction tradeoff
  • Project is ready to support the Semester 5 transition

Production-Style Project Brief

Use this project as a reviewable engineering brief, not only a completion exercise.

Problem statement

Write a one-paragraph statement covering the user, the problem, the constraint, and the outcome this project is meant to produce.

Required evidence

  • working artifact or reproducible deliverable
  • README with setup, inspection, and verification instructions
  • tests, traces, proofs, diagrams, benchmark output, or review notes appropriate to the semester
  • decision log with at least three meaningful tradeoffs
  • known limitations section with explicit scope cuts

Review questions

  1. What is the smallest vertical slice that proves the project works?
  2. Which requirement is most likely to be misunderstood by a reviewer?
  3. What did you deliberately not build, and why?
  4. What evidence would convince someone else that the result is correct?

Done means

The project is done only when another technical reader can inspect the artifact, run or review the verification evidence, and understand the tradeoffs without a live explanation.


Weekly Project Milestones

Use these milestones to keep the project from becoming a last-week scramble.

MilestoneFocusEvidence
StartScope the smallest useful sliceproblem statement, non-goals, first task list
Early buildProduce a walking versionrunnable skeleton, first test, first committed artifact
MiddleAdd the hard partimplementation note, trace/proof/benchmark/design decision
ReviewStress the weak pointfailure case, debugging note, peer/self review, correction commit
FinishPackage for inspectionREADME, verification instructions, known limitations, reflection

Answer-Quality Examples

QualityWhat it sounds like
Weak"I built it because the module asked for it."
Acceptable"It works for the required examples and I can explain the main idea."
Strong"Here is the tradeoff I chose, the evidence that supports it, and the case where it would fail."
Portfolio-ready"A reviewer can inspect the artifact, rerun the checks, and understand why this solution fits this semester's goals."

Future Capstone Connection

Before closing this project, write two sentences on how it could help the final capstone: one reusable technical skill and one artifact habit to preserve.

Calibration Materials

Use these learner-visible calibration materials before self-grading or requesting review: