What breaks while you are not looking
Nothing in software stays working by default. This lesson is the list, so that the next one is arithmetic rather than an argument.
Six things, and none of them is your code changing
Your key expires or is rotated. Trial ends, card fails, key regenerated. The tool returns 401 on every request and looks completely broken.
The data changes shape. A field is added, renamed or starts arriving as a string. Course 3 met a split ratio delivered as "4.000000/1.000000", and a 404 with a plain-text body. Neither of those is exotic and neither throws where you would expect.
A dependency breaks. 434 packages, and one of them ships a bad release or a security advisory that forces an upgrade you were not planning.
The platform changes. A Node version is retired, a build image updates, a free tier changes its terms.
A ticker stops existing. Delisted, renamed, merged. Course 3 counted 32,854 delisted US common stocks against 18,012 live — this is not a rare event, it is the normal condition of a symbol list.
Certificates and domains expire, which is the most preventable and still happens constantly.
Every one of them is silent
That is the property they share. Your code did not change, your tests still pass locally, your repository looks exactly as it did. The tool is simply wrong or dead, and nothing announces it.
This is why the previous unit's monitoring is not paranoia. It is the only mechanism that turns a silent failure into a known one.
What you can actually do
- Pin the platform version — Node, the runtime, the build image. An unpinned version is a change you did not schedule.
- Run CI on a schedule, not only on push. A weekly build catches a dependency advisory and a platform change with no code change at all, and it is one line of cron in the workflow.
- Handle a missing symbol as normal, not as an error. A delisted ticker in your watchlist should show as delisted, not blank the panel.
- Validate the shape at the boundary. You have been doing this since course 1; the value shows up years later when a field changes type and your parser says so instead of your chart quietly drawing nothing.
- Read the changelog when you upgrade something. Ten minutes, occasionally.
Budget the time, honestly
A small deployed tool costs roughly an hour a month of unglamorous maintenance: an advisory, a platform notice, a symbol that vanished.
That is not a lot, and it is not zero, and pretending it is zero is why most personal projects are dead. Knowing the number is what lets you decide honestly whether to keep it alive — and deciding to retire a tool is a legitimate outcome, as long as it is a decision rather than a slow accident.
The finance behind it
Why a delisted ticker is routine rather than exceptional: Why do "average returns" often look too good?
Try it now
Add a weekly scheduled CI run today. It costs one line, it catches two of the six failure modes with no effort from you, and it is the highest-leverage thing in this unit.