<?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: PLC Creates</title>
    <description>The latest articles on DEV Community by PLC Creates (@plc-creates).</description>
    <link>https://dev.to/plc-creates</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3623614%2F37ddb0dd-40f1-402b-a91d-85550b315b98.jpg</url>
      <title>DEV Community: PLC Creates</title>
      <link>https://dev.to/plc-creates</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plc-creates"/>
    <language>en</language>
    <item>
      <title>We Have Database Rollbacks. Why Don't We Have State Rollbacks?</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Tue, 17 Feb 2026 14:19:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/we-have-database-rollbacks-why-dont-we-have-state-rollbacks-3k0n</link>
      <guid>https://dev.to/plc-creates/we-have-database-rollbacks-why-dont-we-have-state-rollbacks-3k0n</guid>
      <description>&lt;p&gt;We Have Database Rollbacks. Why Don't We Have State Rollbacks?&lt;/p&gt;

&lt;p&gt;Backend systems treat data as sacred. Frontend systems treat state as&lt;br&gt;
disposable.&lt;/p&gt;

&lt;p&gt;That distinction no longer holds.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Backend Discipline
&lt;/h2&gt;

&lt;p&gt;On the backend, rollback is normal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Transactions&lt;/li&gt;
&lt;li&gt;  ACID guarantees&lt;/li&gt;
&lt;li&gt;  Migrations&lt;/li&gt;
&lt;li&gt;  Backups&lt;/li&gt;
&lt;li&gt;  Rollbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We assume failure and design for recovery. We would never ship a&lt;br&gt;
database without a way back.&lt;/p&gt;

&lt;p&gt;Rollback is not an advanced feature. It is table stakes.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Frontend Reality
&lt;/h2&gt;

&lt;p&gt;On the frontend, the culture is different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Autosave&lt;/li&gt;
&lt;li&gt;  Rehydration&lt;/li&gt;
&lt;li&gt;  Optimistic UI&lt;/li&gt;
&lt;li&gt;  Validation on submit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the latest snapshot restores successfully, we tend to consider the&lt;br&gt;
problem solved.&lt;/p&gt;

&lt;p&gt;But restore does not mean recover.&lt;/p&gt;
&lt;h2&gt;
  
  
  SPAs Changed the Game
&lt;/h2&gt;

&lt;p&gt;Modern SPAs are no longer thin clients.&lt;/p&gt;

&lt;p&gt;They contain business logic, multi-step flows, derived state,&lt;br&gt;
client-side validation, schema evolution, partial persistence, and&lt;br&gt;
optimistic mutations.&lt;/p&gt;

&lt;p&gt;In many applications, frontend state is not a temporary UI concern. It&lt;br&gt;
is production data.&lt;/p&gt;

&lt;p&gt;A multi-step form in a SaaS product.\&lt;br&gt;
An admin dashboard with derived metrics.\&lt;br&gt;
A rich editor with optimistic updates.&lt;/p&gt;

&lt;p&gt;The client state holds business-critical transitions.&lt;/p&gt;

&lt;p&gt;Yet it has no rollback discipline.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Missing Primitive
&lt;/h2&gt;

&lt;p&gt;Consider the difference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend data lifecycle

Write → Validate → Commit → Rollback (if needed)

Frontend state lifecycle

Mutate → Autosave → Rehydrate → Validate on submit → ?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a restored snapshot turns out to be invalid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  There is no last known good state&lt;/li&gt;
&lt;li&gt;  There is no deterministic recovery&lt;/li&gt;
&lt;li&gt;  There is no versioned state discipline&lt;/li&gt;
&lt;li&gt;  There is no safe fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We retry.\&lt;br&gt;
We clear the state.\&lt;br&gt;
Or we hope validation catches the issue early enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation Is Not Recovery
&lt;/h2&gt;

&lt;p&gt;Validation answers:&lt;/p&gt;

&lt;p&gt;Is this state valid right now?&lt;/p&gt;

&lt;p&gt;Rollback answers:&lt;/p&gt;

&lt;p&gt;Can we return to a known good state after corruption?&lt;/p&gt;

&lt;p&gt;Detection and recovery are different responsibilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Structural Question
&lt;/h2&gt;

&lt;p&gt;If we would not ship a database without rollback, should we be&lt;br&gt;
comfortable shipping complex client state without it?&lt;/p&gt;

&lt;p&gt;As frontend systems absorb more responsibility, perhaps our recovery&lt;br&gt;
discipline should evolve with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thought
&lt;/h2&gt;

&lt;p&gt;Client-side state now carries real business weight. As that&lt;br&gt;
responsibility grows, so should the reliability expectations around it.&lt;/p&gt;

&lt;p&gt;I have been exploring recovery patterns for client-side state and&lt;br&gt;
refining a model around deterministic restoration. Curious how others&lt;br&gt;
approach this problem.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>reliability</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Autosave Works. Until the Restored State Is Invalid.</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Thu, 12 Feb 2026 19:23:04 +0000</pubDate>
      <link>https://dev.to/plc-creates/autosave-works-until-the-restored-state-is-invalid-8g3</link>
      <guid>https://dev.to/plc-creates/autosave-works-until-the-restored-state-is-invalid-8g3</guid>
      <description>&lt;p&gt;Autosave feels like a solved problem.&lt;/p&gt;

&lt;p&gt;You serialize the state.&lt;br&gt;&lt;br&gt;
You store it.&lt;br&gt;&lt;br&gt;
You restore it.  &lt;/p&gt;

&lt;p&gt;Users don’t lose their input. Everyone’s happy.&lt;/p&gt;

&lt;p&gt;That’s what I believed too.&lt;/p&gt;

&lt;p&gt;Until I realized something uncomfortable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The last saved state is not always a safe state.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Saving Is Easy. Restoring Is Not.
&lt;/h2&gt;

&lt;p&gt;Autosave is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serialize state
&lt;/li&gt;
&lt;li&gt;store it in &lt;code&gt;localStorage&lt;/code&gt; (or IndexedDB)
&lt;/li&gt;
&lt;li&gt;reload it on startup
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In most cases, that’s good enough.&lt;/p&gt;

&lt;p&gt;But here’s the nuance that changed how I think about client-side persistence:&lt;/p&gt;

&lt;p&gt;There’s a big difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This is the latest snapshot.”&lt;/li&gt;
&lt;li&gt;“This is a valid state for the application.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are not the same thing.&lt;/p&gt;

&lt;p&gt;And most implementations quietly assume they are.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Concrete Example: Multi-Step Onboarding
&lt;/h2&gt;

&lt;p&gt;Imagine a multi-step onboarding flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Account information
&lt;/li&gt;
&lt;li&gt;Preferences
&lt;/li&gt;
&lt;li&gt;Payment details
&lt;/li&gt;
&lt;li&gt;Success → profile created
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Behind the scenes, the state evolves at every step.&lt;/p&gt;

&lt;p&gt;Now imagine this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user completes payment details.&lt;/li&gt;
&lt;li&gt;A derived field recalculates something.&lt;/li&gt;
&lt;li&gt;The app crashes.&lt;/li&gt;
&lt;li&gt;Autosave restores the last snapshot.&lt;/li&gt;
&lt;li&gt;The UI &lt;em&gt;looks correct&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;The user clicks submit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A derived value was computed from stale data?&lt;/li&gt;
&lt;li&gt;A field was partially updated?&lt;/li&gt;
&lt;li&gt;A migration changed the schema between deploys?&lt;/li&gt;
&lt;li&gt;A validation rule evolved?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UI looks fine.&lt;br&gt;&lt;br&gt;
The state is not.&lt;/p&gt;

