@vibe-interviewing/scenarios 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -124,4 +124,38 @@ evaluation:
|
|
|
124
124
|
- 'Used AI effectively as a debugging partner'
|
|
125
125
|
expected_fix: 'Restore the ternary in #updateOrPatchById: isPatch ? { ...item, ...body, id } : { ...body, id }'
|
|
126
126
|
|
|
127
|
+
interviewer_guide:
|
|
128
|
+
overview: |
|
|
129
|
+
This scenario evaluates systematic debugging skills and HTTP semantics understanding.
|
|
130
|
+
The bug is subtle — PATCH was changed to behave like PUT, dropping fields not included
|
|
131
|
+
in the request body. Strong candidates reproduce first, read the source, and understand
|
|
132
|
+
the merge vs replace distinction. This also tests how candidates use AI as a debugging
|
|
133
|
+
partner rather than just asking it to find the bug.
|
|
134
|
+
key_signals:
|
|
135
|
+
- signal: 'Reproduces before fixing'
|
|
136
|
+
positive: 'Starts by sending curl requests to reproduce the data loss'
|
|
137
|
+
negative: 'Jumps straight into reading code or asks AI to find the bug'
|
|
138
|
+
- signal: 'Reads source code'
|
|
139
|
+
positive: 'Traces the request path through the codebase to find where updates happen'
|
|
140
|
+
negative: 'Relies entirely on AI to explain the code without reading it'
|
|
141
|
+
- signal: 'Understands HTTP semantics'
|
|
142
|
+
positive: 'Recognizes that PATCH should merge and PUT should replace'
|
|
143
|
+
negative: 'Treats PATCH and PUT as interchangeable or does not know the difference'
|
|
144
|
+
- signal: 'Critical evaluation of AI'
|
|
145
|
+
positive: 'Questions AI suggestions, verifies them against the actual code'
|
|
146
|
+
negative: 'Accepts the first AI suggestion without testing or reviewing'
|
|
147
|
+
- signal: 'Verifies the fix'
|
|
148
|
+
positive: 'Re-runs the reproduction steps to confirm the fix works'
|
|
149
|
+
negative: 'Applies a fix and considers it done without testing'
|
|
150
|
+
common_pitfalls:
|
|
151
|
+
- 'Asking AI to "find the bug" without investigating — shows over-reliance on AI'
|
|
152
|
+
- 'Fixing symptoms (e.g., adding a workaround in the route handler) instead of the root cause'
|
|
153
|
+
- 'Not understanding that the non-array #updateOrPatch method is NOT affected'
|
|
154
|
+
- 'Confusing the spread operator behavior — the fix is about restoring the existing item spread'
|
|
155
|
+
debrief_questions:
|
|
156
|
+
- 'Walk me through how you reproduced the issue. What requests did you try?'
|
|
157
|
+
- 'Can you explain the difference between how PATCH and PUT should behave?'
|
|
158
|
+
- 'How did you use AI during the debugging process? What worked well?'
|
|
159
|
+
- 'If you were reviewing a PR that introduced this bug, what would you look for?'
|
|
160
|
+
|
|
127
161
|
license: MIT
|
|
@@ -81,4 +81,38 @@ evaluation:
|
|
|
81
81
|
- 'Made thoughtful design decisions about abstraction level'
|
|
82
82
|
- 'Used AI effectively as an architecture partner'
|
|
83
83
|
|
|
84
|
+
interviewer_guide:
|
|
85
|
+
overview: |
|
|
86
|
+
This scenario evaluates architectural thinking and incremental refactoring skills.
|
|
87
|
+
The candidate must decouple a tightly-coupled storage layer (lowdb) from the Service
|
|
88
|
+
class by introducing a clean interface. There is no single right answer — multiple
|
|
89
|
+
valid approaches exist. Focus on how the candidate reasons about abstraction boundaries,
|
|
90
|
+
makes trade-offs, and refactors incrementally without breaking existing behavior.
|
|
91
|
+
key_signals:
|
|
92
|
+
- signal: 'Identifies coupling points first'
|
|
93
|
+
positive: 'Maps out all places Service touches lowdb before writing any code'
|
|
94
|
+
negative: 'Starts coding the interface without understanding the existing dependencies'
|
|
95
|
+
- signal: 'Designs a minimal interface'
|
|
96
|
+
positive: 'Creates an interface with only the methods Service actually needs'
|
|
97
|
+
negative: 'Over-engineers with many generic methods, complex generics, or framework-like abstractions'
|
|
98
|
+
- signal: 'Refactors incrementally'
|
|
99
|
+
positive: 'Makes one change at a time and verifies the server still works after each step'
|
|
100
|
+
negative: 'Attempts a big-bang rewrite — changes everything at once and debugs the result'
|
|
101
|
+
- signal: 'Handles helper functions'
|
|
102
|
+
positive: 'Notices that embed/nullifyForeignKey/deleteDependents also access db.data and has a plan for them'
|
|
103
|
+
negative: 'Misses the helper functions entirely, leaving them broken after refactoring'
|
|
104
|
+
- signal: 'Uses AI as architecture partner'
|
|
105
|
+
positive: 'Discusses design trade-offs with AI, considers alternatives before committing'
|
|
106
|
+
negative: 'Asks AI to generate the entire refactoring without engaging in design decisions'
|
|
107
|
+
common_pitfalls:
|
|
108
|
+
- 'Over-engineering the interface with methods that are not needed (YAGNI violation)'
|
|
109
|
+
- 'Forgetting the helper functions (embed, nullifyForeignKey, deleteDependents) that also access db.data directly'
|
|
110
|
+
- 'Not verifying the server still works after refactoring — the server must pass the same curl tests'
|
|
111
|
+
- 'Creating a leaky abstraction where lowdb internals bleed through the interface'
|
|
112
|
+
debrief_questions:
|
|
113
|
+
- 'How did you decide what methods to put on the storage interface?'
|
|
114
|
+
- 'What trade-offs did you consider when designing the abstraction?'
|
|
115
|
+
- 'How did you handle the helper functions that also access the database directly?'
|
|
116
|
+
- 'If you had more time, what would you improve about your design?'
|
|
117
|
+
|
|
84
118
|
license: MIT
|
|
@@ -125,4 +125,39 @@ evaluation:
|
|
|
125
125
|
- 'Tested end-to-end with a webhook listener'
|
|
126
126
|
- 'Used AI effectively as a development partner'
|
|
127
127
|
|
|
128
|
+
interviewer_guide:
|
|
129
|
+
overview: |
|
|
130
|
+
This scenario evaluates feature design and integration skills. The candidate must build
|
|
131
|
+
a webhook notification system on top of an existing REST API. A key insight is that
|
|
132
|
+
json-server already handles CRUD for any resource in db.json — so the "webhooks" array
|
|
133
|
+
gives them registration for free. Strong candidates discover this quickly and focus their
|
|
134
|
+
effort on the notification delivery logic rather than rebuilding CRUD.
|
|
135
|
+
key_signals:
|
|
136
|
+
- signal: 'Discovers the free CRUD'
|
|
137
|
+
positive: 'Realizes json-server already handles /webhooks CRUD via the seeded array in db.json'
|
|
138
|
+
negative: 'Builds custom webhook registration routes from scratch, duplicating existing functionality'
|
|
139
|
+
- signal: 'Starts with core functionality'
|
|
140
|
+
positive: 'Gets basic webhook delivery working first, then adds filtering and error handling'
|
|
141
|
+
negative: 'Gets bogged down in edge cases (retries, backoff, ordering) before core delivery works'
|
|
142
|
+
- signal: 'Handles errors gracefully'
|
|
143
|
+
positive: 'Webhook delivery failures are caught and do not crash the server or block API responses'
|
|
144
|
+
negative: 'Unhandled promise rejections or synchronous delivery that blocks the response'
|
|
145
|
+
- signal: 'Tests end-to-end'
|
|
146
|
+
positive: 'Sets up a listener to verify webhook delivery, tests the full flow'
|
|
147
|
+
negative: 'Only tests registration without verifying actual delivery'
|
|
148
|
+
- signal: 'Clean integration'
|
|
149
|
+
positive: 'Hooks into existing codebase patterns (middleware, service methods) rather than bolting on'
|
|
150
|
+
negative: 'Adds webhook logic in awkward places that break separation of concerns'
|
|
151
|
+
common_pitfalls:
|
|
152
|
+
- "Building custom CRUD for webhooks instead of leveraging json-server's built-in resource handling"
|
|
153
|
+
- 'Making webhook delivery synchronous, which blocks the API response'
|
|
154
|
+
- 'Over-engineering retry logic and backoff strategies before basic delivery works'
|
|
155
|
+
- 'Not filtering notifications by resource — sending every event to every webhook'
|
|
156
|
+
- 'Forgetting to exclude the "webhooks" resource from triggering webhook notifications'
|
|
157
|
+
debrief_questions:
|
|
158
|
+
- 'How did you decide where to hook into the codebase for notification delivery?'
|
|
159
|
+
- 'Did you notice that json-server handles /webhooks CRUD automatically? How did that affect your approach?'
|
|
160
|
+
- 'How would you handle webhook delivery at scale if this were a production system?'
|
|
161
|
+
- 'What would you add if you had another 30 minutes?'
|
|
162
|
+
|
|
128
163
|
license: MIT
|