Curious perversions from the IT world

Original author: thedailywtf.com
  • Transfer
The Daily WTF website has been collecting funny, wild and / or sad stories from the IT world for 14 years. I translated several stories that seemed interesting to me. All company names have been changed.

3,000 miles to work


True story from the personal experience of our author Snoofle. [Original]

Many decades ago, DefCon Inc, a defense contractor, worked for the US Army and tried to get a new contract to create some kind of application used in combat. The company wanted to demonstrate in its proposal that it had enough staff to carry out this project. Therefore, she hired more than a thousand different programmers, project managers, managers, and so on. The military, who studied various commercial proposals, saw a bunch of new employees completely unfamiliar with the necessary processes, procedures and requirements, so they handed over the contract to another company. The contractor, for his part, dismissed the entire thousand people.

After a few months, another similar contract arose. The company again hired a thousand people to show that it has staff. A few months later the contract was again transferred to another contractor, and the company again dismissed the entire thousand.


For two years, this has been repeated several times.

After all this, the bulk of the available for hire employees was already aware of the very short cycle of hiring-dismissal in the company, so the contractor could not attract anyone except newcomers who had just graduated from educational institutions. Finally, it was up to some top-level manager that all these people had just been much cheaper because of the desks than experienced developers on the staff of the company, and those whom the company had hired-dismissed for the sake of contracts. Therefore, he issued an order that all experienced personnel of the company should be replaced by cheap young employees. The process took two years, but it still happened.

Now that salary costs have dropped significantly, and they fucking pissed off all the experienced candidate developers, the company could increase its permanent staff, without inflating the salary budget. She could only hire young, inexperienced developers to finally get a contract.

Unfortunately, all these young developers had very little experience, and the company no longer had people who had been in the trenches to train them. Therefore, the result of their two-year contract was this unreliable project, which often crashed, behaved unpredictably and which could not be modified. Such properties are undesirable when dealing with a system that must fire and blast.

At one point, one of the top executives realized what had happened, made the company stop behaving like an elephant in a china shop, and hire highly paid consultants. Unfortunately, highly paid consultants were well aware of the hiring-layoff cycle and did not want to have anything to do with the organization. After some time, the company had to significantly improve the conditions of employment, until finally a few experienced employees agreed to get a job as full-time employees. It happened in New Jersey.

After the management assigned these new employees to the project to speed up work on it, the new employees said, “Wait a minute, there's a huge hole in the middle of this project!”The management responded that this part of the project is classified and can only be studied by people with access to classified information and only at an enterprise in California. Appropriate approvals were requested and obtained, after which experienced employees were sent to a company in California for two weeks.

Before they agreed to the trip, the developers wanted to know how they would be able to access the materials after studying. After all, access is only possible on-site in California, and all employees live and work in New Jersey. They were told that they would find out about the details in California.

Well, all of them flew to the west coast, settled in hotels and went to the office.

At that moment they were informed about all the problems that need to be fixed. On Thursday, the second week of work, it was decided that it would take about two years to complete all the necessary upgrades. The developers again asked, “How are we going to get access to materials from New Jersey?” The managers responded that all the work must be done on site and they will remain in California for the next two years. Starting next Monday.

But wait, they didn’t have the opportunity to discuss this with their families! How will the absence of 90% of the time of a parent affect children? Would they want to live in hotels and airports for two years? What the fuck did the company not hire employees on the spot in California, but did it in New Jersey?

It turned out that since the contractor is located in New Jersey, the staff they hire must also be registered there. Of course, if this were reported before employment, the majority of employees (if not all of them) would refuse to work. If they knew, none of the workers would have boarded the plane and would not have flown to California to familiarize themselves with the project.

You can not say that the rest of the work for managers was rubbing up about the need for sacrifices for the company, and the developers wondered: “What the hell?” Thursday evening was busy with endless home calls. On Friday morning, all employees quit and went to the airport to return home.

The representatives of the army behaved with dignity and reacted with understanding to the fact that people do not want to leave their homes and families for two years. However, it became much tougher when it came to talking with the contractor and to fulfilling his promises about having experienced personnel at the place of work.

As a result, the contract with the contractor was terminated, and in its place was hired to restore order a new one.

Failure case


[Original]

image

On the first day of the new job, Sebastian was not particularly enthusiastic. He has already seen a lot and gained indifference and pessimism. This new work should not have been any different: a bunch of annoying colleagues, poorly thought-out requirements, old code bases full of spaghetti code. But she was well paid, and he was tired of his old group, he was tired of the same familiar faces. Therefore, he internally prepared for slightly new shades of the same office policy and dreary tasks.