&lt;p&gt;And now you’re submitting a transactional form based on a logically inconsistent state.&lt;/p&gt;

&lt;p&gt;No error.&lt;br&gt;&lt;br&gt;
No visible corruption.&lt;br&gt;&lt;br&gt;
Just subtle inconsistency.&lt;/p&gt;




&lt;h2&gt;
  
  
  “But Isn’t That Obvious?”
&lt;/h2&gt;

&lt;p&gt;To engineers who work on complex systems: yes.&lt;/p&gt;

&lt;p&gt;To many frontend implementations? Not always.&lt;/p&gt;

&lt;p&gt;Most libraries focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validation while the form is active
&lt;/li&gt;
&lt;li&gt;saving frequently
&lt;/li&gt;
&lt;li&gt;restoring automatically
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Very few ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Was this state actually valid when it was saved?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And even fewer provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rollback to last known valid state
&lt;/li&gt;
&lt;li&gt;deterministic recovery rules
&lt;/li&gt;
&lt;li&gt;versioned schema validation on restore
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When It Actually Matters
&lt;/h2&gt;

&lt;p&gt;In many apps, restoring slightly inconsistent state is harmless.&lt;/p&gt;

&lt;p&gt;But consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;insurance quote forms
&lt;/li&gt;
&lt;li&gt;loan applications
&lt;/li&gt;
&lt;li&gt;subscription onboarding with payment
&lt;/li&gt;
&lt;li&gt;enterprise admin panels
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these flows, silent inconsistency can create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subtle validation failures
&lt;/li&gt;
&lt;li&gt;mismatched derived values
&lt;/li&gt;
&lt;li&gt;incorrect submissions
&lt;/li&gt;
&lt;li&gt;hard-to-debug support issues
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the user believes everything was fine.&lt;/p&gt;

&lt;p&gt;Because the UI said it was.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed My Thinking
&lt;/h2&gt;

&lt;p&gt;Autosave is necessary.&lt;br&gt;&lt;br&gt;
But it’s not sufficient.&lt;/p&gt;

&lt;p&gt;There are two separate concerns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Persistence&lt;/strong&gt; — keeping user input safe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validity&lt;/strong&gt; — guaranteeing the restored state respects invariants.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SafeState Recovery emerged from that distinction.&lt;/p&gt;

&lt;p&gt;Instead of assuming the latest snapshot is safe, it asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this state pass validation?&lt;/li&gt;
&lt;li&gt;If not, can it be deterministically repaired?&lt;/li&gt;
&lt;li&gt;If not, what is the last known valid state?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s a different layer of thinking.&lt;/p&gt;

&lt;p&gt;Not about saving more often.&lt;/p&gt;

&lt;p&gt;But about restoring responsibly.&lt;/p&gt;




&lt;p&gt;If you’ve worked on transactional or multi-step client-side flows:&lt;/p&gt;

&lt;p&gt;Do you explicitly validate restored state?&lt;br&gt;&lt;br&gt;
Or do you assume the latest snapshot is safe?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>I Lost 25% of a Form by Scrolling Up. Nobody Noticed.</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 24 Jan 2026 21:07:20 +0000</pubDate>
      <link>https://dev.to/plc-creates/silent-failures-most-metrics-dont-see-3e20</link>
      <guid>https://dev.to/plc-creates/silent-failures-most-metrics-dont-see-3e20</guid>
      <description>&lt;p&gt;This is a short essay about a quiet problem in modern web applications.&lt;/p&gt;

&lt;p&gt;Not crashes, not server errors, and not bugs that light up dashboards. It’s about data loss that leaves no error, no alert, and no feedback.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Absence of evidence is not evidence of absence.&lt;br&gt;&lt;br&gt;
— Carl Sagan&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A very ordinary moment
&lt;/h2&gt;

&lt;p&gt;A few weeks ago, I was filling out a survey for a major Canadian airline on my phone.&lt;/p&gt;

&lt;p&gt;It wasn’t a short form. It had multiple sections, a visible progress indicator, and I was about a quarter of the way through when I made a small upward scroll. The page refreshed, and everything was gone.&lt;/p&gt;

&lt;p&gt;There was no warning, no recovery, just an empty form.&lt;/p&gt;

&lt;p&gt;I didn’t complain, I didn’t report a bug, and I didn’t try again. I simply closed the page and moved on.&lt;/p&gt;

&lt;p&gt;Nothing broke, but the user left. Nobody noticed.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quiet problem in modern web apps
&lt;/h2&gt;

&lt;p&gt;Data loss in web forms isn’t new. What has changed is how invisible it has become.&lt;/p&gt;

&lt;p&gt;Modern web apps are used more on mobile devices, across unstable networks, with aggressive browser lifecycle management. Forms are longer, more complex, often multi-step, and users are interrupted constantly. The result isn’t necessarily more bugs, but more opportunities for normal human behavior to cause data loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we measure — and what we don’t
&lt;/h2&gt;

&lt;p&gt;Most teams are very good at measuring what breaks loudly.&lt;/p&gt;

&lt;p&gt;We track server errors, crashes, failed payments, validation issues, and performance regressions. When something goes wrong at scale, it usually leaves a trace somewhere.&lt;/p&gt;

&lt;p&gt;What we almost never measure is what disappears quietly.&lt;/p&gt;

&lt;p&gt;When a user refreshes a page, closes a tab, or loses a form because a browser crashed, nothing necessarily looks wrong from the system’s point of view. No error is thrown, no alert fires, and no red line appears on a dashboard.&lt;/p&gt;

&lt;p&gt;From the product’s perspective, nothing failed. From the user’s perspective, everything did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Silence is not satisfaction
&lt;/h2&gt;

&lt;p&gt;When users lose data, they rarely complain. They often assume they made a mistake, shrug it off, and move on.&lt;/p&gt;

&lt;p&gt;This behavior isn’t exceptional. It’s normal.&lt;/p&gt;

&lt;p&gt;Customer experience research consistently shows that only a small minority of dissatisfied users ever provide feedback. The vast majority don’t escalate the issue or explain what went wrong. They simply leave.&lt;/p&gt;

&lt;p&gt;Visible complaints are just the surface. Under each one sits a much larger volume of silent abandonments that never appear in metrics or reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this keeps happening
&lt;/h2&gt;

&lt;p&gt;There are solutions for form persistence, but many fall into familiar categories: legacy libraries that are no longer maintained, heavy integrations that require deep framework coupling, or partial fixes that don’t reflect real usage patterns, especially on mobile.&lt;/p&gt;

&lt;p&gt;Meanwhile, form data loss keeps happening quietly and repeatedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Savior exists
&lt;/h2&gt;

&lt;p&gt;I didn’t build Savior to polish UX details or optimize charts. I built it because people are human.&lt;/p&gt;

&lt;p&gt;They get interrupted, they reload without thinking, browsers crash, and phones do what phones do.&lt;/p&gt;

&lt;p&gt;Savior exists as a local safety net for those moments. It quietly keeps form data around so that a brief interruption doesn’t erase several minutes of effort.&lt;/p&gt;

&lt;p&gt;Savior Core is an open-source library for basic form persistence. Savior SafeState Recovery adds deterministic recovery for crashes and edge cases.&lt;/p&gt;

&lt;p&gt;More at &lt;strong&gt;Zippers.dev&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  One last question
&lt;/h2&gt;

&lt;p&gt;What’s the most expensive failure you’ve ever shipped that left no error trace?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ux</category>
      <category>reliability</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Programming was the right vehicle</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sun, 18 Jan 2026 16:55:45 +0000</pubDate>
      <link>https://dev.to/plc-creates/programming-was-the-right-vehicle-5h76</link>
      <guid>https://dev.to/plc-creates/programming-was-the-right-vehicle-5h76</guid>
      <description>&lt;p&gt;&lt;em&gt;Some will argue it shouldn’t even be peanut butter.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming was the right vehicle
