{
  "path": "/3mdgo5qfhss2y",
  "site": "at://did:plc:yltnuhmi5446q5gixfz277lu/site.standard.publication/3mbm2gtkoz225",
  "tags": [],
  "$type": "site.standard.document",
  "title": "Beware the Pit of Success lined with razor wire",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019bfb39-30bd-7884-b14e-0eee7be8bf27",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [],
              "plaintext": "I’ve often said that a well-designed system makes it easy to do the right things and annoying (but not impossible) to do the wrong things."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 62,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "uri": "https://blog.codinghorror.com/falling-into-the-pit-of-success/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "https://blog.codinghorror.com/falling-into-the-pit-of-success/"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Pits of success are great! In the ideal world, it should be trivial for someone to pick up a tool and start using it to do complex things, maybe even without reading the instructions."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Part of this is choosing good defaults. If your defaults are predictable, practical, and unsurprising you're in good shape!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Part of this is good API design. If you have to tell users \"You're holding it wrong,\" that's a surefire sign your API design needs some help."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "The problems arise when behavior is unpredictable, if overriding defaults is tedious, and there are easy ways to do wrong things."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Take serverless compute, which exploded in popularity over the last 10 years. For simple use cases, it works great. Infinite scalability! Fewer memory leaks! But if you need"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "a persistent cache"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "filesystem access"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "websockets"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "long-running processes"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "you're going to need an extra service to handle that. Complexity balloons. "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Meanwhile, a single long-running server can handle all of those with aplomb, and has far more predictable usage patterns."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Cloudflare's developer platform addresses these problems really well, answering each with"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Workers KV"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "R2 object storage"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Durable Objects"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Containers"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "More complexity, yes, but all under the same umbrella, so it's easier to recognize and manage."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I wouldn't call this the \"Pit of Success\" though, because it's still easy to do the wrong thing, and these specific solutions to these problems aren't always obvious, especially to a newcomer. You kinda have to know about the whole Cloudflare platform ecosystem to be able to properly take advantage of it."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 110,
                    "byteStart": 56
                  },
                  "features": [
                    {
                      "uri": "https://alexanderson.leaflet.pub/3mddpezr7uc2g",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "Maybe that's a good thing though? If a platform or tool forces its users to be intentional about their choices, which by necessity means understanding the tradeoffs of those choices, perhaps it will result in a better designed, more thoughtful, more successful end product."
            }
          }
        ]
      }
    ]
  },
  "publishedAt": "2026-01-27T21:08:43.072Z"
}