He didn’t even get very upset by going to the IT department for his credentials and hearing the buzzing and clicking of the old Packard Bell servers. Sebastian simply lowered his bar for working computer requirements to several levels and returned to the new office. Yes, his position meant his own office and the appropriate payment. For this he could come to terms with many others.

His login worked at the first attempt, which was a pleasant surprise. He was expecting Windows XP; when Vista booted, he wasn’t sure whether he should enjoy a newer OS, or be horrified that it was Vista. Having completed the reception of the administrator’s authority and curtailed UAC, he could even pretend for a while that this was a “seven.” “To frighten me, something more is needed ,” he thought, and started Outlook.

In the inbox was already mail: a few welcome letters with information for new employees, as well as the first task from his manager. Impressed, if not more, with the efficiency of assigning tasks, he opened a letter from his new manager.

The first letter was like this:

Hello Sebastian, welcome to our perfectly honed working environment. Everything is done correctly in it. When creating project documents, you will work with Bonk-Word (a web application for documenting IBM). Do not forget to save work often! When Bonk-Word crashes, you will need to write a letter to the IT department to restart it.

The company prepares project documentation. Write everything in the passive voice, use purple for the heading of chapters and green for section headings. Documents are checked daily by the president of the company at 9 am, so be prepared for this. Errors in the headers will become a “black mark” in your personal file.

Begin by designing a Macintosh font problem solution that we cannot solve for four years. Tomorrow, by 9 am, you should have a six-page project document. Thank.

“Six pages for tomorrow?” Sebastian worried. “I guess I was glad of efficiency too soon. Well, at least it won’t be boring , ”he cracked his knuckles, opened Bonk-Word and began to deal with the so-called problems with fonts.

The first thing he found out - the manager was not joking about the frequent preservation. By the end of the day, he mentally made bets: what will fall first - Bonk-Word or Vista itself. Both of them crashed about every half hour. But keeping statistics on the fly for some reason reassured Sebastian. It reminded him: in the world, something else is working. The simplest mathematical operations were not impressive, but they were reliable. Regular. Stable.

Perhaps in this office, Sebastian was feeling lonely. But he was quiet and separate. Let the constant departures annoyed, but Sebastian still moved forward. He lingered at work to explore a variety of font rendering literature, including the Postscript specification, accompanying literature with recommendations for its use and information centers on the World Wide Web, created to collect the wisdom of the industry’s best minds in a familiar and convenient question and answer format . He extensively described in the document "creating a Python program for rendering each character." He spent two pages describing what could be said in two words.

"If they need six pages, they will get six pages ," thought Sebastian.

The first day turned out to be strange, but Sebastian saw that he could stand it for at least several years. He finished the work, left the building (which smelt suspiciously of old leather underwear) and slowly approached his “free parking space” (another advantage justifying this work in his eyes). Slowly - because the site was completely eroded by rust, and in many places the concrete fell off completely, revealing floor and column reinforcement.

The next morning, exactly at 9:00, Sebastian was in the office of his manager, waiting for the first verification of the project from the president of the company, who called by phone. Sebastian felt uncomfortable from speaking directly with the president, given that there were sixty employees in the company, but he had to endure it.

“I did as requested, and in the right amount. Most likely, this is just a formality, after which I can get to work. ”

An hour later, humiliated and exhausted, Sebastian returned to his office. The absurd but cruel criticism he received in his ears still rang. According to the president, his section headings were barely “greenish”, and not green, as the company required, and the headings of the chapters are inexcusably “reddish” instead of the expected purple ones. In addition, he was unequivocally informed that it was impossible to debug fonts using Python. Instead, Sebastian was ordered to work in C ++ and use the company's “wonderful” software libraries. Waiting for the president to call, manager Sebastian praised the document, but during the inspection did not say a word, staring intently at the brick wall at his desk.

Sebastian closed the office door, shutting himself off from the rest of the company. He sat down in his luxurious leather chair and stared at the barely working computer screen. He opened his document again, and then restarted the car, because Vista decided to fly out. When the computer started up again, he checked his bank account, thought about mortgage payments, and clenched his teeth.

“Well, okay,” he said out loud in an empty office. “Take a look at these libraries.”

The first thing he began to look for was documentation. Naturally, in such a company obsessed with documents, the documentation for “wonderful” libraries should be accurately typed with the correct typeface with a perfectly accurate shade, with the correct headings of chapters and titles of sections. But there was no documentation ... There were a lot of project documents with perfect green and purple flowers. But they described only the development methodology of the library and said nothing about its use.

"Am I losing my mind?" Sebastian asked himself when the car rebooted for the third time. “Perhaps the code is self-documented ...”

He was terrified, but he was not particularly surprised: the libraries consisted of poorly thought out wrappers for string functions from the standard library.