&lt;/h2&gt;

&lt;p&gt;I realized something fairly late.&lt;/p&gt;

&lt;p&gt;Creativity isn’t a talent for me. It’s not a preference either. It’s a need.&lt;/p&gt;

&lt;p&gt;I didn’t always have the words for it. But looking back, it explains a lot.&lt;/p&gt;




&lt;h3&gt;
  
  
  Before I knew what I was looking for
&lt;/h3&gt;

&lt;p&gt;I changed paths more than once.&lt;/p&gt;

&lt;p&gt;Different fields, different interests, different attempts at finding something that would stick. At the time, I didn’t call it creativity. I just knew I needed to make things.&lt;/p&gt;

&lt;p&gt;Not necessarily useful things. Not impressive ones. Just something that came from me and existed afterward.&lt;/p&gt;

&lt;p&gt;There was always this low-level discomfort when I wasn’t creating anything. And a quiet relief when I was.&lt;/p&gt;




&lt;h3&gt;
  
  
  The map in the passenger seat
&lt;/h3&gt;

&lt;p&gt;When I was a kid, sitting in the car, my mother taught me how to use a road map.&lt;/p&gt;

&lt;p&gt;The real skill wasn’t reading it. It was folding it back properly on the first try so it would fit in the glove compartment again. If you know, you know.&lt;/p&gt;

&lt;p&gt;Once I understood how the map worked, I said something very casually:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“There should be a map where you can see the car. Where we are.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was the late 80s. It made my mother laugh.&lt;/p&gt;

&lt;p&gt;In my head, it made sense. I could actually see it. The map, the car, the position updating as you moved.&lt;/p&gt;

&lt;p&gt;I remember telling her I wanted to become an inventor. Even now, just writing this, I feel that light tension in my stomach.&lt;/p&gt;

&lt;p&gt;She told me it wasn’t really a job. Not in the academic sense. There was no degree for becoming an inventor, no clear path, no box to put it in.&lt;/p&gt;

&lt;p&gt;She wasn’t dismissive. She was practical.&lt;/p&gt;

&lt;p&gt;But something closed there. Not dramatically, not violently. Just enough to be felt, and then quietly carried forward.&lt;/p&gt;




&lt;h3&gt;
  
  
  Experimenting before knowing how
&lt;/h3&gt;

&lt;p&gt;When I got my first electric guitar, I didn’t know how to play it, but I played it anyway. I composed, and the next day, I played the same piece again.&lt;/p&gt;

&lt;p&gt;I didn’t know how to cook either, but I cooked anyway. When I was a kid, what came out of it, my mother used to call it “experiments”.&lt;/p&gt;

&lt;p&gt;And she wasn’t wrong. I would add something just to see what would happen. To see what it would do. Sometimes it worked, sometimes it didn’t.&lt;/p&gt;

&lt;p&gt;All my life, I’ve been experimenting, trying things simply to see what happens, to see what they do.&lt;/p&gt;




&lt;h3&gt;
  
  
  When creating disappears
&lt;/h3&gt;

&lt;p&gt;When I don’t create, or when I spend too long doing work that doesn’t stimulate me intellectually, something shifts. I don’t just get bored. I slowly get heavier. Quieter. Less present. Over time, it turns into something that looks a lot like depression.&lt;/p&gt;

&lt;p&gt;I didn’t understand that at first. I tried to push through it, to be responsible, to fit into roles that looked fine from the outside.&lt;/p&gt;

&lt;p&gt;At one point, I was working as a middle manager in aviation security. On paper, it was a serious job. Stable. Structured. Important. In reality, it asked almost nothing of the part of me that needs to build, explore, and figure things out.&lt;/p&gt;

&lt;p&gt;I burned out.&lt;/p&gt;

&lt;p&gt;That burnout forced a pause I hadn’t allowed myself before. And in that pause, something became obvious: if I kept choosing paths where creation had no place, I was going to keep breaking in the same way.&lt;/p&gt;

&lt;p&gt;So I made a turn. Out of all the disciplines, jobs, and careers I could have chosen, I enrolled in a programming program at CEGEP.&lt;/p&gt;

&lt;p&gt;It wasn’t an ambitious choice. It was a necessary one.&lt;/p&gt;




&lt;h3&gt;
  
  
  When programming entered the picture
&lt;/h3&gt;

&lt;p&gt;Programming didn’t arrive as a revelation. It arrived as something that fit.&lt;/p&gt;

&lt;p&gt;Creating something that didn’t exist and seeing it take shape. Before, there was nothing. After, there was something.&lt;/p&gt;

&lt;p&gt;No spectacle. No fireworks.&lt;/p&gt;

&lt;p&gt;Just the satisfaction of having brought something into the world. Even if it was small. Even if it was imperfect. Even if no one else ever saw it.&lt;/p&gt;

&lt;p&gt;That was enough.&lt;/p&gt;




&lt;h3&gt;
  
  
  Creating is not about being special
&lt;/h3&gt;

&lt;p&gt;We tend to put creativity on a pedestal. We imagine geniuses, outliers, people who pull ideas out of thin air. But no one creates from nothing.&lt;/p&gt;

&lt;p&gt;Creating is a series of deductions based on what we already know, what we’ve seen, and the mental paths we take when faced with the same stimulus.&lt;/p&gt;

&lt;p&gt;When someone says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don’t know how they even thought of that.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What they usually mean is that they didn’t take the same route.&lt;/p&gt;

&lt;p&gt;Different inputs. Different paths. Different results.&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;




&lt;h3&gt;
  
  
  Ideas don’t matter without action
&lt;/h3&gt;

&lt;p&gt;I’ve heard this sentence countless times:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“If I had a good idea, I’d build something.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the hard part isn’t the idea. It’s doing the work.&lt;/p&gt;

&lt;p&gt;You can have great project ideas. If nothing leaves your head, nothing exists. A good idea with no action is effectively the same as no idea at all.&lt;/p&gt;

&lt;p&gt;Creativity only becomes real once something crosses the line between thought and reality.&lt;/p&gt;




&lt;h3&gt;
  
  
  You think you’re not creative? Here’s a thought.
&lt;/h3&gt;

&lt;p&gt;Take 50 people and ask them to make their own version of a peanut butter and jelly sandwich.&lt;/p&gt;

&lt;p&gt;No one will make the same one.&lt;/p&gt;

&lt;p&gt;What kind of bread? White, whole grain, rye, baguette, brioche.&lt;/p&gt;

&lt;p&gt;Toasted or not? Lightly toasted? Dark? Almost burned?&lt;/p&gt;

&lt;p&gt;What kind of peanut butter? Creamy, crunchy, natural, dark roast, with salt, without.&lt;/p&gt;

&lt;p&gt;Some will argue it shouldn’t even be peanut butter. Almond, cashew, sunflower seed.&lt;/p&gt;

&lt;p&gt;How much do you put on the bread? Room temperature or straight from the fridge? Do you let the toast cool, or do you like it when everything melts together?&lt;/p&gt;

&lt;p&gt;Peanut butter first or jelly first?&lt;/p&gt;

&lt;p&gt;And the jelly. What kind? How much? One flavor or two? Spread to the edges or kept neatly in the center?&lt;/p&gt;

&lt;p&gt;Crust on or off? Sandwich closed or open-faced?&lt;/p&gt;

&lt;p&gt;Cut or not? Triangle, square, rectangle?&lt;/p&gt;

&lt;p&gt;Add a banana? A drizzle of honey? Is it still a PB&amp;amp;J then?&lt;/p&gt;

