What still works offline must be declared up front
Aliases: offline available · degraded capability · what you can still do
What it is
People already know they are off the network. The next question is what they can still do. The answer has to arrive before they act, not after they tap Save and hear “this needs a network”. Offline capability scope is a prior declaration: what is readable, what is writable, which entries are simply stopped. When the scope is vague, people continue on the online model and recode failure as breakage.
This leaf does not decide whether local storage is the authoritative replica — that is an architectural choice. It only requires that, for this stretch of offline, the interface states the capability boundary.
Why it happens
Offline slices the feature set into three: still available, available degraded, unavailable. People plan the next move against the full set (reply, edit the sheet, place an order). If the boundary does not appear before planning, the plan is built on empty capability, and every tap is a prediction error. Errors accumulate into “this product does not work offline”, even when drafts can still be read and writes can still be staged.
“Up front” means when intent forms, not when the request is sent. An entry that still looks tappable, then disables on tap, teaches with a failure. Teaching after investment has already been spent is billed to trust. Making unavailable entries un-tappable in offline mode, with a reason, lets the plan change on the first scan.
Where it stops holding
Read-only browsing, a dictionary, already-downloaded media: the scope is almost “all readable, none writable” — one sentence, no footnote on every button. Scope that depends on what is cached (unopened documents unreadable, opened ones fine) must be spoken in the moment (“only the three already opened”), not frozen as “supports offline reading”. Emergency call, payment, one-time codes that law or risk require to be online must not imply “try again in a bit and it will work”; say it will not work now. A shared draft others are watching may be writable offline as a private unsynced copy; the scope must include “others cannot see this yet”, or available is heard as published.
Applying it
- Once offline, put a scope sentence next to the indicator: “Downloaded items are readable; edits send when we reconnect” or “Browse only, no submit”.
- Primary actions that are unavailable become unavailable in place, with a reason. Do not leave a tappable costume.
- When scope tracks the cache, speak a concrete set (“3 downloaded”), not an abstract promise.
- How to check: drop the network and do not act. Let someone look for five seconds, then ask “can I save / send / which pieces can I read”. A wrong answer or a refusal to answer means the scope was not declared up front. Then tap an entry that should be dead: if the notice arrives only at submit failure, the copy was written after the fact.