A README should help another person run, inspect and evaluate your software without asking you to explain undocumented steps. It is not an advertising page or a substitute for comments in complex code. The best version is specific to the submitted project: what it does, what it needs, how to start it, how to test it and what is unfinished. Write from the perspective of a marker opening the repository on a different machine.
Explain scope in plain language
Open with a one-paragraph description of the problem, intended user and main capabilities. Distinguish implemented behaviour from planned features. If a screenshot illustrates the interface, make sure it reflects the current version and has useful alternative text. Avoid unsupported claims such as “fully secure” or “production ready.” A small, accurate project description gives readers a reliable map before they inspect files.
List environment requirements
Name the language and dependency versions you actually used, required services and how configuration is supplied. Show safe example variable names, never real passwords or API keys. If a database schema or seed data is needed, provide the exact steps and explain whether test data are disposable. A command that works only on your laptop is not sufficient installation guidance.
Give a short run and test path
Provide commands in the order a new reader should run them, with the expected success signal. Include at least one meaningful test or demonstration scenario and its expected output. Document which commands modify data so a reviewer can avoid surprises. If platform differences matter, state them. Test the instructions in a clean checkout where possible; familiarity with your own setup can hide missing steps.
Document structure and limits
Briefly identify important directories or modules and the decisions behind non-obvious design choices. State known limitations honestly, including unsupported input or incomplete features. A limitation list is more useful when it says how to reproduce or avoid the issue. Link to the assignment specification only if access will remain available to the marker. Use code comments for reasoning near code, not for repeating what a function name already says.
Keep documentation in step with code
After each material change, verify commands, screenshots, feature list and sample output. The final README should match the exact version submitted. If tests require external services, explain a safe local substitute or the boundary of what you verified. A reader who follows your instructions successfully should be able to reach the same starting point you used for development.
Worked example
A useful README for a timetable app says that it imports a CSV of course sessions, displays conflicts and exports a schedule. It specifies the expected column names, an example command and a test fixture with one known conflict. It does not say “just run the program” or include a real database password. This small amount of practical detail can make the project assessable.
A clean-checkout README test
Create a fresh copy of the repository without your local configuration, then follow your own README as if you were the assessor. Can you install dependencies at the documented versions? Does the sample configuration explain required variables without exposing secrets? Can you start the app and run one meaningful test? Note every assumption you made without documentation, such as a database already created or a specific working directory. Update the instructions and repeat the critical path. If a cloud service prevents a fully local run, document that limitation and provide a safe mocked or read-only demonstration where the brief allows it. The README is complete when a new reader can reproduce the stated result, not when it looks polished in your editor.
Checklist before you submit
- Describe implemented features and intended user.
- Give reproducible setup, run and test commands.
- Use safe configuration examples without secrets.
- Recheck the README against the submitted version.
Questions students ask
Should I document every function?
No. Document how to use and evaluate the project, then explain non-obvious code decisions where they occur.
Can screenshots replace setup steps?
No. Screenshots show appearance; the reviewer still needs exact instructions to run and test the software.
Further reading
GitHub Docs: About the repository README file offers additional guidance. Follow your course brief and your institution’s academic integrity policy where they differ.
For a related skill, read From Broad Topic to Focused Research Question.