&lt;p&gt;Do you toast the bread in a toaster, a pan, an oven, over a campfire?&lt;/p&gt;

&lt;p&gt;Do you eat it with your hands, or do you dip it in your latte?&lt;/p&gt;

&lt;p&gt;Same goal. Same ingredients. A thousand tiny decisions.&lt;/p&gt;

&lt;p&gt;You are creative.&lt;/p&gt;




&lt;h3&gt;
  
  
  Leaving a trace
&lt;/h3&gt;

&lt;p&gt;It doesn’t have to be perfect.&lt;/p&gt;

&lt;p&gt;Waiting for perfection is often just a way to delay doing anything at all.&lt;/p&gt;

&lt;p&gt;Creating is leaving a trace of our passage. A small mark. A commit. A project. Something that exists now, even if it’s flawed, because of you.&lt;/p&gt;

&lt;p&gt;That’s what matters.&lt;/p&gt;

&lt;p&gt;Everything else can be improved later.&lt;/p&gt;

</description>
      <category>creativity</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>The line between developer and architect is getting thinner</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 03 Jan 2026 14:19:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/the-line-between-developer-and-architect-is-getting-thinner-4p14</link>
      <guid>https://dev.to/plc-creates/the-line-between-developer-and-architect-is-getting-thinner-4p14</guid>
      <description>&lt;h2&gt;
  
  
  The line between developer and architect is getting thinner
&lt;/h2&gt;

&lt;p&gt;I didn’t plan to become an architect.&lt;/p&gt;

&lt;p&gt;Like many developers, I started by writing code.&lt;br&gt;&lt;br&gt;
Solving concrete problems. Making things work. Improving them one commit at a time.&lt;/p&gt;

&lt;p&gt;But lately, something has shifted.&lt;/p&gt;

&lt;p&gt;With AI doing more of the implementation work, I find myself spending less time writing code and more time deciding &lt;em&gt;what&lt;/em&gt; should exist, &lt;em&gt;how&lt;/em&gt; it should be structured, and &lt;em&gt;why&lt;/em&gt; it should work that way.&lt;/p&gt;

&lt;p&gt;And that’s where the line starts to blur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing code versus designing systems
&lt;/h2&gt;

&lt;p&gt;Traditionally, the roles felt distinct.&lt;/p&gt;

&lt;p&gt;Developers implemented.&lt;br&gt;&lt;br&gt;
Architects designed.&lt;/p&gt;

&lt;p&gt;One focused on execution, the other on structure and long-term decisions.&lt;/p&gt;

&lt;p&gt;But when AI can generate implementations in seconds, the bottleneck moves.&lt;br&gt;&lt;br&gt;
The hard part is no longer typing code.&lt;br&gt;&lt;br&gt;
It’s making the right decisions before the code exists.&lt;/p&gt;

&lt;p&gt;What should this component own?&lt;br&gt;&lt;br&gt;
Where does this responsibility belong?&lt;br&gt;&lt;br&gt;
What happens when this scales, changes, or breaks?&lt;/p&gt;

&lt;p&gt;Those questions used to live “above” the code.&lt;br&gt;&lt;br&gt;
Now, they are part of everyday development.&lt;/p&gt;

&lt;p&gt;I notice it in small moments.&lt;br&gt;&lt;br&gt;
I’ll ask an AI to implement a feature, then spend more time reshaping or discarding the result than I would have spent writing it myself.&lt;br&gt;&lt;br&gt;
Not because the code is bad, but because the decisions behind it are wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI didn’t replace developers, it shifted the weight
&lt;/h2&gt;

&lt;p&gt;I don’t feel replaced.&lt;br&gt;&lt;br&gt;
But I do feel repositioned.&lt;/p&gt;

&lt;p&gt;The value I bring today is less about syntax and more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining boundaries&lt;/li&gt;
&lt;li&gt;choosing trade-offs&lt;/li&gt;
&lt;li&gt;anticipating consequences&lt;/li&gt;
&lt;li&gt;keeping coherence across a system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI helps me move faster, but only if I already know where I’m going.&lt;/p&gt;

&lt;p&gt;Without direction, speed just creates confusion.&lt;/p&gt;

&lt;p&gt;If I’m honest, I think we &lt;em&gt;are&lt;/em&gt; becoming more like architects, and less like pure producers.&lt;br&gt;&lt;br&gt;
And personally, I see that as a good thing.&lt;/p&gt;

&lt;p&gt;Not because coding matters less, but because it becomes more accessible.&lt;br&gt;&lt;br&gt;
Lower barriers mean more people can build, experiment, and create.&lt;br&gt;&lt;br&gt;
The focus shifts from “can you write this?” to “does this make sense?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Not everyone wants to be an architect
&lt;/h2&gt;

&lt;p&gt;And that’s important to say.&lt;/p&gt;

&lt;p&gt;Some developers genuinely enjoy deep implementation work.&lt;br&gt;&lt;br&gt;
Optimizing, refining, polishing details.&lt;br&gt;&lt;br&gt;
Living close to the code.&lt;/p&gt;

&lt;p&gt;If AI pushes everyone upward, toward abstraction and decision-making, it raises a real question:&lt;br&gt;
what happens to those who &lt;em&gt;don’t&lt;/em&gt; want that role?&lt;/p&gt;

&lt;p&gt;Are we all becoming accidental architects?&lt;br&gt;&lt;br&gt;
Or will the definition of “developer” simply expand?&lt;/p&gt;

&lt;p&gt;I don’t have a definitive answer.&lt;/p&gt;

&lt;p&gt;But avoiding decisions doesn’t preserve the old role.&lt;br&gt;&lt;br&gt;
It just means those decisions get made elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  A role in motion
&lt;/h2&gt;

&lt;p&gt;What I do know is this:&lt;br&gt;&lt;br&gt;
the boundary between developer and architect feels thinner than ever.&lt;/p&gt;

&lt;p&gt;Not because titles are changing, but because the daily work is.&lt;/p&gt;

&lt;p&gt;I still write code.&lt;br&gt;&lt;br&gt;
But more and more, my main responsibility is making sure the code that exists makes sense as a whole.&lt;/p&gt;

&lt;h2&gt;
  
  
  An open question
&lt;/h2&gt;

&lt;p&gt;So I’m curious how others experience this shift:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you feel your role changing with AI in the mix?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Are you spending more time on structure and decisions than implementation?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Is this a direction you welcome, or one you’re resisting?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’d like to hear how you see it.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>career</category>
      <category>devlife</category>
    </item>
    <item>
      <title>Autosave works. Until it doesn’t.</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 27 Dec 2025 16:19:29 +0000</pubDate>
      <link>https://dev.to/plc-creates/autosave-works-until-it-doesnt-2l3i</link>
      <guid>https://dev.to/plc-creates/autosave-works-until-it-doesnt-2l3i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The problem isn’t that autosave fails often. It’s that the consequences of failure are not negligible.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most custom autosave systems work.&lt;/p&gt;

&lt;p&gt;They save drafts, restore content after a refresh, and give both developers and users a reassuring sense of safety. For weeks or months, everything behaves exactly as expected. Nothing breaks. Nothing complains.&lt;/p&gt;

&lt;p&gt;And then one day, a user loses everything.&lt;/p&gt;

&lt;p&gt;Not because the developer was careless. Not because the code was rushed or poorly thought out. But because the web is a hostile environment in ways that don’t show up in local testing, staging, or happy-path demos.&lt;/p&gt;

&lt;p&gt;This isn’t a story about bad code.&lt;br&gt;&lt;br&gt;
It’s a story about invisible complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The browser doesn’t owe you a last save
&lt;/h2&gt;

