Real software changes after it ships.
This document describes one updated requirement for PostKit. Your task is to analyze the change, predict its impact, implement it, and then reflect honestly on what the experience revealed about your system.
The implementation is intentionally small. The point is not what you build — it is what you learn about what you already built.
PostKit users have asked for one thing:
They want to know when a post was published.
The current display shows when a post was last updated. For published posts, users care more about when it was published — that is the date that matters to their readers. Last edited is a detail for the writer. Published date is information for everyone.
For posts that have been published, the preview must show when the post was published — not when it was last edited.
For posts that have not yet been published, continue showing the last updated date.
What this means:
- The
Posttype needs a way to record when a post was published - Publishing a post (advancing status to
published) must record that moment - The preview panel must show the right date depending on the post's status
There are no types provided here. Reading the requirement, understanding what it implies for your data model, and deciding how to implement it is part of the assignment.
Open your app. Open TEST-TARGETS.md. Do not write any code yet.
Answer these questions in writing:
- What change does this requirement make to the
Posttype? - Which files in your app will need to change?
- Which boundaries from your lesson 9 map does this change cross?
- Run your test suite right now. Which tests break immediately?
- Which tests do you expect to break after you implement the change?
Write your answers down. These are your predictions. You will compare them against what actually happened.
Make the smallest change that satisfies the requirement.
- Update the
Posttype - Update the store — when a post is advanced to
published, record the published date - Update the preview panel — show
publishedAtfor published posts,updatedAtfor others - Update your test suite — fix any tests that broke, add at least one new test for the new behavior
No library changes are required. This change lives entirely in your app.
After implementing, compare what happened against your predictions.
Write REFLECTION.md in your app repo. Answer these six questions:
On the change:
- What did you predict would need to change? What actually needed to change? Where were you wrong?
- Which part of your app absorbed this change most cleanly — you made the change and it just worked? What made that possible?
- Which part required more rework than you expected? What design decision caused that?
On your tests: 4. How many tests broke when you first ran your suite? What did that tell you? 5. Did any test catch a bug you would not have found otherwise? Describe it specifically.
On the system: 6. If this requirement had arrived on week 2 instead of week 8, would you have built anything differently? What?
Be specific. Name the files. Paste the code that surprised you. Vague answers ("it went well") are not useful — to you or to anyone reading this.
Prepare a 3-minute presentation for the last class.
Structure it around the gap between prediction and reality:
- What I predicted — which files, which tests, how much work
- What actually happened — where you were right and where you were wrong
- One thing that worked cleanly — and why you think it did
- One thing that didn't — and what you would do differently
You do not need slides. Use your code. Show the change.
Submit via Gradescope:
- R7 implemented correctly
- Test suite updated — broken tests fixed, at least one new test added
-
REFLECTION.mdwith all six questions answered specifically - Written impact analysis from Part 1 (can be included in REFLECTION.md)
| Criteria | Points |
|---|---|
| R7 implemented correctly | 20 |
| Test suite updated with new test | 20 |
| Impact analysis completed before implementation | 15 |
| Reflection answers are specific (names files, shows code, identifies surprises) | 35 |
| Presentation delivered | 10 |
You have spent seven weeks building a system — first individual functions, then libraries, then an app that composes them.
This assignment asks one question: now that you have built it, do you understand it?
A developer who can predict where a change will land, implement it cleanly, and articulate what the experience revealed understands their system. That understanding is what makes the next change easier.
The gap between your prediction and what actually happened is not a mistake. It is information. The goal of the reflection is to make that information explicit.