June 20, 2017 • 1 min read
Thirty spokes unite at the single hub; It is the empty space which makes the wheel useful. Mold clay to form a bowl; It is the empty space which makes the bowl useful. Cut out windows and doors; It is the empty space which makes the room useful. –Tao Te Ching
There’s a detail about Today I Learned some might find unusual: we never added a way to delete posts from the site.
Check out the source code, and you’ll see that you cannot delete posts through the user interface. I’ve even toyed with the idea of preventing deletes at the data layer.
Why ignore a basic CRUD feature? We didn’t ignore it. It was intentional.
I’ve thought about this decision a lot over the last two years. It’s lasted over many pull requests, issues, forks, and discussions. I addressed it head-on in a Github issue not long ago.
Preventing deletes was a hack to make Today I Learned feel permanent. If the goal of the site was to show the world what we (Hashrocket) are learning, why allow people to edit that journey? The temptation to obsess over your output until it’s a flawless diamond of competence is too great. As a Hashrocket apprentice, I was certain that my pride would push me to go back and delete my old posts. As though I arrived fully-formed where I am today, without ever learning something trivial the hard way, and building on that.
There’s too much magic in software. I am proud that our site exposes the winding journeys we take.
You shouldn’t try to build every feature you can imagine. Sometimes an omitted ability can refine the way people use your product. The things that are missing can be more powerful than all the things already there.