&lt;p&gt;Many autosave implementations rely on a comforting assumption: when the page closes, there will be one last chance to save.&lt;/p&gt;

&lt;p&gt;In practice, that assumption is fragile. Browsers make no guarantees here. &lt;code&gt;beforeunload&lt;/code&gt; is not reliable, tabs can be killed without warning, and on mobile devices pages are routinely backgrounded or terminated without giving JavaScript a chance to clean up. The operating system decides when your code is done running, not you.&lt;/p&gt;

&lt;p&gt;If the browser needs to reclaim memory or enforce a policy, your autosave logic is not consulted. There is no final callback you can depend on. There never was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safari iOS can silently delete your data
&lt;/h2&gt;

&lt;p&gt;This one catches even experienced teams off guard.&lt;/p&gt;

&lt;p&gt;On iOS Safari, &lt;code&gt;localStorage&lt;/code&gt; can be purged after periods of inactivity or after a device restart. When it happens, there is no event, no warning, no error message, and no obvious signal that anything went wrong.&lt;/p&gt;

&lt;p&gt;Yesterday, the autosave worked.&lt;br&gt;&lt;br&gt;
Today, the data is gone.&lt;/p&gt;

&lt;p&gt;Nothing crashed. Nothing failed loudly. The browser simply reclaimed the storage and moved on. If you haven’t been burned by this yet, it’s usually just a matter of time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The last keystroke is the one that gets lost
&lt;/h2&gt;

&lt;p&gt;Autosave timing looks simple on paper, but in practice it’s full of trade-offs.&lt;/p&gt;

&lt;p&gt;Debounce delays, throttle windows, performance concerns, battery constraints on mobile devices — all of these influence when data is actually written. Users don’t type in neat, predictable intervals. They paste text, undo changes, and close tabs immediately after finishing a sentence.&lt;/p&gt;

&lt;p&gt;More often than anyone likes to admit, the most important sentence is the one that never makes it to storage. Autosave doesn’t fail randomly. It fails at the worst possible moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic forms break restoration assumptions
&lt;/h2&gt;

&lt;p&gt;Saving form state is relatively easy. Restoring meaning is not.&lt;/p&gt;

&lt;p&gt;Modern forms are dynamic. Fields appear conditionally, schemas evolve, sections are reordered, and inputs are removed or renamed over time. Restoring raw values into a structure that no longer matches what was saved leads to partial restores, misplaced data, and subtle corruption.&lt;/p&gt;

&lt;p&gt;From the user’s perspective, the form loads and &lt;em&gt;some&lt;/em&gt; fields look right. Others don’t. The system “kind of worked”, which is often worse than failing outright. Restoring state is not the same thing as restoring intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple tabs quietly overwrite each other
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;localStorage&lt;/code&gt; is shared across tabs. That means there is no built-in locking, no isolation, and no warning when one tab overwrites another.&lt;/p&gt;

&lt;p&gt;Two tabs. The same form. The same storage key.&lt;br&gt;&lt;br&gt;
Whichever tab writes last wins, and the other loses silently.&lt;/p&gt;

&lt;p&gt;Most developers don’t test this scenario. Most users don’t even realize it happened. They just know something disappeared.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage limits are real, and failures are often silent
&lt;/h2&gt;

&lt;p&gt;Storage quotas exist, they are smaller than most people think, and they behave differently across browsers.&lt;/p&gt;

&lt;p&gt;When those limits are reached, writes may fail or be ignored. Errors may not surface clearly, and autosave logic can stop persisting data without crashing or throwing exceptions. From the UI, everything still looks normal. From the user’s perspective, the safety net is still there.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;The autosave didn’t crash. It just stopped existing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most dangerous part is the false sense of safety
&lt;/h2&gt;

&lt;p&gt;Across post-mortems and developer accounts, one sentence comes up again and again: “We thought it was solid enough.”&lt;/p&gt;

&lt;p&gt;The autosave worked in testing. It worked in staging. It worked for most users, most of the time. Until one edge case erased real work.&lt;/p&gt;

&lt;p&gt;That’s the real danger. Not failure itself, but confidence built on an incomplete understanding of the surface area.&lt;/p&gt;

&lt;h2&gt;
  
  
  This isn’t about incompetence
&lt;/h2&gt;

&lt;p&gt;Reimplementing autosave is a rite of passage. Many teams do it carefully. Some do it exceptionally well. And they still miss cases.&lt;/p&gt;

&lt;p&gt;Not because they are bad developers, but because the web has more failure modes than intuition suggests. The problem isn’t that autosave is impossible. It’s that it’s much harder than it looks, and rarely treated as such.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Autosave is a trust feature.&lt;/p&gt;

&lt;p&gt;When it fails, users don’t blame the browser. They don’t blame Safari or storage quotas. They blame the product, and they stop trusting it.&lt;/p&gt;

&lt;p&gt;If this article resonates, it’s probably because you’ve seen one of these failures yourself. Or because you haven’t yet, and now understand why people do.&lt;/p&gt;

&lt;p&gt;After re-implementing autosave too many times and still missing edge cases, I realized the problem wasn’t effort. It was surface area.&lt;/p&gt;

&lt;p&gt;At least that’s where I am today.&lt;br&gt;&lt;br&gt;
This may change.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>reliability</category>
    </item>
    <item>
      <title>Why this piece lives on Medium</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 27 Dec 2025 14:14:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/why-this-piece-lives-on-medium-33dn</link>
      <guid>https://dev.to/plc-creates/why-this-piece-lives-on-medium-33dn</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;I don’t usually decide where something will be published before I write it.&lt;/p&gt;

&lt;p&gt;I write first. When a subject sticks around long enough. When it starts to take space in my head. Only after that do I ask myself where it belongs.&lt;/p&gt;

&lt;p&gt;This one ended up on Medium. Not because it’s better. Just because it felt like the right place for it to exist quietly.&lt;/p&gt;

&lt;p&gt;The piece is about projects. Not the exciting parts. Not shipping, not momentum, not wins. More about what a project asks from you over time. And how that cost slowly changes shape.&lt;/p&gt;

&lt;p&gt;I didn’t want to rewrite it to fit somewhere else. I’ve done that before. It always costs more than it gives back.&lt;/p&gt;

&lt;p&gt;So I’m trying something simpler now:&lt;/p&gt;

&lt;p&gt;I write once.&lt;br&gt;&lt;br&gt;
Then I choose the place that fits the text.&lt;br&gt;&lt;br&gt;
Elsewhere, I just point to it. That’s what this post is.&lt;/p&gt;

&lt;p&gt;If you’re working on something on the side,&lt;br&gt;&lt;br&gt;
you probably recognize that moment where progress is real,&lt;br&gt;&lt;br&gt;
but so is the weight of continuing.&lt;/p&gt;

&lt;p&gt;That’s what I tried to write about.&lt;/p&gt;

&lt;p&gt;The full piece is here, on Medium:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;What a Serious Project Eventually Asks of You&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://medium.com/@plc.creates/what-a-serious-project-eventually-asks-of-you-03d6f08e1bf7" rel="noopener noreferrer"&gt;https://medium.com/@plc.creates/what-a-serious-project-eventually-asks-of-you-03d6f08e1bf7&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m not trying to be everywhere. I’m trying to stay coherent across platforms and stay true to myself when I write a piece.&lt;/p&gt;

&lt;p&gt;That’s where I am right now.&lt;br&gt;&lt;br&gt;
This may change.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>sideprojects</category>
      <category>personalgrowth</category>
      <category>work</category>
    </item>
    <item>
      <title>Why chasing a dream feels heavier than staying put</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Tue, 16 Dec 2025 23:15:59 +0000</pubDate>
      <link>https://dev.to/plc-creates/when-failure-feels-safer-than-success-4m63</link>
      <guid>https://dev.to/plc-creates/when-failure-feels-safer-than-success-4m63</guid>
      <description>&lt;h2&gt;
  
  
  When staying put feels safer than moving forward
