Design & UX

Why Your Network Will Fail, and Why That's Actually Good News

A

Admin User

Author

Jul 9, 2026
5 min read
1 views
Why Your Network Will Fail, and Why That's Actually Good News

I was sitting in a client meeting last month when their IoT device stopped reporting temperature data from a warehouse in Rawalpindi. The device itself was fine. The sensors were fine. But somewhere between the edge and the cloud, packets were dropping like monsoon rain. The client looked at me and asked: "Why doesn't it just... work?" I realized in that moment that most people building connected hardware today still think like it's 1995—they design for the happy path, not for reality.

That question sent me back to something I'd read about the internet's actual birth. Fifty years ago, a student programmer named Charley Kline tried to log into a computer 350 miles away, and the system crashed after just two letters: "LO." What struck me wasn't the cuteness of that origin story. It was that the entire internet as we know it exists because that crash happened, and because engineers decided to design around failure instead of pretending it wouldn't happen.

The moment I read that, I realized I've been making the same mistake my client is making. I've been thinking about networking wrong.

The Crash That Built the Internet

Let me be clear about what actually happened on October 29, 1969. This wasn't a controlled failure. This was a system that crashed mid-command, leaving only "LO" transmitted across ARPANET. But here's the thing—that crash wasn't treated as an embarrassment. It became the entire thesis for how reliable networks get built.

The engineers didn't say, "We'll just make better hardware so it doesn't crash." They said, "The network will fail. How do we design around that?" Packet switching, retransmission logic, acknowledgement systems, graceful recovery—all of this emerged from assuming failure was inevitable.

When I look at my own work now, I see how directly that 1969 lesson applies. Every ESP32 I deploy, every MQTT broker I configure, every reconnection handler I write—these aren't fancy modern innovations. They're direct descendants of engineers who decided that networks are inherently unreliable and built defenses accordingly.

What Production Actually Looks Like

Here's where theory meets the real world I work in every day. A sensor sitting on factory floor Wi-Fi will lose its connection. A cellular module will drop packets mid-transmission. A cloud endpoint will timeout. Not might. Will. The question isn't whether these failures happen—it's whether your device knows what to do when they do.

I've shipped products in Pakistan where network conditions are genuinely hostile. Congested mobile networks, spotty Wi-Fi coverage, power fluctuations that reset connections. The devices that worked in the field weren't the ones optimized for perfect conditions. They were the ones designed to handle the "LO" moment—when the link fails and you've got nothing but cached data and retry logic.

This fundamentally changes how I architect IoT systems now. I buffer readings locally before transmission. I use MQTT specifically because it was designed for unreliable links with its quality-of-service levels. I test on deliberately bad connections—not the fast office Wi-Fi, but throttled networks that simulate real field conditions.

My Take: Design for Hostile Networks

I agree completely with the core principle here, but I want to push it further. It's not just about assuming the network will fail. It's about assuming every part of the infrastructure outside your hardware will fail and you still need to deliver value.

The gap between a prototype and a production device is usually filled with dead air. The prototype works great in the lab. The device in the field drops data every few hours. The difference is almost always that someone didn't take network unreliability seriously.

Here's a practical pattern I've started using:

// Real-world MQTT publish with local buffering
class ReliablePublisher {
  constructor(client, maxBuffer = 1000) {
    this.client = client;
    this.buffer = [];
    this.maxBuffer = maxBuffer;
  }

  async publish(topic, payload, options = {}) {
    try {
      if (!this.client.connected) {
        this.buffer.push({ topic, payload, timestamp: Date.now() });
        if (this.buffer.length > this.maxBuffer) {
          this.buffer.shift(); // Don't grow unbounded
        }
        return false;
      }

      await this.client.publish(topic, JSON.stringify(payload), {
        qos: 1, // At least once delivery
        retain: false,
        ...options
      });
      return true;
    } catch (error) {
      this.buffer.push({ topic, payload, timestamp: Date.now() });
      return false;
    }
  }

  async flush() {
    while (this.buffer.length > 0 && this.client.connected) {
      const { topic, payload } = this.buffer.shift();
      await this.publish(topic, payload);
    }
  }
}

This isn't rocket science, but it's the difference between data loss and data resilience.

The Question I'm Sitting With

If the entire internet was built on the principle that networks fail, why do so many of us still ship hardware designed for perfect conditions? I think it's because we've benefited from decades of reliability so much that we've forgotten why it exists. We've lost sight of the "LO" moment.

What about you? How are you designing your connected systems? Are you assuming the network will work, or assuming it won't?

Source: This post was inspired by "The Internet's First Message Was 'LO'" by Dev.to. Read the original article

Share this article

Written by Adil Sher

Full stack developer building high-traffic platforms, AI services, and custom web applications. Explore my portfolio, learn about my background, or get in touch.

Related Articles

Why I Finally Stopped Treating Document Templates Like a Nice-to-Have
Design & UX Jul 8

Why I Finally Stopped Treating Document Templates Like a Nice-to-Have

I spent three hours last month reformatting a technical proposal. Three hours. Not writing it—reformatting it. The client wanted the heading colors changed from black to our brand blue, so I manually went through a thirty-page Word document, found every H2, and changed the color...