Despite the constant fiasco, Sebastian kept a punch. He was called daily for another round of verbal bullying. The company for four years could not cope with this font problem; nevertheless, none of the things they proposed suited the president. Sebastian abandoned his own company library, starting to solve the problem in the known Python; in the end, if they still spread rot, then why do what they say to you? But whatever he uses: his own Python tester, or Microsoft tester, or Apple, or Adobe - the font remained a complete chaos. 488 ineradicable, unrecoverable, constructive errors that cannot be patched.

The president categorically refused to admit the truth. He claimed that it was Sebastian’s fault, because he does not use the excellent C ++ libraries.

Having exhausted all the options, Sebastian left the key to the rusting garage on the manager's desk along with a letter of resignation. He said goodbye to his lovely office and hellish machine, which was issued for the computer. He inhaled deeply, the last time he felt the dreary smell of the skin and left, finally and irrevocably.

For some reason, he doubted that he would miss the company.

You can get sick from such health care.


[Original]

In any industry there is information that needs to be transferred between incompatible systems. If you lived the life of a righteous man, then these systems were simply different applications on the same platform. However, if you deviated from the good way, then these systems were written in different languages ​​for different platforms running in different operating systems with different byte ordering. Imagine some Java application in Safari under some version of Mac OS that needs to exchange data with some version of .NET under some version of Windows , which, in turn, needs to communicate with some version of COBOL with EBCIDIC binary code running on some mainframe.

Long before anyone could have imagined such a nightmare, we worked with SGML , which degraded evolved into XML , which should be a trivial acceptable way of specifying the format and fields contained in the document with a parser available on all platforms, so that information can be exchanged, without knowing anything other than a DTD and / or schema for validation and parsing.

Not hoping for the best, to simplify the work, we wrote on top of the XML wrapper library.

Unfortunately, they did not cope with the task.


In the healthcare industry, some kids working with open-source have created a (H) ealthcare (API) project, or HAPI , which is essentially an object-oriented text messaging parser in the healthcare industry. Unfortunately, they seem to have suffered from the “do not know when to stop” syndrome .

Instead of implementing a generic parser that simply breaks a delimited string or a fixed format string into a list of text field values, the latest versionIt implements 1205 different parsers, each of which has its own high-level data structure. Top level structures have dozens of substructures. Each parser has one or more methods to access each field. A field may be a single instance or a list of instances, in which case it is necessary to programmatically determine which access method to use.

This is an API with about 15 thousand method calls! What did these developers think about?

For example, the class: EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO may have zero and more product service sections. Therefore, I immediately begin to think about any array or list. Therefore, instead of something like this:

    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
    List <EHC_E15_PRODUCT_SERVICE_SECTION> prodServices = info.getProductServices ();
    // iterate

... we need to do some of this:

    // Get the substructure
    EHC_E15_PAYMENT_REMITTANCE_DETAIL_INFO info = ...;
    // Get the embedded product-service from the substructure
    // ... if we know for sure that there is only one message in it:
    EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION ();
    // ... if we don’t know how many will be:
    int n = infos.getPRODUCT_SERVICE_SECTIONReps ();
    for (int i = 0; i <n; i ++) {
        EHC_E15_PRODUCT_SERVICE_SECTION prodSvc = info.getPRODUCT_SERVICE_SECTION (i);
        // use it
    }
    // ... or you can just take them and iterate
    List <EHC_E15_PRODUCT_SERVICE_SECTION> allSvcs = info.getPRODUCT_SERVICE_SECTIONAll ();

... and you need to call the desired method, otherwise you risk an exception. But if there are many ways to perform a single task through the API, then there are many ways to accomplish it in the code using the API, which inevitably leads to problems.

You can say: "Well, everything is not so bad" ; enough to use what you need. But then you realize that some of these data structures are built into ten or more levels in depth, each has dozens of substructures and / or fields, and all of them have several access methods. Yes, all of them have really long names. And then you realize that the developers of HAPI are tired of typing text and began to use abbreviations for the whole with such clear names for data structures as LA1, ILT and PCR.

The API tries to be useful: if it does not find the expected in the field that you are requesting, it throws an exception and you need to figure out what went wrong. Of course, this implies that you already know what is being transmitted to you in the data stream.

Anonymous worked in health care and supported the library wrapped around HAPI. He was regularly given assignments (for which they were assigned for several weeks) by simply parsing one additional field. After spending a lot of time chewing up the API documentation volumes, he wrote a common parser from a single class of 300 lines with several split, substring, parseDate, and parseInt, as a replacement for the entire interface.

After this, the addition of a new field began to take no more than ten minutes.

Also popular now: