[{"Id":11248,"Author":{"Name":"Lyle Seaman","FirstName":"Lyle","ShortDescription":"networking, security infra and filesystems kernel hacker turned application programmer, SRE and engineering manager, Lyle traded tilting at windmills for viking at Vikings but couldn\u0027t catch any.","DescriptionHtml":null,"Slug":"lyle-seaman","IsAdmin":true,"IsActive":true,"ImageUrl":"/images/imageslws/viking.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u0026#34;So many zeroes! I\u0026#39;m in.\u0026#34;  W00H000!\n\u003cstrong\u003eKivi S.\u003c/strong\u003e\n\u0026#34;found this ad in the wild. This must be a\nvery large jackpot, look at all those zeroes!\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#9bc39202c0254a468b610e65a50c4ab6\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"9bc39202c0254a468b610e65a50c4ab6\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/9bc39202c0254a468b610e65a50c4ab6.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e","BodyHtml":"\u003cp\u003e\u0026#34;So many zeroes! I\u0026#39;m in.\u0026#34;  W00H000!\n\u003cstrong\u003eKivi S.\u003c/strong\u003e\n\u0026#34;found this ad in the wild. This must be a\nvery large jackpot, look at all those zeroes!\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#9bc39202c0254a468b610e65a50c4ab6\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"9bc39202c0254a468b610e65a50c4ab6\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/9bc39202c0254a468b610e65a50c4ab6.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\n\u003cp\u003e\u0026#34;I knew it!\u0026#34; groused an anonymous cynic.\n\u0026#34;Yes, SignUpGenius. We all know that SUCCESS is just an\nillusion.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#e3080893822a416599d25e943913afd5\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"e3080893822a416599d25e943913afd5\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/e3080893822a416599d25e943913afd5.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eAnother anonymous grouch reported \u0026#34;I guess JustWatch has\nsuddenly become a bit precious about their sources\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#458baffe588e4aa3ab4f4b9776fc0ef5\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"458baffe588e4aa3ab4f4b9776fc0ef5\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/458baffe588e4aa3ab4f4b9776fc0ef5.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\u0026#34;These boots are made for crashing\u0026#34; thundered \n\u003cstrong\u003eMichael R.\u003c/strong\u003e\n\u0026#34;PII of the developer have been removed to protect the\nnot so innocent.\u0026#34;  You can\u0026#39;t hide PHP so easily.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#7958aead3beb44579b149b2c75891bef\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"7958aead3beb44579b149b2c75891bef\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/7958aead3beb44579b149b2c75891bef.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eAnd again from prolific \n\u003cstrong\u003eMichael R.\u003c/strong\u003e\n\u0026#34;El Reg has been around for 30+ years and their\ncode should be mature. I wonder about their SQL which\nseems to randomly return duplicate records. https://www.theregister.com/week\u0026#34;. \nI\u0026#39;ll be happy when Errord shows up on El Reg.  Ok, no I won\u0026#39;t but I\u0026#39;ll at least be grouchy differently.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#9489e6b6f15c4691828357c28262a628\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"9489e6b6f15c4691828357c28262a628\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/9489e6b6f15c4691828357c28262a628.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n","BodyAndAdHtml":"\u003cp\u003e\u0026#34;So many zeroes! I\u0026#39;m in.\u0026#34;  W00H000!\n\u003cstrong\u003eKivi S.\u003c/strong\u003e\n\u0026#34;found this ad in the wild. This must be a\nvery large jackpot, look at all those zeroes!\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#9bc39202c0254a468b610e65a50c4ab6\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"9bc39202c0254a468b610e65a50c4ab6\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/9bc39202c0254a468b610e65a50c4ab6.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\n\u003cp\u003e\u0026#34;I knew it!\u0026#34; groused an anonymous cynic.\n\u0026#34;Yes, SignUpGenius. We all know that SUCCESS is just an\nillusion.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#e3080893822a416599d25e943913afd5\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"e3080893822a416599d25e943913afd5\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/e3080893822a416599d25e943913afd5.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eAnother anonymous grouch reported \u0026#34;I guess JustWatch has\nsuddenly become a bit precious about their sources\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#458baffe588e4aa3ab4f4b9776fc0ef5\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"458baffe588e4aa3ab4f4b9776fc0ef5\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/458baffe588e4aa3ab4f4b9776fc0ef5.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\u0026#34;These boots are made for crashing\u0026#34; thundered \n\u003cstrong\u003eMichael R.\u003c/strong\u003e\n\u0026#34;PII of the developer have been removed to protect the\nnot so innocent.\u0026#34;  You can\u0026#39;t hide PHP so easily.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#7958aead3beb44579b149b2c75891bef\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"7958aead3beb44579b149b2c75891bef\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/7958aead3beb44579b149b2c75891bef.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eAnd again from prolific \n\u003cstrong\u003eMichael R.\u003c/strong\u003e\n\u0026#34;El Reg has been around for 30+ years and their\ncode should be mature. I wonder about their SQL which\nseems to randomly return duplicate records. https://www.theregister.com/week\u0026#34;. \nI\u0026#39;ll be happy when Errord shows up on El Reg.  Ok, no I won\u0026#39;t but I\u0026#39;ll at least be grouchy differently.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#9489e6b6f15c4691828357c28262a628\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"9489e6b6f15c4691828357c28262a628\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/08/13/9489e6b6f15c4691828357c28262a628.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/buildmaster-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\t\u003ca href=\"https://inedo.com/BuildMaster?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eBuildMaster\u003c/a\u003e allows you to create a self-service release management platform that allows different teams to manage their applications. \u003ca href=\"https://inedo.com/BuildMaster/download?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eExplore how!\u003c/a\u003e \n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"Zero to Zero in 0 seconds","RssTitle":"Error\u0027d: Zero to Zero in 0 seconds","CachedCommentCount":9,"LastCommentDate":"\/Date(1786758967503)\/","LastCommentDateDescription":"2026-08-15","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786689000000)\/","ISODate":"2026-08-14","DisplayDate":"2026-08-14","Series":{"Slug":"errord","Title":"Error\u0027d","Description":"Error\u0027d features fun error messages and other visual oddities from the world of IT.","CssClass":"errord"},"FooterAdHtml":"\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/buildmaster-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\t\u003ca href=\"https://inedo.com/BuildMaster?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eBuildMaster\u003c/a\u003e allows you to create a self-service release management platform that allows different teams to manage their applications. \u003ca href=\"https://inedo.com/BuildMaster/download?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eExplore how!\u003c/a\u003e \n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Url":"https://thedailywtf.com/articles/zero-to-zero-in-0-seconds","CommentsUrl":"https://thedailywtf.com/articles/comments/zero-to-zero-in-0-seconds","Slug":"zero-to-zero-in-0-seconds","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fzero-to-zero-in-0-seconds+-+Zero+to+Zero+in+0+seconds+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fzero-to-zero-in-0-seconds\u0026t=Zero+to+Zero+in+0+seconds+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Zero%20to%20Zero%20in%200%20seconds:%20https://thedailywtf.com/articles/zero-to-zero-in-0-seconds","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fzero-to-zero-in-0-seconds","PreviousArticleId":11247,"PreviousArticleTitle":"Never Eating the Cookie","PreviousArticleSlug":"never-eating-the-cookie","PreviousArticleUrl":"//thedailywtf.com/articles/never-eating-the-cookie","NextArticleId":null,"NextArticleTitle":null,"NextArticleSlug":null,"NextArticleUrl":"//thedailywtf.com/articles/"},{"Id":11247,"Author":{"Name":"Remy Porter","FirstName":"Remy","ShortDescription":"Computers were a mistake, so I accidentally became a farmer? Editor-in-Chief for TDWTF.","DescriptionHtml":"\u003cp\u003eRemy is a veteran developer who writes software for farming robots. They pick tomatoes.\u003c/p\u003e\r\n\u003cp\u003eHe\u0027s often on stage, doing improv comedy, but insists that \u003cem\u003ehe\u003c/em\u003e isn\u0027t doing comedy- it\u0027s deadly serious. You\u0027re laughing at him, not with him. That, by the way, is usually true- you\u0027re laughing at him, not with him.\u003c/p\u003e","Slug":"remy-porter","IsAdmin":true,"IsActive":true,"ImageUrl":"https://s3.amazonaws.com/remy.jetpackshark.com/remy-thumb.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u003cstrong\u003eMaciej\u003c/strong\u003e works as a freelancer, and that frequently means picking up old PHP code that nobody wants to support.\u003c/p\u003e\n\u003cp\u003eOne project had been lingering for ages with key features missing. Specifically, it was supposed to make HTTP requests to other services on an interval, and use that to populate its data. \u0026#34;The old dev tried, but never got it working.\u0026#34; It was Maciej\u0026#39;s turn to give it a shot.\u003c/p\u003e\n","BodyHtml":"\u003cp\u003e\u003cstrong\u003eMaciej\u003c/strong\u003e works as a freelancer, and that frequently means picking up old PHP code that nobody wants to support.\u003c/p\u003e\n\u003cp\u003eOne project had been lingering for ages with key features missing. Specifically, it was supposed to make HTTP requests to other services on an interval, and use that to populate its data. \u0026#34;The old dev tried, but never got it working.\u0026#34; It was Maciej\u0026#39;s turn to give it a shot.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-php\"\u003e\u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e = \u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_init\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$url\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIEFILE, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIEJAR, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIE, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e);\n\u003cspan class=\"hljs-comment\"\u003e// ... many other options set, of course not in a function, just copy-pasted in many locations in the code ...\u003c/span\u003e\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_TIMEOUT, \u003cspan class=\"hljs-variable\"\u003e$interval\u003c/span\u003e  );\n\u003cspan class=\"hljs-variable\"\u003e$s\u003c/span\u003e = \u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_exec\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_close\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e );\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis particular block of code appeared multiple times in the code. Every place they meant to send an HTTP request, they copy/pasted this code in. The URL would be a different value, but the bulk of the code was just a dozen lines of copy/pasted \u003ccode\u003ecurl_setopt\u003c/code\u003es.\u003c/p\u003e\n\u003cp\u003eNow, I don\u0026#39;t \u003cem\u003eknow\u003c/em\u003e that they were dreaming that setting \u003ccode\u003eCURLOPT_TIMEOUT\u003c/code\u003e was setting a recurrence interval. But they do call the value \u003ccode\u003e$interval\u003c/code\u003e, and I can imagine the ignorant hoping to set up cURL to automatically reinvoke the request on an interval. But even if that\u0026#39;s their goal, that\u0026#39;s not the actual problem with this code.\u003c/p\u003e\n\u003cp\u003eThey initialize a cURL wrapper, set a pile of options, and then execute the request, storing the result in \u003ccode\u003e$s\u003c/code\u003e. And do you know what they do with the contents of \u003ccode\u003e$s\u003c/code\u003e after this?\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eNothing\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eThe request works, perhaps not on an interval, and populates the variable, and they just never use it. The old dev \u0026#34;tried\u0026#34; and never got it working? It seems like they started and \u003cem\u003egot bored\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eThere was far worse spaghetti code to manage in the project, but it was this gap that really got Maciej\u0026#39;s attention.\u003c/p\u003e\n\u003c!-- Easy Reader Version: I have NO idea what they\u0027re doing with the cookie settings, honestly. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e","BodyAndAdHtml":"\u003cp\u003e\u003cstrong\u003eMaciej\u003c/strong\u003e works as a freelancer, and that frequently means picking up old PHP code that nobody wants to support.\u003c/p\u003e\n\u003cp\u003eOne project had been lingering for ages with key features missing. Specifically, it was supposed to make HTTP requests to other services on an interval, and use that to populate its data. \u0026#34;The old dev tried, but never got it working.\u0026#34; It was Maciej\u0026#39;s turn to give it a shot.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-php\"\u003e\u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e = \u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_init\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$url\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIEFILE, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIEJAR, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_COOKIE, \u003cspan class=\"hljs-variable\"\u003e$cookie\u003c/span\u003e);\n\u003cspan class=\"hljs-comment\"\u003e// ... many other options set, of course not in a function, just copy-pasted in many locations in the code ...\u003c/span\u003e\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_setopt\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e, CURLOPT_TIMEOUT, \u003cspan class=\"hljs-variable\"\u003e$interval\u003c/span\u003e  );\n\u003cspan class=\"hljs-variable\"\u003e$s\u003c/span\u003e = \u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_exec\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e );\n\u003cspan class=\"hljs-title function_ invoke__\"\u003ecurl_close\u003c/span\u003e( \u003cspan class=\"hljs-variable\"\u003e$ch\u003c/span\u003e );\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis particular block of code appeared multiple times in the code. Every place they meant to send an HTTP request, they copy/pasted this code in. The URL would be a different value, but the bulk of the code was just a dozen lines of copy/pasted \u003ccode\u003ecurl_setopt\u003c/code\u003es.\u003c/p\u003e\n\u003cp\u003eNow, I don\u0026#39;t \u003cem\u003eknow\u003c/em\u003e that they were dreaming that setting \u003ccode\u003eCURLOPT_TIMEOUT\u003c/code\u003e was setting a recurrence interval. But they do call the value \u003ccode\u003e$interval\u003c/code\u003e, and I can imagine the ignorant hoping to set up cURL to automatically reinvoke the request on an interval. But even if that\u0026#39;s their goal, that\u0026#39;s not the actual problem with this code.\u003c/p\u003e\n\u003cp\u003eThey initialize a cURL wrapper, set a pile of options, and then execute the request, storing the result in \u003ccode\u003e$s\u003c/code\u003e. And do you know what they do with the contents of \u003ccode\u003e$s\u003c/code\u003e after this?\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eNothing\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eThe request works, perhaps not on an interval, and populates the variable, and they just never use it. The old dev \u0026#34;tried\u0026#34; and never got it working? It seems like they started and \u003cem\u003egot bored\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eThere was far worse spaghetti code to manage in the project, but it was this gap that really got Maciej\u0026#39;s attention.\u003c/p\u003e\n\u003c!-- Easy Reader Version: I have NO idea what they\u0027re doing with the cookie settings, honestly. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tKeep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.\u003ca href=\"https://inedo.com/proget?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"Never Eating the Cookie","RssTitle":"CodeSOD: Never Eating the Cookie","CachedCommentCount":13,"LastCommentDate":"\/Date(1786855478373)\/","LastCommentDateDescription":"04:44","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786602600000)\/","ISODate":"2026-08-13","DisplayDate":"2026-08-13","Series":{"Slug":"code-sod","Title":"CodeSOD","Description":"Code Snippet Of the Day (CodeSOD) features interesting and usually incorrect code snippets taken from actual production code in a commercial and/or open source software projects.","CssClass":"code"},"FooterAdHtml":"\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tKeep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.\u003ca href=\"https://inedo.com/proget?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Url":"https://thedailywtf.com/articles/never-eating-the-cookie","CommentsUrl":"https://thedailywtf.com/articles/comments/never-eating-the-cookie","Slug":"never-eating-the-cookie","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fnever-eating-the-cookie+-+Never+Eating+the+Cookie+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fnever-eating-the-cookie\u0026t=Never+Eating+the+Cookie+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Never%20Eating%20the%20Cookie:%20https://thedailywtf.com/articles/never-eating-the-cookie","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fnever-eating-the-cookie","PreviousArticleId":11246,"PreviousArticleTitle":"Branching Paths","PreviousArticleSlug":"branching-paths","PreviousArticleUrl":"//thedailywtf.com/articles/branching-paths","NextArticleId":11248,"NextArticleTitle":"Zero to Zero in 0 seconds","NextArticleSlug":"zero-to-zero-in-0-seconds","NextArticleUrl":"//thedailywtf.com/articles/zero-to-zero-in-0-seconds"},{"Id":11246,"Author":{"Name":"Remy Porter","FirstName":"Remy","ShortDescription":"Computers were a mistake, so I accidentally became a farmer? Editor-in-Chief for TDWTF.","DescriptionHtml":"\u003cp\u003eRemy is a veteran developer who writes software for farming robots. They pick tomatoes.\u003c/p\u003e\r\n\u003cp\u003eHe\u0027s often on stage, doing improv comedy, but insists that \u003cem\u003ehe\u003c/em\u003e isn\u0027t doing comedy- it\u0027s deadly serious. You\u0027re laughing at him, not with him. That, by the way, is usually true- you\u0027re laughing at him, not with him.\u003c/p\u003e","Slug":"remy-porter","IsAdmin":true,"IsActive":true,"ImageUrl":"https://s3.amazonaws.com/remy.jetpackshark.com/remy-thumb.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u0026#34;You submitted a pull request.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eIndika\u003c/strong\u003e was, in fact, reviewing the comments she\u0026#39;d gotten on that very same pull request, when her boss, Bill, walked up behind her. What she didn\u0026#39;t understand is why Bill said it like it was an accusation.\u003c/p\u003e\n","BodyHtml":"\u003cp\u003e\u0026#34;You submitted a pull request.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eIndika\u003c/strong\u003e was, in fact, reviewing the comments she\u0026#39;d gotten on that very same pull request, when her boss, Bill, walked up behind her. What she didn\u0026#39;t understand is why Bill said it like it was an accusation.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Yes?\u0026#34; she replied.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Okay, well, we don\u0026#39;t do that here. You\u0026#39;re new, so I\u0026#39;ll let it slide, but please review the developer guide.\u0026#34;\u003c/p\u003e\n\u003cp\u003eWell, Indika had reviewed the developer guide, or at least thought she had. As it turned out, there was the \u003cem\u003eofficial\u003c/em\u003e, company wide developer guide. That\u0026#39;s the one she\u0026#39;d read. But Bill maintained his own, for his team. He hadn\u0026#39;t ever told her about it, but apparently assumed she\u0026#39;d have the oracular blessings of Apollo and find it by herself.\u003c/p\u003e\n\u003cp\u003eIt had this to say:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBranching is prohibited. Merging is a time wasting activity and goes against CI principles. Only use \u003ccode\u003egit\u003c/code\u003e to commit, push, and pull.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAnd rebase, presumably, if everyone was just committing on the main branch?\u003c/p\u003e\n\u003cp\u003eIndika asked one of her co-workers, Elise, over coffee: \u0026#34;Is this real?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Yeah,\u0026#34; Elise said. \u0026#34;I\u0026#39;m not sure how he found out about your PR, I don\u0026#39;t think anybody added him to the review. I mean, why would they?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Oh, I sent him the link,\u0026#34; Indika said. \u0026#34;Just a whole, \u0026#39;I\u0026#39;m new here, look at me doing the work!\u0026#39; type heads up.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Oh yeah, \u003cem\u003edefinitely\u003c/em\u003e don\u0026#39;t do that.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;So we do use PRs?\u0026#34;\u003c/p\u003e\n\u003cp\u003eElise nodded. \u0026#34;Of course we do. We\u0026#39;re not crazy. We just make sure Bill never finds out.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eThat\u003c/em\u003e seemed like a terrible way to work, but Indika went along with it, at least for a few weeks. Then an opportunity presented itself; she and Bill bumped into each other in the kitchenette grabbing coffee, and nobody else was around. At this point, Indika had already submitted a number of PRs without Bill knowing.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Bill, I\u0026#39;ve been meaning to ask, what\u0026#39;s your rationale for prohibiting branching?\u0026#34;\u003c/p\u003e\n\u003cp\u003eBill loved being asked that question. \u0026#34;Well, well, it comes from twenty years of experience. What exactly does a branch get you?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;A distinct history of changes that can be maintained and eventually merged in once a large unit of work has been done without disrupting other work that might be in flight?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Another point of conflict! A chance for the code you\u0026#39;re working on to get stale. A chance to fall behind the rest of the team. Now, for a large open source team, with a lot of collaborators, a branch might make sense. I\u0026#39;m skeptical, but I can at least understand it. But for our internal team? It\u0026#39;s just developers seeing a new toy and going, \u0026#39;oh, shiny!\u0026#39;\u0026#34;\u003c/p\u003e\n\u003cp\u003eIndika sipped her coffee and went back to her desk. She was fortunate to have a window nearby, and looked at the squirrels playing in the branches of the tree.\u003c/p\u003e\n\u003c!-- Easy Reader Version: git checkout -b WTF --\u003e","BodyAndAdHtml":"\u003cp\u003e\u0026#34;You submitted a pull request.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eIndika\u003c/strong\u003e was, in fact, reviewing the comments she\u0026#39;d gotten on that very same pull request, when her boss, Bill, walked up behind her. What she didn\u0026#39;t understand is why Bill said it like it was an accusation.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Yes?\u0026#34; she replied.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Okay, well, we don\u0026#39;t do that here. You\u0026#39;re new, so I\u0026#39;ll let it slide, but please review the developer guide.\u0026#34;\u003c/p\u003e\n\u003cp\u003eWell, Indika had reviewed the developer guide, or at least thought she had. As it turned out, there was the \u003cem\u003eofficial\u003c/em\u003e, company wide developer guide. That\u0026#39;s the one she\u0026#39;d read. But Bill maintained his own, for his team. He hadn\u0026#39;t ever told her about it, but apparently assumed she\u0026#39;d have the oracular blessings of Apollo and find it by herself.\u003c/p\u003e\n\u003cp\u003eIt had this to say:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBranching is prohibited. Merging is a time wasting activity and goes against CI principles. Only use \u003ccode\u003egit\u003c/code\u003e to commit, push, and pull.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAnd rebase, presumably, if everyone was just committing on the main branch?\u003c/p\u003e\n\u003cp\u003eIndika asked one of her co-workers, Elise, over coffee: \u0026#34;Is this real?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Yeah,\u0026#34; Elise said. \u0026#34;I\u0026#39;m not sure how he found out about your PR, I don\u0026#39;t think anybody added him to the review. I mean, why would they?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Oh, I sent him the link,\u0026#34; Indika said. \u0026#34;Just a whole, \u0026#39;I\u0026#39;m new here, look at me doing the work!\u0026#39; type heads up.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Oh yeah, \u003cem\u003edefinitely\u003c/em\u003e don\u0026#39;t do that.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;So we do use PRs?\u0026#34;\u003c/p\u003e\n\u003cp\u003eElise nodded. \u0026#34;Of course we do. We\u0026#39;re not crazy. We just make sure Bill never finds out.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eThat\u003c/em\u003e seemed like a terrible way to work, but Indika went along with it, at least for a few weeks. Then an opportunity presented itself; she and Bill bumped into each other in the kitchenette grabbing coffee, and nobody else was around. At this point, Indika had already submitted a number of PRs without Bill knowing.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Bill, I\u0026#39;ve been meaning to ask, what\u0026#39;s your rationale for prohibiting branching?\u0026#34;\u003c/p\u003e\n\u003cp\u003eBill loved being asked that question. \u0026#34;Well, well, it comes from twenty years of experience. What exactly does a branch get you?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;A distinct history of changes that can be maintained and eventually merged in once a large unit of work has been done without disrupting other work that might be in flight?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Another point of conflict! A chance for the code you\u0026#39;re working on to get stale. A chance to fall behind the rest of the team. Now, for a large open source team, with a lot of collaborators, a branch might make sense. I\u0026#39;m skeptical, but I can at least understand it. But for our internal team? It\u0026#39;s just developers seeing a new toy and going, \u0026#39;oh, shiny!\u0026#39;\u0026#34;\u003c/p\u003e\n\u003cp\u003eIndika sipped her coffee and went back to her desk. She was fortunate to have a window nearby, and looked at the squirrels playing in the branches of the tree.\u003c/p\u003e\n\u003c!-- Easy Reader Version: git checkout -b WTF --\u003e\u003cdiv\u003e\n\t[Advertisement] \u003cb\u003ePlan Your .NET 9 Migration with Confidence\u003c/b\u003e\u003cbr/\u003eYour journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. \u003cb\u003e\u003ca href=\"https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet\u0026amp;utm_source=tdwtf-footer\"\u003eDownload Free Guide Now!\u003c/a\u003e\u003c/b\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Title":"Branching Paths","RssTitle":"Branching Paths","CachedCommentCount":22,"LastCommentDate":"\/Date(1786711478207)\/","LastCommentDateDescription":"2026-08-14","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786516200000)\/","ISODate":"2026-08-12","DisplayDate":"2026-08-12","Series":{"Slug":"feature-articles","Title":"Feature Articles","Description":"","CssClass":"featured"},"FooterAdHtml":"\u003cdiv\u003e\n\t[Advertisement] \u003cb\u003ePlan Your .NET 9 Migration with Confidence\u003c/b\u003e\u003cbr/\u003eYour journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. \u003cb\u003e\u003ca href=\"https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet\u0026amp;utm_source=tdwtf-footer\"\u003eDownload Free Guide Now!\u003c/a\u003e\u003c/b\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Url":"https://thedailywtf.com/articles/branching-paths","CommentsUrl":"https://thedailywtf.com/articles/comments/branching-paths","Slug":"branching-paths","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fbranching-paths+-+Branching+Paths+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fbranching-paths\u0026t=Branching+Paths+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Branching%20Paths:%20https://thedailywtf.com/articles/branching-paths","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fbranching-paths","PreviousArticleId":11245,"PreviousArticleTitle":"Public Private Partnership","PreviousArticleSlug":"public-private-partnership","PreviousArticleUrl":"//thedailywtf.com/articles/public-private-partnership","NextArticleId":11247,"NextArticleTitle":"Never Eating the Cookie","NextArticleSlug":"never-eating-the-cookie","NextArticleUrl":"//thedailywtf.com/articles/never-eating-the-cookie"},{"Id":11245,"Author":{"Name":"Remy Porter","FirstName":"Remy","ShortDescription":"Computers were a mistake, so I accidentally became a farmer? Editor-in-Chief for TDWTF.","DescriptionHtml":"\u003cp\u003eRemy is a veteran developer who writes software for farming robots. They pick tomatoes.\u003c/p\u003e\r\n\u003cp\u003eHe\u0027s often on stage, doing improv comedy, but insists that \u003cem\u003ehe\u003c/em\u003e isn\u0027t doing comedy- it\u0027s deadly serious. You\u0027re laughing at him, not with him. That, by the way, is usually true- you\u0027re laughing at him, not with him.\u003c/p\u003e","Slug":"remy-porter","IsAdmin":true,"IsActive":true,"ImageUrl":"https://s3.amazonaws.com/remy.jetpackshark.com/remy-thumb.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u003cstrong\u003eEric O\u003c/strong\u003e was trawling through an API for handling concurrency, and found this little mismatch between the comment and the definition:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e private Status, because while this object needs to be able to set the status, consumers should only be able to check it, lest everything break.\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e StatusType Status {\n    \u003cspan class=\"hljs-keyword\"\u003eget\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e _status;\n    }\n    \u003cspan class=\"hljs-keyword\"\u003eset\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003eif\u003c/span\u003e (\u003cspan class=\"hljs-keyword\"\u003evalue\u003c/span\u003e != _status) {\n            RaisePropertyChanged(\u003cspan class=\"hljs-string\"\u003e\u0026#34;Status\u0026#34;\u003c/span\u003e);\n        }\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\n","BodyHtml":"\u003cp\u003e\u003cstrong\u003eEric O\u003c/strong\u003e was trawling through an API for handling concurrency, and found this little mismatch between the comment and the definition:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e private Status, because while this object needs to be able to set the status, consumers should only be able to check it, lest everything break.\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e StatusType Status {\n    \u003cspan class=\"hljs-keyword\"\u003eget\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e _status;\n    }\n    \u003cspan class=\"hljs-keyword\"\u003eset\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003eif\u003c/span\u003e (\u003cspan class=\"hljs-keyword\"\u003evalue\u003c/span\u003e != _status) {\n            RaisePropertyChanged(\u003cspan class=\"hljs-string\"\u003e\u0026#34;Status\u0026#34;\u003c/span\u003e);\n        }\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIt\u0026#39;s very important we make this property private, lest clients abuse it, and unleash dragons, chaos, and other potential horrors. Given that this happens inside of a concurrency API, I can only imagine what could go wrong when you mess this up. So sure, the comment makes sense.\u003c/p\u003e\n\u003cp\u003eThe \u003cem\u003edefinition\u003c/em\u003e on the other hand, doesn\u0026#39;t agree.\u003c/p\u003e\n\u003cp\u003eIn practice, it\u0026#39;s probably fine to do it this way, and at least the comment will show up in the documentation. If a consumer of the API misbehaves, they\u0026#39;ll at least see that the docs suggest this is private.\u003c/p\u003e\n\u003cp\u003eThe joke, of course, is the idea that the users of the API are going to read the docs, or care that one of the public methods suggests that it should be private.\u003c/p\u003e\n\u003c!-- Easy Reader Version: Or, they\u0027d be like me: they\u0027d see the docs suggest it should be private, see that it\u0027s public, and decide \"welp, it looks public to me,\" and then use it. If they wanted it private, they could have made it private. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e","BodyAndAdHtml":"\u003cp\u003e\u003cstrong\u003eEric O\u003c/strong\u003e was trawling through an API for handling concurrency, and found this little mismatch between the comment and the definition:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e private Status, because while this object needs to be able to set the status, consumers should only be able to check it, lest everything break.\u003c/span\u003e\n\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e StatusType Status {\n    \u003cspan class=\"hljs-keyword\"\u003eget\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e _status;\n    }\n    \u003cspan class=\"hljs-keyword\"\u003eset\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003eif\u003c/span\u003e (\u003cspan class=\"hljs-keyword\"\u003evalue\u003c/span\u003e != _status) {\n            RaisePropertyChanged(\u003cspan class=\"hljs-string\"\u003e\u0026#34;Status\u0026#34;\u003c/span\u003e);\n        }\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIt\u0026#39;s very important we make this property private, lest clients abuse it, and unleash dragons, chaos, and other potential horrors. Given that this happens inside of a concurrency API, I can only imagine what could go wrong when you mess this up. So sure, the comment makes sense.\u003c/p\u003e\n\u003cp\u003eThe \u003cem\u003edefinition\u003c/em\u003e on the other hand, doesn\u0026#39;t agree.\u003c/p\u003e\n\u003cp\u003eIn practice, it\u0026#39;s probably fine to do it this way, and at least the comment will show up in the documentation. If a consumer of the API misbehaves, they\u0026#39;ll at least see that the docs suggest this is private.\u003c/p\u003e\n\u003cp\u003eThe joke, of course, is the idea that the users of the API are going to read the docs, or care that one of the public methods suggests that it should be private.\u003c/p\u003e\n\u003c!-- Easy Reader Version: Or, they\u0027d be like me: they\u0027d see the docs suggest it should be private, see that it\u0027s public, and decide \"welp, it looks public to me,\" and then use it. If they wanted it private, they could have made it private. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e\u003cdiv\u003e\n\t[Advertisement] Picking up \u003cb\u003eNuGet\u003c/b\u003e is easy. Getting good at it takes time. \u003ca href=\"https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf\u0026amp;utm_medium=Footerad\u0026amp;utm_campaign=nuget\"\u003eDownload our guide to learn the best practice of NuGet for the Enterprise.\u003c/a\u003e\n\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Title":"Public Private Partnership","RssTitle":"CodeSOD: Public Private Partnership","CachedCommentCount":13,"LastCommentDate":"\/Date(1786628663900)\/","LastCommentDateDescription":"2026-08-13","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786429800000)\/","ISODate":"2026-08-11","DisplayDate":"2026-08-11","Series":{"Slug":"code-sod","Title":"CodeSOD","Description":"Code Snippet Of the Day (CodeSOD) features interesting and usually incorrect code snippets taken from actual production code in a commercial and/or open source software projects.","CssClass":"code"},"FooterAdHtml":"\u003cdiv\u003e\n\t[Advertisement] Picking up \u003cb\u003eNuGet\u003c/b\u003e is easy. Getting good at it takes time. \u003ca href=\"https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf\u0026amp;utm_medium=Footerad\u0026amp;utm_campaign=nuget\"\u003eDownload our guide to learn the best practice of NuGet for the Enterprise.\u003c/a\u003e\n\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Url":"https://thedailywtf.com/articles/public-private-partnership","CommentsUrl":"https://thedailywtf.com/articles/comments/public-private-partnership","Slug":"public-private-partnership","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fpublic-private-partnership+-+Public+Private+Partnership+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fpublic-private-partnership\u0026t=Public+Private+Partnership+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Public%20Private%20Partnership:%20https://thedailywtf.com/articles/public-private-partnership","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fpublic-private-partnership","PreviousArticleId":11244,"PreviousArticleTitle":"The Crossroads","PreviousArticleSlug":"the-crossroads","PreviousArticleUrl":"//thedailywtf.com/articles/the-crossroads","NextArticleId":11246,"NextArticleTitle":"Branching Paths","NextArticleSlug":"branching-paths","NextArticleUrl":"//thedailywtf.com/articles/branching-paths"},{"Id":11244,"Author":{"Name":"Ellis Morning","FirstName":"Ellis","ShortDescription":null,"DescriptionHtml":"\u003cb\u003eEllis Morning\u003c/b\u003e is a Computer Science graduate who fought in the trenches of Tech Support, occasionally crossing enemy lines into the Business Analyst and Project Management spheres of war. She\u0027s now a freelance writer and technical writer. Check out her highly-rated \u003ca href=\"https://swordandstarship.com/\" target=\"_blank\"\u003esci-fi/fantasy novels\u003c/a\u003e and find more humor, fiction, and blog posts at her \u003ca href=\"https://www.ellismorning.com\" target=\"_blank\"\u003ewebsite\u003c/a\u003e.","Slug":"ellis-morning","IsAdmin":true,"IsActive":true,"ImageUrl":"https://ellismorning.com/img/ellis2.jpeg"},"Status":"Published","SummaryHtml":"\u003cblockquote\u003eI moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e-Leila\u003c/p\u003e\u003c/blockquote\u003e\n\n","BodyHtml":"\u003cblockquote\u003eI moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e-Leila\u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eFor a while I was stunned, staring at the email in front of me. \u003ca href=\"https://thedailywtf.com/articles/the-hard-goodbye\"\u003eI’d just told my boss I was quitting\u003c/a\u003e, refusing a promotion into my recently-deceased mentor Aggie’s shoes. Now, the new head of Human Resources wanted to see me.\u003c/p\u003e\n\u003cp\u003eMe? A Tech Support drone with one foot out the door? Well, she didn’t know that yet, did she?\u003c/p\u003e\n\u003cp\u003eSomething in me feared where this might lead. But, Leila had stuck her neck out to rescue me from CEO Gibbs. She seemed like she cared about making things better. I decided to hear her out. Figured I owed her that much before I blew outta there for good in two weeks.\u003c/p\u003e\n\u003cp\u003eI had way too many hours to kill. Between whittling down my overstuffed inbox and resuming casework, it should’ve been easy to distract myself, but I couldn\u0026#39;t focus on a single thing. I’d just done what had once seemed impossible. My brain wasn’t letting go of that any time soon.\u003c/p\u003e\n\u003cp\u003eMegan and Reynaldo also handed in their resignations. I got their messages confirming as much. We met up for lunch at a nearby restaurant and celebrated, but I was distracted. Amid the smiles and positive energy, the meeting with Leila was all I could think about. Should I mention it? I decided not to, not until I knew more.\u003c/p\u003e\n\u003cp\u003eI dreaded the afternoon slog now more than ever, but somehow, it slogged. When the clock’s hands finally crawled to 3:30, I threw on my coat and hat and darted out for one last smoke break. Then, it was time for C-Town.\u003c/p\u003e\n\u003cp\u003eConsumed with nervous energy, I shunned the elevator to race up the stairs floor by floor. Figured I’d burn off some stress, which could only help with whatever came next. Also figured I’d have a minute to recover in the vast executive lobby before finding my way to her office. Instead, I found Leila standing right there, every bit as polished as our surroundings. She faced me with surprise. “Hello.”\u003c/p\u003e\n\u003cp\u003eI tried to speak, laugh, something. Instead, I doubled over, coughing and gasping for air that felt all too thin up in nosebleed territory. While recovering, I couldn’t help but notice the gleaming tile beneath my feet, contrasting against my work shoes encrusted with sidewalk salt. Such details seldom crossed my mind, but the sort of people who worked up there lived and died for such details. Face flush, I cleared my throat one more time and righted myself, looking her way. “’Scuse me.”\u003c/p\u003e\n\u003cp\u003e“That was a long way up,” Leila remarked, gesturing behind herself. “I thought we could visit the observation deck. Would you like something to eat or drink first?”\u003c/p\u003e\n\u003cp\u003eTruth be told, I was already dying for another smoke. “No, that’s all right.”\u003c/p\u003e\n\u003cp\u003e“Follow me.”\u003c/p\u003e\n\u003cp\u003eShe led the way through massive, quiet corridors to a small room with glass walls and ceiling. At this height, all one could see outside was a thick lead wall of fog. Leila strayed up to the far wall, a jewel against the void, and glanced back over her shoulder with chagrin. “I’m sorry, the view’s not very good today.”\u003c/p\u003e\n\u003cp\u003e“I dunno, I kinda like it.” Something about foggy weather had always intrigued me. With the normal world gone, it seemed like anything could happen.\u003c/p\u003e\n\u003cp\u003eShe beckoned me closer with one hand. I strayed up next to her right side, staring out at the shrouded view.\u003c/p\u003e\n\u003cp\u003e“I understand you and Agatha Shaw were close,” Leila began quietly. “You have my deepest condolences.”\u003c/p\u003e\n\u003cp\u003eA two-ton anvil crashed onto my nerves. My fists clenched up at my sides. I worked so hard to hold back the flash-flood of grief that I couldn’t string words together. I only trusted myself to nod.\u003c/p\u003e\n\u003cp\u003eShe glanced my way, hesitating. “Would it be better if we rescheduled?”\u003c/p\u003e\n\u003cp\u003e“I’m here,” I forced out. “Whatever you have to say, say it.”\u003c/p\u003e\n\u003cp\u003eShe nodded. “First: while you were out of the office, I asked Francis Bronson to hand in his resignation.”\u003c/p\u003e\n\u003cp\u003eI drew a blank on the name, and blinked her way in confusion.\u003c/p\u003e\n\u003cp\u003e“The manager who nearly destroyed a printer with his hair dryer,” Leila explained, “after I’d just made a company-wide push for everyone to respect our office equipment.”\u003c/p\u003e\n\u003cp\u003e“Oh. Hothead!” My nickname for the guy. I’d worked that case a few weeks ago, but it felt more like years. Hothead worked in HR—at least, he had. After disarming him, I’d sent Leila an email, appealing for help against someone who clearly shouldn’t have been managing a supply cabinet, much less human beings. Well, she’d delivered. A warm note of satisfaction offered me a welcome lift out of grief. “Thanks. Really.”\u003c/p\u003e\n\u003cp\u003eLeila smiled. “We make a good team, I think. Which brings me to the other thing I wanted to discuss. Something new.”\u003c/p\u003e\n\u003cp\u003eMy gaze fastened onto hers with a mix of intrigue and dread.\u003c/p\u003e\n\u003cp\u003e“You and I both know how badly this place needs to change. Let’s work together and actually fix things. I want to create a Change Management team and make you Team Lead.”\u003c/p\u003e\n\u003cp\u003eI was speechless, caught completely off-guard.\u003c/p\u003e\n\u003cp\u003e“The first thing we’d do is attack our company-wide leadership problem. Audits, surveys, hearings … eventually, a reorg. Along with simplifying the corporate structure, we’ll get rid of all the—Hothead, you called him? All the other Hotheads.”\u003c/p\u003e\n\u003cp\u003e“The biggest hothead is sitting at the top of the whole rotten pyramid,” I blurted. “He ain’t budging. He ain’t signing off on this, either!”\u003c/p\u003e\n\u003cp\u003eLeila was unfazed. “I think we could frame everything in a way that \u003ci\u003emakes\u003c/i\u003e Mr. Gibbs like it. After all, we’re reducing payroll. We’re better positioning ourselves in a tough economic time. Worst-case, we could always use the three magic words: \u003ci\u003eGoogle Did It.”\u003c/i\u003e She smirked.\u003c/p\u003e\n\u003cp\u003eI couldn’t help smirking back. Then I remembered what I’d done just a few hours earlier. “But I’m outta here. I quit! Put in my notice this morning!”\u003c/p\u003e\n\u003cp\u003eLeila nodded calmly. “Do you have a new position lined up somewhere else?”\u003c/p\u003e\n\u003cp\u003e“No. I\u0026#39;m going freelance with friends.”\u003c/p\u003e\n\u003cp\u003e“Friends who are leaving the company along with you?”\u003c/p\u003e\n\u003cp\u003eI nodded.\u003c/p\u003e\n\u003cp\u003eShe paused for thought. “If you were to lead my Change Management team instead, you’d be able to recruit internally for your team. Whoever you think would be the most helpful. You’d set the agenda for whatever’s most important to address so that other good people don’t feel like they have to get away from here. All of this would mean a promotion to Director, with a salary and benefits to go with. And if you need more bereavement time, I could arrange an indefinite leave of absence until you feel ready to come back.”\u003c/p\u003e\n\u003cp\u003eThe breath died in my throat. Had I suffered a stroke? I must’ve had a stroke. No, she really said it. She was on the level. I could change things. I could hire my friends to help me do it. A raise, full bennies, working with \u003ci\u003eher\u003c/i\u003e every day?\u003c/p\u003e\n\u003cp\u003eOnly a fool would refuse. And yet, my gut ached at the idea.\u003c/p\u003e\n\u003cp\u003eI stood there, frozen and mute, until I remembered something in my trench coat pocket: RD, the rubber duck I’d miraculously rescued from Aggie’s former office. I reached into my pocket and seized him in my fist.\u003c/p\u003e\n\u003cp\u003e\u003ci\u003eRD? Aggie?\u003c/i\u003e I thought. \u003ci\u003eWhoever’s listening. It all sounds amazing. I know she means it. But … it’s another trap, isn’t it? Staying in this joint for any reason means betraying myself. Betraying everything.\u003c/i\u003e\u003c/p\u003e\n\n\u003cp\u003e“Listen,” I finally said, “I’m flattered you even offered, but it ain’t right for me. Don’t give up on your idea! I’ve got friends here with ideas of their own for changing things. 32-hour work weeks. The end of free overtime. A union. I’ll send ’em your way. Offer \u003ci\u003ethem\u003c/i\u003e a spot on your team.”\u003c/p\u003e\n\n\u003cp\u003eLeila sighed. “A union would be an especially tough sell to Mr. Gibbs, but that really is a case where Google Did It. We might scare him so much with that idea that everything else would seem harmless in comparison.” She faced me with a sad smile. “A shame that we’re losing you. I was starting to learn some interesting things about printers.”\u003c/p\u003e\n\u003cp\u003eI’d miss her, too. And yet, I was feeling surprisingly great about my refusal.\u003c/p\u003e\n\u003cp\u003e“Make sure you file for unemployment,” she said. “We won’t stand in your way.”\u003c/p\u003e\n\u003cp\u003eI offered my hand. “Thanks for everything, Leila. Whenever it is they kick you outta here for good, come find me.”\u003c/p\u003e\n\u003cp\u003eShe shook, sad smile persisting. “Maybe I will.”\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eI told Megan and Reynaldo about the new Change Management team. Made sure they knew the offer was on the table in case they preferred that over jumping ship. Both were quick to say no. Like me, they were too excited about our plans to stop now.\u003c/p\u003e\n\u003cp\u003eFor the next couple of weeks, there was still plenty of work to be done: transferring my open tickets to other support reps and all that. But there was barely any time for it. Coworker after coworker stopped by my cube to express their surprise and wish me well in whatever came next.\u003c/p\u003e\n\u003cp\u003e“You’ll never be problem-free,” one of them advised me. “Go looking for the problems you \u003ci\u003ewant\u003c/i\u003e to have.”\u003c/p\u003e\n\u003cp\u003eI felt happier, freer, more determined than I had in ages. It was the conviction of knowing I’d stuck to my guns to do the right thing for myself.\u003c/p\u003e\n\u003cp\u003eSanjay also jumped ship to join us. And there was one last surprise that came in the form of a phone call. The name on my work phone’s caller ID was DRACORA, P. So-called “Dracula!” Having a fairer opinion of her than most, I picked up without any sense of dread.\u003c/p\u003e\n\u003cp\u003eSo-called “Dracula!” She hadn’t been so bad at all. Surprised, I picked up in a hurry.\u003c/p\u003e\n\u003cp\u003e“I’m so sad to hear you’re leaving!” she said. “What kind of freelance work are you doing?”\u003c/p\u003e\n\u003cp\u003e“All sorts of IT projects,” I replied. “Maybe some consulting on the side.”\u003c/p\u003e\n\u003cp\u003e“I have a friend who needs help setting up a website for her business. Is that something you could help her with?”\u003c/p\u003e\n\u003cp\u003eMy eyes flew wide open in shock. “Sure!”\u003c/p\u003e\n\u003cp\u003e“I’ll put you in touch with one another.”\u003c/p\u003e\n\u003cp\u003e“That’d be swell. Thanks!”\u003c/p\u003e\n\u003cp\u003eWe exchanged contact info. She promised to keep pointing friends our way whenever she could.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eOn my last day, I sent my personal contact information to my coworkers. I reminded them of Leila’s offer and urged them to keep me posted on their different causes. Then my friends and I walked out of a building that no longer had a hold over any of us.\u003c/p\u003e\n\u003cp\u003eIt felt pretty damn swell.\u003c/p\u003e\n\u003cp\u003eOur accountant helped us incorporate RD IT Solutions. Only close friends knew it stood for “rubber duck.” The company covered medical and other relevant expenses for everyone. There was no hierarchy. Everyone had equal financial stakes and an equal say in company decisions.\u003c/p\u003e\n\u003cp\u003eAfter decades of being an expert at what I did, I was back at square one, learning the ropes. So much of what we had to learn for our business could only be learned through failure. Still, it felt rewarding to challenge my brain in new ways. The new gig let me wear lots of hats, from tech support to coding to business admin. \u003c/p\u003e\n\u003cp\u003eWith no more regular paychecks, we had to tighten down our finances to what was critically important. We worked remotely at whatever times worked best for us, with the occasional meet-up at a public place or someone’s home. We all knew that any one of us having some kind of trouble could count on the rest of the group to help out as best as they could.\u003c/p\u003e\n\u003cp\u003eMegan quit smoking again. I cut way back myself. Wasn’t trying to, I just haven’t felt the need as much. Also stopped having those nightmares. It no longer feels like I’m living just for  time off and weekends. I don’t spend my Sunday nights dreading Monday.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eDracula really did introduce us to our first client. It’s crazy what the universe puts out there when you go looking for it.\u003c/p\u003e\n\u003cp\u003eWe met up remotely for our first client meeting to discuss requirements and expectations. When the topic of deliverables came up, our client scrunched her nose and interrupted Megan mid-sentence. “I don’t trust email! I’d rather you fax me the files.”\u003c/p\u003e\n\u003cp\u003eWe were building a website for her.\u003c/p\u003e\n\u003cp\u003e“You mean, the source files?” Megan soldiered on bravely.\u003c/p\u003e\n\u003cp\u003e“Just fax me the codes,” the client said. “My nephew can re-type them into the Internet.”\u003c/p\u003e\n\u003cp\u003eShe provided a fax number, fully expecting us to print out several hundred lines of code to send over. After deploying our first stab at a website that met her requirements, we did just that, mostly out of curiosity.\u003c/p\u003e\n\u003cp\u003eA few days later, she called us in a huff, saying her website looked like random letters. Her nephew had typed the code into Facebook.\u003c/p\u003e\n\u003cbr/\u003e\n\u003cp\u003eFIN\u003c/p\u003e","BodyAndAdHtml":"\u003cblockquote\u003eI moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e-Leila\u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eFor a while I was stunned, staring at the email in front of me. \u003ca href=\"https://thedailywtf.com/articles/the-hard-goodbye\"\u003eI’d just told my boss I was quitting\u003c/a\u003e, refusing a promotion into my recently-deceased mentor Aggie’s shoes. Now, the new head of Human Resources wanted to see me.\u003c/p\u003e\n\u003cp\u003eMe? A Tech Support drone with one foot out the door? Well, she didn’t know that yet, did she?\u003c/p\u003e\n\u003cp\u003eSomething in me feared where this might lead. But, Leila had stuck her neck out to rescue me from CEO Gibbs. She seemed like she cared about making things better. I decided to hear her out. Figured I owed her that much before I blew outta there for good in two weeks.\u003c/p\u003e\n\u003cp\u003eI had way too many hours to kill. Between whittling down my overstuffed inbox and resuming casework, it should’ve been easy to distract myself, but I couldn\u0026#39;t focus on a single thing. I’d just done what had once seemed impossible. My brain wasn’t letting go of that any time soon.\u003c/p\u003e\n\u003cp\u003eMegan and Reynaldo also handed in their resignations. I got their messages confirming as much. We met up for lunch at a nearby restaurant and celebrated, but I was distracted. Amid the smiles and positive energy, the meeting with Leila was all I could think about. Should I mention it? I decided not to, not until I knew more.\u003c/p\u003e\n\u003cp\u003eI dreaded the afternoon slog now more than ever, but somehow, it slogged. When the clock’s hands finally crawled to 3:30, I threw on my coat and hat and darted out for one last smoke break. Then, it was time for C-Town.\u003c/p\u003e\n\u003cp\u003eConsumed with nervous energy, I shunned the elevator to race up the stairs floor by floor. Figured I’d burn off some stress, which could only help with whatever came next. Also figured I’d have a minute to recover in the vast executive lobby before finding my way to her office. Instead, I found Leila standing right there, every bit as polished as our surroundings. She faced me with surprise. “Hello.”\u003c/p\u003e\n\u003cp\u003eI tried to speak, laugh, something. Instead, I doubled over, coughing and gasping for air that felt all too thin up in nosebleed territory. While recovering, I couldn’t help but notice the gleaming tile beneath my feet, contrasting against my work shoes encrusted with sidewalk salt. Such details seldom crossed my mind, but the sort of people who worked up there lived and died for such details. Face flush, I cleared my throat one more time and righted myself, looking her way. “’Scuse me.”\u003c/p\u003e\n\u003cp\u003e“That was a long way up,” Leila remarked, gesturing behind herself. “I thought we could visit the observation deck. Would you like something to eat or drink first?”\u003c/p\u003e\n\u003cp\u003eTruth be told, I was already dying for another smoke. “No, that’s all right.”\u003c/p\u003e\n\u003cp\u003e“Follow me.”\u003c/p\u003e\n\u003cp\u003eShe led the way through massive, quiet corridors to a small room with glass walls and ceiling. At this height, all one could see outside was a thick lead wall of fog. Leila strayed up to the far wall, a jewel against the void, and glanced back over her shoulder with chagrin. “I’m sorry, the view’s not very good today.”\u003c/p\u003e\n\u003cp\u003e“I dunno, I kinda like it.” Something about foggy weather had always intrigued me. With the normal world gone, it seemed like anything could happen.\u003c/p\u003e\n\u003cp\u003eShe beckoned me closer with one hand. I strayed up next to her right side, staring out at the shrouded view.\u003c/p\u003e\n\u003cp\u003e“I understand you and Agatha Shaw were close,” Leila began quietly. “You have my deepest condolences.”\u003c/p\u003e\n\u003cp\u003eA two-ton anvil crashed onto my nerves. My fists clenched up at my sides. I worked so hard to hold back the flash-flood of grief that I couldn’t string words together. I only trusted myself to nod.\u003c/p\u003e\n\u003cp\u003eShe glanced my way, hesitating. “Would it be better if we rescheduled?”\u003c/p\u003e\n\u003cp\u003e“I’m here,” I forced out. “Whatever you have to say, say it.”\u003c/p\u003e\n\u003cp\u003eShe nodded. “First: while you were out of the office, I asked Francis Bronson to hand in his resignation.”\u003c/p\u003e\n\u003cp\u003eI drew a blank on the name, and blinked her way in confusion.\u003c/p\u003e\n\u003cp\u003e“The manager who nearly destroyed a printer with his hair dryer,” Leila explained, “after I’d just made a company-wide push for everyone to respect our office equipment.”\u003c/p\u003e\n\u003cp\u003e“Oh. Hothead!” My nickname for the guy. I’d worked that case a few weeks ago, but it felt more like years. Hothead worked in HR—at least, he had. After disarming him, I’d sent Leila an email, appealing for help against someone who clearly shouldn’t have been managing a supply cabinet, much less human beings. Well, she’d delivered. A warm note of satisfaction offered me a welcome lift out of grief. “Thanks. Really.”\u003c/p\u003e\n\u003cp\u003eLeila smiled. “We make a good team, I think. Which brings me to the other thing I wanted to discuss. Something new.”\u003c/p\u003e\n\u003cp\u003eMy gaze fastened onto hers with a mix of intrigue and dread.\u003c/p\u003e\n\u003cp\u003e“You and I both know how badly this place needs to change. Let’s work together and actually fix things. I want to create a Change Management team and make you Team Lead.”\u003c/p\u003e\n\u003cp\u003eI was speechless, caught completely off-guard.\u003c/p\u003e\n\u003cp\u003e“The first thing we’d do is attack our company-wide leadership problem. Audits, surveys, hearings … eventually, a reorg. Along with simplifying the corporate structure, we’ll get rid of all the—Hothead, you called him? All the other Hotheads.”\u003c/p\u003e\n\u003cp\u003e“The biggest hothead is sitting at the top of the whole rotten pyramid,” I blurted. “He ain’t budging. He ain’t signing off on this, either!”\u003c/p\u003e\n\u003cp\u003eLeila was unfazed. “I think we could frame everything in a way that \u003ci\u003emakes\u003c/i\u003e Mr. Gibbs like it. After all, we’re reducing payroll. We’re better positioning ourselves in a tough economic time. Worst-case, we could always use the three magic words: \u003ci\u003eGoogle Did It.”\u003c/i\u003e She smirked.\u003c/p\u003e\n\u003cp\u003eI couldn’t help smirking back. Then I remembered what I’d done just a few hours earlier. “But I’m outta here. I quit! Put in my notice this morning!”\u003c/p\u003e\n\u003cp\u003eLeila nodded calmly. “Do you have a new position lined up somewhere else?”\u003c/p\u003e\n\u003cp\u003e“No. I\u0026#39;m going freelance with friends.”\u003c/p\u003e\n\u003cp\u003e“Friends who are leaving the company along with you?”\u003c/p\u003e\n\u003cp\u003eI nodded.\u003c/p\u003e\n\u003cp\u003eShe paused for thought. “If you were to lead my Change Management team instead, you’d be able to recruit internally for your team. Whoever you think would be the most helpful. You’d set the agenda for whatever’s most important to address so that other good people don’t feel like they have to get away from here. All of this would mean a promotion to Director, with a salary and benefits to go with. And if you need more bereavement time, I could arrange an indefinite leave of absence until you feel ready to come back.”\u003c/p\u003e\n\u003cp\u003eThe breath died in my throat. Had I suffered a stroke? I must’ve had a stroke. No, she really said it. She was on the level. I could change things. I could hire my friends to help me do it. A raise, full bennies, working with \u003ci\u003eher\u003c/i\u003e every day?\u003c/p\u003e\n\u003cp\u003eOnly a fool would refuse. And yet, my gut ached at the idea.\u003c/p\u003e\n\u003cp\u003eI stood there, frozen and mute, until I remembered something in my trench coat pocket: RD, the rubber duck I’d miraculously rescued from Aggie’s former office. I reached into my pocket and seized him in my fist.\u003c/p\u003e\n\u003cp\u003e\u003ci\u003eRD? Aggie?\u003c/i\u003e I thought. \u003ci\u003eWhoever’s listening. It all sounds amazing. I know she means it. But … it’s another trap, isn’t it? Staying in this joint for any reason means betraying myself. Betraying everything.\u003c/i\u003e\u003c/p\u003e\n\n\u003cp\u003e“Listen,” I finally said, “I’m flattered you even offered, but it ain’t right for me. Don’t give up on your idea! I’ve got friends here with ideas of their own for changing things. 32-hour work weeks. The end of free overtime. A union. I’ll send ’em your way. Offer \u003ci\u003ethem\u003c/i\u003e a spot on your team.”\u003c/p\u003e\n\n\u003cp\u003eLeila sighed. “A union would be an especially tough sell to Mr. Gibbs, but that really is a case where Google Did It. We might scare him so much with that idea that everything else would seem harmless in comparison.” She faced me with a sad smile. “A shame that we’re losing you. I was starting to learn some interesting things about printers.”\u003c/p\u003e\n\u003cp\u003eI’d miss her, too. And yet, I was feeling surprisingly great about my refusal.\u003c/p\u003e\n\u003cp\u003e“Make sure you file for unemployment,” she said. “We won’t stand in your way.”\u003c/p\u003e\n\u003cp\u003eI offered my hand. “Thanks for everything, Leila. Whenever it is they kick you outta here for good, come find me.”\u003c/p\u003e\n\u003cp\u003eShe shook, sad smile persisting. “Maybe I will.”\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eI told Megan and Reynaldo about the new Change Management team. Made sure they knew the offer was on the table in case they preferred that over jumping ship. Both were quick to say no. Like me, they were too excited about our plans to stop now.\u003c/p\u003e\n\u003cp\u003eFor the next couple of weeks, there was still plenty of work to be done: transferring my open tickets to other support reps and all that. But there was barely any time for it. Coworker after coworker stopped by my cube to express their surprise and wish me well in whatever came next.\u003c/p\u003e\n\u003cp\u003e“You’ll never be problem-free,” one of them advised me. “Go looking for the problems you \u003ci\u003ewant\u003c/i\u003e to have.”\u003c/p\u003e\n\u003cp\u003eI felt happier, freer, more determined than I had in ages. It was the conviction of knowing I’d stuck to my guns to do the right thing for myself.\u003c/p\u003e\n\u003cp\u003eSanjay also jumped ship to join us. And there was one last surprise that came in the form of a phone call. The name on my work phone’s caller ID was DRACORA, P. So-called “Dracula!” Having a fairer opinion of her than most, I picked up without any sense of dread.\u003c/p\u003e\n\u003cp\u003eSo-called “Dracula!” She hadn’t been so bad at all. Surprised, I picked up in a hurry.\u003c/p\u003e\n\u003cp\u003e“I’m so sad to hear you’re leaving!” she said. “What kind of freelance work are you doing?”\u003c/p\u003e\n\u003cp\u003e“All sorts of IT projects,” I replied. “Maybe some consulting on the side.”\u003c/p\u003e\n\u003cp\u003e“I have a friend who needs help setting up a website for her business. Is that something you could help her with?”\u003c/p\u003e\n\u003cp\u003eMy eyes flew wide open in shock. “Sure!”\u003c/p\u003e\n\u003cp\u003e“I’ll put you in touch with one another.”\u003c/p\u003e\n\u003cp\u003e“That’d be swell. Thanks!”\u003c/p\u003e\n\u003cp\u003eWe exchanged contact info. She promised to keep pointing friends our way whenever she could.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eOn my last day, I sent my personal contact information to my coworkers. I reminded them of Leila’s offer and urged them to keep me posted on their different causes. Then my friends and I walked out of a building that no longer had a hold over any of us.\u003c/p\u003e\n\u003cp\u003eIt felt pretty damn swell.\u003c/p\u003e\n\u003cp\u003eOur accountant helped us incorporate RD IT Solutions. Only close friends knew it stood for “rubber duck.” The company covered medical and other relevant expenses for everyone. There was no hierarchy. Everyone had equal financial stakes and an equal say in company decisions.\u003c/p\u003e\n\u003cp\u003eAfter decades of being an expert at what I did, I was back at square one, learning the ropes. So much of what we had to learn for our business could only be learned through failure. Still, it felt rewarding to challenge my brain in new ways. The new gig let me wear lots of hats, from tech support to coding to business admin. \u003c/p\u003e\n\u003cp\u003eWith no more regular paychecks, we had to tighten down our finances to what was critically important. We worked remotely at whatever times worked best for us, with the occasional meet-up at a public place or someone’s home. We all knew that any one of us having some kind of trouble could count on the rest of the group to help out as best as they could.\u003c/p\u003e\n\u003cp\u003eMegan quit smoking again. I cut way back myself. Wasn’t trying to, I just haven’t felt the need as much. Also stopped having those nightmares. It no longer feels like I’m living just for  time off and weekends. I don’t spend my Sunday nights dreading Monday.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eDracula really did introduce us to our first client. It’s crazy what the universe puts out there when you go looking for it.\u003c/p\u003e\n\u003cp\u003eWe met up remotely for our first client meeting to discuss requirements and expectations. When the topic of deliverables came up, our client scrunched her nose and interrupted Megan mid-sentence. “I don’t trust email! I’d rather you fax me the files.”\u003c/p\u003e\n\u003cp\u003eWe were building a website for her.\u003c/p\u003e\n\u003cp\u003e“You mean, the source files?” Megan soldiered on bravely.\u003c/p\u003e\n\u003cp\u003e“Just fax me the codes,” the client said. “My nephew can re-type them into the Internet.”\u003c/p\u003e\n\u003cp\u003eShe provided a fax number, fully expecting us to print out several hundred lines of code to send over. After deploying our first stab at a website that met her requirements, we did just that, mostly out of curiosity.\u003c/p\u003e\n\u003cp\u003eA few days later, she called us in a huff, saying her website looked like random letters. Her nephew had typed the code into Facebook.\u003c/p\u003e\n\u003cbr/\u003e\n\u003cp\u003eFIN\u003c/p\u003e\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tProGet’s got you covered with security and access controls on your NuGet feeds. \u003ca href=\"https://inedo.com/proget/private-nuget-server?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=GotYouCoveredFooter\u0026amp;utm_campaign=Cyclops2020\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"The Crossroads","RssTitle":"The Crossroads","CachedCommentCount":9,"LastCommentDate":"\/Date(1786879977387)\/","LastCommentDateDescription":"11:32","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786343400000)\/","ISODate":"2026-08-10","DisplayDate":"2026-08-10","Series":{"Slug":"feature-articles","Title":"Feature Articles","Description":"","CssClass":"featured"},"FooterAdHtml":"\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tProGet’s got you covered with security and access controls on your NuGet feeds. \u003ca href=\"https://inedo.com/proget/private-nuget-server?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=GotYouCoveredFooter\u0026amp;utm_campaign=Cyclops2020\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Url":"https://thedailywtf.com/articles/the-crossroads","CommentsUrl":"https://thedailywtf.com/articles/comments/the-crossroads","Slug":"the-crossroads","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-crossroads+-+The+Crossroads+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-crossroads\u0026t=The+Crossroads+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=The%20Crossroads:%20https://thedailywtf.com/articles/the-crossroads","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-crossroads","PreviousArticleId":11239,"PreviousArticleTitle":"Time Wounds All Heels","PreviousArticleSlug":"time-wounds-all-heels","PreviousArticleUrl":"//thedailywtf.com/articles/time-wounds-all-heels","NextArticleId":11245,"NextArticleTitle":"Public Private Partnership","NextArticleSlug":"public-private-partnership","NextArticleUrl":"//thedailywtf.com/articles/public-private-partnership"},{"Id":11239,"Author":{"Name":"Lyle Seaman","FirstName":"Lyle","ShortDescription":"networking, security infra and filesystems kernel hacker turned application programmer, SRE and engineering manager, Lyle traded tilting at windmills for viking at Vikings but couldn\u0027t catch any.","DescriptionHtml":null,"Slug":"lyle-seaman","IsAdmin":true,"IsActive":true,"ImageUrl":"/images/imageslws/viking.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003eLooked to the past for some time-traveling entries to round out a themed post. They\u0026#39;re 25% fresh.\u003c/p\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eRobert\u003c/strong\u003e apparently got a notification of a planned past delivery. It \u003cem\u003ecould\u003c/em\u003e be just a case of two systems that don\u0026#39;t report different time zones, but even so, that\u0026#39;s a wtf.  Says he: \n\u0026#34;I just received an email from OnePlus this morning letting me know they have updated the planned delivery date for my order to Yesterday.  I guess the delivery driver is going to time travel to get there on time since it still hasn\u0026#39;t arrived.\n\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003c/blockquote\u003e","BodyHtml":"\u003cp\u003eLooked to the past for some time-traveling entries to round out a themed post. They\u0026#39;re 25% fresh.\u003c/p\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eRobert\u003c/strong\u003e apparently got a notification of a planned past delivery. It \u003cem\u003ecould\u003c/em\u003e be just a case of two systems that don\u0026#39;t report different time zones, but even so, that\u0026#39;s a wtf.  Says he: \n\u0026#34;I just received an email from OnePlus this morning letting me know they have updated the planned delivery date for my order to Yesterday.  I guess the delivery driver is going to time travel to get there on time since it still hasn\u0026#39;t arrived.\n\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#10c678e3b0bc4ec79761a9998cc687bb\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"10c678e3b0bc4ec79761a9998cc687bb\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/10c678e3b0bc4ec79761a9998cc687bb.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eKinkster \n\u003cstrong\u003eYpsilon Omega\u003c/strong\u003e was really turned on by a time-traveling hottie who posted a photo an hour before joining.\n\u0026#34;(Heavily redacted screenshot.) Either Fetlife (a kink community website) is\nvery welcoming to time travelers, or allows new members to\nupload their profile picture. Because time handling code surely never\nfails...\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#17a1e640495b493a9e34c463749ade73\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"17a1e640495b493a9e34c463749ade73\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/17a1e640495b493a9e34c463749ade73.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\n\u003cstrong\u003eERIC P.\u003c/strong\u003e shared a photo from 2023.\n\u0026#34;My 2008 Ford has suddenly time-warped 1024 weeks into the past. GPS date roll-over bug. No updated firmware available. No way to set the calendar manually. No way to turn off the date display.\u0026#34;\n\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#a8a33a11c9624ab5af5e7272a838237e\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"a8a33a11c9624ab5af5e7272a838237e\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/a8a33a11c9624ab5af5e7272a838237e.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\n\u003cstrong\u003eMarc Würth\u003c/strong\u003e\n\u0026#34;... just added a new RSS feed to my Netvibes\ndashboard (great tool otherwise, by the way). While it was\nstill fetching the feed, it showed these peculiar crawling stats.\nOnce fully loaded, it showed sane info, though.\u0026#34;  I\u0026#39;m curious about the specificity of 261 years.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#d2c88222c5554be2bcd6c051f19072ae\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"d2c88222c5554be2bcd6c051f19072ae\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/d2c88222c5554be2bcd6c051f19072ae.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eQuite recently, an \n\u003cstrong\u003eanonymous\u003c/strong\u003e slightly flexed \n\u0026#34;Not only did I receive two parcels prior to the\nRoman conquest of Britain, but the date calculation for the\ncombined notification has then failed and returned the Unix epoch.\u0026#34;  For those who missed\nthe flex, dig Wikipedia: \u0026#34;Wardian London is considered to be the most expensive residential\ndevelopment in East London.\u0026#34; I guess they can afford professional time travelers.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#fac2c471b782468c8c2e3a1afdb808f4\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"fac2c471b782468c8c2e3a1afdb808f4\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/fac2c471b782468c8c2e3a1afdb808f4.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n","BodyAndAdHtml":"\u003cp\u003eLooked to the past for some time-traveling entries to round out a themed post. They\u0026#39;re 25% fresh.\u003c/p\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eRobert\u003c/strong\u003e apparently got a notification of a planned past delivery. It \u003cem\u003ecould\u003c/em\u003e be just a case of two systems that don\u0026#39;t report different time zones, but even so, that\u0026#39;s a wtf.  Says he: \n\u0026#34;I just received an email from OnePlus this morning letting me know they have updated the planned delivery date for my order to Yesterday.  I guess the delivery driver is going to time travel to get there on time since it still hasn\u0026#39;t arrived.\n\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#10c678e3b0bc4ec79761a9998cc687bb\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"10c678e3b0bc4ec79761a9998cc687bb\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/10c678e3b0bc4ec79761a9998cc687bb.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eKinkster \n\u003cstrong\u003eYpsilon Omega\u003c/strong\u003e was really turned on by a time-traveling hottie who posted a photo an hour before joining.\n\u0026#34;(Heavily redacted screenshot.) Either Fetlife (a kink community website) is\nvery welcoming to time travelers, or allows new members to\nupload their profile picture. Because time handling code surely never\nfails...\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#17a1e640495b493a9e34c463749ade73\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"17a1e640495b493a9e34c463749ade73\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/17a1e640495b493a9e34c463749ade73.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\n\u003cstrong\u003eERIC P.\u003c/strong\u003e shared a photo from 2023.\n\u0026#34;My 2008 Ford has suddenly time-warped 1024 weeks into the past. GPS date roll-over bug. No updated firmware available. No way to set the calendar manually. No way to turn off the date display.\u0026#34;\n\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#a8a33a11c9624ab5af5e7272a838237e\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"a8a33a11c9624ab5af5e7272a838237e\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/a8a33a11c9624ab5af5e7272a838237e.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003e\n\u003cstrong\u003eMarc Würth\u003c/strong\u003e\n\u0026#34;... just added a new RSS feed to my Netvibes\ndashboard (great tool otherwise, by the way). While it was\nstill fetching the feed, it showed these peculiar crawling stats.\nOnce fully loaded, it showed sane info, though.\u0026#34;  I\u0026#39;m curious about the specificity of 261 years.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#d2c88222c5554be2bcd6c051f19072ae\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"d2c88222c5554be2bcd6c051f19072ae\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/d2c88222c5554be2bcd6c051f19072ae.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eQuite recently, an \n\u003cstrong\u003eanonymous\u003c/strong\u003e slightly flexed \n\u0026#34;Not only did I receive two parcels prior to the\nRoman conquest of Britain, but the date calculation for the\ncombined notification has then failed and returned the Unix epoch.\u0026#34;  For those who missed\nthe flex, dig Wikipedia: \u0026#34;Wardian London is considered to be the most expensive residential\ndevelopment in East London.\u0026#34; I guess they can afford professional time travelers.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#fac2c471b782468c8c2e3a1afdb808f4\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"fac2c471b782468c8c2e3a1afdb808f4\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/fac2c471b782468c8c2e3a1afdb808f4.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/buildmaster-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\t\u003ca href=\"https://inedo.com/BuildMaster?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eBuildMaster\u003c/a\u003e allows you to create a self-service release management platform that allows different teams to manage their applications. \u003ca href=\"https://inedo.com/BuildMaster/download?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eExplore how!\u003c/a\u003e \n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"Time Wounds All Heels","RssTitle":"Error\u0027d: Time Wounds All Heels","CachedCommentCount":15,"LastCommentDate":"\/Date(1786626484883)\/","LastCommentDateDescription":"2026-08-13","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1786084200000)\/","ISODate":"2026-08-07","DisplayDate":"2026-08-07","Series":{"Slug":"errord","Title":"Error\u0027d","Description":"Error\u0027d features fun error messages and other visual oddities from the world of IT.","CssClass":"errord"},"FooterAdHtml":"\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/buildmaster-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\t\u003ca href=\"https://inedo.com/BuildMaster?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eBuildMaster\u003c/a\u003e allows you to create a self-service release management platform that allows different teams to manage their applications. \u003ca href=\"https://inedo.com/BuildMaster/download?utm_source=tdwtf\u0026amp;utm_medium=footerad\u0026amp;utm_term=2018\u0026amp;utm_content=Self_Service\u0026amp;utm_campaign=Buildmaster_Footer\"\u003eExplore how!\u003c/a\u003e \n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Url":"https://thedailywtf.com/articles/time-wounds-all-heels","CommentsUrl":"https://thedailywtf.com/articles/comments/time-wounds-all-heels","Slug":"time-wounds-all-heels","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2ftime-wounds-all-heels+-+Time+Wounds+All+Heels+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2ftime-wounds-all-heels\u0026t=Time+Wounds+All+Heels+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Time%20Wounds%20All%20Heels:%20https://thedailywtf.com/articles/time-wounds-all-heels","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2ftime-wounds-all-heels","PreviousArticleId":11243,"PreviousArticleTitle":"A More Civilized Age","PreviousArticleSlug":"a-more-civilized-age","PreviousArticleUrl":"//thedailywtf.com/articles/a-more-civilized-age","NextArticleId":11244,"NextArticleTitle":"The Crossroads","NextArticleSlug":"the-crossroads","NextArticleUrl":"//thedailywtf.com/articles/the-crossroads"},{"Id":11243,"Author":{"Name":"Remy Porter","FirstName":"Remy","ShortDescription":"Computers were a mistake, so I accidentally became a farmer? Editor-in-Chief for TDWTF.","DescriptionHtml":"\u003cp\u003eRemy is a veteran developer who writes software for farming robots. They pick tomatoes.\u003c/p\u003e\r\n\u003cp\u003eHe\u0027s often on stage, doing improv comedy, but insists that \u003cem\u003ehe\u003c/em\u003e isn\u0027t doing comedy- it\u0027s deadly serious. You\u0027re laughing at him, not with him. That, by the way, is usually true- you\u0027re laughing at him, not with him.\u003c/p\u003e","Slug":"remy-porter","IsAdmin":true,"IsActive":true,"ImageUrl":"https://s3.amazonaws.com/remy.jetpackshark.com/remy-thumb.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u003cstrong\u003eGreta\u003c/strong\u003e (\u003ca href=\"https://thedailywtf.com/articles/using-an-ade-ancient-development-environment\"\u003epreviously\u003c/a\u003e) sends us more updates from her \u0026#34;Ancient Development Environment\u0026#34;.\u003c/p\u003e\n\u003cp\u003eAn important task an IDE must do is report build errors to its users. Arguably, that\u0026#39;s one of the most important parts. I wouldn\u0026#39;t know, I insist on building from the CLI all the time, because IDEs confuse and frighten me. I recognize I\u0026#39;m the weird one here, who is more comfortable in GDB than in a GUI debugger, but this isn\u0026#39;t about me, it\u0026#39;s about the IDE Greta is using.\u003c/p\u003e\n","BodyHtml":"\u003cp\u003e\u003cstrong\u003eGreta\u003c/strong\u003e (\u003ca href=\"https://thedailywtf.com/articles/using-an-ade-ancient-development-environment\"\u003epreviously\u003c/a\u003e) sends us more updates from her \u0026#34;Ancient Development Environment\u0026#34;.\u003c/p\u003e\n\u003cp\u003eAn important task an IDE must do is report build errors to its users. Arguably, that\u0026#39;s one of the most important parts. I wouldn\u0026#39;t know, I insist on building from the CLI all the time, because IDEs confuse and frighten me. I recognize I\u0026#39;m the weird one here, who is more comfortable in GDB than in a GUI debugger, but this isn\u0026#39;t about me, it\u0026#39;s about the IDE Greta is using.\u003c/p\u003e\n\u003cp\u003eIt needs to display an error. Why does it need to display an error? Well, Greta hasn\u0026#39;t figured that out yet. The error I\u0026#39;m about to show you doesn\u0026#39;t really explain what happened or why or give any hint as to what needs to be done to fix it. To make matters more confusing, it doesn\u0026#39;t happen consistently, so simply re-running the build could potentially fix it.\u003c/p\u003e\n\u003cp\u003eNone of that is why we\u0026#39;re here, though. What makes this a WTF is \u003cem\u003ehow the error is displayed\u003c/em\u003e:\u003c/p\u003e\n\u003cimg itemprop=\"image\" src=\"https://errord.s3.us-east-1.amazonaws.com/builder.png\" alt=\"An error box in a very Win3.1 style. It displays the error as a tree view, and the error is actually an XHTML document. But it\u0026#39;s not rendering as XHTML, it\u0026#39;s just raw HTML code, shown as a tree, like a really cruddy DOM inspector\"/\u003e\n\u003cp\u003eGreta shares her bullet points about what she hates about this:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIt\u0026#39;s a popup that happens arbitrarily during build, under unknown conditions\u003c/li\u003e\n\u003cli\u003eIt says nothing about what went wrong, or indeed if anything went wrong\u003c/li\u003e\n\u003cli\u003eIt\u0026#39;s in a non-user-legible XHTML format. It shows the markup of this XHTML rather than it being rendered.\u003c/li\u003e\n\u003cli\u003eIt arguably shows the XHTML markup in the worst way possible: in a tree view (?!) with one row per source line\u003c/li\u003e\n\u003cli\u003eThe markup isn\u0026#39;t even well-formed. I\u0026#39;ll let you count the reasons why.\u003c/li\u003e\n\u003cli\u003eThe control used is from some sort of legacy windowing toolkit that doesn\u0026#39;t support text anti-aliasing.\u003c/li\u003e\n\u003cli\u003eThe first button on the upper-left, \u0026#34;Get latest C++ Builder Direct headlines from the Internet\u0026#34;, does nothing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI\u0026#39;d honestly forgotten about the era when the Internet was still kinda novel so every application had a \u0026#34;push a button and go to our web page, and this somehow definitely won\u0026#39;t just break when we change our URL structure in the future.\u0026#34;\u003c/p\u003e\n\u003cp\u003eGreta adds:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor all of the hatred I harbour for this, the second button (\u0026#34;Information about C++ Builder Direct\u0026#34;) brings up the following powerful dose of 90s nostalgia, so I can\u0026#39;t stay mad:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cimg src=\"https://errord.s3.us-east-1.amazonaws.com/aboutbuilder.png\" alt=\"An about box, with a very 16-color gif globe, wrapped in a cable terminated with an RJ45 connector, along with some copy about how C++ Builder will reach out to the Internet and bring the latest news TO YOU. Aren\u0026#39;t you excited?\"/\u003e\n\u003c!-- Easy Reader Version: I just miss when buttons looked like buttons. It\u0027s not just nostalgia, I never had to wonder in the day \"is that a thing I can click on, or just a picture?\" Well, not until someone started doing the weird link map things you could do on images in Netscape. --\u003e\n\u003cstyle\u003e ul\n{\n    list-style: initial;\n    margin: initial;\n    padding: 0 0 0 40px;\n}\n\n li\n{\n    display: list-item;\n}\n\u003c/style\u003e","BodyAndAdHtml":"\u003cp\u003e\u003cstrong\u003eGreta\u003c/strong\u003e (\u003ca href=\"https://thedailywtf.com/articles/using-an-ade-ancient-development-environment\"\u003epreviously\u003c/a\u003e) sends us more updates from her \u0026#34;Ancient Development Environment\u0026#34;.\u003c/p\u003e\n\u003cp\u003eAn important task an IDE must do is report build errors to its users. Arguably, that\u0026#39;s one of the most important parts. I wouldn\u0026#39;t know, I insist on building from the CLI all the time, because IDEs confuse and frighten me. I recognize I\u0026#39;m the weird one here, who is more comfortable in GDB than in a GUI debugger, but this isn\u0026#39;t about me, it\u0026#39;s about the IDE Greta is using.\u003c/p\u003e\n\u003cp\u003eIt needs to display an error. Why does it need to display an error? Well, Greta hasn\u0026#39;t figured that out yet. The error I\u0026#39;m about to show you doesn\u0026#39;t really explain what happened or why or give any hint as to what needs to be done to fix it. To make matters more confusing, it doesn\u0026#39;t happen consistently, so simply re-running the build could potentially fix it.\u003c/p\u003e\n\u003cp\u003eNone of that is why we\u0026#39;re here, though. What makes this a WTF is \u003cem\u003ehow the error is displayed\u003c/em\u003e:\u003c/p\u003e\n\u003cimg itemprop=\"image\" src=\"https://errord.s3.us-east-1.amazonaws.com/builder.png\" alt=\"An error box in a very Win3.1 style. It displays the error as a tree view, and the error is actually an XHTML document. But it\u0026#39;s not rendering as XHTML, it\u0026#39;s just raw HTML code, shown as a tree, like a really cruddy DOM inspector\"/\u003e\n\u003cp\u003eGreta shares her bullet points about what she hates about this:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIt\u0026#39;s a popup that happens arbitrarily during build, under unknown conditions\u003c/li\u003e\n\u003cli\u003eIt says nothing about what went wrong, or indeed if anything went wrong\u003c/li\u003e\n\u003cli\u003eIt\u0026#39;s in a non-user-legible XHTML format. It shows the markup of this XHTML rather than it being rendered.\u003c/li\u003e\n\u003cli\u003eIt arguably shows the XHTML markup in the worst way possible: in a tree view (?!) with one row per source line\u003c/li\u003e\n\u003cli\u003eThe markup isn\u0026#39;t even well-formed. I\u0026#39;ll let you count the reasons why.\u003c/li\u003e\n\u003cli\u003eThe control used is from some sort of legacy windowing toolkit that doesn\u0026#39;t support text anti-aliasing.\u003c/li\u003e\n\u003cli\u003eThe first button on the upper-left, \u0026#34;Get latest C++ Builder Direct headlines from the Internet\u0026#34;, does nothing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI\u0026#39;d honestly forgotten about the era when the Internet was still kinda novel so every application had a \u0026#34;push a button and go to our web page, and this somehow definitely won\u0026#39;t just break when we change our URL structure in the future.\u0026#34;\u003c/p\u003e\n\u003cp\u003eGreta adds:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor all of the hatred I harbour for this, the second button (\u0026#34;Information about C++ Builder Direct\u0026#34;) brings up the following powerful dose of 90s nostalgia, so I can\u0026#39;t stay mad:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cimg src=\"https://errord.s3.us-east-1.amazonaws.com/aboutbuilder.png\" alt=\"An about box, with a very 16-color gif globe, wrapped in a cable terminated with an RJ45 connector, along with some copy about how C++ Builder will reach out to the Internet and bring the latest news TO YOU. Aren\u0026#39;t you excited?\"/\u003e\n\u003c!-- Easy Reader Version: I just miss when buttons looked like buttons. It\u0027s not just nostalgia, I never had to wonder in the day \"is that a thing I can click on, or just a picture?\" Well, not until someone started doing the weird link map things you could do on images in Netscape. --\u003e\n\u003cstyle\u003e ul\n{\n    list-style: initial;\n    margin: initial;\n    padding: 0 0 0 40px;\n}\n\n li\n{\n    display: list-item;\n}\n\u003c/style\u003e\u003cdiv\u003e\n\t[Advertisement] Picking up \u003cb\u003eNuGet\u003c/b\u003e is easy. Getting good at it takes time. \u003ca href=\"https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf\u0026amp;utm_medium=Footerad\u0026amp;utm_campaign=nuget\"\u003eDownload our guide to learn the best practice of NuGet for the Enterprise.\u003c/a\u003e\n\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Title":"A More Civilized Age","RssTitle":"A More Civilized Age","CachedCommentCount":23,"LastCommentDate":"\/Date(1786358299953)\/","LastCommentDateDescription":"2026-08-10","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1785997800000)\/","ISODate":"2026-08-06","DisplayDate":"2026-08-06","Series":{"Slug":"feature-articles","Title":"Feature Articles","Description":"","CssClass":"featured"},"FooterAdHtml":"\u003cdiv\u003e\n\t[Advertisement] Picking up \u003cb\u003eNuGet\u003c/b\u003e is easy. Getting good at it takes time. \u003ca href=\"https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf\u0026amp;utm_medium=Footerad\u0026amp;utm_campaign=nuget\"\u003eDownload our guide to learn the best practice of NuGet for the Enterprise.\u003c/a\u003e\n\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e","Url":"https://thedailywtf.com/articles/a-more-civilized-age","CommentsUrl":"https://thedailywtf.com/articles/comments/a-more-civilized-age","Slug":"a-more-civilized-age","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fa-more-civilized-age+-+A+More+Civilized+Age+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fa-more-civilized-age\u0026t=A+More+Civilized+Age+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=A%20More%20Civilized%20Age:%20https://thedailywtf.com/articles/a-more-civilized-age","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fa-more-civilized-age","PreviousArticleId":11242,"PreviousArticleTitle":"Connection State","PreviousArticleSlug":"connection-state","PreviousArticleUrl":"//thedailywtf.com/articles/connection-state","NextArticleId":11239,"NextArticleTitle":"Time Wounds All Heels","NextArticleSlug":"time-wounds-all-heels","NextArticleUrl":"//thedailywtf.com/articles/time-wounds-all-heels"},{"Id":11242,"Author":{"Name":"Remy Porter","FirstName":"Remy","ShortDescription":"Computers were a mistake, so I accidentally became a farmer? Editor-in-Chief for TDWTF.","DescriptionHtml":"\u003cp\u003eRemy is a veteran developer who writes software for farming robots. They pick tomatoes.\u003c/p\u003e\r\n\u003cp\u003eHe\u0027s often on stage, doing improv comedy, but insists that \u003cem\u003ehe\u003c/em\u003e isn\u0027t doing comedy- it\u0027s deadly serious. You\u0027re laughing at him, not with him. That, by the way, is usually true- you\u0027re laughing at him, not with him.\u003c/p\u003e","Slug":"remy-porter","IsAdmin":true,"IsActive":true,"ImageUrl":"https://s3.amazonaws.com/remy.jetpackshark.com/remy-thumb.jpg"},"Status":"Published","SummaryHtml":"\u003cp\u003e\u003cstrong\u003eFrederick A\u003c/strong\u003e sends us a bit of null checking code, and offers us a better solution.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-keyword\"\u003eclass\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eConferenceService\u003c/span\u003e\n{\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e Checks if conference is active\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-function\"\u003e\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003ebool\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eIsCalling\u003c/span\u003e()\u003c/span\u003e\n\t{\n\t\t\u003cspan class=\"hljs-keyword\"\u003etry\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e m_ConnectionService.Core.State.IsWebRTCConnected;\n\t\t}\n\t\t\u003cspan class=\"hljs-keyword\"\u003ecatch\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-literal\"\u003efalse\u003c/span\u003e;\n\t\t}\n\t}\n}\n\u003c/code\u003e\u003c/pre\u003e\n","BodyHtml":"\u003cp\u003e\u003cstrong\u003eFrederick A\u003c/strong\u003e sends us a bit of null checking code, and offers us a better solution.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-keyword\"\u003eclass\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eConferenceService\u003c/span\u003e\n{\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e Checks if conference is active\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-function\"\u003e\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003ebool\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eIsCalling\u003c/span\u003e()\u003c/span\u003e\n\t{\n\t\t\u003cspan class=\"hljs-keyword\"\u003etry\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e m_ConnectionService.Core.State.IsWebRTCConnected;\n\t\t}\n\t\t\u003cspan class=\"hljs-keyword\"\u003ecatch\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-literal\"\u003efalse\u003c/span\u003e;\n\t\t}\n\t}\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis is for a web conferencing tool, which uses WebRTC to set up connections between clients in the chat. This function checks if the chat is active by checking a \u003ccode\u003eIsWebRTCConnected\u003c/code\u003e flag. But as you can see in this code, that flag is on a long chain of objects, some of which may not exist when this function is called. Thus, we wrap the whole thing up in a \u003ccode\u003etry/catch\u003c/code\u003e. If anything throws an exception, we know we can just return false. It\u0026#39;s probably fine.\u003c/p\u003e\n\u003cp\u003eThe obvious and easy fix, which Frederick proposes, is to use the C# coalescing operator: \u003ccode\u003e?\u003c/code\u003e. \u003ccode\u003em_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false\u003c/code\u003e would solve this problem just fine.\u003c/p\u003e\n\u003cp\u003eThat said, I wouldn\u0026#39;t say that\u0026#39;s a true fix. We\u0026#39;re talking about a state machine here, though admittedly with two states under discussion (connected/disconnected), though there are probably more not being checked here. This information should be managed via a state machine, not via boolean flags stuffed deep in an object chain. The fix isn\u0026#39;t a WTF, but it definitely hints at a better way to manage all of this. Now, my solution likely requires a lot more modification and code changes than what we have here, so I\u0026#39;m not suggesting anyone go off and rewrite this from scratch just to have a cleaner way of managing state. But folks definitely \u003cem\u003eshould\u003c/em\u003e think more carefully about how they manage state.\u003c/p\u003e\n\u003c!-- I\u0027m working in robotics and sometimes it feels like half my peers have never heard of a state machine, and it boggles me. USE STATE MACHINES. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e","BodyAndAdHtml":"\u003cp\u003e\u003cstrong\u003eFrederick A\u003c/strong\u003e sends us a bit of null checking code, and offers us a better solution.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e\u003cspan class=\"hljs-keyword\"\u003eclass\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eConferenceService\u003c/span\u003e\n{\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e Checks if conference is active\u003c/span\u003e\n\t\u003cspan class=\"hljs-comment\"\u003e\u003cspan class=\"hljs-doctag\"\u003e///\u003c/span\u003e \u003cspan class=\"hljs-doctag\"\u003e\u0026lt;/summary\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\t\u003cspan class=\"hljs-function\"\u003e\u003cspan class=\"hljs-keyword\"\u003epublic\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003ebool\u003c/span\u003e \u003cspan class=\"hljs-title\"\u003eIsCalling\u003c/span\u003e()\u003c/span\u003e\n\t{\n\t\t\u003cspan class=\"hljs-keyword\"\u003etry\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e m_ConnectionService.Core.State.IsWebRTCConnected;\n\t\t}\n\t\t\u003cspan class=\"hljs-keyword\"\u003ecatch\u003c/span\u003e\n\t\t{\n\t\t\t\u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-literal\"\u003efalse\u003c/span\u003e;\n\t\t}\n\t}\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis is for a web conferencing tool, which uses WebRTC to set up connections between clients in the chat. This function checks if the chat is active by checking a \u003ccode\u003eIsWebRTCConnected\u003c/code\u003e flag. But as you can see in this code, that flag is on a long chain of objects, some of which may not exist when this function is called. Thus, we wrap the whole thing up in a \u003ccode\u003etry/catch\u003c/code\u003e. If anything throws an exception, we know we can just return false. It\u0026#39;s probably fine.\u003c/p\u003e\n\u003cp\u003eThe obvious and easy fix, which Frederick proposes, is to use the C# coalescing operator: \u003ccode\u003e?\u003c/code\u003e. \u003ccode\u003em_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false\u003c/code\u003e would solve this problem just fine.\u003c/p\u003e\n\u003cp\u003eThat said, I wouldn\u0026#39;t say that\u0026#39;s a true fix. We\u0026#39;re talking about a state machine here, though admittedly with two states under discussion (connected/disconnected), though there are probably more not being checked here. This information should be managed via a state machine, not via boolean flags stuffed deep in an object chain. The fix isn\u0026#39;t a WTF, but it definitely hints at a better way to manage all of this. Now, my solution likely requires a lot more modification and code changes than what we have here, so I\u0026#39;m not suggesting anyone go off and rewrite this from scratch just to have a cleaner way of managing state. But folks definitely \u003cem\u003eshould\u003c/em\u003e think more carefully about how they manage state.\u003c/p\u003e\n\u003c!-- I\u0027m working in robotics and sometimes it feels like half my peers have never heard of a state machine, and it boggles me. USE STATE MACHINES. --\u003e\n\u003cstyle\u003e.comment { border: none; }\u003c/style\u003e\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tKeep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.\u003ca href=\"https://inedo.com/proget?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"Connection State","RssTitle":"CodeSOD: Connection State","CachedCommentCount":11,"LastCommentDate":"\/Date(1786443196693)\/","LastCommentDateDescription":"2026-08-11","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1785911400000)\/","ISODate":"2026-08-05","DisplayDate":"2026-08-05","Series":{"Slug":"code-sod","Title":"CodeSOD","Description":"Code Snippet Of the Day (CodeSOD) features interesting and usually incorrect code snippets taken from actual production code in a commercial and/or open source software projects.","CssClass":"code"},"FooterAdHtml":"\u003cdiv\u003e\n\t\u003cimg src=\"https://thedailywtf.com/images/inedo/proget-icon.png\" style=\"display:block; float: left; margin: 0 10px 10px 0;\"/\u003e [Advertisement] \n\tKeep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.\u003ca href=\"https://inedo.com/proget?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Url":"https://thedailywtf.com/articles/connection-state","CommentsUrl":"https://thedailywtf.com/articles/comments/connection-state","Slug":"connection-state","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fconnection-state+-+Connection+State+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fconnection-state\u0026t=Connection+State+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Connection%20State:%20https://thedailywtf.com/articles/connection-state","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fconnection-state","PreviousArticleId":11241,"PreviousArticleTitle":"Always Take the Option","PreviousArticleSlug":"always-take-the-option","PreviousArticleUrl":"//thedailywtf.com/articles/always-take-the-option","NextArticleId":11243,"NextArticleTitle":"A More Civilized Age","NextArticleSlug":"a-more-civilized-age","NextArticleUrl":"//thedailywtf.com/articles/a-more-civilized-age"}]