
{"id":5395,"date":"2025-11-23T20:08:02","date_gmt":"2025-11-24T01:08:02","guid":{"rendered":"https:\/\/ikriv.com\/blog\/?p=5395"},"modified":"2025-11-23T20:15:18","modified_gmt":"2025-11-24T01:15:18","slug":"fallback","status":"publish","type":"post","link":"https:\/\/ikriv.com\/blog\/?p=5395","title":{"rendered":"Fallback"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ikriv.com\/blog\/wp-content\/uploads\/2025\/11\/Horse_Car_Fallback.jpg\" alt=\"\" width=\"512\" height=\"512\" class=\"alignright size-full wp-image-5399\" \/><br \/>\n&#8220;Fallback&#8221; seems to be the favorite word of AI coding agents, and the bane of my existence lately. To paraphrase one famous quote: &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Hanns_Johst\">Wenn ich &#8216;Fallback&#8217; h\u00f6re \u2026 entsichere ich meinen Browning.<\/a>&#8221;<\/p>\n<p>The idea of a &#8220;fallback&#8221; seems reasonable on the surface: when one way of doing things doesn\u2019t work, we try another. It actually makes sense when the first mechanism is inherently unreliable but faster or more efficient. For example, if we upload a file for processing, we may wait for a webhook call to signal that the work is done, but if the webhook doesn\u2019t arrive after a certain time, we can query the job status directly.<\/p>\n<p>AI agents <b>love<\/b> this idea, but they often apply it without merit, leading to decreased stability and unnecessarily complicated code. Suppose I wanted to use a horse as a fallback for a car. I would need to drive around with a horse in my back seat so I could use it in case the engine fails. Of course, for that to really work, I\u2019d need more than just a horse: I\u2019d need hooks on the car that the horse can be attached to, a shaft, bridles, reins, you name it. And I\u2019d need to feed my horse several times a day. I\u2019d need hay. I\u2019d need to deal with the horseshit. And of course I\u2019d need to test periodically that I still remember how to harness the horse to the car, and that the horse can still pull the car forward. Come to think of it, this is probably not the most cost-effective solution. People usually deal with broken engines by other means, e.g., by calling a tow truck.<\/p>\n<p>This does not stop AI agents, though. From them I hear proposals every day along the lines of: &#8220;Oh yeah, we&#8217;ll use this new solution, but we\u2019ll keep the old one just in case, as a fallback.&#8221; For example, we completely redesigned our \u201cMission Overview\u201d screen. AI suggested keeping the old screen in case the <code>chat id<\/code> property of the mission is <code>null<\/code>. The probability of the chat ID being <code>null<\/code> on an actual mission is close to that of an engine failure on a car, but it didn\u2019t stop the AI from keeping the old screen around on the back seat instead of just showing something along the lines of \u201csorry, can\u2019t show mission overview, chat ID not available.\u201d I\u2019m not sure where this love of fallbacks comes from, but I find their lack of faith in their own solutions rather disturbing. At some point the fallback stops being a safety net and becomes a second system you\u2019re forced to maintain forever.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Fallback&#8221; seems to be the favorite word of AI coding agents, and the bane of my existence lately. To paraphrase one famous quote: &#8220;Wenn ich &#8216;Fallback&#8217; h\u00f6re \u2026 entsichere ich <a href=\"https:\/\/ikriv.com\/blog\/?p=5395\" class=\"more-link\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"Layout":"","footnotes":""},"categories":[32],"tags":[],"class_list":["entry","author-ikriv","post-5395","post","type-post","status-publish","format-standard","category-ai"],"_links":{"self":[{"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5395"}],"version-history":[{"count":9,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5395\/revisions"}],"predecessor-version":[{"id":5407,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5395\/revisions\/5407"}],"wp:attachment":[{"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ikriv.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}