Living in the land of WTF



  • <FONT face=Helv size=2>

    WTF heaven!

    Dont get me wrong, I suffer from reading most of the codeSODs written in TDWTF's columns, but as a senior developper and a contractor, I move from place to place looking for that kind of mind boggling, disturbed, stupid, buggy code, that is in fact my revenue source. If the code that went into production was simply maintainable by interchangeable interns that you can dump as soon as they start asking for a normal pay, there wouldn't be a chance for me to make a living. This is why I thought I'd found heaven when I got a contract in that fat corporate bank that we'll call FCB. I was called in to help on a "migration to Web2.0" proof of concept, with a beautiful architectural design in which there were more layers than actual features. It reminded me of Will Coyote's next plan for catching the road runner. Oh what joy I had, imagining how much fun I would derive from dealing with the comitee of people that had to be responsible for that monstruousity.

    Or is it really?

    Of course, the FCB being so great, is certified CMMI 3rd level, so I was rather surprised to find that I was not at all bothered by the usual endless meetings and sterile reports. No apparently, our team existed in an undocumented no-mans-land where code gets actually produced before it goes into the ever crushing machinery of the process. But we still inherited code from other teams which had a complete process with full documentation (of the process of documenting the procedures etc). This looked like heaven. I had a few laughs reviewing some of the bits of code from the original product, like this new concept of variable enumation:

    <FONT face=Helv size=3>
    public enum PseAuthentMode {
          PASSWORD("PASSWORD", 0),
          EMVCAP("EMVCAP", 1),
          PKI("PKI", 2);
    
      private String type = null;
      private int code = 0;
        //snip
      public void setCode(int code) {
           this.code = code;
      }</PRE></FONT></BLOCKQUOTE>
    

    the setter wasn't used, but the programmer had tried to use it somewhere and left a comment in French saying that "for some reason", it hadn't worked. He must have found some other convoluted way to solve a simple problem with a complicated WTF....

    In another way, some of the code looked like it had been automatically generated:

    <FONT face=Helv size=3>
    public static final int _E_E_NH_G_CRITERE0 = 0;
    public static final E_Nh_G_Critere1 E_E_NH_G_CRITERE0 = new E_Nh_G_Critere1(_E_E_NH_G_CRITERE0);
    public static final int _E_E_NH_G_CRITERE1 = 1;
    public static final E_Nh_G_Critere1 E_E_NH_G_CRITERE1 = new E_Nh_G_Critere1(_E_E_NH_G_CRITERE1);
    public static final int _E_E_NH_G_CRITERE2 = 2;
    public static final E_Nh_G_Critere1 E_E_NH_G_CRITERE2 = new E_Nh_G_Critere1(_E_E_NH_G_CRITERE2);
    public static final int _E_E_NH_G_CRITERE3 = 3;
    public static final E_Nh_G_Critere1 E_E_NH_G_CRITERE3 = new E_Nh_G_Critere1(_E_E_NH_G_CRITERE3);
    
    </FONT>

    etc for nearly 200 values, don't laugh, used for example in this way:

    <FONT face=Helv size=3>
    public final int marshallSize() throws GoalSystemException {
    		switch (getDisc().getValue()) {
    		case E_Nh_G_Ident1._E_E_NH_G_IDENT1:
    			return 52;
    		case E_Nh_G_Ident1._E_E_NH_G_IDENT2:
    			return 52;
    		case E_Nh_G_Ident1._E_E_NH_G_IDENT26://not 3
    			return 25;
    		case E_Nh_G_Ident1._E_E_NH_G_IDENT4:
    			return 18;
    		case E_Nh_G_Ident1._E_E_NH_G_IDENT5:
    			return 19;
    		default:
    			throw new GoalSystemException(CodeError.NDRERR_CASE_NOT_FOUND);
    		}// fin switch
    
    </FONT>

    Don't ask me why 26 and not 3, I could only wonder, but I will try and give you "some" insight. It just works so I closed my eyes and the file...

    I said generated, but it is hand maintained with a big excel sheet giving explanations in a very poor English for each of the codes. 3 is the "list of operations on this account" and 26 is "Relevé d'op", french for the same list of operations. In fact, they were reproducing in Java some development method born in Cobol that had somehow survived in C (not the "getDisc" which is the discriminant of a union type) and made it's way out of the black box to plague the front end designer. There were more than 3 current companies contributing to the current code and there had been many more in the original product. For "security reasons", there was no direct way for us to get the code from our contributors in Belgium, so one of the developpers had to take a train and come to Paris with a usb drive and dump his files into our machines, ready to deploy into the test environment.

    I started having some serious doubt about the whole process when my demand for ANY source control went ignored for three whole weeks. Not that our contributors weren't using some (CVS and Subversion were both used by our other coders), but the integration team didn't really exist, so we hardly got machines.

    No, this looks more and more like hell on earth

    In fact, the developpement tools are imposed, as is the environment. RSA, WebSphere. but our computers can't run the software because they don't have enough RAM. The rights of access limit us to internal webpages, authorized documents and authorized applications which do not include most of the tools of our trade...

    We are receiving new lists of requirements everyday on a part of the project that has already been delivered. The documentation on the layers that we are supposed to use is written in English, but probably with google translate from the original french. I cant get the original version.

    Now that I have seen enough different final versions of our target architecture (all of which have been presented as the only real version), I realize that some parts are being programmed by two different teams at the same time, and some parts are non existent and non provided for. It seems that these forgotten parts are now my responsibility I guess.

    I'm seriously polishing my resumé and starting to wake all my usual contract finding friends.

    Fighting back...

    Last night my boss went raoming through other offices, to steal some RAM, for an impromptu upgrade of one of our machines. We used the "liberated memory card" and now have one computer for an embryonic test environment. We have plans to scavange a couple of computers from a couple of contractors that are leaving in a couple of days... if noone betrays us.

    I hope to get a proof of concept working, long enough to get my pay check, and then, I ll let someone younger than me, more courageous, more powerful, do what has to be done:

    "You want to have a web2.0 application for home banking? Easy, should take a couple of guys 3 to 6 months, if you just chuck all of that junk away."

    </FONT>


  • @Tonton1964 said:

    in French
    Godammit, why can't we all agree to write in english? Do you know how fugly apps look if I start naming variables in my native language which incidentally doesn't even use the latin alphabet? @Tonton1964 said:
    one of the developpers had to take a train and come to Paris with a usb drive and dump his files into our machines
    Damn, just when I had cracked SSH too... still, this sounds sloppy. Did he make sure to handcuff the USB drive to his wrist too? And why the train? He should be in a fast armored car with a driver trained in evasive driving. 

     



  • @Tonton1964 said:

    Last night my boss went raoming through other offices, to steal some RAM, for an impromptu upgrade of one of our machines. We used the "liberated memory card" and now have one computer for an embryonic test environment. We have plans to scavange a couple of computers from a couple of contractors that are leaving in a couple of days... if noone betrays us.

    How the fuck do you work like that?

    Not, I suppose.

    When I need more RAM, I tell my boss, hey I need some more RAM and he's all Why? and I'm like this & that see, and he's all K, talk to X. By the end of the week, I got my RAM.

    This is how I got my kickass monitor. Also by emitting a modest narrowcasted reality-distortion-field to get my way, but eh. ;)



  • Scavenging for parts in other rooms was not the first solution. We have filed 3 demands for servers, 10 for different software. We also have a ongoing discussion in the higher levels of incompetence on "opening a channel" for a ssh with our counterparts... there's also plenty of solutions where we don't have to change move the guy, like taking the code home, ftp to any friendly place, and opposite operation on the other side.

    @dhromed said:

    Not, I suppose.

    I think you got me there. I'm out of here as soon as I can.



  • This is not the RAM you're looking for...

    jedi mind trick



  • @Tonton1964 said:

    It reminded me of Will Coyote's next plan for catching the road runner.

    You mean Wile E. Coyote (for future reference):



  •  Oh I think most of us can get the RAM we need, but "at the end of the week" becomes more like "in 6-8 months".



  • @CnC said:

     Oh I think most of us can get the RAM we need, but "at the end of the week" becomes more like "in 6-8 months".

    8 months over here. And I haven't even counted the dev tools... we were stuck with the Visual Studio 2010 Beta for almost a year, and when they finally purchased the licenses ... someone screwed up and we ended up with VS2008.



  • @danixdefcon5 said:

    8 months over here.

    In that case you should get them to order a 3D monitor and gyroscopic mouse, and argue that by the time you get it, everyone else will be programming in 3D.


  • Garbage Person

    @CnC said:

     Oh I think most of us can get the RAM we need, but "at the end of the week" becomes more like "in 6-8 months".

    So you get paid to warm a chair for 6-8 more months.

     

    When you're dealing with big business, logical argument doesn't fix problems - dragging ass and costing them boatloads of money does. 



  •  I'm very happy to hav left my Dilbertesque previous employer. I had to wait for 512MB RAM for 6 months as well.

     I went to my boss: I can't do these (crucial multi-million euro) computations because my machine doesn't have the RAM. It's about 30 euros to get some.

    Boss: I want you so give me a statement explaining how much money we save buying this RAM, or otherwise I can't authorize this purchase.

    Me: I don't have the RAM to make that computation, but it should be over a million euros.

    Boss: Not good enough, come back when you have precise numbers.

    Me: WTF

    Half a year later I was still stuck in this discussion, no matter what I tried. Then we got a "Management Intern" for 3 months on our department. Son of a golf buddy of the CEO. He apparently could "organize" things and with him came several boxes of stuff that he used to get his things done. Out came a bottle of wine, and he told be, give me your laptop, I'll sort it out. He went to the IT department, came back half an hour later with my laptop with more RAM and minus the wine bottle.

    I think the whole thing cost the company about 9.6 million euros.

    Energy and telecommunications companies: stay away, far away.


Log in to reply