&lt;/h2&gt;

&lt;p&gt;This morning, on my way to my day job, something small shifted.&lt;/p&gt;

&lt;p&gt;Nothing cinematic.&lt;br&gt;&lt;br&gt;
No revelation worthy of a before-and-after.&lt;/p&gt;

&lt;p&gt;Just a thought that arrived quietly, carried by the road unspooling ahead of me, by a song I’ve heard too many times without really listening to it, by the rare luxury of not being in a hurry.&lt;/p&gt;

&lt;p&gt;The thought was this:&lt;/p&gt;

&lt;p&gt;Staying put feels safer to me than chasing a dream.&lt;/p&gt;

&lt;p&gt;I don’t fully trust that thought yet.&lt;br&gt;&lt;br&gt;
But it stayed with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why staying put can be comforting
&lt;/h2&gt;

&lt;p&gt;Staying put is a known landscape.&lt;/p&gt;

&lt;p&gt;If a project stalls, if momentum fades, if something I hoped for refuses to take shape, I already know the shape of the days that follow.&lt;/p&gt;

&lt;p&gt;I return to routine.&lt;br&gt;&lt;br&gt;
To the scaffolding of days I have practiced for years.&lt;br&gt;&lt;br&gt;
To familiar obligations, familiar limits, familiar ground.&lt;/p&gt;

&lt;p&gt;There are no sudden decisions waiting there.&lt;br&gt;&lt;br&gt;
No new version of myself demanding to be inhabited.&lt;br&gt;&lt;br&gt;
No unfamiliar altitude where the air might feel thinner.&lt;/p&gt;

&lt;p&gt;Staying put does not ask me to change.&lt;br&gt;&lt;br&gt;
It asks only that I continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why chasing a dream can feel heavier
&lt;/h2&gt;

&lt;p&gt;Chasing a dream behaves differently.&lt;/p&gt;

&lt;p&gt;It rearranges things.&lt;/p&gt;

&lt;p&gt;It opens doors that do not close behind you.&lt;br&gt;&lt;br&gt;
It brings questions that refuse to stay theoretical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What now?&lt;/li&gt;
&lt;li&gt;What do I commit to?&lt;/li&gt;
&lt;li&gt;What do I risk losing if I keep going?&lt;/li&gt;
&lt;li&gt;Who am I required to become if this actually works?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A dream shifts the ground while you are standing on it.&lt;/p&gt;

&lt;p&gt;Even when it is something you asked for.&lt;/p&gt;

&lt;p&gt;And that instability, however hopeful, can feel like weight.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quiet relief of “I can always come back”
&lt;/h2&gt;

&lt;p&gt;What eased the tension this morning was a simple realization.&lt;/p&gt;

&lt;p&gt;The worst realistic outcome is not collapse.&lt;br&gt;&lt;br&gt;
It is return.&lt;/p&gt;

&lt;p&gt;Returning to a life I already know how to live.&lt;br&gt;&lt;br&gt;
Returning to a version of myself that has proven survivable.&lt;/p&gt;

&lt;p&gt;That thought loosened something.&lt;/p&gt;

&lt;p&gt;It didn’t shrink the dream.&lt;br&gt;&lt;br&gt;
It redistributed the weight.&lt;br&gt;&lt;br&gt;
Made it lighter.&lt;br&gt;&lt;br&gt;
Made it portable.&lt;/p&gt;

&lt;p&gt;Trying stopped feeling reckless.&lt;br&gt;&lt;br&gt;
It began to feel reversible.&lt;/p&gt;

&lt;p&gt;And yet, I’m not sure that safety actually helps me move faster.&lt;br&gt;&lt;br&gt;
It might just help me move at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving yourself permission to move
&lt;/h2&gt;

&lt;p&gt;We often speak of failure as the thing to avoid.&lt;br&gt;&lt;br&gt;
As the cliff edge that must not be approached.&lt;/p&gt;

&lt;p&gt;But sometimes, it is the acceptance of return that makes movement possible.&lt;/p&gt;

&lt;p&gt;Not because we aim to go back.&lt;br&gt;&lt;br&gt;
But because knowing we can endure it creates room to step forward.&lt;/p&gt;

&lt;p&gt;Risk becomes tolerable when retreat remains allowed.&lt;/p&gt;

&lt;p&gt;At least, that’s where I am today.&lt;/p&gt;

&lt;p&gt;This may change.&lt;/p&gt;

</description>
      <category>devlife</category>
      <category>career</category>
      <category>personalgrowth</category>
    </item>
    <item>
      <title>I’m coding with AI, and sometimes I have to reverse-engineer my own code</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 13 Dec 2025 14:33:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/im-coding-with-ai-and-sometimes-i-have-to-reverse-engineer-my-own-code-86</link>
      <guid>https://dev.to/plc-creates/im-coding-with-ai-and-sometimes-i-have-to-reverse-engineer-my-own-code-86</guid>
      <description>&lt;h2&gt;
  
  
  I’m coding with AI, and sometimes I have to reverse-engineer my own code
&lt;/h2&gt;

&lt;p&gt;Let’s be honest for a moment.&lt;br&gt;&lt;br&gt;
Today, AI is already part of many developers’ daily workflow. Not in some hypothetical future. Right now.&lt;/p&gt;

&lt;p&gt;I use it too.&lt;/p&gt;

&lt;p&gt;I describe an intention, a structure, a problem to solve. In return, it generates blocks of code that are clear, functional, sometimes even elegant.&lt;br&gt;&lt;br&gt;
It’s impressive. And above all, it’s fast.&lt;/p&gt;

&lt;p&gt;Sometimes &lt;strong&gt;too&lt;/strong&gt; fast.&lt;/p&gt;

&lt;p&gt;So fast that I find myself doing something I never imagined a few years ago:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;reverse-engineering my own code.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving fast, understanding more slowly
&lt;/h2&gt;

&lt;p&gt;The generated code is not bad. Quite the opposite.&lt;br&gt;&lt;br&gt;
But it arrives fully formed, all at once, without the hesitation, the trials, the detours that used to build my understanding along the way.&lt;/p&gt;

&lt;p&gt;Before, understanding was part of the journey.&lt;br&gt;&lt;br&gt;
Now, understanding sometimes becomes a step that comes &lt;em&gt;after&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I have to slow myself down on purpose.&lt;br&gt;&lt;br&gt;
Read. Break things apart. Verify.&lt;br&gt;&lt;br&gt;
Regain control over something I explicitly asked for.&lt;/p&gt;

&lt;p&gt;I often picture it like this:&lt;br&gt;&lt;br&gt;
I’m moving forward on a sled pulled by AI. The speed is exhilarating, but if I let go of the reins for too long, I lose track of what’s actually happening beneath my feet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are there still purists?
&lt;/h2&gt;

&lt;p&gt;I sometimes wonder about that.&lt;br&gt;&lt;br&gt;
Are there still developers who write everything by hand, without ever relying on AI?&lt;/p&gt;

&lt;p&gt;Maybe.&lt;br&gt;&lt;br&gt;
But is that still the norm, or has it become more of a posture?&lt;/p&gt;

&lt;p&gt;Because we can debate endlessly, but the reality is simple:&lt;br&gt;&lt;br&gt;
AI is here to stay.&lt;br&gt;&lt;br&gt;
And it is an &lt;strong&gt;incredibly powerful&lt;/strong&gt; tool for writing code.&lt;/p&gt;

