ABCsteps lesson path
What Makes Professional Documentation
Write a README that explains purpose, setup, usage, architecture, and limitations truthfully. Build one artifact, keep one review trail, and make the work easy to inspect later.
- Lesson
- 18
- Time
- 40 min
- Access
- public lesson
Learning objective
Document a project so another learner can run and inspect it.
Lab outcome
Write a complete README with setup and limitations.
Module milestone
Polish the product and add one AI-assisted capability with documentation.
Lesson proof workflow
Read, build, then review the evidence.
- Step 1ReadStart with README writing before touching tools.
- Step 2BuildBuild toward: Write a complete README with setup and limitations.
- Step 3ReviewReview the evidence using Architecture notes.
Toolchain
Documentation is part of the product, not decoration after shipping.
These are the practical surfaces used in this lesson. Learn the habit first, then connect it to the wider engineering ecosystem.
Explain setup and usage where the project lives.
Make documentation changes reviewable.
Edit docs beside the code they describe.
Proof of work
Leave one inspectable trail from this lesson.
The useful output is not a passive note. It is a small artifact another person can inspect: a working file, a command result, a commit, a screenshot, a README note, or a demo link.
Lesson lab: Write a complete README with setup and limitations.
Tool and platform logos are ecosystem references only: no affiliation, endorsement, interview access, hiring promise, salary promise, or placement guarantee.
Build
Produce the artifact
Complete the lab and keep the result visible: Write a complete README with setup and limitations.
Record
Save review evidence
Capture what changed, what broke, and how README writing became clearer through the work.
Explain
Write the vocabulary
Use your own words for Setup instructions and Architecture notes; this is what makes the lesson inspectable later.
Skills companies recognize
Translate the lesson into inspectable work language.
This lesson turns one small lab into the language a learner can use in a README, demo note, or technical conversation. The point is not to collect logos; the point is to explain work clearly enough that another engineer can inspect it.
Where this skill appears
Documentation is a hiring signal because teams need engineers whose work can be run by someone else.
Ecosystem references
Platform and company logos are ecosystem references only: no affiliation, endorsement, interview access, hiring preference, salary outcome, or placement guarantee.
README line
Name the artifact
Lab proof: Write a complete README with setup and limitations. Connect it to README writing so the result reads like work, not a passive note.
Review line
Explain the stack
Use GitHub, Git, VS Code to explain Setup instructions and what changed between the first attempt and the inspected result.
Conversation line
Answer with evidence
If a team asks about Architecture notes, use this proof line: Show setup, usage, architecture, limitations, and the exact command another person should run.
Proof translation
Skill signal
README writing is the market word. The lesson makes it visible through a small working artifact.
Proof artifact
The inspectable artifact is: Write a complete README with setup and limitations.
Interview answer
Use Setup instructions and Architecture notes to explain what changed, what failed, and how you verified it.
Paid guidance
Read publicly. Upgrade when guidance will help you finish.
This lesson remains part of the public written syllabus. Paid help is online-only and human-led: video walkthroughs as they roll out, live class context, WhatsApp Q&A, and project review around the same work.
No account wall, automated checkout, or placement promise is introduced here. Enrollment stays human-led by WhatsApp or call, and the useful proof remains the learner's own artifact.
Public
Written lesson stays open
Read the prepare and review material for lesson 18 on the public site before buying anything.
Recorded
Recorded and live guidance clarify the work
Paid guidance can add founder-led video walkthroughs as they roll out and live online class context; the teaching explains the work, but does not replace the written lesson.
Human
Questions use real context
When stuck, useful guidance starts from the route, error, screenshot, repo fragment, and the lab artifact: Write a complete README with setup and limitations.
Phase 1 · Briefing
Lesson briefing
Before You Study (5 mins)
Lesson focus: Code is read 10× more than it is written. This sentence — first attributed to Robert C. Martin, repeated by every senior engineer since — is the core of why documentation is non-optional. By Lesson 17 you've shipped real software: a containerized full-stack app with database persistence, public hosting, and AI-powered features. The architectural decisions, prompt rationale, configuration choices, and operational gotchas are all in your head right now. Today we externalize them into a real README, code comments, and architecture documentation so that the project survives contact with the most important user it will ever have: future-you, six months from now, having forgotten the details.
What you should have ready:
- Your full project from Lessons 06-17 in a GitHub repository
- Markdown fluency from Lesson 08 (JSON's cousin)
- One screenshot of your game running, or a 30-second screen recording
- About 60 minutes
- An honest answer to: "if I lost access to my own memory of this project tomorrow, what would my notes need to say?"
The Concept
Documentation has three audiences, and a good project addresses all three:
| Audience | What they need | Where it lives |
|---|---|---|
| The first-time visitor | What is this? Should I care? Can I run it? | README.md (front door) |
| The contributor | How do I add a feature? Where does logic X live? Why was decision Y made? | Code comments + architecture docs |
| The future-you | What were the operational gotchas? Where are the secrets? Why isn't approach X used? | All of the above + maybe a NOTES.md |
The README is the most-read file in any open-source project — and for hiring, the most-read file in any portfolio repo. A typical recruiter spends ~30 seconds on a GitHub project. The README is what they see. Get it right and you've earned the next conversation.
A professional README has six sections, in this order:
1. Title + one-line description What is this?
2. Demo / screenshot Show me, don't tell me.
3. Features (3-7 bullets) What does it do?
4. Quick start How do I run it?
5. Architecture (one diagram) How is it built?
6. License + author Whose work is this?
The order matters. Each section answers a question the previous one created. The visitor scrolls until they're convinced or until they leave; structure the README so the most compelling 30 seconds is at the top.
Code comments are different from docs. A common beginner mistake is comments that restate the code:
// Increment i by 1
i++
// Set name to "Divyanshu"
const name = "Divyanshu"
These comments are noise. They steal attention from the reader's actual job (reading code). Useful comments explain why, not what:
// We sort by score DESC and then by createdAt ASC so that ties favor
// the earlier submission — this prevents leaderboard churn when two
// players hit the same score in quick succession.
const sorted = scores.sort((a, b) =>
b.score - a.score || a.createdAt.localeCompare(b.createdAt)
)
The "why" comment captures the decision — the design intent that made the code take this exact shape. Six months from now, when you (or someone else) wonders "why does it sort like this?", the comment is the answer.
Architecture documentation is the third piece. For projects above ~500 lines of code, an ARCHITECTURE.md (or docs/architecture.md) becomes valuable. It captures:
- The major components and how they relate (one diagram)
- Decisions and their rationale ("we chose SQLite over Postgres because ...")
- The unsolved problems and known limitations
- The path the project is on ("if we needed to handle 10× the load, the next change would be ...")
Real teams write Architecture Decision Records (ADRs) — short numbered files (docs/adr/0001-use-sqlite.md) capturing one decision each, with context, options considered, and rationale. ADRs are durable; they survive employee turnover and become the institutional memory of a codebase.
The professional habit you're building today: the work isn't done when the code runs. The work is done when someone else can run, modify, and extend the code without your help. Documentation is the difference between "demo" and "ship."
A line worth memorizing: documentation is a love letter to your future self. Every minute spent writing it is repaid ten-fold the next time you open this codebase after a long break — or the next time someone you've never met tries to use what you built.
Quick Concepts
| Term | Simple Meaning |
|---|---|
| README.md | The front-door file every GitHub project needs |
| Markdown | The plain-text formatting language for .md files (you've used it in Lesson 08 and on every blog post) |
| Code comment | A note inside the code explaining why, not what |
| JSDoc | A code-comment format that describes function signatures (used by editors for autocomplete) |
| Architecture Decision Record (ADR) | A short numbered file capturing one significant design decision |
| CHANGELOG.md | A version-by-version record of what changed in the project |
What We Will Build
By the end of this lesson, you will have done these specific things:
- Wrote a real README.md with all six sections. Replaced any existing thin README. Deliberately wrote each section like you were the visitor:markdown
# Snake Game — AI-Powered Full-Stack A browser-based Snake game with a persistent online leaderboard, AI commentary on key events, and full-stack architecture you can inspect end-to-end. Built across the [ABCsteps](https://abcsteps.com) 20-lesson AI Engineering Course.  ## Features - 3D rendering via Three.js - Persistent online leaderboard (Express + SQLite) - AI commentary powered by Google Gemini Flash - Containerized backend with health checks - Public hosting via Cloudflare Tunnel ## Quick start ... - Added a screenshot to
docs/screenshot.pngand embedded it in the README. A picture establishes legitimacy in 1 second; text takes 30 seconds. - Wrote a Quick Start section that gets a visitor from
git cloneto a running app in 5 minutes:markdown## Quick start ```bash git clone [email protected]:<you>/snake-game.git cd snake-game cp .env.example .env # then edit .env to add your GEMINI_API_KEY docker compose up -d open http://localhost:3000textTested it on a fresh checkout (e.g., from a different folder) — confirmed the steps actually work. - Created a
.env.examplefile in the repo. List every env var the project reads (GEMINI_API_KEY=,PORT=, etc.) with empty values. The visitor copies it to.envand fills in their own keys. The actual.envstays in.gitignore(never commit secrets). - Wrote an Architecture section in the README with a single ASCII diagram:text
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐ │ Browser │───▶│ Express API │───▶│ SQLite │ │ (Three.js) │ │ (Lessons 12-13) │ │ (Lesson 14) │ └──────────────┘ └──────────────────┘ └──────────────┘ │ ▼ ┌──────────────────┐ │ Gemini Flash │ │ (Lessons 16-17) │ └──────────────────┘ - Audited every existing code comment in your project. Removed comments that restate the code. Added comments where you remember struggling (the CORS fix, the rate-limit logic, the JSON-mode response parsing). Made sure each remaining comment answers why.
- Added JSDoc to your three most important backend functions so future readers (and your editor's autocomplete) know the input/output shape:javascript
/** * Submit a new score to the leaderboard. * @param {string} name - Player name (1-30 chars) * @param {number} score - Non-negative integer * @returns {{id: number, name: string, score: number, createdAt: string}} * @throws {Error} If validation fails — caller should handle 400 response */ function insertScore(name, score) { /* ... */ } - Wrote your first ADR at
docs/adr/0001-use-sqlite.md:markdown# ADR 0001: Use SQLite for the leaderboard database ## Context The leaderboard needs persistent storage. Options: SQLite, PostgreSQL, Firestore, in-memory + cloud backup. ## Decision SQLite via `better-sqlite3`, in WAL mode, mounted as a Docker volume. ## Rationale - Single-file simplicity matches solo-developer ops - Read performance is excellent for leaderboard queries (<10K rows) - WAL mode handles the few concurrent writes we expect - No separate server to deploy or pay for ## Consequences - When usage exceeds ~100 concurrent writes, we'd migrate to PostgreSQL - Backup strategy is "copy the .db file" — simple but manual - Pushed everything to GitHub. Visited your repo's GitHub page. Read the README from the top as if you were a stranger. Made one more pass of edits.
The final test of step 9 is the goal. The README a stranger reads in 30 seconds is the README that earns you the next conversation.
Think About
Before studying, consider:
- Find a popular open-source project on GitHub (e.g., tailwindcss or supabase). Read their README. Notice the structure, the tone, the screenshots, the "how to install in 30 seconds" sections. What patterns do they all share? (Compelling first 30 seconds, demo first, install second, features third, contribution last.)
- If your worst day's bug — production-down at 11pm — happened to your Snake game six months from now, what would you wish your future-self had documented? (Probably: how to redeploy, where the secrets live, what dependencies are critical, who else needs to be told. The runbook is documentation too.)
By the End
After this lesson, you'll:
- ✅ Have a polished README.md covering all six sections (title, demo, features, quick start, architecture, license)
- ✅ Have a screenshot or short recording embedded in the README
- ✅ Have a
.env.examplelisting every secret the project needs - ✅ Have removed comments that restate the code; kept ones that explain decisions
- ✅ Have JSDoc on at least 3 important backend functions
- ✅ Have your first Architecture Decision Record at
docs/adr/0001-use-sqlite.md - ✅ Be able to hand the GitHub URL to anyone and have them get the project running in 5 minutes
Code is read 10× more than it is written. Documentation is the love letter to that majority. ✨
Next lesson · 19
Final Polish and Verification
Improve UI, fix defects, and verify that the product behaves as expected before sharing it.