<?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: David He</title>
    <description>The latest articles on DEV Community by David He (@david_lee_1ad3244c83f2b80a).</description>
    <link>https://dev.to/david_lee_1ad3244c83f2b80a</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%2F2023378%2F37adf767-38e2-4daa-b1c7-a0409ac126aa.png</url>
      <title>DEV Community: David He</title>
      <link>https://dev.to/david_lee_1ad3244c83f2b80a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_lee_1ad3244c83f2b80a"/>
    <language>en</language>
    <item>
      <title>I designed a PCB after 12 years of backend work. Here's what I'd steal for software.</title>
      <dc:creator>David He</dc:creator>
      <pubDate>Wed, 07 Oct 2026 14:26:03 +0000</pubDate>
      <link>https://dev.to/david_lee_1ad3244c83f2b80a/i-designed-a-pcb-after-12-years-of-backend-work-heres-what-id-steal-for-software-57hl</link>
      <guid>https://dev.to/david_lee_1ad3244c83f2b80a/i-designed-a-pcb-after-12-years-of-backend-work-heres-what-id-steal-for-software-57hl</guid>
      <description>&lt;p&gt;I've written backend code for over a decade. When I designed my first carrier board, it changed how I think about the code I ship. Hardware people work under constraints most of us ignore, and a few of their habits are worth borrowing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Datasheets tell you how things break&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every chip datasheet has an "absolute maximum ratings" table. It says exactly what voltage or temperature will destroy the part. Most API docs only tell you what works. They rarely say what happens at 10x the expected load, or what a malformed payload does to the service.&lt;/p&gt;

&lt;p&gt;Try writing that table for your own service: max payload size, max concurrent connections, and what happens past each limit. You'll find out how much you didn't know.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Trust the footprint? Never.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vendor library parts look official, so you drop them in and move on. Then the board arrives and the part doesn't fit. On a breadboard, parts always fit. On copper, they only fit if you checked the datasheet.&lt;/p&gt;

&lt;p&gt;So I check every footprint against the land pattern before I route anything, especially tiny parts and mounting holes. It's boring, and it's far cheaper than a respin.&lt;/p&gt;

&lt;p&gt;Software has the same trap. We import a library, trust the docs, and never read what it does when the input is weird. Verify the thing you're depending on.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The tool refuses to let you ship a mistake&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PCB software runs design rule checks. If two traces are too close, it flags them, and you fix it before anything gets manufactured.&lt;/p&gt;

&lt;p&gt;Most of us have linters, but how many of us have hard checks for config? A bad timeout value or a missing env var should fail the build, not page someone at 2am.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When a revision costs weeks, you review harder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can't hotfix a board that's already printed. A mistake means a new spin, new cost, and waiting. So hardware engineers review everything before sending it off, and they use checklists.&lt;/p&gt;

&lt;p&gt;Software got fast deploys and lost some of that discipline. I'm not saying slow down. But a short pre-deploy checklist for risky changes (migrations, schema changes, anything hard to roll back) costs almost nothing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put protection next to the thing it protects&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Decoupling capacitors sit right beside the chip they serve. Placed far away, they don't do their job. Timeouts, retries, and rate limits work the same way. Put them close to the caller that needs them, not in a shared layer three hops away.&lt;/p&gt;

&lt;p&gt;What didn't carry over&lt;/p&gt;

&lt;p&gt;A lot of my software instincts were useless at first. Debugging with print statements isn't an option when you're staring at a board. You need a multimeter and patience. It was humbling, and I think it made me a better engineer.&lt;/p&gt;

&lt;p&gt;What's one habit from outside software that improved your code? Tell me in the comments.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>career</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
