<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JEREMY NWOKORIE</title>
    <description>The latest articles on DEV Community by JEREMY NWOKORIE (@jeremynwokorie).</description>
    <link>https://dev.to/jeremynwokorie</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4219326%2F24bf3cbe-7762-4c13-b3aa-90d566d8667e.jpg</url>
      <title>DEV Community: JEREMY NWOKORIE</title>
      <link>https://dev.to/jeremynwokorie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeremynwokorie"/>
    <language>en</language>
    <item>
      <title>Designing Recoverable Inquiry Forms: Labels, Errors, and State Boundaries</title>
      <dc:creator>JEREMY NWOKORIE</dc:creator>
      <pubDate>Fri, 06 Nov 2026 14:27:54 +0000</pubDate>
      <link>https://dev.to/jeremynwokorie/designing-recoverable-inquiry-forms-labels-errors-and-state-boundaries-2a0m</link>
      <guid>https://dev.to/jeremynwokorie/designing-recoverable-inquiry-forms-labels-errors-and-state-boundaries-2a0m</guid>
      <description>&lt;p&gt;This technical design exercise adapts &lt;a href="https://pthhs.net/articles/home-care-inquiry-form-recovery" rel="noopener noreferrer"&gt;Designing Home Care Inquiry Forms People Can Finish&lt;/a&gt;, published by Robert, CTO of &lt;a href="https://pthhs.net/" rel="noopener noreferrer"&gt;Primetime Home Health Services&lt;/a&gt;. It is shared through Jeremy Nwokorie’s account; his &lt;a href="https://www.linkedin.com/in/jeremynwokorie/" rel="noopener noreferrer"&gt;health informatics and public health background&lt;/a&gt; is relevant context for information design, not a claim that this example is deployed.&lt;/p&gt;

&lt;p&gt;PTHHS’s &lt;a href="https://pthhs.net/home-care-contact-us" rel="noopener noreferrer"&gt;current contact page&lt;/a&gt; is call-first. The form below is a hypothetical implementation sketch, not an existing PTHHS feature, a reported defect, or a completed test. It handles an ordinary inquiry about nonmedical personal assistance, not clinical intake or service eligibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the state contract before the component
&lt;/h2&gt;

&lt;p&gt;For a proposed short inquiry, imagine a required callback number, an optional preferred name, and an optional general topic. The office must review the purpose and proposed fields before release. Avoid a broad “Tell us everything” field that invites private records.&lt;/p&gt;

&lt;p&gt;Separate three concerns in the design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input state: the permitted answers entered during this process.&lt;/li&gt;
&lt;li&gt;Validation state: which answers need correction under the agreed rules.&lt;/li&gt;
&lt;li&gt;Submission state: whether the server accepted the inquiry, rejected a field, or returned an uncertain result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A validation failure should update the relevant error state without resetting unrelated permitted answers. A network failure is not proof of successful submission. Avoid success language until the receiving system confirms acceptance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect the label, hint, and error
&lt;/h2&gt;

&lt;p&gt;This illustrative fragment shows the relationships for one missing-value error. It is not a complete form or production-ready validation system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"alert"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Please correct this answer:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#callback"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Phone number for a return call&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"callback"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Phone number for a return call (required)&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"callback-hint"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Use a phone format supported by this service.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"callback"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"callback"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;
       &lt;span class="na"&gt;aria-invalid=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
       &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"callback-hint callback-error"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"callback-error"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Enter the phone number you want us to use for a return call.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example deliberately contains no real phone number. Replace the generic hint with the actual reviewed format instructions. When the error is resolved, remove the obsolete error state and update the description references. Test whether following the summary link puts keyboard and assistive-technology users in the expected place; markup alone does not establish correct focus or announcement behavior.&lt;/p&gt;

&lt;p&gt;Visible labels must survive typing. See W3C’s &lt;a href="https://www.w3.org/WAI/tutorials/forms/instructions/" rel="noopener noreferrer"&gt;instructions&lt;/a&gt; and &lt;a href="https://www.w3.org/WAI/tutorials/forms/labels/" rel="noopener noreferrer"&gt;labeling&lt;/a&gt; tutorials. Its &lt;a href="https://www.w3.org/WAI/tutorials/forms/notifications/" rel="noopener noreferrer"&gt;notification guidance&lt;/a&gt; explains summaries and field associations. Do not rely on a red border to communicate a correction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agree on browser and server behavior
&lt;/h2&gt;

&lt;p&gt;If the server supports punctuation variations, the browser should accept them too. Do not silently reinterpret an ambiguous number. A &lt;code&gt;tel&lt;/code&gt; input does not establish number ownership or replace server-side validation. Keep syntax checks separate from decisions about service availability or eligibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/forms/validation/" rel="noopener noreferrer"&gt;W3C’s validation tutorial&lt;/a&gt; distinguishes browser checks from the server checks still needed. Document the supported formats once, then test both paths against the same synthetic cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bound recovery to the supported process
&lt;/h2&gt;

&lt;p&gt;Preserving an answer during a correction does not automatically justify cross-session storage. Decide the lifetime of each value before choosing persistence mechanisms. Do not add indefinite browser storage simply to make Back work. Do not send entered names, numbers, or free text to analytics or error reports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html" rel="noopener noreferrer"&gt;W3C’s redundant-entry explanation&lt;/a&gt; distinguishes entry within a process from storage between sessions. Test Back, return, reload, and any documented expiry behavior. Describe actual retention behavior instead of promising recovery the implementation cannot provide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a journey-based acceptance matrix
&lt;/h2&gt;

&lt;p&gt;These are proposed checks using synthetic values, not results from a deployed PTHHS form:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Expected evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Submit without callback&lt;/td&gt;
&lt;td&gt;Specific field error; unrelated permitted answers retained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correct that field&lt;/td&gt;
&lt;td&gt;Obsolete error removed; other answers unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Try supported punctuation&lt;/td&gt;
&lt;td&gt;Browser and server agree on each documented case&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow summary by keyboard&lt;/td&gt;
&lt;td&gt;Correct control is reachable; no trap or lost position&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use intended screen reader/browser pairs&lt;/td&gt;
&lt;td&gt;Label, hint, and current error make sense together&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Narrow viewport or larger text&lt;/td&gt;
&lt;td&gt;Correction controls remain readable and reachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interrupt, return, or expire&lt;/td&gt;
&lt;td&gt;Retention and clearing match the documented policy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Record the environment, input case, expected result, observed result, and retest after a fix. Automated checks do not replace the complete interaction or review by the staff who answer inquiries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and limits
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://pthhs.net/articles/home-care-inquiry-form-recovery" rel="noopener noreferrer"&gt;original company article&lt;/a&gt; includes the full operational context and source notes, researched November 5, 2026. This adaptation was prepared with AI assistance and reviewed for source accuracy and company scope. It makes no measured conversion or workload claim, accessibility or security certification, or clinical, eligibility, or regulatory assessment. Any actual service arrangement must be confirmed with the office.&lt;/p&gt;

</description>
      <category>design</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
