Dave liked to think that he was a responsible, thorough application developer. He always tried to understand a problem before tackling it, to think through all ways a change could affect things, and to gather information before making decisions. So when he received complaints about the speed of the custom web application used by his work’s health department, he decided to do a little research to gather all the facts before reporting the issue to his boss.And sure enough, all it took was a little research: the logs were full of database query timeouts and memory limit terminations. After a small amount of performance analysis on the test database server, it was very clear that the database was by far the main cause of the slow speeds. As the number of entries in the database naturally increased, many of the queries became exponentially slower.Satisfied he had actionable information, Dave went to his boss to get approval to make fixes.“Thank you, Dave! But the database isn’t your job - you’re an application developer. Anything related to the database is the DBA’s job. I’ll get ‘Awesome’ on this right away.â€â€˜Awesome’, the affectionately-nicknamed-by-the-boss local Database Administrator (DBA), had no experience programming, but was considered “master of all things even tangentially database-relatedâ€. Dave tried to make his boss aware of an important caveat: “But the data access code is in the application. How can the DBA optimize it there?â€His boss was resolute: “That. Is. Not. Your. Job. Don’t even worry about it. I’m sure Awesome knows how to do it.â€And so instead of optimizing queries, Dave begrudgingly set up another testing instance of the application for Awesome to work with and handed over the details. Three days later, Awesome showed up at his door with bad news: “The application is completely broken.â€Incredulous, Dave logged in to debug a little and quickly discovered that the “web.config†file had been modified and was pointing to an incorrect server. “Awesome, please do not modify any code or application settings without letting me know. Modifying the web.config file can be dangerous if you don’t know what you’re doing. Just optimize by profiling the database on the testing database server - you don’t need to dig through the code.†With a glare, Awesome left, never to be heard from again.Until 5 days later, when he showed up at Dave’s door with amazing news: “It’s done.†Again incredulous, Dave logged into the test instance… and was shocked by how fast it was. Every page loaded nearly instantly. Even complex records searches displayed results immediately. Not a single perceptible delay remained.“How did you do it?â€, Dave asked.Awesome was recalcitrant: “You don’t need to know. It’s not your job. All you need to know is that it’s a lot faster, and I did my job.â€Dave pressed him further. Had he modified any code? Had he added any indexes? What changes had he made?
Trisha had the misfortune to inherit some old Cold Fusion code. One particular block needed to see if a file existed before it continued, and apparently the original developer really wanted to be patient and make sure the file was there, so they wrote this:
As we all know- especially those of us who just "sprung ahead" this weekend with Daylight Saving Time- dates, times, and time zones are complicated beasts. Handling them programmatically is even harder. Computerphile put together a great video on this topic, which is worth watching to understand why we receive so many Error’d submissions regarding downloads that claim they won’t finish until after the heat death of the universe.Here are some examples of mind-bending code attempting to wrangle with an already mind-bending topic...First up, Tom discovered this date formatting gem in an inherited application, in the Page_Load of several pages:
"The following image contains spoiler information. Due to the fact the material in this image will spoil upcoming errors, we have removed the excerpt so you must click the image to view the image contents," writes Jay M.
Renee’s company was a Silicon Valley managed services company. They needed the best data-center they could find to house their infrastructure, and cost was not an object. They loaded up a dump truck full of money and went shopping for the most expensive hosting they could find.For Renee, this meant lots of data-center tours. She played the tame geek for her management, ostensibly there to inspect the IT services. Her bosses were just there to see how much their prospective vendors would butter them up to close the deal.The front-runner was a company called “Isla Nublarâ€. Their first experience on the tour was a massive security gate, guarded by two armed men and a dog. They gave the entire car a quick search, including using mirrors to inspect the undercarriage. After being sniffed over by the dog and having their ID checked and re-checked, Renee and her bosses were allowed through.The building itself came from the “an alien spaceship has landed†school of architecture. It was steel, glass, organic curves and confusing arcs. A security guard and a sales engineer named John greeted them at the door. “We’re so excited to have you here,†John said. “As you’ll see, we’ve spared no expense.â€He showed them into a glass-walled atrium, full of natural light, tropical plants, and a catered spread laid out on a table, complete with coffee, macarons, and a sushi chef making rolls to order. “Can I interest you in any refreshments? The coffee is Kona- we’ve spared no expense.â€John showed them down the hall to the NOC. Behind the glass wall, staff bustled about the room, mostly ignoring the Mission Control-style wall display, and focusing instead on their own screens. Everyone looked busy, but didn’t actually seem to be doing anything. It reminded Renee of animatronic figures in Disneyland’s old “Mission to Mars†ride, and they seemed about as useful.“As you can see, we’ve spared no expense. Now, let me get you ready to see the data-center floor.â€â€œGetting ready†meant filling out piles of paperwork and NDAs, collecting everyone’s fingerprints, mugshots, and patting down everyone to ensure they weren’t smuggling a cellphone camera into the data-center.The entry to the data-center floor was through a man-trap, the security version of an air-lock. One at a time, they passed through the outer door, and an armed security guard waited for it to seal before pushing the button that released the inner door. After everyone cycled through, John reminded them, “We’ve spared no expense.â€Over the noise from the racks, John shouted out the key features. The floor was raised, and each tile had a dedicated sensor to detect if it were moved. There were motion sensors, water sensors, and a few times, John mentioned “laser beamsâ€. Every millimeter of the space was watched by cameras, and the room itself was a Faraday cage. The supports were earthquake proof and the walls were lined with Kevlar. They had triply redundant backup generators, and each rack had dual, independent power legs, in case anything went wrong with one of them. Each rack was secured with a grille that could only be opened with an admin’s ID badge.“As you can see,†John began.“You’ve spared no expense,†Renee finished. “I get it.â€Duly impressed, management signed the contracts the next day. That weekend, Renee and her team had to move their hardware in through the “secure loading dockâ€, which was just a regular loading dock with a sign that said, “Secure Area.†None of the extremely paranoid security they had seen coming in the front way was in sight here. No one complained, because it certainly made moving in easier.By Saturday night, everything was up and running. The switchover went without a hitch, and the customers hadn’t noticed a thing.By Sunday morning, disaster happened. Machines were down, network was down, and the customers were enraged. Renee was on the phone with the data-center support in an instant, and before five minutes had passed, John joined the call, trying to smooth things over. “I just want you to know, we’ve got no other outages. We’ve got the best electricians in the business looking at what appears to be a power outage in one of your racks. We’ve spared no expense.â€The first challenge for the electricians was simply getting permission to lift floor tiles without setting off every alarm in the building. They traced the power lines, but found no fault between the mains and the rack, which meant the problem must be in the rack itself.“They’re trying to trace the fault in the rack, but they can’t access the power cabling,†John explained.“What?â€â€œWell, we spared no expense. Our racks are custom built. The power lines run inside the frame of the cabinet. I’m getting Ray, one of the admins to join the call from the floor.â€â€œThis is tricky stuff,†Ray said, “and I don’t know how quickly we can fix this.â€â€œWe need our servers up now,†Renee said.“Right, so here’s what I can do- I can move your servers to one of our empty cabinets. Sound good?â€â€œWhatever it takes.â€â€œWe have spare cabinets,†John said, “because we spared-â€â€œJust get our servers back up.â€Ray stayed on the line while he worked. Renee heard him slide a server out of the cabinet and then say, “Hunh, that’s interesting.â€â€œThat’s not something I want to hear when you’re moving my servers.â€â€œThere’s a strange black switch down here. I’ve not seen a black switch in any of the other cabinets.â€Ray checked one of the other cabinets, and sure enough, it had a bright glowing red switch. “Hold onto your butts…†Ray said. He flicked the black switch in Renee’s failing cabinet. The light turned red, and the servers spun right back up.The switch was inconveniently placed, near the floor, where someone passing by the cabinet could accidentally jostle it, which is likely what happened. Unfortunately, moving the switch wasn’t possible. With their bizarre internal power cabling, and the way the switch was soldered to the internal power strip, it would require cutting, drilling, and probably a bit of welding to move it.The only practical fix was to use tape to secure the switch in the “on†position. “We’ll use the best tape money can buy,†John said, “and it won’t come off. We’ll spare no expense!â€[Advertisement] Release!is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!
In a professional situation, an incorrectly selected record can result in a mortifying loss of data. Therefore, it behooves one to select the proper row carefully in one's stored procedure. That's why Charles's development team uses SearchGuard, the premier design pattern for selecting just the right row:
In the interview, Initech seemed nice enough. The managers seemed like nice, normal people, and the company’s vibe seemed quite good. When Terrence was extended an offer, he accepted and joined.
Far away across the Atlantic, in the mythical land of Eastern Europe, where the sun don't shine and wild beasts roam the roads, lies a little country called Poland. Known in the world for its cheap manual labor and fondness for strong alcohol, it has for years been the butt of every national joke in almost all parts of the globe. But people here (or at least those who haven't run away yet) have been working hard to combat those pesky Eastern Bloc stereotypes, and as such, the country has in recent years seen a lot of social and technological progress. That last one, of course, comes with one notable exception: the government sector.Obviously, most countries' governments have a love-hate relationship with technology- but the Polish government invariably tends to be special. Between national-level exams being leaked by putting them in an unprotected folder with directory listing turned on, and the Social Insurance department buying 130,000 floppy disks in the year 2008, our government's technological proficiency has us ranking slightly below Elbonia. And so, when it was announced that the next local elections would be far more computerized than any of the previous ones, everyone trembled in fear.The election day came and passed. At that point, everything was still done using pen and paper, so nothing had a chance to break. But soon after, the Polish Electoral Commission announced that the election results might be "slightly delayed". At the same time, someone in one of the local commissions with access to the software used in vote processing noticed an odd .pdb file with debugger symbols in the program folder. Being a good citizen, they immediately took a decompiler, restored the source code in full, and put it on GitHub for everyone to see.Now, the following part might not be for the faint of heart. Here's one of the most notable source files from that GitHub repository.This particular piece of code had one simple task: taking XML files with election results and generating an HTML file with an official election protocol. There are many ways to approach that task. The more clever people would probably go for an XSL transformation. The slightly less clever ones would use an HTML template and fill it with data. This code, however, does not try to be clever. It aims to keep things simple, using an old and trusted way to achieve its goal:
"I was searching on Texas Instruments' web site when I found a block diagram for an oddly-shaped tablet," writes Renan B., "I mean, Gigabit Ethernet? PCI Express? I had no idea that they could squeeze in all these features!"
Circa 2005, using XML and XSLT to generate HTML was all the rage. It was cool. It was the future. Anyone who was anyone was using it to accomplish all-things-web. If you were using it, you were among the elite. You were automatically worth hiring for any programming-related task.Back then, Richard was working at a small web development company. In this case, "small" means the boss, whoe was a bright guy, but who had absolutely no knowledge of anything -web, -computer or -technology related would make all decisions relating to hiring, purchasing technology and creating technology procedures.Although Richard was trained as a developer, he had been doing some integration work on small client web sites while the company pursued bigger goals of developing a web portal framework that would allow them to pump out dozens of web portals. To help with the overall architecture, the boss hired an Architect who specialized in intelligent transactional agents. One of his claims to fame was a system he had previously built to map data to presentation HTML via XML and XSLT. The boss was impressed by his understanding and use of these technologies, and based almost entirely on just that, hired him.The architect spent several months analyzing the underlying data and all the state transitions that would be required, as well as the target HTML into which it had to be morphed. Then he spent several more months coding up the framework. One of the key pillars on which this framework was built was the extensive use of XML and XSLT to convert all the data into something a browser could interpret to render.When the consultant began to integrate his work with the rest of the infrastructure, lots of little problems started to pop up. For example, source control was really just copying the source tree to a dedicated directory on one developer's laptop. When the consultant had to deploy his latest jar, he would copy it to a network share, from which the developers would copy it locally to use it. However, at some point, the moving of the jar file became significantly less important than the using of the contents of the jar file, and the bug reports began to pile up.This particular application was basically a corporate directory categorized by region, commerce-type and category/sub-category/actual-category. There were 13 regions with about 4000 businesses, 4 commerce-types and about 300 categories. Any experienced developer would expect that searching for a specific business in region A, type B and category C would be quite fast. It would be reasonable to expect the query to complete in far less than one second. In practice, when all criteria were used, the web server timed out most search queries at 30 seconds.Apparently, the consultant decided that every little thing should be its own class. No matter how small. A data object containing a Date was insufficient. No, there were separate objects to hold day, month and year, all of which were wrapped in a MyDate object. Ditto for time. Ditto for day of week. Ditto for everything else you could imagine. Then, to really test the capabilities of the IO subsystem, network and silicon, he would query every record in the entire database, construct objects for every component, sub-component, sub-sub-component, and so forth via Hibernate, and scan the list using the slowest possible mechanism in the Java language: instanceof, to see if an object was of a particular type before attempting to use it for purposes of comparison. To make matters worse, it repeated this entire process three times for each query; once to check if each business was of the proper instance for the region, once for the commerce-type and once more for the category.Richard replaced the whole thing with a simple stored procedure that ran in less than 100ms.Having dealt with that, Richard and peers told their boss what they went through and asked him to fire the consultant. He agreed, but only after the consultant would modify his framework to support multiple portals on the same system.After two weeks, the consultant proudly proclaimed that the system now supported as many portals as they wanted. The procedure to enable this capability was to copy the entire project and rename it for each additional web portal.Having ripped out all of that framework, they never even got to try out the part of the framework that morphed data into XML to be XSLT'd into HTML.In the end, everything that the consultant did was trashed and rewritten by Richard and his peers in about a month.Upon reflection, Richard learned that just because you have knowledge of how to use one tool doesn't mean that you are an expert in everything. He also learned that an otherwise intelligent boss can make really stupid decisions if he doesn't have the requisite experience in the relevant field.[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!
The best thing about being a consultant, in Ashleigh's opinion, was that you got to leave at the end of a job- meaning you never had to live with the mistakes your pointy-haired supervisor forced on you.This client, an online retailer, just needed an update to their Web.release.config file to resolve their session-management issue. Ashleigh had been hired for a two-week contract, and on Wednesday of week two, the fix went live. Of course, she wouldn't get paid if she didn't manage to look busy, so Thursday morning, she was scrambling for a quick fix to add to the pile.That's when Betsy, the manager, popped by the temp cube. "Hey, I just got some new code from the offshore team. Mind taking a look at it?"Normally, Ashleigh would decline such a dubious honor; today, however, it seemed easier than digging at the growing pile of minor defects, so she agreed. The method in question was meant to eliminate blank lines in the middle of the address on an invoice, because it "looked weird" to the accounting department.Sure, whatever, Ashleigh thought. Dubious cost-savings were hardly unusual in a company that offshored their main development team and paid Ashleigh's exorbitant fees to clean up after them.
Last year around this time, we did a Free T-Shirt Day. You all gave some great feedback, so I thought we'd try it again with a Free Mug Day!My company, Inedo, will be once again sponsoring this round of The Daily WTF mugs. Although we haven't yet released our v5 of BuildMaster yet, we've made a lot of big improvements since last year, and thought this would be a good opportunity to show them off. The mugs will be the same, serious grade as always -- but this time, they'll feature the brand-new logo (unlike the one below).
Dario got a call that simply said, “Things are broken.†When he tried to get more details, it was difficult for the users to pin it down more clearly. Things would work, then they wouldn’t. The application would run, then it would hang, then it would suddenly start working again.He knew that his co-worker, Bob, had been doing some performance tuning, so that was probably the right place to look. “Bob, have you made any changes that might cause weird behavior?â€â€œNo, no. I’ve just been optimizing the file-handles.â€â€œAre you just using jargon to sound like you know what you’re talking about?â€â€œNo! I mean, I’ve just been optimizing how we manage our file-handles so that we don’t leave them open.â€â€œOh, that makes sense. Show me..â€Proud of his clever solution, Bob showed him:
Some horrible code is acres of awful, thousands of tortured lines of mess and horror. Some developers can compress their WTFs down into a handful of lines.For example, Zlatko was working with a Node.js developer who was big on unit tests. Unfortunately, that developer didn’t understand that you couldn’t write a synchronous test for an asynchronous method- the test will always pass.That’s why this code, buried in a callback, passed:
One day in winter, during that blissful dead stretch between Christmas and New Year’s, Chris was startled out of a deep sleep. He reached for his blaring cell phone, squinting at the painfully bright screen.
SharePoint. What can you say about it? Among other things, it's designed to help you manage and present content. It's supposed to make things easy for you. If you want some customization, just write some code to do whatever and configure it to run at the appropriate time for the appropriate page(s).Of course, this leaves open the possibility that folks who may be something less than experts might author said customizations.Paul is responsible for numerous customizations written by developers long gone from their project. One particular customization was to perform some clean up. At first, it was run once per day. Over time, that grew to running 8+ times per day on each of several servers.One day, the customization stopped working. Naturally, there was no record of it anywhere in source control (thank you predecessor coders).Having no alternative, the code was decompiled into the following loveliness:
Kevin L saw the program crash with a null pointer exception. This lead to digging through stack traces, logs, and eventually the commit history to figure out who was responsible.The code itself is a simple “string padding†function, the sort of thing that when people screw it up, you just have to wonder why. This variation on that theme, however, gives us that rare treat: an accurate comment that describes the function.
Every .NET programmer is familiar with the concept of properties. They’re a nice language feature, allowing the programmer to inject little bits of logic into the process of retrieving or setting the value of a field. A getter can, for example, lazily initialize a field when it’s first used, and a setter can validate the value before it’s set. Even a simple property with no logic beyond providing access to a backing field can be made useful by appearing in an interface or being overridden by a derived class.An important aspect of properties is that to the outside user, they appear almost no different from a regular field. As such, they’re supposed to behave like regular fields. Any visible side effects beyond what’s necessary are heavily frowned upon, and the developer who uses the property can reasonably expect it to provide transparent access to data from his point of view.KallDrexx’s coworker, however, was forced to deal with code made by people who didn’t seem to understand the “transparent†part– or, in fact, any part…
Ki and Morgan had an on-again, off-again relationship, but not because they couldn’t commit; Morgan was Ki’s dedicated recruitment agent at Impracticable Resources. Ki had to admit he left every other recruiter she’d dealt with in the dust. That’s why she was excited when he described the position at Initech: Ki had started as a web designer and migrated into Java development, and Initech was looking for exactly that to be the glue between their Java and UX teams. Eight short weeks ago, the initial phone screen had gone well.Gerard was Ki’s would-be boss’s name, and warned her straight away that Initech was procedure-friendly; every box on their list had to be ticked and accompanied by its own list of ticked box-ticking-assurance boxes, supplemented by a list of ticked box-ticking-assurance-box-ticking-assurance boxes before they could bring her on board.“I am very impressed by what I see,†Gerard said. “We want to bring you on-site, for our standard gauntlet of interviews. Sound good?â€â€œDefinitely,†Ki said. “When would you like me to come in?â€â€œWe’ll let you know,†Gerard said, “your recruiter will give you a call.â€Morgan did give Ki a call, almost three weeks later.“Ki, how’ve you been?â€â€œGood. Waiting to hear about the Initech position, I guess… You?â€â€œYeah, Initech. They seem really interested in you! Can you do Thursday afternoon?â€Ki stumbled out of Initech’s offices two-and-a-half hours after her arrival, exhausted but happy. Her interviews had gone extremely well. Gerard, who was head of the Java team, Celia, head of the UX team, and Armin, the lead designer, all agreed that she was at the exact nexus of design and development acumen that the job required. On the phone that afternoon, Morgan glowed to the extent one can glow via audio.“Ki, the job’s as good as yours!â€â€œThat’s great! Did they send you an offer?â€â€œWell… no. Knowing Initech, they’ll need you to come in again for a second battery of interviews. I’ll give you a call when they’ve been in touch.â€So that was that, for another three weeks.“Good news, Ki!â€â€œYou’ve got a lead on a company that hasn’t outsourced their hiring to a glacier?â€â€œEven better: Initech wants you to come in next Tuesday. Now, for this set you’re going to need a portfolio of previous work. You met Armin and Celia last time? Well, they’ll be grilling you on your presentation. That’s why I’m giving you all this notice!â€Ki looked at the past weeks sitting long and empty on her desktop calendar. “Uh, thanks.â€Gerard, Celia, and Armin were all glad to see Ki again, and somehow (perhaps because they had three weeks to prepare) they each had almost an hour of questions for her before her portfolio presentation. But she passed with flying colours and, on the brief tour of the office, Gerard apologized for the amount of time the whole process was taking. “If it were up to me,†he said, “you’d start tomorrow. But HR still wants to have a word with you, and the whole team is headed out West for the annual general meeting at Initech HQ. I’ll be sure to put in a good word for you with the bigwigs out there!â€Ki thanked Gerard and left. Soon after, she called Morgan.“So Gerard tells me good things!â€â€œYes, they seemed happy with me… again. But apparently there’s one more interview—did they mention when they’d be back from their visit to HQ?â€â€œLet me see… oh, yes, here’s Gerard’s email. Looks like you’ll be sitting down with HR on… hmm… uh, June 9th.â€â€œThat’s two weeks from now.â€â€œSure looks that way! Sorry, Ki. But this is going to be awesome once we’ve crossed the Ts and dotted the lowercase Js!â€And so Ki found herself up late on the night of June 10, having heard nothing from Morgan, Gerard, or Initech’s HR department. She was turning her mobile over and over in her hand, weighing her need to know against the possibility that Morgan, on the East Coast, would be asleep by now.“Hell with it,†she told herself, “if he didn’t want midnight phone calls, he should’ve gone into used-car sales.â€â€œH-Hello?†Morgan sounded groggy, but Ki held firm.“Hi Morgan, it’s Ki. I’m sorry to call so late, but I haven’t heard from Initech, and I’m wondering if they got in touch with you. I’m sure you understand that, after eight weeks, I really need to get some closure.â€There was a long pause on the other end, followed by a deep sigh. “…Ki, it’s… complicated. Really, I don’t know how this happened.â€There was that sinking feeling, the one that starts in your stomach and descends to places unmentionable. “How what happened, Morgan?â€"Well, I’ve got this email here from Initech HR. Apparently, in the wake of their annual general meeting at Initech HQ, it was decided that the role you’re applying for would be better suited to a less-technical candidate. I don’t know if they mean someone who just does web design, or what.“I’m really sorry about this, Ki. It sounds like you’re out of the running.â€â€œI don’t understand,†Ki said. “You’re saying they changed the job so I’m no longer a shoe-in?â€â€œI suppose that’s what I’m saying. Yes.â€â€œWell… okay. I’m sorry to hear that. Goodnight, I guess?â€â€œGoodnight, Ki…â€â€œOh, Morgan?â€â€œYes?â€â€œTry to find me a position in computer vision or compiler design next, okay?â€â€œHuh?â€â€œThat way, when they downgrade the position, I’ll be a perfect fit.â€â€œGoodnight, Ki.â€[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!
I'll be in London this week (Thus Feb 12) and Amsterdam next (Tues Feb 17), and thought it'd be a perfect opportunity for another The Daily WTF meet-up. Here's a pic from a previous year's London meet-up:
“I’ve got a gig for you,†said the recruiter.Clive, like many freelancers, weighed the contents of his bank account versus the daily rate he was promised, and decided that any gig was for him under those conditions. This one sounded mostly okay; an insurance company needed a new software package that would help them leap through some regulatory hoops. As a bonus, they wanted someone who could teach their devs the latest tools and techniques… like source control. Clive aced the interview, and started a week later. There was already an email waiting in his work inbox, from someone named Brandon. It read: “See me.â€That nose won't know what hit it…Brandon lurked in his office, adhered to his mid–90s ergonomic chair like it was an appendage. He glared over his monitor and stared at Clive. “You work for me,†he said.In monosyllables and four word sentences, Brandon revealed that no one who participated in the hiring decision would have any day-to-day contact with Clive. Clive reported to him, and him alone.“Okay… well, when I was hired, they said that they wanted me to set up Subversion. Should I get started on that?†Clive asked.“No.â€â€œMay I ask why? Do you have another preference? Would you like to discuss the options?â€â€œNo.â€Clive waited. Brandon didn’t expand. He simply stared at Clive. Stared, and stared.Clive slunk back to his cube and got started on looking at the code base. It currently lived in a file share, using the “file.pl.oldâ€, “file.pl.old.old†versioning convention. The code was Perl, and unreadable by even Perl standards. It had grown in a culture here “parsable means runnableâ€, included no comments, and had absolutely no tests. Clive’s only ally was Lee, another head-hunted expert who also reported directly to Brandon, and had a two week head start on understanding the code. When Clive got stuck, he poked his head around the cube wall and asked Lee.Like a glacier grinding down a mountain, Clive slowly worked his way through the code. After about a week, he was developing a small degree of confidence. Then an email from Brandon arrived: “See me.â€â€œYou’re disrupting the dev team,†he said.“What?â€â€œYou and Lee are making too much noise. This is an office, not a social club.â€â€œThat’s crazy. I’m just asking him questions about the work we’re doing! What, do you want us to schedule a conference room just to ask questions?â€â€œYes.â€Brandon stopped talking and resumed his staring contest. He stared, and stared… Clive got the point and scurried back to his cube.The requirements were complex and evolving, which wasn’t unusual. Only one user, Carole, actually knew what they were, which also wasn’t unusual. Clive sent her an email with a handful of questions, and tried to get some work done. He waited for a few days for her reply, and as he found new questions, he sent more emails.In a week, he had sent nearly half a dozen, but got no reply. He sent more, asking for status updates. Over this time, he had more questions. He tried calling her, but it dumped to a full voicemail box. He tried scheduling a meeting, but Carole never accepted.And then an email from Brandon arrived: “See me.â€â€œCarole says you’re harassing her,†Brandon said.“What?â€â€œYou send her emails, even after she answers your questions. She said you called a meeting but didn’t show up for it. This needs to stop.â€â€œThat’s crazy. She never replied, and I can show you my inbox to prove it.â€â€œCarole doesn’t use email,†Brandon explained. “An intern prints out her emails, and she replies via inter-office mail. She’s very busy. You have the requirements document. Implement it, and stop bothering her.â€â€œWhat, you want us to implement a solution without ever talking to the business user who knows the requirements?â€Brandon stared at him. And stared. And…With Lee’s help, Clive made some real progress over the next few months. They learned their way around the absurd date format (measured as the number of days since April 3rd, 1974, except when it was measured in the number of months since the preceding Monday, except when it was measured in the number of weeks since the following Sunday). They worked past the fact that no one was allowed to upgrade past Firefox 3, or the fact that they couldn’t run overnight jobs because all of the servers were turned off at 6PM sharp. Carole didn’t communicate, Brandon just stared at them, and the rest of their co-workers treated them like plague carriers.A few weeks before their six month stint expired, Clive was digging through the company network drive, searching for a spreadsheet containing sample data. He found one named after the recruiting company that placed him, and hoped that it was something useful. It was, after a fashion.The spreadsheet was a report illustrating exactly how much the recruiting company was getting paid to provide Clive and Lee. The fees were so abusive a used car salesman would have blushed. Change tracking and collaboration was enabled on the document, which meant Clive could read comments made by various users.From the senior management level, there were comments like, “It doesn’t matter how expensive it is.†Accounting warned, “We won’t have the money to pay annual bonuses, if we do this!â€Brandon had left his own note: “Our business is too special. They will fail. This is a waste of money. They will fail.â€The pieces clicked into place. Brandon hadn’t been making a prediction; he was making a promise. And he’d kept it- there was no way that Clive and Lee could deliver what was originally promised in the next few weeks.Then an email from their recruiter arrived. “That company still wants added staff. Do you want to re-up for another six months?â€Having learned from Brandon, Clive sent a one-word reply: “No.â€[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!
When most folks create something, be it carved, welded or coded, they take pride in what they're creating. It's a reflection of their soul. It's personal. They care.However, once you tell someone that their stuff will be in or on something that is someone else's responsibility (aka.: problem), they often take less care in what they're putting there.To me, the phrase The Cloud can be safely replaced with Someone Else's Computer in every conceivable context; load-distribution; storage; file transfer; etc.As such, all too often, when something is to be in/near/on/associated-with any-or-all-things-cloud, the folks who build it tend to do somewhat lower quality work.Ayken recently inherited an old website that quickly turned out to be a management nightmare. Every veteran who is used to fighting such ancient demons knows that every PHP project comes with ridiculous stuff like this trim-function that was clearly written in complete ignorance of the existence of regular expressions: