[{"Id":11235,"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":"\u003cp\u003eOne minute, you’re fine. The next, you’re doubled over with tears spilling down your face while an aching black hole in your heart threatens to drag you into oblivion.\u003c/p\u003e\n\u003cp\u003eGrief’s funny like that.\u003c/p\u003e\n","BodyHtml":"\u003cp\u003eOne minute, you’re fine. The next, you’re doubled over with tears spilling down your face while an aching black hole in your heart threatens to drag you into oblivion.\u003c/p\u003e\n\u003cp\u003eGrief’s funny like that.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://thedailywtf.com/articles/the-easy-no\"\u003eAggie Shaw, my old friend and mentor, had died of a sudden illness at home.\u003c/a\u003e She’d lived alone. Who found her? How? I didn’t know and never would. There was so much I’d never gotten a chance to tell her. She would’ve listened to me vent the frustrations and resentments I’d been burying over the years for sanity’s sake. She would’ve known what to do.\u003c/p\u003e\n\u003cp\u003eGod, I missed her.\u003c/p\u003e\n\u003cp\u003eAs if that weren’t bad enough, the brass expected Tech Support to go right back to business as usual. Maybe the rest of them wanted to bury their heads in casework. I didn’t. Between this, the horrible winter commute, and the promotion I’d never asked for, going back to the office felt impossible.\u003c/p\u003e\n\u003cp\u003eMy boss wouldn’t let me use sick time. He really should’ve; the grief had hit me like a goddamn truck. Good thing the start of the new year a while back had refreshed my stack of paid time off. I started burning it from both ends.\u003c/p\u003e\n\u003cp\u003eWhen I wasn’t flat on my back or nursing a migraine, I was stumbling around my tiny apartment with half a brain cell, attending to the bare minimum of survival. \u003ci\u003eEat this. Drink that. Where’d I leave my smokes?\u003c/i\u003e In the rare times I could think, my thoughts were plagued with darkness. I didn’t know if I’d ever make it out of that mess.\u003c/p\u003e\n\u003cp\u003eThen, Megan called.\u003c/p\u003e\n\u003cp\u003eIt was nearing noon that day. I was lying in bed, peering out my window at a dull gray sky and falling snow. I’d let everything else dump to voicemail, but when she rang, I answered with the urgency of a drowning victim grabbing a buoy.\u003c/p\u003e\n\u003cp\u003e“Hey,” she greeted, her voice subdued. “I heard about what happened. I’m really sorry.”\u003c/p\u003e\n\u003cp\u003eThere was so much tumbling through my head, but none of it wanted to tumble out. “Thanks,” I managed.\u003c/p\u003e\n\u003cp\u003e“How are you?”\u003c/p\u003e\n\u003cp\u003e“Lousy.”\u003c/p\u003e\n\u003cp\u003e“Wanna meet up somewhere that isn’t work?” she asked. “The Apex Tower has a big indoor courtyard. I eat lunch there sometimes. If we go around 10 in the morning, we’d probably have it to ourselves.”\u003c/p\u003e\n\u003cp\u003eSomething in me leapt at the offer. “I’d like that. Tomorrow?” I would still be on vacation-in-name-only.\u003c/p\u003e\n\u003cp\u003e“Sure,” Megan replied. “See you then!”\u003c/p\u003e\n\u003cp\u003eI had something to look forward to. Part of my emotional burden lifted right then and there.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eIt was a little easier to get out of bed the next morning. I took the bus to an unfamiliar spot of downtown, crossed a slush-covered plaza, and entered a skyscraper. The warm ground-floor courtyard boasted marble floors and immense windows for walls. Potted trees and flowers lined the perimeter. Huh, I’d forgotten those even existed.\u003c/p\u003e\n\u003cp\u003eMegan was already seated at a metal table flanked by two chairs. When she spotted me, she jumped to her feet and waved, a knowing and sympathetic look on her face. She waited until I reached the chair across from her to say, “You look like you could use a hug.”\u003c/p\u003e\n\u003cp\u003eI froze with surprise, one hand on my hat in the process of removing it. A hug? My puzzled brain tried to figure out just when I’d been hugged last. I had no idea. My body wasn’t waiting around for an answer. It was already turning toward her, arms raised.\u003c/p\u003e\n\u003cp\u003eMegan silently walked into my embrace and hugged back firmly.\u003c/p\u003e\n\u003cp\u003eTears spilled down my face. My heart ached. And yet, another part of my invisible burden suddenly lifted. Something in me had been dying for this, for my pain to be seen.\u003c/p\u003e\n\u003cp\u003e“Thanks,” I muttered.\u003c/p\u003e\n\u003cp\u003eWe parted. While I doffed my coat and hat, Megan returned to her chair, sitting back down across from me. “Whatever you need to get off your chest, go for it,” she offered.\u003c/p\u003e\n\u003cp\u003eI sat myself down, sniffled, blotted my eyes on my sleeve, then glanced high and low to confirm something I already knew: we were alone in that big empty joint. Still, I hesitated. At first, I wasn’t even sure I remembered how to string words together to form a sentence. But then it started gushing out of me like a busted water main. “You ever hear of rubber-duck debugging?”\u003c/p\u003e\n\u003cp\u003eMegan blinked. “No.”\u003c/p\u003e\n\u003cp\u003eSurprising. Most developers had, but she was fresh out of college. “A programmer came up with it way-back-when,” I explained. “Whenever you’re coding something and get real stuck on a bug or error, you find yourself a rubber duck. Go line by line in your code and explain to the duck, out loud, what you want the code to do. Eventually, you and the duck will find the point where your intentions and reality don’t match up.”\u003c/p\u003e\n\u003cp\u003eShe smiled. “I like that.”\u003c/p\u003e\n\u003cp\u003e“Aggie had a rubber duck in her cube she called RD,” I continued. “Whenever she was stuck with a support issue or even a personal problem, didn’t know where to go next, she’d tell RD about it. He’d help her figure out what to do or ask next.\u003c/p\u003e\n\u003cp\u003e“When I first got hired, Aggie showed me the ropes. She always said, the best way to troubleshoot is to be the duck yourself. Get people, or hardware, or software to explain what they’re trying to do. You’ll figure out how to proceed.\u003c/p\u003e\n\u003cp\u003e“Some people are so upset at the problem that they take it out on the nearest target: the support rep who comes to help. Aggie could charm even the angriest people into cooperating with her. She was the best. She was the best, and all she got for her trouble was more work. Now that she’s no longer of any use to them, they’ve swept her under the rug. They want \u003ci\u003eme\u003c/i\u003e to replace her!”\u003c/p\u003e\n\u003cp\u003eMegan’s eyes went wide.\u003c/p\u003e\n\u003cp\u003e“I’m no damn manager! I told my boss where to stick it. I’m riding out my PTO, and then hell if I know what’s next. I can’t go back there, I’d just be dying in place. And for what? So the bum at the top of the food chain can have a third yacht?” I leaned toward Megan, my gaze pleading with hers. “Look, I ain’t afraid of death. I’m afraid of dying before I’ve lived. I don’t want my only contribution to the world to be reimaging laptops and rescuing old printers. I can’t do it anymore. Can’t sit around complaining, either, I gotta \u003ci\u003edo\u003c/i\u003e something! I gotta get the hell outta that joint!”\u003c/p\u003e\n\u003cp\u003eThere it was: out in the open again, no longer whispered but shouted from the core of my being. Leaving was the right call for me. I felt it in my bones.\u003c/p\u003e\n\u003cp\u003eMegan held eye contact, blinking a few times. “I remember you saying you wanted to leave. If you did, what would you do?”\u003c/p\u003e\n\u003cp\u003eI’d never really let myself play with my little pipe dream. “I dunno exactly. But I’ve bought myself time to think it over. There are options, like going freelance.”\u003c/p\u003e\n\u003cp\u003eShe blinked again. “Freelance tech support?”\u003c/p\u003e\n\u003cp\u003e“I majored in Computer Science back in school,” I said.\u003c/p\u003e\n\u003cp\u003eHer eyes went wide again. “Really?”\u003c/p\u003e\n\u003cp\u003e“Haven’t flexed those muscles in a while, but I could. Or I could get into something totally different. And you could come with.” Well aware of how unhappy she was at that joint, I sat up straighter in my chair. “We could start our own IT group. No bosses. Everyone an equal partner with an equal say in how things are run. And we could rope in anyone else who wants to come with!”\u003c/p\u003e\n\u003cp\u003eMegan seemed intrigued at first, but then sobered. “What about bills? Rent? \u003ci\u003eEverything?”\u003c/i\u003e\u003c/p\u003e\n\u003cp\u003e“We could pool our resources and look out for each other,” I said. “That’d give us some time to get our feet under us.”\u003c/p\u003e\n\u003cp\u003eHer expression turned strained. “Aren’t you scared?”\u003c/p\u003e\n\u003cp\u003e“You bet I’m scared!” I glanced down at the table. “When I first got outta school, the idea of spending the whole rest of my life at a full-time job \u003ci\u003eterrified\u003c/i\u003e me. But it seemed like everyone around me was fine with it. I thought \u003ci\u003eI\u003c/i\u003e was the problem. Bit my lip, put my head down … for 20 years.” I glanced back up at her pleadingly. “Has it gotten any better? No. I’ve just gotten used to it. Another 20 years, and I won’t be any good for anything else. That’s \u003ci\u003eif\u003c/i\u003e I make it that long! Aggie didn’t. Look, there’s no right or wrong answer, just what’s right \u003ci\u003efor you.\u003c/i\u003e Listen to your gut. If you don’t like where you’re at, I’m living proof that staying the course is the wrong move. Leaving \u003ci\u003eis\u003c/i\u003e risky … but so’s staying put, you know. The next round of layoffs could be right around the corner. You might get stuck babysitting that scheduling algorithm you were telling me about.”\u003c/p\u003e\n\u003cp\u003eMegan listened intently to my rant. Finally, she nodded. “You’re right. I’m not happy where I am, and it won’t get any better. Time to try something different.”\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eStill mired in grief, I had at least gained a new sense of purpose to keep me afloat in the storm. Megan went back to work like nothing had happened. With my remaining time off from work, I did some research into our options. Hunting around online turned up a highly-rated accountant who walked me through the bare-minimum corporate setup, the taxes and bookkeeping and all that. We both tracked down advice online from other freelancers who’d been where we were now. And we put out feelers among our coworkers. Our questions struck some nerves, but also stirred considerable interest. Reynaldo was in; we had ourselves a network guy. Sanjay, a backend developer, was a maybe who wanted more time to think it over.\u003c/p\u003e\n\u003cp\u003eThere were plenty who wanted to join us badly, but couldn’t swing it due to debt, insurance, things like that. I urged them to think about one thing they could improve at work, one cause they could get behind. Whatever it was, I told them to start making it happen, one step at a time.\u003c/p\u003e\n\u003cp\u003eAs my PTO bled away, I found myself half-exhilarated, half-scared outta my wits.\u003c/p\u003e\n\u003cp\u003eFinally, it was time to go back. That first morning seemed like any other, but with my secret purpose in mind, I sat on the bus and walked the bone-chilling streets with a secret strength hardening my spine. When the old joint appeared ahead of me, more foe than friend, I felt relief knowing our remaining time together was short.\u003c/p\u003e\n\u003cp\u003eTech Support seemed no different; everyone was quietly minding their own business. I’d had plenty of time to think about what I’d do on the first day. My plan involved skipping my cube and heading straight to Aggie’s old office. After my talk with Megan, I’d decided to go looking for something. I had a snowball’s chance in hell of finding it, but something in me insisted on trying.\u003c/p\u003e\n\u003cp\u003eAs I walked up to the closed front door, the first thing I noticed was \u003ci\u003emy\u003c/i\u003e name, not hers, standing out in fresh, gleaming gold letters against the frosted glass. Pushing past revulsion, I grasped the doorknob and turned it.\u003c/p\u003e\n\u003cp\u003eThe door gave way to darkness. I flipped the light switch with my other hand and found an empty desk, gutted shelves, bare walls. Looked like someone had come through with a giant trash can and thrown out whatever wasn’t bolted down. My revulsion intensified, but hey, at least I wasn’t trespassing. I shut the door to “my” office behind me and slowly approached the desk.\u003c/p\u003e\n\u003cp\u003eThere was nothing to be found out in the open, not even a stray paperclip. I sat down hard in her old chair, reeling for a minute. Then I searched the desk drawers in front of me: first the bank on the left, then the right. Empty. I pulled out the drawer just under the desk—and there he was, swimming between a few stray pencils: a rubber duck about 3 inches tall. RD in the flesh.\u003c/p\u003e\n\u003cp\u003eIt was as if Aggie had put him there for me to find. I couldn’t believe it. My spirits soared in a way they hadn’t for ages.\u003c/p\u003e\n\u003cp\u003eJust as I slipped the duck into my trench coat pocket, the door to her—\u003ci\u003emy\u003c/i\u003e—office swung open again, making me freeze. There stood Bill, my boss.\u003c/p\u003e\n\u003cp\u003e“I saw the lights on in here.” A smug smile spread over his face. “I knew you’d be back. Bet it feels great, knowing you’re done babysitting all those morons and their computer equipment!”\u003c/p\u003e\n\u003cp\u003eWas that it? Twenty-odd years of my life boiled down into one cynical statement? No, there was more to it than that. For every bizarre war story, there were tales of grateful people helped, challenging problems solved. It hadn\u0026#39;t been all bad. But it was over, just not the way Bill thought.\u003c/p\u003e\n\u003cp\u003eAn electric mix of nerves and resolve jolted me to my feet. “I told you to find someone else, and I meant it. This is my two-week notice.”\u003c/p\u003e\n\u003cp\u003eI left Bill agape in that threshold and hurried back to my old cube, where my company-assigned laptop, docking station, and phone still resided. I hung up my coat, sank into my old chair, and booted up the machine. I had such a mountain of email in my inbox that I didn’t even want to look at it, but there was one message at the top that I absolutely couldn’t pry my eyes away from:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ci\u003e\u003cp\u003eI moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.\u003c/p\u003e\n\u003cp\u003e-Leila\u003c/p\u003e\u003c/i\u003e\n\u003c/blockquote\u003e\n\u003cbr/\u003e\n\u003cp\u003e\u003cb\u003eTo be continued ...\u003c/b\u003e\u003c/p\u003e","BodyAndAdHtml":"\u003cp\u003eOne minute, you’re fine. The next, you’re doubled over with tears spilling down your face while an aching black hole in your heart threatens to drag you into oblivion.\u003c/p\u003e\n\u003cp\u003eGrief’s funny like that.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://thedailywtf.com/articles/the-easy-no\"\u003eAggie Shaw, my old friend and mentor, had died of a sudden illness at home.\u003c/a\u003e She’d lived alone. Who found her? How? I didn’t know and never would. There was so much I’d never gotten a chance to tell her. She would’ve listened to me vent the frustrations and resentments I’d been burying over the years for sanity’s sake. She would’ve known what to do.\u003c/p\u003e\n\u003cp\u003eGod, I missed her.\u003c/p\u003e\n\u003cp\u003eAs if that weren’t bad enough, the brass expected Tech Support to go right back to business as usual. Maybe the rest of them wanted to bury their heads in casework. I didn’t. Between this, the horrible winter commute, and the promotion I’d never asked for, going back to the office felt impossible.\u003c/p\u003e\n\u003cp\u003eMy boss wouldn’t let me use sick time. He really should’ve; the grief had hit me like a goddamn truck. Good thing the start of the new year a while back had refreshed my stack of paid time off. I started burning it from both ends.\u003c/p\u003e\n\u003cp\u003eWhen I wasn’t flat on my back or nursing a migraine, I was stumbling around my tiny apartment with half a brain cell, attending to the bare minimum of survival. \u003ci\u003eEat this. Drink that. Where’d I leave my smokes?\u003c/i\u003e In the rare times I could think, my thoughts were plagued with darkness. I didn’t know if I’d ever make it out of that mess.\u003c/p\u003e\n\u003cp\u003eThen, Megan called.\u003c/p\u003e\n\u003cp\u003eIt was nearing noon that day. I was lying in bed, peering out my window at a dull gray sky and falling snow. I’d let everything else dump to voicemail, but when she rang, I answered with the urgency of a drowning victim grabbing a buoy.\u003c/p\u003e\n\u003cp\u003e“Hey,” she greeted, her voice subdued. “I heard about what happened. I’m really sorry.”\u003c/p\u003e\n\u003cp\u003eThere was so much tumbling through my head, but none of it wanted to tumble out. “Thanks,” I managed.\u003c/p\u003e\n\u003cp\u003e“How are you?”\u003c/p\u003e\n\u003cp\u003e“Lousy.”\u003c/p\u003e\n\u003cp\u003e“Wanna meet up somewhere that isn’t work?” she asked. “The Apex Tower has a big indoor courtyard. I eat lunch there sometimes. If we go around 10 in the morning, we’d probably have it to ourselves.”\u003c/p\u003e\n\u003cp\u003eSomething in me leapt at the offer. “I’d like that. Tomorrow?” I would still be on vacation-in-name-only.\u003c/p\u003e\n\u003cp\u003e“Sure,” Megan replied. “See you then!”\u003c/p\u003e\n\u003cp\u003eI had something to look forward to. Part of my emotional burden lifted right then and there.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eIt was a little easier to get out of bed the next morning. I took the bus to an unfamiliar spot of downtown, crossed a slush-covered plaza, and entered a skyscraper. The warm ground-floor courtyard boasted marble floors and immense windows for walls. Potted trees and flowers lined the perimeter. Huh, I’d forgotten those even existed.\u003c/p\u003e\n\u003cp\u003eMegan was already seated at a metal table flanked by two chairs. When she spotted me, she jumped to her feet and waved, a knowing and sympathetic look on her face. She waited until I reached the chair across from her to say, “You look like you could use a hug.”\u003c/p\u003e\n\u003cp\u003eI froze with surprise, one hand on my hat in the process of removing it. A hug? My puzzled brain tried to figure out just when I’d been hugged last. I had no idea. My body wasn’t waiting around for an answer. It was already turning toward her, arms raised.\u003c/p\u003e\n\u003cp\u003eMegan silently walked into my embrace and hugged back firmly.\u003c/p\u003e\n\u003cp\u003eTears spilled down my face. My heart ached. And yet, another part of my invisible burden suddenly lifted. Something in me had been dying for this, for my pain to be seen.\u003c/p\u003e\n\u003cp\u003e“Thanks,” I muttered.\u003c/p\u003e\n\u003cp\u003eWe parted. While I doffed my coat and hat, Megan returned to her chair, sitting back down across from me. “Whatever you need to get off your chest, go for it,” she offered.\u003c/p\u003e\n\u003cp\u003eI sat myself down, sniffled, blotted my eyes on my sleeve, then glanced high and low to confirm something I already knew: we were alone in that big empty joint. Still, I hesitated. At first, I wasn’t even sure I remembered how to string words together to form a sentence. But then it started gushing out of me like a busted water main. “You ever hear of rubber-duck debugging?”\u003c/p\u003e\n\u003cp\u003eMegan blinked. “No.”\u003c/p\u003e\n\u003cp\u003eSurprising. Most developers had, but she was fresh out of college. “A programmer came up with it way-back-when,” I explained. “Whenever you’re coding something and get real stuck on a bug or error, you find yourself a rubber duck. Go line by line in your code and explain to the duck, out loud, what you want the code to do. Eventually, you and the duck will find the point where your intentions and reality don’t match up.”\u003c/p\u003e\n\u003cp\u003eShe smiled. “I like that.”\u003c/p\u003e\n\u003cp\u003e“Aggie had a rubber duck in her cube she called RD,” I continued. “Whenever she was stuck with a support issue or even a personal problem, didn’t know where to go next, she’d tell RD about it. He’d help her figure out what to do or ask next.\u003c/p\u003e\n\u003cp\u003e“When I first got hired, Aggie showed me the ropes. She always said, the best way to troubleshoot is to be the duck yourself. Get people, or hardware, or software to explain what they’re trying to do. You’ll figure out how to proceed.\u003c/p\u003e\n\u003cp\u003e“Some people are so upset at the problem that they take it out on the nearest target: the support rep who comes to help. Aggie could charm even the angriest people into cooperating with her. She was the best. She was the best, and all she got for her trouble was more work. Now that she’s no longer of any use to them, they’ve swept her under the rug. They want \u003ci\u003eme\u003c/i\u003e to replace her!”\u003c/p\u003e\n\u003cp\u003eMegan’s eyes went wide.\u003c/p\u003e\n\u003cp\u003e“I’m no damn manager! I told my boss where to stick it. I’m riding out my PTO, and then hell if I know what’s next. I can’t go back there, I’d just be dying in place. And for what? So the bum at the top of the food chain can have a third yacht?” I leaned toward Megan, my gaze pleading with hers. “Look, I ain’t afraid of death. I’m afraid of dying before I’ve lived. I don’t want my only contribution to the world to be reimaging laptops and rescuing old printers. I can’t do it anymore. Can’t sit around complaining, either, I gotta \u003ci\u003edo\u003c/i\u003e something! I gotta get the hell outta that joint!”\u003c/p\u003e\n\u003cp\u003eThere it was: out in the open again, no longer whispered but shouted from the core of my being. Leaving was the right call for me. I felt it in my bones.\u003c/p\u003e\n\u003cp\u003eMegan held eye contact, blinking a few times. “I remember you saying you wanted to leave. If you did, what would you do?”\u003c/p\u003e\n\u003cp\u003eI’d never really let myself play with my little pipe dream. “I dunno exactly. But I’ve bought myself time to think it over. There are options, like going freelance.”\u003c/p\u003e\n\u003cp\u003eShe blinked again. “Freelance tech support?”\u003c/p\u003e\n\u003cp\u003e“I majored in Computer Science back in school,” I said.\u003c/p\u003e\n\u003cp\u003eHer eyes went wide again. “Really?”\u003c/p\u003e\n\u003cp\u003e“Haven’t flexed those muscles in a while, but I could. Or I could get into something totally different. And you could come with.” Well aware of how unhappy she was at that joint, I sat up straighter in my chair. “We could start our own IT group. No bosses. Everyone an equal partner with an equal say in how things are run. And we could rope in anyone else who wants to come with!”\u003c/p\u003e\n\u003cp\u003eMegan seemed intrigued at first, but then sobered. “What about bills? Rent? \u003ci\u003eEverything?”\u003c/i\u003e\u003c/p\u003e\n\u003cp\u003e“We could pool our resources and look out for each other,” I said. “That’d give us some time to get our feet under us.”\u003c/p\u003e\n\u003cp\u003eHer expression turned strained. “Aren’t you scared?”\u003c/p\u003e\n\u003cp\u003e“You bet I’m scared!” I glanced down at the table. “When I first got outta school, the idea of spending the whole rest of my life at a full-time job \u003ci\u003eterrified\u003c/i\u003e me. But it seemed like everyone around me was fine with it. I thought \u003ci\u003eI\u003c/i\u003e was the problem. Bit my lip, put my head down … for 20 years.” I glanced back up at her pleadingly. “Has it gotten any better? No. I’ve just gotten used to it. Another 20 years, and I won’t be any good for anything else. That’s \u003ci\u003eif\u003c/i\u003e I make it that long! Aggie didn’t. Look, there’s no right or wrong answer, just what’s right \u003ci\u003efor you.\u003c/i\u003e Listen to your gut. If you don’t like where you’re at, I’m living proof that staying the course is the wrong move. Leaving \u003ci\u003eis\u003c/i\u003e risky … but so’s staying put, you know. The next round of layoffs could be right around the corner. You might get stuck babysitting that scheduling algorithm you were telling me about.”\u003c/p\u003e\n\u003cp\u003eMegan listened intently to my rant. Finally, she nodded. “You’re right. I’m not happy where I am, and it won’t get any better. Time to try something different.”\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eStill mired in grief, I had at least gained a new sense of purpose to keep me afloat in the storm. Megan went back to work like nothing had happened. With my remaining time off from work, I did some research into our options. Hunting around online turned up a highly-rated accountant who walked me through the bare-minimum corporate setup, the taxes and bookkeeping and all that. We both tracked down advice online from other freelancers who’d been where we were now. And we put out feelers among our coworkers. Our questions struck some nerves, but also stirred considerable interest. Reynaldo was in; we had ourselves a network guy. Sanjay, a backend developer, was a maybe who wanted more time to think it over.\u003c/p\u003e\n\u003cp\u003eThere were plenty who wanted to join us badly, but couldn’t swing it due to debt, insurance, things like that. I urged them to think about one thing they could improve at work, one cause they could get behind. Whatever it was, I told them to start making it happen, one step at a time.\u003c/p\u003e\n\u003cp\u003eAs my PTO bled away, I found myself half-exhilarated, half-scared outta my wits.\u003c/p\u003e\n\u003cp\u003eFinally, it was time to go back. That first morning seemed like any other, but with my secret purpose in mind, I sat on the bus and walked the bone-chilling streets with a secret strength hardening my spine. When the old joint appeared ahead of me, more foe than friend, I felt relief knowing our remaining time together was short.\u003c/p\u003e\n\u003cp\u003eTech Support seemed no different; everyone was quietly minding their own business. I’d had plenty of time to think about what I’d do on the first day. My plan involved skipping my cube and heading straight to Aggie’s old office. After my talk with Megan, I’d decided to go looking for something. I had a snowball’s chance in hell of finding it, but something in me insisted on trying.\u003c/p\u003e\n\u003cp\u003eAs I walked up to the closed front door, the first thing I noticed was \u003ci\u003emy\u003c/i\u003e name, not hers, standing out in fresh, gleaming gold letters against the frosted glass. Pushing past revulsion, I grasped the doorknob and turned it.\u003c/p\u003e\n\u003cp\u003eThe door gave way to darkness. I flipped the light switch with my other hand and found an empty desk, gutted shelves, bare walls. Looked like someone had come through with a giant trash can and thrown out whatever wasn’t bolted down. My revulsion intensified, but hey, at least I wasn’t trespassing. I shut the door to “my” office behind me and slowly approached the desk.\u003c/p\u003e\n\u003cp\u003eThere was nothing to be found out in the open, not even a stray paperclip. I sat down hard in her old chair, reeling for a minute. Then I searched the desk drawers in front of me: first the bank on the left, then the right. Empty. I pulled out the drawer just under the desk—and there he was, swimming between a few stray pencils: a rubber duck about 3 inches tall. RD in the flesh.\u003c/p\u003e\n\u003cp\u003eIt was as if Aggie had put him there for me to find. I couldn’t believe it. My spirits soared in a way they hadn’t for ages.\u003c/p\u003e\n\u003cp\u003eJust as I slipped the duck into my trench coat pocket, the door to her—\u003ci\u003emy\u003c/i\u003e—office swung open again, making me freeze. There stood Bill, my boss.\u003c/p\u003e\n\u003cp\u003e“I saw the lights on in here.” A smug smile spread over his face. “I knew you’d be back. Bet it feels great, knowing you’re done babysitting all those morons and their computer equipment!”\u003c/p\u003e\n\u003cp\u003eWas that it? Twenty-odd years of my life boiled down into one cynical statement? No, there was more to it than that. For every bizarre war story, there were tales of grateful people helped, challenging problems solved. It hadn\u0026#39;t been all bad. But it was over, just not the way Bill thought.\u003c/p\u003e\n\u003cp\u003eAn electric mix of nerves and resolve jolted me to my feet. “I told you to find someone else, and I meant it. This is my two-week notice.”\u003c/p\u003e\n\u003cp\u003eI left Bill agape in that threshold and hurried back to my old cube, where my company-assigned laptop, docking station, and phone still resided. I hung up my coat, sank into my old chair, and booted up the machine. I had such a mountain of email in my inbox that I didn’t even want to look at it, but there was one message at the top that I absolutely couldn’t pry my eyes away from:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ci\u003e\u003cp\u003eI moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.\u003c/p\u003e\n\u003cp\u003e-Leila\u003c/p\u003e\u003c/i\u003e\n\u003c/blockquote\u003e\n\u003cbr/\u003e\n\u003cp\u003e\u003cb\u003eTo be continued ...\u003c/b\u003e\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 Hard Goodbye","RssTitle":"The Hard Goodbye","CachedCommentCount":0,"LastCommentDate":null,"LastCommentDateDescription":"-none-","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1785133800000)\/","ISODate":"2026-07-27","DisplayDate":"2026-07-27","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-hard-goodbye","CommentsUrl":"https://thedailywtf.com/articles/comments/the-hard-goodbye","Slug":"the-hard-goodbye","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-hard-goodbye+-+The+Hard+Goodbye+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-hard-goodbye\u0026t=The+Hard+Goodbye+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=The%20Hard%20Goodbye:%20https://thedailywtf.com/articles/the-hard-goodbye","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-hard-goodbye","PreviousArticleId":11233,"PreviousArticleTitle":"The Song that Never Ends?","PreviousArticleSlug":"the-song-that-never-ends","PreviousArticleUrl":"//thedailywtf.com/articles/the-song-that-never-ends","NextArticleId":null,"NextArticleTitle":null,"NextArticleSlug":null,"NextArticleUrl":"//thedailywtf.com/articles/"},{"Id":11233,"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;Watch to the end\u0026#34;, the scammers demand. In today\u0026#39;s episode of \u003cem\u003eError\u0026#39;d\u003c/em\u003e, the end is a long\ntime coming.\nBut at least it\u0026#39;s amusing. In the meantime, Amazon irked and/or terrified\nthousands of their customers last week by mailing out ridiculously inflated\nbills. It\u0026#39;s been covered extensively elsewhere but why should we miss all the fun? \u003c/p\u003e\n\n\u003cp\u003eIt was\n\u003cstrong\u003eWilly\u003c/strong\u003e who worried \n\u0026#34;Amazon prices seem to have crept up this month, finance\nare going to have something to say\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003c/blockquote\u003e","BodyHtml":"\u003cp\u003e\u0026#34;Watch to the end\u0026#34;, the scammers demand. In today\u0026#39;s episode of \u003cem\u003eError\u0026#39;d\u003c/em\u003e, the end is a long\ntime coming.\nBut at least it\u0026#39;s amusing. In the meantime, Amazon irked and/or terrified\nthousands of their customers last week by mailing out ridiculously inflated\nbills. It\u0026#39;s been covered extensively elsewhere but why should we miss all the fun? \u003c/p\u003e\n\n\u003cp\u003eIt was\n\u003cstrong\u003eWilly\u003c/strong\u003e who worried \n\u0026#34;Amazon prices seem to have crept up this month, finance\nare going to have something to say\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#a7e89b1dc59e4c3ba3b8571a056825d6\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"a7e89b1dc59e4c3ba3b8571a056825d6\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/a7e89b1dc59e4c3ba3b8571a056825d6.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eDave A.\u003c/strong\u003e is on the horns of a dilemma. \n\u0026#34;Is it optional or required? Make up your mind, TAP!\nI\u0026#39;m TAPping my fingers waiting for you to decide.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#ffd147510c4b455c9c43e60763e68bf8\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"ffd147510c4b455c9c43e60763e68bf8\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/ffd147510c4b455c9c43e60763e68bf8.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;This rating is through the roof!\u0026#34; exclaims a regular who wants to be \n\u003cstrong\u003eAnonymous\u003c/strong\u003e today.\n\u0026#34;We\u0026#39;re done with linear rating scales. Now you can have\n5 stars on both X and Y axes. Also, given\nthis is for a company that cleans roofs, we can\nmake a joke this rating is out of the roof,\nand out of the \u0026lt;div\u0026gt; as well. In case you\u0026#39;re\ninterested and in case you want take a screenshot yourself:\nhttps://mijndakschoon.nl/\u0026#34; It\u0026#39;s real; I checked.\n\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#11083f7140b449a48c5218843699cc24\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"11083f7140b449a48c5218843699cc24\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/11083f7140b449a48c5218843699cc24.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eRichard H.\u003c/strong\u003e found a flubstituted email.\n\u0026#34;Quickbooks here reminding me that I failed to pay invoice\nnumber \u0026#34;{{rand_invoice}\u0026#34; Or this might be a scam/phishing email. Hard\nto tell.\u0026#34; I\u0026#39;ll bet {{money}} on scam.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#710be181fec049ab8f717ae185783f5f\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"710be181fec049ab8f717ae185783f5f\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/710be181fec049ab8f717ae185783f5f.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eB.J. H.\u003c/strong\u003e is usually quite concise. Usually.\n\u0026#34;If this is ALL NORMAL I\u0026#39;m worried what will happen\nin an emergency\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#7885ce2a1ae64033b9b46e472925edd9\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"7885ce2a1ae64033b9b46e472925edd9\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/7885ce2a1ae64033b9b46e472925edd9.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n","BodyAndAdHtml":"\u003cp\u003e\u0026#34;Watch to the end\u0026#34;, the scammers demand. In today\u0026#39;s episode of \u003cem\u003eError\u0026#39;d\u003c/em\u003e, the end is a long\ntime coming.\nBut at least it\u0026#39;s amusing. In the meantime, Amazon irked and/or terrified\nthousands of their customers last week by mailing out ridiculously inflated\nbills. It\u0026#39;s been covered extensively elsewhere but why should we miss all the fun? \u003c/p\u003e\n\n\u003cp\u003eIt was\n\u003cstrong\u003eWilly\u003c/strong\u003e who worried \n\u0026#34;Amazon prices seem to have crept up this month, finance\nare going to have something to say\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#a7e89b1dc59e4c3ba3b8571a056825d6\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"a7e89b1dc59e4c3ba3b8571a056825d6\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/a7e89b1dc59e4c3ba3b8571a056825d6.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eDave A.\u003c/strong\u003e is on the horns of a dilemma. \n\u0026#34;Is it optional or required? Make up your mind, TAP!\nI\u0026#39;m TAPping my fingers waiting for you to decide.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#ffd147510c4b455c9c43e60763e68bf8\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"ffd147510c4b455c9c43e60763e68bf8\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/ffd147510c4b455c9c43e60763e68bf8.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;This rating is through the roof!\u0026#34; exclaims a regular who wants to be \n\u003cstrong\u003eAnonymous\u003c/strong\u003e today.\n\u0026#34;We\u0026#39;re done with linear rating scales. Now you can have\n5 stars on both X and Y axes. Also, given\nthis is for a company that cleans roofs, we can\nmake a joke this rating is out of the roof,\nand out of the \u0026lt;div\u0026gt; as well. In case you\u0026#39;re\ninterested and in case you want take a screenshot yourself:\nhttps://mijndakschoon.nl/\u0026#34; It\u0026#39;s real; I checked.\n\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#11083f7140b449a48c5218843699cc24\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"11083f7140b449a48c5218843699cc24\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/11083f7140b449a48c5218843699cc24.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eRichard H.\u003c/strong\u003e found a flubstituted email.\n\u0026#34;Quickbooks here reminding me that I failed to pay invoice\nnumber \u0026#34;{{rand_invoice}\u0026#34; Or this might be a scam/phishing email. Hard\nto tell.\u0026#34; I\u0026#39;ll bet {{money}} on scam.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#710be181fec049ab8f717ae185783f5f\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"710be181fec049ab8f717ae185783f5f\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/710be181fec049ab8f717ae185783f5f.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\n\u003cstrong\u003eB.J. H.\u003c/strong\u003e is usually quite concise. Usually.\n\u0026#34;If this is ALL NORMAL I\u0026#39;m worried what will happen\nin an emergency\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#7885ce2a1ae64033b9b46e472925edd9\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"7885ce2a1ae64033b9b46e472925edd9\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/7885ce2a1ae64033b9b46e472925edd9.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\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":"The Song that Never Ends?","RssTitle":"Error\u0027d: The Song that Never Ends?","CachedCommentCount":18,"LastCommentDate":"\/Date(1785059375547)\/","LastCommentDateDescription":"2026-07-26","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784874600000)\/","ISODate":"2026-07-24","DisplayDate":"2026-07-24","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[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/the-song-that-never-ends","CommentsUrl":"https://thedailywtf.com/articles/comments/the-song-that-never-ends","Slug":"the-song-that-never-ends","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-song-that-never-ends+-+The+Song+that+Never+Ends%3f+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-song-that-never-ends\u0026t=The+Song+that+Never+Ends%3f+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=The%20Song%20that%20Never%20Ends?: https://thedailywtf.com/articles/the-song-that-never-ends","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fthe-song-that-never-ends","PreviousArticleId":11232,"PreviousArticleTitle":"Classic WTF: My Many Girlfriends","PreviousArticleSlug":"classic-wtf-my-many-girlfriends","PreviousArticleUrl":"//thedailywtf.com/articles/classic-wtf-my-many-girlfriends","NextArticleId":11235,"NextArticleTitle":"The Hard Goodbye","NextArticleSlug":"the-hard-goodbye","NextArticleUrl":"//thedailywtf.com/articles/the-hard-goodbye"},{"Id":11232,"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":"\u003cblockquote\u003eHonestly, with the wildfire smoke and the oppressive heat, maybe it\u0026#39;s time to find a nice quiet cave to hang out in. Something with no natural light and no natural ventilation. I wonder if anybody has a place like that… \u003ca href=\"https://thedailywtf.com/articles/my-many-girlfriends\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eIn the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still \u003cem\u003enew\u003c/em\u003e, people didn\u0026#39;t quite know what worked and what didn\u0026#39;t, the \u0026#34;nerds had conquered the Earth\u0026#34; and managers just had to roll with this reality. So when \u003cstrong\u003eBarry D\u003c/strong\u003e gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.\u003c/p\u003e\n\u003cp\u003eOf course, on the first day, building services came to Barry with some concerns about Sten\u0026#39;s requests for his workspace. No natural light. No ventilation ducts that couldn\u0026#39;t be closed. And then the co-workers who had interacted with Sten expressed their concerns.\u003c/p\u003e\n","BodyHtml":"\u003cblockquote\u003eHonestly, with the wildfire smoke and the oppressive heat, maybe it\u0026#39;s time to find a nice quiet cave to hang out in. Something with no natural light and no natural ventilation. I wonder if anybody has a place like that… \u003ca href=\"https://thedailywtf.com/articles/my-many-girlfriends\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eIn the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still \u003cem\u003enew\u003c/em\u003e, people didn\u0026#39;t quite know what worked and what didn\u0026#39;t, the \u0026#34;nerds had conquered the Earth\u0026#34; and managers just had to roll with this reality. So when \u003cstrong\u003eBarry D\u003c/strong\u003e gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.\u003c/p\u003e\n\u003cp\u003eOf course, on the first day, building services came to Barry with some concerns about Sten\u0026#39;s requests for his workspace. No natural light. No ventilation ducts that couldn\u0026#39;t be closed. And then the co-workers who had interacted with Sten expressed their concerns.\u003c/p\u003e\n\u003cp\u003eDuring the hiring process, Sten had come off as a bit odd, but this seemed unusual. So Barry descended the stairs into the basement, to find Sten\u0026#39;s office, hidden between a janitorial closet and the breaker box for the building. Barry knocked on the door.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Sten awaits you. Enter.\u0026#34;\u003c/p\u003e\n\u003cp\u003eBarry entered, and found Sten precariously perched on an office chair, removing several of the fluorescent bulbs from the ceiling fixture. The already dark space was downright cave-like with Sten\u0026#39;s twilight lighting arrangement. \u0026#34;He welcomes you,\u0026#34; Sten said.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Uh, yeah, hi. I\u0026#39;m Barry, I\u0026#39;m working on the Netware 3.x portion of the product, and Carl just wanted me to check in. Everything okay?\u003c/p\u003e\n\u003cp\u003e\u0026#34;This is acceptable to Sten,\u0026#34; Sten said, gesturing at the dim office as he descended from the chair. Sten\u0026#39;s watched beeped on the hour, and Sten carefully placed the fluorescent bulb off to the side, in a stack of similarly removed bulbs, and then went to his desk. In rapid succession, he popped open a few pill containers- 5000mg of vitamin C, a handful of herbal and homeopathic pills- and gulped them down. He then washed the pills down with a tea that smelled like a mixture of kombucha and a dead raccoon buried in a dumpster.\u003c/p\u003e\n\u003cp\u003e\u0026#34;He is pleased to meet you,\u0026#34; Sten said, with a friendly nod. Barry blinked, trying to track the conversation. \u0026#34;And he is pleased with it, and has made great progress on building it. You will like his things, yes?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Uh… yes?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;He is pleased, and I hope you can go to him and tell him that he is pleased with this, and set his mind at ease about Sten.\u0026#34;\u003c/p\u003e\n\u003cp\u003eSo it went with Sten. He strictly referred to himself in the third person. He frequently spoke in sentences with nothing but pronouns, and frequently reused the same pronoun to refer to different people. The vagueness was confounding, but Sten\u0026#39;s skill was in Netware 2.x- a rare and difficult set of skills to find. So long as the code was clear, everything would be fine.\u003c/p\u003e\n\u003cp\u003eEverything was not fine. While Sten\u0026#39;s code didn\u0026#39;t have the empty vagueness of unclear pronouns, it also didn\u0026#39;t have the clarity of meaningful variable names. Every variable and every method name was given a female first name. \u0026#34;Each of these is named for one of Sten\u0026#39;s girlfriends.\u0026#34; Given the number of names required, it was improbable that these were \u003cem\u003ereal\u003c/em\u003e girlfriends, but Sten gave no hint about this being fiction.\u003c/p\u003e\n\u003cp\u003eThere was some consistency about the names. Instead of \u003ccode\u003ei\u003c/code\u003e, \u003ccode\u003ej\u003c/code\u003e, and \u003ccode\u003ek\u003c/code\u003e loop variables, you had \u003ccode\u003eIngrid\u003c/code\u003e, \u003ccode\u003eJane\u003c/code\u003e, and \u003ccode\u003eKaty\u003c/code\u003e. \u003ccode\u003eZaria\u003c/code\u003e seemed to be only used as a parameter to methods. \u003ccode\u003eKarla\u003c/code\u003e seemed to be a temporary variable to hold intermediate results. None of these conventions were documented, obviously, and getting Sten to explain them was an exercise in confusion.\u003c/p\u003e\n\u003cp\u003eIt led to some entertaining code reviews. \u0026#34;Michelle here talks to Nancy about Francine, and then Ingrid goes through Francine\u0026#39;s purse to find Stacy.\u0026#34; This described a method (Michelle) which called another method (Nancy), passing an array (Francine). Nancy iterates across the array (using Ingrid), to find a specific entry in the array (Stacy).\u003c/p\u003e\n\u003cp\u003eSten lasted a few weeks at the job. It wasn\u0026#39;t a very successful period of time for anyone. Peculiarities aside, the final straw wasn\u0026#39;t the odd personal habits or the strange coding conventions- Sten just couldn\u0026#39;t produce working code quickly enough to keep up with the rest of the team. Sten had to be let go.\u003c/p\u003e\n\u003cp\u003eA few weeks later, Barry got a call from a hiring manager at Initrode. Sten had applied, and they were checking the reference. \u0026#34;Yes, Sten worked here,\u0026#34; Barry confirmed. After a moment\u0026#39;s thought, he added, \u0026#34;I suggest that you bring him in for a second interview, and have him walk you through some code that he\u0026#39;s written.\u0026#34;\u003c/p\u003e\n\u003cp\u003eA few weeks after that, Barry got a gift basket from the manager at Initrode.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks for the tip\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSten did \u003cem\u003enot\u003c/em\u003e get hired at Initrode.\u003c/p\u003e\n\u003c!-- Easy Reader Version: This sounds like somebody\u0027s Vampire the Masquerade LARP getting out of hand --\u003e","BodyAndAdHtml":"\u003cblockquote\u003eHonestly, with the wildfire smoke and the oppressive heat, maybe it\u0026#39;s time to find a nice quiet cave to hang out in. Something with no natural light and no natural ventilation. I wonder if anybody has a place like that… \u003ca href=\"https://thedailywtf.com/articles/my-many-girlfriends\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eIn the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still \u003cem\u003enew\u003c/em\u003e, people didn\u0026#39;t quite know what worked and what didn\u0026#39;t, the \u0026#34;nerds had conquered the Earth\u0026#34; and managers just had to roll with this reality. So when \u003cstrong\u003eBarry D\u003c/strong\u003e gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.\u003c/p\u003e\n\u003cp\u003eOf course, on the first day, building services came to Barry with some concerns about Sten\u0026#39;s requests for his workspace. No natural light. No ventilation ducts that couldn\u0026#39;t be closed. And then the co-workers who had interacted with Sten expressed their concerns.\u003c/p\u003e\n\u003cp\u003eDuring the hiring process, Sten had come off as a bit odd, but this seemed unusual. So Barry descended the stairs into the basement, to find Sten\u0026#39;s office, hidden between a janitorial closet and the breaker box for the building. Barry knocked on the door.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Sten awaits you. Enter.\u0026#34;\u003c/p\u003e\n\u003cp\u003eBarry entered, and found Sten precariously perched on an office chair, removing several of the fluorescent bulbs from the ceiling fixture. The already dark space was downright cave-like with Sten\u0026#39;s twilight lighting arrangement. \u0026#34;He welcomes you,\u0026#34; Sten said.\u003c/p\u003e\n\u003cp\u003e\u0026#34;Uh, yeah, hi. I\u0026#39;m Barry, I\u0026#39;m working on the Netware 3.x portion of the product, and Carl just wanted me to check in. Everything okay?\u003c/p\u003e\n\u003cp\u003e\u0026#34;This is acceptable to Sten,\u0026#34; Sten said, gesturing at the dim office as he descended from the chair. Sten\u0026#39;s watched beeped on the hour, and Sten carefully placed the fluorescent bulb off to the side, in a stack of similarly removed bulbs, and then went to his desk. In rapid succession, he popped open a few pill containers- 5000mg of vitamin C, a handful of herbal and homeopathic pills- and gulped them down. He then washed the pills down with a tea that smelled like a mixture of kombucha and a dead raccoon buried in a dumpster.\u003c/p\u003e\n\u003cp\u003e\u0026#34;He is pleased to meet you,\u0026#34; Sten said, with a friendly nod. Barry blinked, trying to track the conversation. \u0026#34;And he is pleased with it, and has made great progress on building it. You will like his things, yes?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Uh… yes?\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;He is pleased, and I hope you can go to him and tell him that he is pleased with this, and set his mind at ease about Sten.\u0026#34;\u003c/p\u003e\n\u003cp\u003eSo it went with Sten. He strictly referred to himself in the third person. He frequently spoke in sentences with nothing but pronouns, and frequently reused the same pronoun to refer to different people. The vagueness was confounding, but Sten\u0026#39;s skill was in Netware 2.x- a rare and difficult set of skills to find. So long as the code was clear, everything would be fine.\u003c/p\u003e\n\u003cp\u003eEverything was not fine. While Sten\u0026#39;s code didn\u0026#39;t have the empty vagueness of unclear pronouns, it also didn\u0026#39;t have the clarity of meaningful variable names. Every variable and every method name was given a female first name. \u0026#34;Each of these is named for one of Sten\u0026#39;s girlfriends.\u0026#34; Given the number of names required, it was improbable that these were \u003cem\u003ereal\u003c/em\u003e girlfriends, but Sten gave no hint about this being fiction.\u003c/p\u003e\n\u003cp\u003eThere was some consistency about the names. Instead of \u003ccode\u003ei\u003c/code\u003e, \u003ccode\u003ej\u003c/code\u003e, and \u003ccode\u003ek\u003c/code\u003e loop variables, you had \u003ccode\u003eIngrid\u003c/code\u003e, \u003ccode\u003eJane\u003c/code\u003e, and \u003ccode\u003eKaty\u003c/code\u003e. \u003ccode\u003eZaria\u003c/code\u003e seemed to be only used as a parameter to methods. \u003ccode\u003eKarla\u003c/code\u003e seemed to be a temporary variable to hold intermediate results. None of these conventions were documented, obviously, and getting Sten to explain them was an exercise in confusion.\u003c/p\u003e\n\u003cp\u003eIt led to some entertaining code reviews. \u0026#34;Michelle here talks to Nancy about Francine, and then Ingrid goes through Francine\u0026#39;s purse to find Stacy.\u0026#34; This described a method (Michelle) which called another method (Nancy), passing an array (Francine). Nancy iterates across the array (using Ingrid), to find a specific entry in the array (Stacy).\u003c/p\u003e\n\u003cp\u003eSten lasted a few weeks at the job. It wasn\u0026#39;t a very successful period of time for anyone. Peculiarities aside, the final straw wasn\u0026#39;t the odd personal habits or the strange coding conventions- Sten just couldn\u0026#39;t produce working code quickly enough to keep up with the rest of the team. Sten had to be let go.\u003c/p\u003e\n\u003cp\u003eA few weeks later, Barry got a call from a hiring manager at Initrode. Sten had applied, and they were checking the reference. \u0026#34;Yes, Sten worked here,\u0026#34; Barry confirmed. After a moment\u0026#39;s thought, he added, \u0026#34;I suggest that you bring him in for a second interview, and have him walk you through some code that he\u0026#39;s written.\u0026#34;\u003c/p\u003e\n\u003cp\u003eA few weeks after that, Barry got a gift basket from the manager at Initrode.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks for the tip\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSten did \u003cem\u003enot\u003c/em\u003e get hired at Initrode.\u003c/p\u003e\n\u003c!-- Easy Reader Version: This sounds like somebody\u0027s Vampire the Masquerade LARP getting out of hand --\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":"Classic WTF: My Many Girlfriends","RssTitle":"Classic WTF: My Many Girlfriends","CachedCommentCount":11,"LastCommentDate":"\/Date(1784862030807)\/","LastCommentDateDescription":"2026-07-24","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784788200000)\/","ISODate":"2026-07-23","DisplayDate":"2026-07-23","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/classic-wtf-my-many-girlfriends","CommentsUrl":"https://thedailywtf.com/articles/comments/classic-wtf-my-many-girlfriends","Slug":"classic-wtf-my-many-girlfriends","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-my-many-girlfriends+-+Classic+WTF%3a+My+Many+Girlfriends+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-my-many-girlfriends\u0026t=Classic+WTF%3a+My+Many+Girlfriends+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Classic%20WTF:%20My%20Many%20Girlfriends:%20https://thedailywtf.com/articles/classic-wtf-my-many-girlfriends","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-my-many-girlfriends","PreviousArticleId":11231,"PreviousArticleTitle":"Classic WTF: Server Room Fans and More Fun","PreviousArticleSlug":"classic-wtf-server-room-fans-and-more-fun","PreviousArticleUrl":"//thedailywtf.com/articles/classic-wtf-server-room-fans-and-more-fun","NextArticleId":11233,"NextArticleTitle":"The Song that Never Ends?","NextArticleSlug":"the-song-that-never-ends","NextArticleUrl":"//thedailywtf.com/articles/the-song-that-never-ends"},{"Id":11231,"Author":{"Name":"Alex Papadimoulis","FirstName":"Alex","ShortDescription":"Founder, The Daily WTF","DescriptionHtml":"Alex is a speaker and writer who is passionate about looking beyond the code to build great software. In addition to founding \u003ca href=\"http://inedo.com/\"\u003eInedo\u003c/a\u003e - the makers of \u003ca href=\"http://inedo.com/buildmaster\"\u003eBuildMaster\u003c/a\u003e, the popular continuous delivery platform - Alex also started The Daily WTF, a fun site dedicated to building software the wrong way.\r\n","Slug":"alex-papadimoulis","IsAdmin":true,"IsActive":true,"ImageUrl":"https://thedailywtf.com/images/alexp/apx-square500.jpg"},"Status":"Published","SummaryHtml":"\u003cblockquote\u003eIt\u0026#39;s been pretty hot lately. Probably should use a fan to cool off. Mind the trip hazards. \u003ca href=\"https://thedailywtf.com/articles/Server-Room-Fans-and-More-Server-Room-Fun\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;It\u0026#39;s that time of year again,\u0026#34; \u003cb\u003eRobert Rossegger\u003c/b\u003e wrote, \u0026#34;you know, when the underpowered air conditioner just can\u0026#39;t cope with the non-winter weather? Fortunately, we have a solution for that... and all we need to do is just keep an extra eye on people walking near the (completely ajar) server room door.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg itemprop=\"image\" alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG_20110709_231027.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n","BodyHtml":"\u003cblockquote\u003eIt\u0026#39;s been pretty hot lately. Probably should use a fan to cool off. Mind the trip hazards. \u003ca href=\"https://thedailywtf.com/articles/Server-Room-Fans-and-More-Server-Room-Fun\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;It\u0026#39;s that time of year again,\u0026#34; \u003cb\u003eRobert Rossegger\u003c/b\u003e wrote, \u0026#34;you know, when the underpowered air conditioner just can\u0026#39;t cope with the non-winter weather? Fortunately, we have a solution for that... and all we need to do is just keep an extra eye on people walking near the (completely ajar) server room door.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg itemprop=\"image\" alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG_20110709_231027.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;For as long as anyone can remember,\u0026#34; \u003cb\u003eMike E\u003c/b\u003e wrote, \u0026#34;the fax machine in one particular office was a bit spotty whenever it was wet out. After having the telco test the lines from the DMARC to the office, I replaced the hardware, looked for water leaks all along the run, and found precisely nothing. The telco disavowed all responsibility, so the best solution I could offer was to tell the users affected by this to look out the window and, if raining, go to another fax machine.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;One day, we had the telco out adding a T1 and they had the cap off of the vault where our cables come in to the building. Being curious by nature, I wandered over when nobody was around and wound up taking this picture. After emailing same to the district manager of the telco, suddenly we had the truck out for an extra day (accompanied by one very sullen technician) and the fax machine worked perfectly from then on.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/malvault.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I found this when I came back in to work after some time off,\u0026#34; writes \u003cb\u003eSam Nicholson\u003c/b\u003e, \u0026#34;that drive is actually earmarked for \u0026#39;off-site backup\u0026#39;. Also, this is what passes for a server rack at this particular software company. Yes, it\u0026#39;s made of wood.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/Backupdrive.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;Some people use \u0026#39;proper electrical wiring\u0026#39;,\u0026#34; writes \u003cb\u003eMike\u003c/b\u003e, \u0026#34;others use \u0026#39;extension cords\u0026#39;. We, on the other hand, apparently do this.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/fans.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I was staying at a hotel in Manhattan and somehow took a wrong turn and wound up in the stairwell,\u0026#34; wrote \u003cb\u003eDan\u003c/b\u003e, \u0026#34;not only is all their equipment in a public place (without even a door), it\u0026#39;s mostly hanging from cables in several places.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG00070-20110622-0836.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I spotted this in China,\u0026#34; writes \u003cb\u003eMatt\u003c/b\u003e, \u0026#34;This poor switch was bolted to a column in the middle of some metal shop about 4m above ground. There were many more curious things, but I decided to keep a low profile and stop taking pictures.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG_2435.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e","BodyAndAdHtml":"\u003cblockquote\u003eIt\u0026#39;s been pretty hot lately. Probably should use a fan to cool off. Mind the trip hazards. \u003ca href=\"https://thedailywtf.com/articles/Server-Room-Fans-and-More-Server-Room-Fun\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;It\u0026#39;s that time of year again,\u0026#34; \u003cb\u003eRobert Rossegger\u003c/b\u003e wrote, \u0026#34;you know, when the underpowered air conditioner just can\u0026#39;t cope with the non-winter weather? Fortunately, we have a solution for that... and all we need to do is just keep an extra eye on people walking near the (completely ajar) server room door.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg itemprop=\"image\" alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG_20110709_231027.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;For as long as anyone can remember,\u0026#34; \u003cb\u003eMike E\u003c/b\u003e wrote, \u0026#34;the fax machine in one particular office was a bit spotty whenever it was wet out. After having the telco test the lines from the DMARC to the office, I replaced the hardware, looked for water leaks all along the run, and found precisely nothing. The telco disavowed all responsibility, so the best solution I could offer was to tell the users affected by this to look out the window and, if raining, go to another fax machine.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;One day, we had the telco out adding a T1 and they had the cap off of the vault where our cables come in to the building. Being curious by nature, I wandered over when nobody was around and wound up taking this picture. After emailing same to the district manager of the telco, suddenly we had the truck out for an extra day (accompanied by one very sullen technician) and the fax machine worked perfectly from then on.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/malvault.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I found this when I came back in to work after some time off,\u0026#34; writes \u003cb\u003eSam Nicholson\u003c/b\u003e, \u0026#34;that drive is actually earmarked for \u0026#39;off-site backup\u0026#39;. Also, this is what passes for a server rack at this particular software company. Yes, it\u0026#39;s made of wood.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/Backupdrive.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;Some people use \u0026#39;proper electrical wiring\u0026#39;,\u0026#34; writes \u003cb\u003eMike\u003c/b\u003e, \u0026#34;others use \u0026#39;extension cords\u0026#39;. We, on the other hand, apparently do this.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/fans.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I was staying at a hotel in Manhattan and somehow took a wrong turn and wound up in the stairwell,\u0026#34; wrote \u003cb\u003eDan\u003c/b\u003e, \u0026#34;not only is all their equipment in a public place (without even a door), it\u0026#39;s mostly hanging from cables in several places.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG00070-20110622-0836.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \u003c/p\u003e\n\u003cp\u003e\u0026#34;I spotted this in China,\u0026#34; writes \u003cb\u003eMatt\u003c/b\u003e, \u0026#34;This poor switch was bolted to a column in the middle of some metal shop about 4m above ground. There were many more curious things, but I decided to keep a low profile and stop taking pictures.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https://thedailywtf.com/images/12/q3/svr/IMG_2435.jpg\"/\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e \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\tKeep the plebs out of prod. Restrict NuGet feed privileges with ProGet. \u003ca href=\"https://inedo.com/proget/private-nuget-server?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\u0026amp;utm_campaign=Cyclops2020\"\u003eLearn more.\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv style=\"clear: left;\"\u003e \u003c/div\u003e\n","Title":"Classic WTF: Server Room Fans and More Fun","RssTitle":"Classic WTF: Server Room Fans and More Fun","CachedCommentCount":12,"LastCommentDate":"\/Date(1784886709727)\/","LastCommentDateDescription":"2026-07-24","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784701800000)\/","ISODate":"2026-07-22","DisplayDate":"2026-07-22","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\tKeep the plebs out of prod. Restrict NuGet feed privileges with ProGet. \u003ca href=\"https://inedo.com/proget/private-nuget-server?utm_source=tdwtf\u0026amp;utm_medium=footer\u0026amp;utm_content=PlebsFooter\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/classic-wtf-server-room-fans-and-more-fun","CommentsUrl":"https://thedailywtf.com/articles/comments/classic-wtf-server-room-fans-and-more-fun","Slug":"classic-wtf-server-room-fans-and-more-fun","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-server-room-fans-and-more-fun+-+Classic+WTF%3a+Server+Room+Fans+and+More+Fun+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-server-room-fans-and-more-fun\u0026t=Classic+WTF%3a+Server+Room+Fans+and+More+Fun+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Classic%20WTF:%20Server%20Room%20Fans%20and%20More%20Fun:%20https://thedailywtf.com/articles/classic-wtf-server-room-fans-and-more-fun","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-server-room-fans-and-more-fun","PreviousArticleId":11230,"PreviousArticleTitle":"Classic WTF: Fork and Log","PreviousArticleSlug":"classic-wtf-fork-and-log","PreviousArticleUrl":"//thedailywtf.com/articles/classic-wtf-fork-and-log","NextArticleId":11232,"NextArticleTitle":"Classic WTF: My Many Girlfriends","NextArticleSlug":"classic-wtf-my-many-girlfriends","NextArticleUrl":"//thedailywtf.com/articles/classic-wtf-my-many-girlfriends"},{"Id":11230,"Author":{"Name":"Mark Bowytz","FirstName":"Mark","ShortDescription":"Besides contributing at @TheDailyWTF, I write DevDisasters for Visual Studio Magazine, and involved in various side projects including child rearing and marriage.","DescriptionHtml":"Besides contributing at @TheDailyWTF, I write DevDisasters for Visual Studio Magazine, and involved in various side projects including child rearing and marriage.\r\n\r\nTwitter: @mbowytz","Slug":"mark-bowytz","IsAdmin":true,"IsActive":true,"ImageUrl":"https://thedailywtf.com/images/mbowytz.jpg"},"Status":"Published","SummaryHtml":"\u003cblockquote\u003eWe keep our summer break going. Today, there\u0026#39;s something floating in the pool, and I don\u0026#39;t think it\u0026#39;s a Snickers bar. \u003ca href=\"https://thedailywtf.com/articles/Fork-and-Log\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eA few years back, \u003cstrong\u003eAdam C.\u003c/strong\u003e was brought in to help with some performance problems that appeared while load testing a VXML Platform.  The project was already well behind and they couldn\u0026#39;t figure out why the system kept falling over under a very slight load. To make matters worse, Adam had absolutely no prior knowledge of the system or its software other than Wikipedia’s definition of what \u003ca href=\"http://en.wikipedia.org/wiki/VoiceXML\"\u003eVXML\u003c/a\u003e is. \n\u003c/p\u003e\u003cp\u003e\nA veteran to these sorts of situations, Adam grabbed a coffee, a donut, and then started picking through the application logs to get a feel for what the system is doing and where something might be going wrong.\n\u003c/p\u003e","BodyHtml":"\u003cblockquote\u003eWe keep our summer break going. Today, there\u0026#39;s something floating in the pool, and I don\u0026#39;t think it\u0026#39;s a Snickers bar. \u003ca href=\"https://thedailywtf.com/articles/Fork-and-Log\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eA few years back, \u003cstrong\u003eAdam C.\u003c/strong\u003e was brought in to help with some performance problems that appeared while load testing a VXML Platform.  The project was already well behind and they couldn\u0026#39;t figure out why the system kept falling over under a very slight load. To make matters worse, Adam had absolutely no prior knowledge of the system or its software other than Wikipedia’s definition of what \u003ca href=\"http://en.wikipedia.org/wiki/VoiceXML\"\u003eVXML\u003c/a\u003e is. \n\u003c/p\u003e\u003cp\u003e\nA veteran to these sorts of situations, Adam grabbed a coffee, a donut, and then started picking through the application logs to get a feel for what the system is doing and where something might be going wrong.\n\u003c/p\u003e\u003cp\u003e\nLooking in /var/log/messages, he was pleased to find with several days’ worth of messages, but over and over again, the same entry popped up:\n\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre\u003eException encountered writing error log. \n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\n\u0026#34;Seriously, who logs an error that they can\u0026#39;t log an error? ...and is that even possible?\u0026#34; Adam wondered aloud after seeing the same senseless message for what he figured to be the hundredth time.\n\u003c/p\u003e\u003cp\u003e\nFrustrated, and hoping to learn what ludicrous conditions might precipitate a log to contain such a message, Adam dug into the source and hit paydirt in the form of this wonderful nugget of code:\n\u003c/p\u003e\u003cblockquote\u003e\n\u003cpre\u003epublic void error(String logID, String errStr) {\n  StringBuffer errLogCmd = new StringBuffer(\u0026#34;/usr/bin/logger -p \u0026#34;);\n  try {\n    Runtime rt = Runtime.getRuntime();\n    errLogCmd.append(errlogFacility);\n    errLogCmd.append(\u0026#34; -t \u0026#34;);\n    errLogCmd.append(logID);\n    errLogCmd.append(\u0026#34; \u0026#34;);\n    errLogCmd.append(errStr);\n    rt.exec(errLogCmd.toString());\n  } catch (Exception ele) {\n    System.out.println(\u0026#34;Exception encountered writing error log.\u0026#34; + ele.getMessage());\n  }\n}\n\u003c/pre\u003e\n\u003c/blockquote\u003e\nAs he mentally parsed his way through the code, Adam could feel his breakfast tickling up from the back of his throat in reaction to the number of WTF’s he found himself facing.\n\u003cp\u003e\u003c/p\u003e\u003cp\u003e\nHe couldn’t decide what about the implementation was worse -  forking off an external process to log something,  the fact that log4j could have been used to send stuff to syslog (which the project used elsewhere), or that  since the program\u0026#39;s output was already piped to /usr/bin/log, just doing a System.out.println() would have been equivalent to this code.\n\u003c/p\u003e\u003cp\u003e\nAs it turned out, this wasn’t the root cause behind the performance problems, but needless to say, that code got junked rather quickly and he moved on to looking for the next performance bottleneck.\n\u003c/p\u003e\n","BodyAndAdHtml":"\u003cblockquote\u003eWe keep our summer break going. Today, there\u0026#39;s something floating in the pool, and I don\u0026#39;t think it\u0026#39;s a Snickers bar. \u003ca href=\"https://thedailywtf.com/articles/Fork-and-Log\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eA few years back, \u003cstrong\u003eAdam C.\u003c/strong\u003e was brought in to help with some performance problems that appeared while load testing a VXML Platform.  The project was already well behind and they couldn\u0026#39;t figure out why the system kept falling over under a very slight load. To make matters worse, Adam had absolutely no prior knowledge of the system or its software other than Wikipedia’s definition of what \u003ca href=\"http://en.wikipedia.org/wiki/VoiceXML\"\u003eVXML\u003c/a\u003e is. \n\u003c/p\u003e\u003cp\u003e\nA veteran to these sorts of situations, Adam grabbed a coffee, a donut, and then started picking through the application logs to get a feel for what the system is doing and where something might be going wrong.\n\u003c/p\u003e\u003cp\u003e\nLooking in /var/log/messages, he was pleased to find with several days’ worth of messages, but over and over again, the same entry popped up:\n\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre\u003eException encountered writing error log. \n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\n\u0026#34;Seriously, who logs an error that they can\u0026#39;t log an error? ...and is that even possible?\u0026#34; Adam wondered aloud after seeing the same senseless message for what he figured to be the hundredth time.\n\u003c/p\u003e\u003cp\u003e\nFrustrated, and hoping to learn what ludicrous conditions might precipitate a log to contain such a message, Adam dug into the source and hit paydirt in the form of this wonderful nugget of code:\n\u003c/p\u003e\u003cblockquote\u003e\n\u003cpre\u003epublic void error(String logID, String errStr) {\n  StringBuffer errLogCmd = new StringBuffer(\u0026#34;/usr/bin/logger -p \u0026#34;);\n  try {\n    Runtime rt = Runtime.getRuntime();\n    errLogCmd.append(errlogFacility);\n    errLogCmd.append(\u0026#34; -t \u0026#34;);\n    errLogCmd.append(logID);\n    errLogCmd.append(\u0026#34; \u0026#34;);\n    errLogCmd.append(errStr);\n    rt.exec(errLogCmd.toString());\n  } catch (Exception ele) {\n    System.out.println(\u0026#34;Exception encountered writing error log.\u0026#34; + ele.getMessage());\n  }\n}\n\u003c/pre\u003e\n\u003c/blockquote\u003e\nAs he mentally parsed his way through the code, Adam could feel his breakfast tickling up from the back of his throat in reaction to the number of WTF’s he found himself facing.\n\u003cp\u003e\u003c/p\u003e\u003cp\u003e\nHe couldn’t decide what about the implementation was worse -  forking off an external process to log something,  the fact that log4j could have been used to send stuff to syslog (which the project used elsewhere), or that  since the program\u0026#39;s output was already piped to /usr/bin/log, just doing a System.out.println() would have been equivalent to this code.\n\u003c/p\u003e\u003cp\u003e\nAs it turned out, this wasn’t the root cause behind the performance problems, but needless to say, that code got junked rather quickly and he moved on to looking for the next performance bottleneck.\n\u003c/p\u003e\n\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":"Classic WTF: Fork and Log","RssTitle":"CodeSOD: Classic WTF: Fork and Log","CachedCommentCount":4,"LastCommentDate":"\/Date(1784700424587)\/","LastCommentDateDescription":"2026-07-22","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784615400000)\/","ISODate":"2026-07-21","DisplayDate":"2026-07-21","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] \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/classic-wtf-fork-and-log","CommentsUrl":"https://thedailywtf.com/articles/comments/classic-wtf-fork-and-log","Slug":"classic-wtf-fork-and-log","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-fork-and-log+-+Classic+WTF%3a+Fork+and+Log+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-fork-and-log\u0026t=Classic+WTF%3a+Fork+and+Log+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Classic%20WTF:%20Fork%20and%20Log:%20https://thedailywtf.com/articles/classic-wtf-fork-and-log","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-fork-and-log","PreviousArticleId":11229,"PreviousArticleTitle":"Classic WTF: The Table Selector","PreviousArticleSlug":"classic-wtf-the-table-selector","PreviousArticleUrl":"//thedailywtf.com/articles/classic-wtf-the-table-selector","NextArticleId":11231,"NextArticleTitle":"Classic WTF: Server Room Fans and More Fun","NextArticleSlug":"classic-wtf-server-room-fans-and-more-fun","NextArticleUrl":"//thedailywtf.com/articles/classic-wtf-server-room-fans-and-more-fun"},{"Id":11229,"Author":{"Name":"Alex Papadimoulis","FirstName":"Alex","ShortDescription":"Founder, The Daily WTF","DescriptionHtml":"Alex is a speaker and writer who is passionate about looking beyond the code to build great software. In addition to founding \u003ca href=\"http://inedo.com/\"\u003eInedo\u003c/a\u003e - the makers of \u003ca href=\"http://inedo.com/buildmaster\"\u003eBuildMaster\u003c/a\u003e, the popular continuous delivery platform - Alex also started The Daily WTF, a fun site dedicated to building software the wrong way.\r\n","Slug":"alex-papadimoulis","IsAdmin":true,"IsActive":true,"ImageUrl":"https://thedailywtf.com/images/alexp/apx-square500.jpg"},"Status":"Published","SummaryHtml":"\u003cblockquote\u003eIt\u0026#39;s summer break time, which as always, means we dip back into classic articles. Today, we pick which table we want. \u003ca href=\"https://thedailywtf.com/articles/The-Table-Selector\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;In my native language of German,\u0026#34; writes \u003cb\u003eChristian\u003c/b\u003e, \u0026#34;the word quellcode is a pretty direct translation of \u0026#39;source code\u0026#39;.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Unfortunately, bad code seems to cross language barriers - as does that famous three-letter explicit adjective. But occasionally I’ll find a piece of quellcode that deserves its own special, localized expletive: quäl-kot. When I stumbled across this interface in our quellcode, \u003cem\u003equäl-kot\u003c/em\u003e was the first thing that came to my mind.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e","BodyHtml":"\u003cblockquote\u003eIt\u0026#39;s summer break time, which as always, means we dip back into classic articles. Today, we pick which table we want. \u003ca href=\"https://thedailywtf.com/articles/The-Table-Selector\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;In my native language of German,\u0026#34; writes \u003cb\u003eChristian\u003c/b\u003e, \u0026#34;the word quellcode is a pretty direct translation of \u0026#39;source code\u0026#39;.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Unfortunately, bad code seems to cross language barriers - as does that famous three-letter explicit adjective. But occasionally I’ll find a piece of quellcode that deserves its own special, localized expletive: quäl-kot. When I stumbled across this interface in our quellcode, \u003cem\u003equäl-kot\u003c/em\u003e was the first thing that came to my mind.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre\u003epublic interface ITableSelector\n{\n    string selectTable1();\n\n    string selectTable2();\n\n    string selectTable3();\n\n    string selectTable4a();\n\n    string selectTable4b();\n\n    string selectTable5();\n\n    string selectTable6();\n\n    string selectTable7a();\n\n    string selectTable7b();\n\n    string selectTable8();\n\n    string selectTable9a();\n\n    string selectTable9b();\n\n    string selectTable10();\n\n    string selectTable11();\n\n    string selectTable12();\n\n    string selectTable13();\n\n    string selectTable14a();\n\n    string selectTable14b();\n\n    string selectTable14c();\n\n    string selectTable14d();\n\n    string selectTable15();\n\n    string selectTable16();\n\n    string selectTable17();\n\n    string selectTable18();\n\n    string selectTable19();\n\n    string selectTable20();\n\n    string selectTable21a();\n\n    string selectTable21b();\n\n    string selectTable22();\n\n    string selectTable23();\n\n    string selectTable24();\n\n    string selectTable25();\n\n    string selectTable26();\n\n    string selectTable27();\n\n    string selectTable28();\n\n    string selectTable29();\n\n    string selectTable30();\n\n    string selectTable31();\n}\u003c/pre\u003e\n\u003c/blockquote\u003e","BodyAndAdHtml":"\u003cblockquote\u003eIt\u0026#39;s summer break time, which as always, means we dip back into classic articles. Today, we pick which table we want. \u003ca href=\"https://thedailywtf.com/articles/The-Table-Selector\"\u003eOriginal\u003c/a\u003e. --\u003cstrong\u003eRemy\u003c/strong\u003e\u003c/blockquote\u003e\n\n\u003cp\u003e\u0026#34;In my native language of German,\u0026#34; writes \u003cb\u003eChristian\u003c/b\u003e, \u0026#34;the word quellcode is a pretty direct translation of \u0026#39;source code\u0026#39;.\u0026#34;\u003c/p\u003e\n\u003cp\u003e\u0026#34;Unfortunately, bad code seems to cross language barriers - as does that famous three-letter explicit adjective. But occasionally I’ll find a piece of quellcode that deserves its own special, localized expletive: quäl-kot. When I stumbled across this interface in our quellcode, \u003cem\u003equäl-kot\u003c/em\u003e was the first thing that came to my mind.\u0026#34;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre\u003epublic interface ITableSelector\n{\n    string selectTable1();\n\n    string selectTable2();\n\n    string selectTable3();\n\n    string selectTable4a();\n\n    string selectTable4b();\n\n    string selectTable5();\n\n    string selectTable6();\n\n    string selectTable7a();\n\n    string selectTable7b();\n\n    string selectTable8();\n\n    string selectTable9a();\n\n    string selectTable9b();\n\n    string selectTable10();\n\n    string selectTable11();\n\n    string selectTable12();\n\n    string selectTable13();\n\n    string selectTable14a();\n\n    string selectTable14b();\n\n    string selectTable14c();\n\n    string selectTable14d();\n\n    string selectTable15();\n\n    string selectTable16();\n\n    string selectTable17();\n\n    string selectTable18();\n\n    string selectTable19();\n\n    string selectTable20();\n\n    string selectTable21a();\n\n    string selectTable21b();\n\n    string selectTable22();\n\n    string selectTable23();\n\n    string selectTable24();\n\n    string selectTable25();\n\n    string selectTable26();\n\n    string selectTable27();\n\n    string selectTable28();\n\n    string selectTable29();\n\n    string selectTable30();\n\n    string selectTable31();\n}\u003c/pre\u003e\n\u003c/blockquote\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":"Classic WTF: The Table Selector","RssTitle":"CodeSOD: Classic WTF: The Table Selector","CachedCommentCount":11,"LastCommentDate":"\/Date(1784610638687)\/","LastCommentDateDescription":"2026-07-21","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784529000000)\/","ISODate":"2026-07-20","DisplayDate":"2026-07-20","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/classic-wtf-the-table-selector","CommentsUrl":"https://thedailywtf.com/articles/comments/classic-wtf-the-table-selector","Slug":"classic-wtf-the-table-selector","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-the-table-selector+-+Classic+WTF%3a+The+Table+Selector+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-the-table-selector\u0026t=Classic+WTF%3a+The+Table+Selector+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Classic%20WTF:%20The%20Table%20Selector:%20https://thedailywtf.com/articles/classic-wtf-the-table-selector","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fclassic-wtf-the-table-selector","PreviousArticleId":11228,"PreviousArticleTitle":"Princess Pricing ","PreviousArticleSlug":"princess-pricing","PreviousArticleUrl":"//thedailywtf.com/articles/princess-pricing","NextArticleId":11230,"NextArticleTitle":"Classic WTF: Fork and Log","NextArticleSlug":"classic-wtf-fork-and-log","NextArticleUrl":"//thedailywtf.com/articles/classic-wtf-fork-and-log"},{"Id":11228,"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\u003c/p\u003e\n\u003cp\u003e\n\u003cstrong\u003eSam\u003c/strong\u003e suggests this Error\u0026#39;d indicates \n\u0026#34;Disney+ preparing the ground for usage-based billing.\u0026#34; I\u0026#39;m intrigued by the idea that Disney might charge by the minute, but I suspect the reality is far more mundane.\n\u003c/p\u003e\u003cblockquote\u003e\u003c/blockquote\u003e","BodyHtml":"\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e\n\u003cstrong\u003eSam\u003c/strong\u003e suggests this Error\u0026#39;d indicates \n\u0026#34;Disney+ preparing the ground for usage-based billing.\u0026#34; I\u0026#39;m intrigued by the idea that Disney might charge by the minute, but I suspect the reality is far more mundane.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#13e08caf609f4133afd419a76acb432a\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"13e08caf609f4133afd419a76acb432a\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/13e08caf609f4133afd419a76acb432a.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eSilly prices at online shopping sites don\u0026#39;t usually make it through the gauntlet here, but I\u0026#39;m making an exception for the math, as \n\u003cstrong\u003eRob H.\u003c/strong\u003e points out \n\u0026#34;it ain\u0026#39;t mathin\u0026#39;.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#0924416949684290b36ad0d823129181\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"0924416949684290b36ad0d823129181\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/0924416949684290b36ad0d823129181.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eand \n\u003cstrong\u003eHarrison\u003c/strong\u003e suggests a novel kind of discounting math \n\u0026#34;I went to the supermarket later at night for some\nbeers, and had a snoop around the yellow sticker items\nfor anything I might need or could freeze. This bakery\nitem was priced in reverse, Was: 0.00, Now 1.99, discounted\nby negative infinity percent, and infinity is even printed upside\ndown somehow.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#d41527fab58d46fa97f4477dfcbf659d\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"d41527fab58d46fa97f4477dfcbf659d\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/d41527fab58d46fa97f4477dfcbf659d.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eWe\u0026#39;ve got a mojibake from \n\u003cstrong\u003edragoncoder047\u003c/strong\u003e:\n\u0026#34;Was browsing through the widget options on my iPhone home\nscreen and found that Game Center had decided to do\nthis. Mind you, my iPhone was, and always had been,\nset to English.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#c4fb48f719b34b5393e274cc6bc48f2a\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"c4fb48f719b34b5393e274cc6bc48f2a\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/c4fb48f719b34b5393e274cc6bc48f2a.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eFinally a combination of typical time travel and package tracker shenanigans, not explained by time zone hijinks.\n\u003cstrong\u003eEvelyn\u003c/strong\u003e notes \n\u0026#34;Apparently the package was registered in July, on its way\nduring January, and then got back to July.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#ef7d6784e50a48eebfaf4b912c8caa55\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"ef7d6784e50a48eebfaf4b912c8caa55\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/ef7d6784e50a48eebfaf4b912c8caa55.png\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n","BodyAndAdHtml":"\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e\n\u003cstrong\u003eSam\u003c/strong\u003e suggests this Error\u0026#39;d indicates \n\u0026#34;Disney+ preparing the ground for usage-based billing.\u0026#34; I\u0026#39;m intrigued by the idea that Disney might charge by the minute, but I suspect the reality is far more mundane.\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#13e08caf609f4133afd419a76acb432a\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"13e08caf609f4133afd419a76acb432a\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/13e08caf609f4133afd419a76acb432a.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eSilly prices at online shopping sites don\u0026#39;t usually make it through the gauntlet here, but I\u0026#39;m making an exception for the math, as \n\u003cstrong\u003eRob H.\u003c/strong\u003e points out \n\u0026#34;it ain\u0026#39;t mathin\u0026#39;.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#0924416949684290b36ad0d823129181\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"0924416949684290b36ad0d823129181\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/0924416949684290b36ad0d823129181.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eand \n\u003cstrong\u003eHarrison\u003c/strong\u003e suggests a novel kind of discounting math \n\u0026#34;I went to the supermarket later at night for some\nbeers, and had a snoop around the yellow sticker items\nfor anything I might need or could freeze. This bakery\nitem was priced in reverse, Was: 0.00, Now 1.99, discounted\nby negative infinity percent, and infinity is even printed upside\ndown somehow.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#d41527fab58d46fa97f4477dfcbf659d\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"d41527fab58d46fa97f4477dfcbf659d\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/d41527fab58d46fa97f4477dfcbf659d.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\u003cp\u003eWe\u0026#39;ve got a mojibake from \n\u003cstrong\u003edragoncoder047\u003c/strong\u003e:\n\u0026#34;Was browsing through the widget options on my iPhone home\nscreen and found that Game Center had decided to do\nthis. Mind you, my iPhone was, and always had been,\nset to English.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#c4fb48f719b34b5393e274cc6bc48f2a\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"c4fb48f719b34b5393e274cc6bc48f2a\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/c4fb48f719b34b5393e274cc6bc48f2a.jpeg\"/\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003e \u003c/p\u003e\u003c/blockquote\u003e\n\n\n\u003cp\u003eFinally a combination of typical time travel and package tracker shenanigans, not explained by time zone hijinks.\n\u003cstrong\u003eEvelyn\u003c/strong\u003e notes \n\u0026#34;Apparently the package was registered in July, on its way\nduring January, and then got back to July.\u0026#34;\n\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"#ef7d6784e50a48eebfaf4b912c8caa55\"\u003e\u003cimg itemprop=\"image\" border=\"0\" alt=\"ef7d6784e50a48eebfaf4b912c8caa55\" src=\"https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/15/ef7d6784e50a48eebfaf4b912c8caa55.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":"Princess Pricing ","RssTitle":"Error\u0027d: Princess Pricing ","CachedCommentCount":9,"LastCommentDate":"\/Date(1784491259980)\/","LastCommentDateDescription":"2026-07-19","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784269800000)\/","ISODate":"2026-07-17","DisplayDate":"2026-07-17","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/princess-pricing","CommentsUrl":"https://thedailywtf.com/articles/comments/princess-pricing","Slug":"princess-pricing","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fprincess-pricing+-+Princess+Pricing++-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fprincess-pricing\u0026t=Princess+Pricing++-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Princess%20Pricing%20:%20https://thedailywtf.com/articles/princess-pricing","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fprincess-pricing","PreviousArticleId":11227,"PreviousArticleTitle":"Wait Longer","PreviousArticleSlug":"wait-longer","PreviousArticleUrl":"//thedailywtf.com/articles/wait-longer","NextArticleId":11229,"NextArticleTitle":"Classic WTF: The Table Selector","NextArticleSlug":"classic-wtf-the-table-selector","NextArticleUrl":"//thedailywtf.com/articles/classic-wtf-the-table-selector"},{"Id":11227,"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\u003eKaren\u003c/strong\u003e was maintaining some specification tests that were flaky. Not \u003cem\u003eextremely\u003c/em\u003e flaky, but three or four times out of a thousand, the tests would just fail. The tests were complicated, and some of the operations were timing sensitive, so it wasn\u0026#39;t precisely surprising- but the problem was that they were actually generous with their timing windows. The unit tests passed consistently, it was only these functional, specification-based tests that failed.\u003c/p\u003e\n\u003cp\u003eSo, for example, there were sections in the tests where they wanted to wait at \u003cem\u003eleast\u003c/em\u003e 2ms. Since the code and tests were in TypeScript, they used the \u003ccode\u003esetTimeout\u003c/code\u003e function, which per standard JavaScript documentation \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\"\u003ewarns that it may wait longer\u003c/a\u003e. But again, Karen was \u003cem\u003efine\u003c/em\u003e with longer.\u003c/p\u003e\n","BodyHtml":"\u003cp\u003e\u003cstrong\u003eKaren\u003c/strong\u003e was maintaining some specification tests that were flaky. Not \u003cem\u003eextremely\u003c/em\u003e flaky, but three or four times out of a thousand, the tests would just fail. The tests were complicated, and some of the operations were timing sensitive, so it wasn\u0026#39;t precisely surprising- but the problem was that they were actually generous with their timing windows. The unit tests passed consistently, it was only these functional, specification-based tests that failed.\u003c/p\u003e\n\u003cp\u003eSo, for example, there were sections in the tests where they wanted to wait at \u003cem\u003eleast\u003c/em\u003e 2ms. Since the code and tests were in TypeScript, they used the \u003ccode\u003esetTimeout\u003c/code\u003e function, which per standard JavaScript documentation \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\"\u003ewarns that it may wait longer\u003c/a\u003e. But again, Karen was \u003cem\u003efine\u003c/em\u003e with longer.\u003c/p\u003e\n\u003cp\u003eUnfortunately for Karen, the documentation for NodeJS is less specific, as \u003ca href=\"https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\"\u003eit makes no guarantees\u003c/a\u003e about when the timeout function gets invoked. This means that it can fire the timeout \u003cem\u003ebefore\u003c/em\u003e the time has elapsed.\u003c/p\u003e\n\u003cp\u003eAfter many, many hours of debugging, that was exactly the situation that Karen found herself in. Which is why her very simple \u003ccode\u003ewait\u003c/code\u003e function went from:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-typescript\"\u003e\u003cspan class=\"hljs-keyword\"\u003eexport\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e \u003cspan class=\"hljs-title function_\"\u003ewait\u003c/span\u003e = (\u003cspan class=\"hljs-params\"\u003ems:\u003cspan class=\"hljs-built_in\"\u003enumber\u003c/span\u003e\u003c/span\u003e) =\u0026gt; \u003cspan class=\"hljs-keyword\"\u003enew\u003c/span\u003e \u003cspan class=\"hljs-title class_\"\u003ePromise\u003c/span\u003e(\u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003ecomplete\u003c/span\u003e) =\u0026gt;\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(complete, ms));\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTo the much more awkward:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-typescript\"\u003e\u003cspan class=\"hljs-keyword\"\u003eexport\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e wait = (\u003cspan class=\"hljs-attr\"\u003ems\u003c/span\u003e: \u003cspan class=\"hljs-built_in\"\u003enumber\u003c/span\u003e) {\n    \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e target = performance.\u003cspan class=\"hljs-title function_\"\u003enow\u003c/span\u003e() + ms;\n    \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003enew\u003c/span\u003e \u003cspan class=\"hljs-title class_\"\u003ePromise\u003c/span\u003e(\u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003ecomplete\u003c/span\u003e) =\u0026gt;\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e \u003cspan class=\"hljs-title function_\"\u003echeckReady\u003c/span\u003e = (\u003cspan class=\"hljs-params\"\u003e\u003c/span\u003e) =\u0026gt; {\n            \u003cspan class=\"hljs-keyword\"\u003eif\u003c/span\u003e (performance.\u003cspan class=\"hljs-title function_\"\u003enow\u003c/span\u003e() \u0026gt; target) {\n                \u003cspan class=\"hljs-title function_\"\u003ecomplete\u003c/span\u003e();\n            } \u003cspan class=\"hljs-keyword\"\u003eelse\u003c/span\u003e {\n                \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(checkReady, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\n            }\n        }\n        \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(checkReady, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\n    });\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis version of the function checks the time every millisecond, and only completes the operation if we\u0026#39;ve waited \u003cem\u003eat least\u003c/em\u003e as long as our target duration. This ensures that the timeout never fires \u003cem\u003etoo soon\u003c/em\u003e and it fixes the janky tests. But it\u0026#39;s also terrible. Terrible that it exists. Terrible that this is the best solution. Terrible that our functional tests need to be so time sensitive. And terrible that the Node runtime actually breaks the one consistent scheduling guarantee that pretty much every other scheduler does: that it\u0026#39;ll wait \u003cem\u003eat least\u003c/em\u003e as long as you asked, but might wait much longer.\u003c/p\u003e\n\u003cp\u003eAt best, we can say, \u0026#34;at least it\u0026#39;s only testing code.\u0026#34;\u003c/p\u003e\n\u003c!-- Easy Reader Version: wait for it… --\u003e","BodyAndAdHtml":"\u003cp\u003e\u003cstrong\u003eKaren\u003c/strong\u003e was maintaining some specification tests that were flaky. Not \u003cem\u003eextremely\u003c/em\u003e flaky, but three or four times out of a thousand, the tests would just fail. The tests were complicated, and some of the operations were timing sensitive, so it wasn\u0026#39;t precisely surprising- but the problem was that they were actually generous with their timing windows. The unit tests passed consistently, it was only these functional, specification-based tests that failed.\u003c/p\u003e\n\u003cp\u003eSo, for example, there were sections in the tests where they wanted to wait at \u003cem\u003eleast\u003c/em\u003e 2ms. Since the code and tests were in TypeScript, they used the \u003ccode\u003esetTimeout\u003c/code\u003e function, which per standard JavaScript documentation \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\"\u003ewarns that it may wait longer\u003c/a\u003e. But again, Karen was \u003cem\u003efine\u003c/em\u003e with longer.\u003c/p\u003e\n\u003cp\u003eUnfortunately for Karen, the documentation for NodeJS is less specific, as \u003ca href=\"https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\"\u003eit makes no guarantees\u003c/a\u003e about when the timeout function gets invoked. This means that it can fire the timeout \u003cem\u003ebefore\u003c/em\u003e the time has elapsed.\u003c/p\u003e\n\u003cp\u003eAfter many, many hours of debugging, that was exactly the situation that Karen found herself in. Which is why her very simple \u003ccode\u003ewait\u003c/code\u003e function went from:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-typescript\"\u003e\u003cspan class=\"hljs-keyword\"\u003eexport\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e \u003cspan class=\"hljs-title function_\"\u003ewait\u003c/span\u003e = (\u003cspan class=\"hljs-params\"\u003ems:\u003cspan class=\"hljs-built_in\"\u003enumber\u003c/span\u003e\u003c/span\u003e) =\u0026gt; \u003cspan class=\"hljs-keyword\"\u003enew\u003c/span\u003e \u003cspan class=\"hljs-title class_\"\u003ePromise\u003c/span\u003e(\u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003ecomplete\u003c/span\u003e) =\u0026gt;\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(complete, ms));\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTo the much more awkward:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-typescript\"\u003e\u003cspan class=\"hljs-keyword\"\u003eexport\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e wait = (\u003cspan class=\"hljs-attr\"\u003ems\u003c/span\u003e: \u003cspan class=\"hljs-built_in\"\u003enumber\u003c/span\u003e) {\n    \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e target = performance.\u003cspan class=\"hljs-title function_\"\u003enow\u003c/span\u003e() + ms;\n    \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-keyword\"\u003enew\u003c/span\u003e \u003cspan class=\"hljs-title class_\"\u003ePromise\u003c/span\u003e(\u003cspan class=\"hljs-function\"\u003e(\u003cspan class=\"hljs-params\"\u003ecomplete\u003c/span\u003e) =\u0026gt;\u003c/span\u003e {\n        \u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e \u003cspan class=\"hljs-title function_\"\u003echeckReady\u003c/span\u003e = (\u003cspan class=\"hljs-params\"\u003e\u003c/span\u003e) =\u0026gt; {\n            \u003cspan class=\"hljs-keyword\"\u003eif\u003c/span\u003e (performance.\u003cspan class=\"hljs-title function_\"\u003enow\u003c/span\u003e() \u0026gt; target) {\n                \u003cspan class=\"hljs-title function_\"\u003ecomplete\u003c/span\u003e();\n            } \u003cspan class=\"hljs-keyword\"\u003eelse\u003c/span\u003e {\n                \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(checkReady, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\n            }\n        }\n        \u003cspan class=\"hljs-built_in\"\u003esetTimeout\u003c/span\u003e(checkReady, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\n    });\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis version of the function checks the time every millisecond, and only completes the operation if we\u0026#39;ve waited \u003cem\u003eat least\u003c/em\u003e as long as our target duration. This ensures that the timeout never fires \u003cem\u003etoo soon\u003c/em\u003e and it fixes the janky tests. But it\u0026#39;s also terrible. Terrible that it exists. Terrible that this is the best solution. Terrible that our functional tests need to be so time sensitive. And terrible that the Node runtime actually breaks the one consistent scheduling guarantee that pretty much every other scheduler does: that it\u0026#39;ll wait \u003cem\u003eat least\u003c/em\u003e as long as you asked, but might wait much longer.\u003c/p\u003e\n\u003cp\u003eAt best, we can say, \u0026#34;at least it\u0026#39;s only testing code.\u0026#34;\u003c/p\u003e\n\u003c!-- Easy Reader Version: wait for it… --\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":"Wait Longer","RssTitle":"CodeSOD: Wait Longer","CachedCommentCount":11,"LastCommentDate":"\/Date(1784364259230)\/","LastCommentDateDescription":"2026-07-18","DiscourseTopicId":null,"DiscourseTopicOpened":false,"PublishedDate":"\/Date(1784183400000)\/","ISODate":"2026-07-16","DisplayDate":"2026-07-16","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/wait-longer","CommentsUrl":"https://thedailywtf.com/articles/comments/wait-longer","Slug":"wait-longer","TwitterUrl":"//www.twitter.com/home?status=https%3a%2f%2fthedailywtf.com%2farticles%2fwait-longer+-+Wait+Longer+-+The+Daily+WTF","FacebookUrl":"//www.facebook.com/sharer.php?u=https%3a%2f%2fthedailywtf.com%2farticles%2fwait-longer\u0026t=Wait+Longer+-+The+Daily+WTF","EmailUrl":"mailto:%20?subject=Check%20out%20this%20article%20on%20The%20Daily%20WTF...\u0026body=Wait%20Longer:%20https://thedailywtf.com/articles/wait-longer","GooglePlusUrl":"//plus.google.com/share?url=https%3a%2f%2fthedailywtf.com%2farticles%2fwait-longer","PreviousArticleId":11226,"PreviousArticleTitle":"The Error Check","PreviousArticleSlug":"the-error-check","PreviousArticleUrl":"//thedailywtf.com/articles/the-error-check","NextArticleId":11228,"NextArticleTitle":"Princess Pricing ","NextArticleSlug":"princess-pricing","NextArticleUrl":"//thedailywtf.com/articles/princess-pricing"}]