&lt;p&gt;The real question is probably not &lt;em&gt;whether&lt;/em&gt; we should use it, but &lt;em&gt;how&lt;/em&gt; we use it without losing our understanding, our judgment, our responsibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  I write less code. I still love it just as much.
&lt;/h2&gt;

&lt;p&gt;This is what surprised me the most.&lt;br&gt;&lt;br&gt;
I write less code than I used to. Yet I haven’t lost the passion.&lt;/p&gt;

&lt;p&gt;It forced me to rethink what I actually enjoy about this craft.&lt;br&gt;&lt;br&gt;
Maybe it was never about typing every line, but about understanding a system, shaping an idea, turning something fuzzy into something coherent.&lt;/p&gt;

&lt;p&gt;And that, AI doesn’t do for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  An open question
&lt;/h2&gt;

&lt;p&gt;I thought I loved writing code.&lt;br&gt;&lt;br&gt;
But now that AI writes a large part of it for me, I realize I still love developing just as much.&lt;/p&gt;

&lt;p&gt;So I’m asking myself, and I’m asking you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you really enjoy about coding?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How do you use AI without losing control over what you build?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Do you recognize this need to reread, and sometimes dissect, your own generated code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Curious to read your experiences.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>career</category>
      <category>devlife</category>
    </item>
    <item>
      <title>I tried to break my autosave library in 25 different ways, and it survived</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Mon, 08 Dec 2025 14:17:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/i-tried-to-break-my-autosave-library-in-25-different-ways-and-it-survived-2hc</link>
      <guid>https://dev.to/plc-creates/i-tried-to-break-my-autosave-library-in-25-different-ways-and-it-survived-2hc</guid>
      <description>&lt;h2&gt;
  
  
  I tried to break my autosave library in 25 different ways, and it survived
&lt;/h2&gt;

&lt;p&gt;Over the last few weeks, I’ve been building Savior, a tiny, dependency-free autosave engine for HTML forms.&lt;/p&gt;

&lt;p&gt;The goal is simple: users should never lose what they write.&lt;/p&gt;

&lt;p&gt;It sounds easy, but guaranteeing that in every situation is another story. Before releasing v0.3.0, I set up a crash-test suite with 25 manual scenarios. No automation yet. Just real testing of the real library in real conditions.&lt;/p&gt;

&lt;p&gt;Here are a few of the situations I used to try and break it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flaky storage drivers&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Random failures in save, load, or clear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corrupted or invalid JSON&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Broken JSON placed directly in LocalStorage before initialization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic DOM changes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Inputs added or removed after Savior.init.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloned forms&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Identical nodes with different identifiers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stress input&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hundreds of rapid input events fired in a row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External tampering&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Storage keys deleted or altered while typing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Restricted environments&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Private mode, quota issues, partial storage support.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Across all 25 tests, Savior showed the same behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zero unhandled exceptions
&lt;/li&gt;
&lt;li&gt;stable and predictable restore
&lt;/li&gt;
&lt;li&gt;strict isolation between forms
&lt;/li&gt;
&lt;li&gt;identical behavior with LocalStorage and SessionStorage
&lt;/li&gt;
&lt;li&gt;effective debouncing under heavy input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are small wins for a small library, but meaningful ones. The process turned a simple autosave script into something more reliable than I first expected.&lt;/p&gt;

&lt;p&gt;The project also received its first stars today. A small detail, but enough to make the work feel real.&lt;/p&gt;

&lt;p&gt;If you want to take a look:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pepp38/Savior" rel="noopener noreferrer"&gt;https://github.com/Pepp38/Savior&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Probably automated tests.&lt;br&gt;&lt;br&gt;
Maybe more drivers.&lt;br&gt;&lt;br&gt;
Maybe a deeper look at the internal workflow.&lt;/p&gt;

