Killing ants with nuclear weapons September 8, 2017 on Drew DeVault's blog

Complexity is quickly becoming an epidemic. In this developer’s opinion, complexity is the ultimate enemy - the final boss - of good software design. Complicated software generally has complicated bugs. Simple software generally has simple bugs. It’s as easy as that.

It’s for this reason that I strongly dislike many of the tools and architectures that have been proliferating over the past few years, particularly in web development. When I look at a tool like Gulp, I wonder if its success is largely attributable to people not bothering to learn how Makefiles work. Tools like Docker make me wonder if they’re an excuse to avoid learning how to do ops or how to use your distribution’s package manager. Chef makes me wonder if its users forgot that shell scripts can use SSH, too.

These tools offer a value add. But how does it compare to the cost of the additional complexity? In my opinion, in every case1 the value add is far outweighed by the massive complexity cost. This complexity cost shows itself when the system breaks (and it will - all systems break) and you have to dive into these overengineered tools. Don’t forget that dependencies are fallible, and never add a dependency you wouldn’t feel comfortable debugging. The time spent learning these complicated systems to fix the inevitable bugs is surely much less than the time spent learning the venerable tools that fill the same niche (or, in many cases, accepting that you don’t even need this particular shiny thing).

Reinventing the wheel is a favorite pastime of mine. There are many such wheels that I have reinvented or am currently reinventing. The problem isn’t in reinventing the wheel - it’s in doing so before you actually understand the wheel2. I wonder if many of these complicated tools are written by people who set out before they fully understood what they were replacing, and I’m certain that they’re mostly used by such people. I understand it may seem intimidating to learn venerable tools like make(1) or chroot(1), but they’re just a short man page away3.

It’s not just tools, though. I couldn’t explain the features of C++ in fewer than several thousand words (same goes for Rust). GNU continues to add proprietary extensions and unnecessary features to everything they work on. Every update shipped to your phone is making it slower to ensure you’ll buy the new one. Desktop applications are shipping entire web browsers into your disk and your RAM; server applications ship entire operating systems in glorified chroots; and hundreds of megabytes of JavaScript, ads, and spyware are shoved down the pipe on every web page you visit.

This is an epidemic. It’s time we cut this shit out. Please, design your systems with simplicity in mind. Moore’s law is running out4, the free lunch is coming to an end. We have heaps and heaps of complicated, fragile abstractions to dismantle.


  1. That I’ve seen (or heard of) ↩︎

  2. “Those who don’t understand UNIX are doomed to reinvent it, poorly.” ↩︎

  3. Of course, "…full documentation for make is maintained as a GNU info page…" ↩︎

  4. Transistors are approaching a scale where quantum problems come into play, and we are limited by the speed of light without getting any smaller. The RAM bottleneck is another serious issue, for which innovation has been stagnant for some time now. ↩︎

Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~sircmpwn/public-inbox@lists.sr.ht [mailing list etiquette]

Articles from blogs I read Generated by openring

Status update, August 2020

Hi! Regardless of the intense heat I’ve been exposed to this last month, I’ve still been able to get some stuff done (although having to move out to another room which isn’t right under the roof). I’ve worked a lot on IRC-related projects. I’ve added a znc-i…

via emersion 2020-08-19 00:00:00 +0200 +0200

What's cooking on Sourcehut? August 2020

Another month passes and we find ourselves writing (or reading) this status update on a quiet, rainy Sunday morning. Today our userbase numbers 16,683 members strong, up 580 from last month. Please extend a kind welcome to our new colleagues! Thanks for read…

via Blogs on Sourcehut 2020-08-16 00:00:00 +0000 +0000

Go 1.15 is released

Today the Go team is very happy to announce the release of Go 1.15. You can get it from the download page. Some of the highlights include: Substantial improvements to the Go linker Improved allocation for small objects at high core coun…

via The Go Programming Language Blog 2020-08-11 11:00:00 +0000 +0000

North Pacific Logbook

The passage from Japan (Shimoda) to Canada (Victoria) took 51 days, and it was the hardest thing we've ever done. We decided to keep a logbook, to better remember it and so it can help others who wish to make this trip.Continue Reading

via Hundred Rabbits 2020-07-31 00:00:00 +0000 GMT