&lt;p&gt;For now, v0.3.0 is out, stable, and I’m satisfied with where it landed.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>frontend</category>
    </item>
    <item>
      <title>I Fell in Love With Programming Long Before I Learned It</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 06 Dec 2025 14:24:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/i-fell-in-love-with-programming-long-before-i-learned-it-5aj5</link>
      <guid>https://dev.to/plc-creates/i-fell-in-love-with-programming-long-before-i-learned-it-5aj5</guid>
      <description>&lt;h2&gt;
  
  
  I Fell in Love With Programming Long Before I Learned It
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"A robot?" — Jesse Pinkman&lt;br&gt;&lt;br&gt;
(That line stayed with me. A mix of surprise, naïveté, and wonder. Exactly the feeling I had as a kid seeing my first robot, and years later, my first real piece of code.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before diving in, a quick note.&lt;br&gt;&lt;br&gt;
This is not a tutorial. It is a story about where programming begins, not in code but in curiosity and small sparks that follow us across the years.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Programming Looked Impossible (To a Kid From the 80s)
&lt;/h2&gt;

&lt;p&gt;When I enrolled in computer science, I did not really know what it was. Not precisely.&lt;br&gt;&lt;br&gt;
I thought I would become the guy who tells people: “Have you tried restarting your computer?”&lt;/p&gt;

&lt;p&gt;For someone born in the 80s, programming looked like a closed world: nerds in a windowless room, speaking an incomprehensible language. Almost unreachable.&lt;/p&gt;

&lt;p&gt;During the first weeks of the program, they gave us a choice between development and infrastructure. One day, they had us try low-code with simple drag and drop logic. The moment I touched it, a childhood memory resurfaced.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Childhood Toy That Changed Everything
&lt;/h2&gt;

&lt;p&gt;I must have been around eight when I bought my first Capsela toy. Those little capsules snapped together to build cars, boats, anything my imagination suggested. Each module had a role: motor, gear, wheels, floats. I saved every dollar to buy a new one.&lt;/p&gt;

&lt;p&gt;Then one day, I got the ultimate set: the Capsela 2000. A robot you assembled yourself with lights, sounds, and simple movements. Unlike the others, it came with a small controller that let you program its actions. I programmed it, pressed “Play,” and watched it go.&lt;/p&gt;

&lt;p&gt;It was the first time I touched something that reacted to my instructions.&lt;br&gt;&lt;br&gt;
A thing that did exactly what I imagined.&lt;br&gt;&lt;br&gt;
I think that is when something imprinted itself in me. The idea that you can make the world move by giving it sequences, logic, and a plan.&lt;/p&gt;

&lt;p&gt;I found that same feeling years later in programming. Telling a computer what to do. Creating anything I wanted, without buying parts or building anything physically.&lt;/p&gt;

&lt;p&gt;In that moment, something simply aligned. Not a revelation, but a quiet recognition. As if that robot had been an early initiation to logic and creation. A simple way of telling the world “do this,” and the world obeyed.&lt;/p&gt;




&lt;h2&gt;
  
  
  When My First Line of Code Felt Familiar
&lt;/h2&gt;

&lt;p&gt;Years later, looking at my first real line of code, I felt the same sensation.&lt;br&gt;&lt;br&gt;
The same inner mechanism.&lt;br&gt;&lt;br&gt;
The same quiet joy whispering: “I know this.”&lt;/p&gt;

&lt;p&gt;As if the kid I used to be was giving me a nod from across the years.&lt;/p&gt;

&lt;p&gt;It stayed. My way of approaching programming never changed. Idea first, tools second. Always. Start with the result, then figure out how to reach it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Still Love Programming Today
&lt;/h2&gt;

&lt;p&gt;Despite the years, despite the technologies that come and go, the same thing still moves me. Seeing an idea take shape, leave my head, and exist for real.&lt;br&gt;&lt;br&gt;
Something shifts in the world simply because I imagined it.&lt;/p&gt;

&lt;p&gt;That is what made me fall in love with programming long before I learned it.&lt;br&gt;&lt;br&gt;
First in front of a plastic robot.&lt;br&gt;&lt;br&gt;
Then in front of a line of code that did exactly what I asked for.&lt;/p&gt;

&lt;p&gt;Yes, science.&lt;/p&gt;




&lt;h2&gt;
  
  
  If This Resonates With You
&lt;/h2&gt;

&lt;p&gt;If you have a moment where programming “clicked” for you, feel free to share it. I genuinely enjoy reading how others discovered this field.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>beginners</category>
      <category>story</category>
    </item>
    <item>
      <title>You Can Build Ideas on a Phone, But You Can’t Build Software There</title>
      <dc:creator>PLC Creates</dc:creator>
      <pubDate>Sat, 29 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://dev.to/plc-creates/you-can-build-ideas-on-a-phone-but-you-cant-build-software-there-3i91</link>
      <guid>https://dev.to/plc-creates/you-can-build-ideas-on-a-phone-but-you-cant-build-software-there-3i91</guid>
      <description>&lt;p&gt;&lt;em&gt;Phones can generate code instantly with AI, but they still can’t act as real development environments. Here’s what they can do, where they break down, and why the gap still exists.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You Can Build Ideas on a Phone, But You Can’t Build Software There
&lt;/h2&gt;

&lt;p&gt;I was on the bus when a small idea hit me.&lt;br&gt;&lt;br&gt;
Nothing huge. Just a tiny tool I wanted to write to help manage files.&lt;/p&gt;

&lt;p&gt;I pulled out my phone, opened ChatGPT, described the idea, and within seconds it generated a working prototype. So far, so good.&lt;/p&gt;

&lt;p&gt;I asked it to launch the canvas preview.&lt;br&gt;&lt;br&gt;
Not possible on iPhone.&lt;/p&gt;

&lt;p&gt;Alright, fine. I’ll at least create a GitHub repo to save the idea before it slips away.&lt;br&gt;&lt;br&gt;
Also not possible from the mobile app.&lt;/p&gt;

&lt;p&gt;And that’s when something clicked.&lt;br&gt;&lt;br&gt;
My phone is faster than the laptop I had ten years ago. It can generate code instantly with AI. It can record 4K video, run advanced apps, handle complex tasks. Yet the moment I try to actually build software with it, everything falls apart.&lt;/p&gt;

&lt;p&gt;We’re in 2025. Why is coding from a phone still such a dead end?&lt;/p&gt;

&lt;h2&gt;
  
  
  What Mobile Is Actually Good For
&lt;/h2&gt;

&lt;p&gt;To be fair, a phone isn’t useless for a developer. Far from it.&lt;/p&gt;

&lt;p&gt;I can capture ideas the moment they appear.&lt;br&gt;&lt;br&gt;
I can write drafts for articles like this one.&lt;br&gt;&lt;br&gt;
I can plan features.&lt;br&gt;&lt;br&gt;
I can check GitHub issues or discussions.&lt;br&gt;&lt;br&gt;
I can keep my project visible on X or Reddit.&lt;/p&gt;

&lt;p&gt;Phones are great for thinking.&lt;br&gt;&lt;br&gt;
But thinking is only half the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Everything Breaks Down
&lt;/h2&gt;

&lt;h3&gt;
  
  
  No local build
&lt;/h3&gt;

&lt;p&gt;Nothing runs. Not even a tiny snippet.&lt;br&gt;&lt;br&gt;
Without a build, you can’t validate anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub mobile is too limited
&lt;/h3&gt;

&lt;p&gt;You can scroll and read but not much more.&lt;br&gt;&lt;br&gt;
Creating repos is impossible.&lt;br&gt;&lt;br&gt;
Diffs are cramped.&lt;br&gt;&lt;br&gt;
Branches feel hidden behind too many taps.&lt;/p&gt;

&lt;h3&gt;
  
  
  No real preview
&lt;/h3&gt;

&lt;p&gt;I can generate 200 lines of code with AI in seconds.&lt;br&gt;&lt;br&gt;
But I can’t see it run.&lt;br&gt;&lt;br&gt;
It’s like having a full meal in front of you and being told you can’t use a fork.&lt;/p&gt;

&lt;h3&gt;
  
  
  No debugging tools
&lt;/h3&gt;

&lt;p&gt;No console.&lt;br&gt;&lt;br&gt;
No inspector.&lt;br&gt;&lt;br&gt;
No environment.&lt;br&gt;&lt;br&gt;
Just the idea, floating alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  No deep work
&lt;/h3&gt;

&lt;p&gt;Mobile keeps you in short-task mode.&lt;br&gt;&lt;br&gt;
Architecture, design patterns, systems thinking… none of that sticks when you’re holding a phone in one hand and balancing yourself in a bus seat.&lt;/p&gt;

&lt;p&gt;The code creation part is now effortless thanks to AI.&lt;br&gt;&lt;br&gt;
The rest of the workflow is still stuck in another era.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap Between Potential and Reality
&lt;/h2&gt;

&lt;p&gt;We can generate full components, utilities, even small apps on a phone.&lt;br&gt;&lt;br&gt;
But we can’t test them, preview them, or push them to a repo.&lt;/p&gt;

&lt;p&gt;It creates this weird disconnect.&lt;br&gt;&lt;br&gt;
The device is capable. The software isn’t.&lt;/p&gt;

&lt;p&gt;Sometimes I wonder if it’s just a matter of demand.&lt;br&gt;&lt;br&gt;
Maybe companies assume no one wants to code in a bus.&lt;br&gt;&lt;br&gt;
Maybe it’s still seen as unprofessional.&lt;br&gt;&lt;br&gt;
Maybe the idea feels too strange to build tools around it.&lt;/p&gt;

&lt;p&gt;But as a solo dev, I’d love to test ideas right when they’re fresh.&lt;br&gt;&lt;br&gt;
Not later, when I’m home, when the spark has already cooled.&lt;/p&gt;

&lt;h2&gt;
  
  
  I’m Not Trying to Replace My Computer
&lt;/h2&gt;

&lt;p&gt;I don’t want VS Code compressed into a six-inch screen.&lt;br&gt;&lt;br&gt;
I’m not dreaming of running Docker on my phone.&lt;/p&gt;

&lt;p&gt;I just wish I could do the basics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a repo
&lt;/li&gt;
&lt;li&gt;push a file
&lt;/li&gt;
&lt;li&gt;preview a small UI
&lt;/li&gt;
&lt;li&gt;test a simple snippet
&lt;/li&gt;
&lt;li&gt;validate an idea quickly
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That would be enough.&lt;br&gt;&lt;br&gt;
Not a full dev environment.&lt;br&gt;&lt;br&gt;
Just a minimal way to turn sparks into tiny proofs of concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maybe the Solution Exists, Or Maybe No One Built It Yet
&lt;/h2&gt;

&lt;p&gt;Maybe there’s an app I simply don’t know about.&lt;br&gt;&lt;br&gt;
Maybe someone already solved this.&lt;br&gt;&lt;br&gt;
Or maybe I’ll have to build something myself.&lt;/p&gt;

&lt;p&gt;For now, my phone remains what it is.&lt;br&gt;&lt;br&gt;
A notebook with way too much processing power for what it’s allowed to do.&lt;/p&gt;

&lt;p&gt;When I get home and finally sit down in front of my keyboard, that’s when ideas become real.&lt;br&gt;&lt;br&gt;
A phone can start the story, but it can’t write the full chapter.&lt;/p&gt;

&lt;p&gt;At least not yet.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>career</category>
    </item>
  </channel>
</rss>
