• christoofar (cs)

    90% of most senior developer positions open up in the market this way.  Break/Fix is a moneymaker.

  • Sean (cs)

    But did he even try re-indexing and tuning?

  • smitty_one_each (cs)

    That beats an application I saw where a very expensive view was implemented to figure user privileges at log-in time.
    Before the code review for this log-in module, I traced the code.
    Being a nice guy, and liking the coder whose work was under the microscope, I didn't gun for him during the review.  Afterwards, though, I asked him if the logic didn't have him hitting that expensive view twice during the procedure.  He was a little shocked when I walked him through the code supporting my claim.
    But it worked, so he never fixed it while I worked there...

  • podperson (cs)

    Hey it worked ...

    Pretty good value for a top-tier consulting firm in my experience.

  • smitty_one_each (cs)
    I spent the next two weeks fixing everything, and I was able to return the same data using only a single stored procedure that contained five select statements.  After I fixed (re-wrote) the page, it loads in less than a second.

    One of the hidden assertions behind this type of story is that you *can* make fundamental changes.  Sometimes, the AWCB (Asshat Who Came Before) implemented dates in a text field, and we aren't chartered to make fundamental changes beyond the one page for which we were hired.  So you end up implementing a server-side function to attempt a typecast and at least flag the bad data for the query.
    Revolutionary change is swell when you can sell it; but we're often stuck with the ugly evolutionary change.
  • Amazinderek (unregistered) in reply to smitty_one_each

    Well, "Go Big or Go Home" is what I say!

  • Eric Wise (unregistered) in reply to Amazinderek

    I've done work for "top tier" consulting firms before as a W2 employee.  The value was never NEVER anywhere near what it claimed to be.

    The symptoms were poor management, salespeople who promised the world, customers who didn't test or verify anything, scope creep, and general incompetance in the development staff.

    That's why I work for myself.

  • mugs (cs) in reply to Eric Wise

    This would be more interesting if we knew what was causing it to do all of that.

  • John Smallberries (cs) in reply to mugs
    mugs:
    This would be more interesting if we knew what was causing it to do all of that.

    yeah, I can understand selects, but why updates & inserts? especially going through COM+ tranactions?

    wtf?
  • something (unregistered)

    What no MSMQ? wusses..

  • John Bigboote (cs) in reply to something
    Anonymous:
    What no MSMQ? wusses..


    Guaranteed delivery is for wussies who can't handle uncertainty.
  • Matt B (cs) in reply to mugs
    mugs:
    This would be more interesting if we knew what was causing it to do all of that.


    seconded

    the WTF here is the lack of the details!
  • Bustaz Kool (cs)
    Alex Papadimoulis:

    Call me old-fashion, but I really do believe that leveraging a strategic partnership with a proactive service organization can actually synergize and streamline mission-critical objectives.

    Should we infer from this that your paradign is completely unshifted?

  • Mike Wills (unregistered)

    I didn't directly write the code, but we had the same thing. It was a poorly designed system. We have been living with it for a few years. We are now towards the end of the development of a complete redesign. It also sounds like it is much faster.. and this time we wrote it.

  • catapultic (cs)

    I hate cleaning up other people's code just as much as the next guy, but you have to remember. The guy who wrote it before you was probably qualified enough to get it to work, but due to pressure from above, inadequate design, time constraints, or other system constraints, sometimes people do things in a less optimal way in order to just get the damn thing to work. (Unless he was just an unskilled douche bag). I'm sure we've all found ourselves in a similar position. If you are a highly-paid consultant (or just an average-paid consultant like me) you want your client to be happy with a quickly delivered product that works, it doesn't necessarily have to be gorgeous code or run the fastest because your client probably doesn't care. For example: Right now I'm using Session variables. I hate Session variables, but they are a short-term solution while I'm waiting on a third party to rebuild their crappy, untested component and send us a new release. The SDLC is all about give and take, compromise, etc. and if we were all concerned with writing perfect code 100% of the time, projects wouldn't get delivered, and that would just suck for everyone.

    There is, however, a thin line between "compromising performance for functionality" and "inadequate skill level."

  • Rick Scott (unregistered) in reply to catapultic

    Why on earth do you hate session variables? What is the alternative?

  • catapultic (cs) in reply to Rick Scott

    Actually, personally I like session variables because they are easy to use, but if you google session-variables you will quickly see that it is the general opinion of the development community that they are the tools of the devil.

    What's the alternative? I don't know, there are so many session variables in the project I'm using right now, if I'm told I cannot use them, I will be screwed. (We can't use viewstate)

  • mahoneyr (cs) in reply to catapultic

    The drawback of session variables is when you have more than one web server you're screwed...

    Once that happens you have to either tie a user to single web server or move the session state out of process somewhere that all web servers can get at it - asp.net lets you do this easily and I'm sure other platforms do too. It's just that it's off by default and if you don't realise it you can cause yourself problems.

  • John Smallberries (cs) in reply to catapultic
    catapultic:
    Actually, personally I like session variables because they are easy to use, but if you google session-variables you will quickly see that it is the general opinion of the development community that they are the tools of the devil.

    What's the alternative? I don't know, there are so many session variables in the project I'm using right now, if I'm told I cannot use them, I will be screwed. (We can't use viewstate)

    I'm in a similar situation now; gotta get the app working, but don't have a robust component that allow session state management across a server farm and support both ASP and ASP.Net in the same session.

    For now, I just created a wrapper class for the session intrinsic. Later, I'll swap out the implementation with my shiny new stuff.

  • Diego Mijelshon (unregistered) in reply to catapultic
    catapultic:
    Actually, personally I like session variables because they are easy to use, but if you google session-variables you will quickly see that it is the general opinion of the development community that they are the tools of the devil.

    What's the alternative? I don't know, there are so many session variables in the project I'm using right now, if I'm told I cannot use them, I will be screwed. (We can't use viewstate)


    Repeat after me: "There is no silver bullet".
    Session variables are a nice way to have variables that have the same lifetime as the session (which expires usually 20 minutes after the user stopped using the application, unless you explicitly destroy it).
    You should understand the memory and scalability implications of this, and consider the alternatives (ViewState, Application, Cache, HttpContext, Static variables, Hidden fields...). If you do, and they are indeed the best solution, there is no reason not to use them.
  • dubwai (cs)
    Alex Papadimoulis:

    I have been fixing bugs and adding functionality to the code for over a month now, and I am shocked every single day at how poorly the application was written.

    I wonder if we work at the same company.  500K is nothing.  We've paid way more for stuff that doesn't even work at all.  But outsourcing development is a 'success', full steam ahead!

  • catapultic (cs) in reply to dubwai

    It's nothing too big, the session variables are just strings, not datasets or anything. Like "runtime user preferences" I guess.

    Like I said, we can't use Viewstate.

  • John Smallberries (cs) in reply to dubwai
    dubwai:
    Alex Papadimoulis:

    I have been fixing bugs and adding functionality to the code for over a month now, and I am shocked every single day at how poorly the application was written.

    I wonder if we work at the same company.  500K is nothing.  We've paid way more for stuff that doesn't even work at all.  But outsourcing development is a 'success', full steam ahead!


    Seriously. We paid about $2 million US for a system that took over a year to write. When it was delivered, it supported about 5 concurrent users (this was a web app, so that pretty much sucked) and ran at a snail's pace. They brought me in, I hired 4 more developers, and it took us 6 months to get the thing usable.

    Just for details: This was a specialized on-line content authoring app. The main problem was the content versioning mechanism. There was a single version number for all the content. Any time anyone made any change, the entire version's data was copied to new records in the DB. A fix to a single character typo would necessitate thousands of inserts into hundreds of tables. We had to redesgn the DB schema to support independent versioning of content sections, then reimplement the app on top. grrrr....
  • dubwai (cs) in reply to Sean

    Sean:
    But did he even try re-indexing and tuning?

    You are funny.

    [man, I hope you ae joking]

  • dubwai (cs) in reply to John Smallberries

    John Smallberries:

    Seriously. We paid about $2 million US for a system that took over a year to write. When it was delivered, it supported about 5 concurrent users (this was a web app, so that pretty much sucked) and ran at a snail's pace. They brought me in, I hired 4 more developers, and it took us 6 months to get the thing usable.

    Why not buy a house with a mislaid foundation at twice the price of a properly built house?  Developers don't get it.  It takes an MBA to understand these highly sophisticated financial moves.

  • John Smallberries (cs) in reply to dubwai
    dubwai:

    John Smallberries:

    Seriously. We paid about $2 million US for a system that took over a year to write. When it was delivered, it supported about 5 concurrent users (this was a web app, so that pretty much sucked) and ran at a snail's pace. They brought me in, I hired 4 more developers, and it took us 6 months to get the thing usable.

    Why not buy a house with a mislaid foundation at twice the price of a properly built house?  Developers don't get it.  It takes an MBA to understand these highly sophisticated financial moves.


    MBA == Must Be an Asshat?
  • John Smallberries (cs) in reply to catapultic
    catapultic:
    It's nothing too big, the session variables are just strings, not datasets or anything. Like "runtime user preferences" I guess.

    Like I said, we can't use Viewstate.

    Out of curiosity, why can't you use ViewState? As I understand it, it's just an encrypted name/value collection stored in a hidden form field. I'm assuming you really mean "can't", not just "don't wanna".
  • xinbi (cs)

    Have you ever thought that maybe bad coders (thinking they're great coders) look at great code and think, "What crap!"  ??

  • dubwai (cs) in reply to xinbi

    xinbi:
    Have you ever thought that maybe bad coders (thinking they're great coders) look at great code and think, "What crap!"  ??

    Only a bad coder thinks that good code is hard to understand.

  • loneprogrammer (cs) in reply to xinbi
    xinbi:
    Have you ever thought that maybe bad coders look at great code and think, "What crap!"  ??

    Sure, that happens.  They will say "This code is too complicated.  Why bother creating a new object when you can just use a couple of global variables instead?"

    "Why bother checking for errors when the user doesn't want to see them anyway?"

    "Why bother?"


  • Depressed (unregistered)

    [:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(]

    I work at a company where certain, mmm, influential individuals (who benefit financially from the decision) have largely decided that outsourcing development is the way to go.  I have seen much of this type of coding:  things that don't work or are designed terribly, disparate systems that need to be crammed to work together, all in pursuit of "quick hit" solutions (that somehow never turn out to be "quick").

    And then I get to see the politically connected [6] and clueless project manager types [:-*] who know nothing of the technology or the business take credit [H] for things that the actual developers [8-|] who work here do (quite literally, they actually claim they are developers).  Actual developers mostly aren't allowed to talk to the business directly. [:#]

    If my job paid less, I would be gone *so fast*.

     

  • dubwai (cs) in reply to Depressed

    Anonymous:
    I work at a company where certain, mmm, influential individuals (who benefit financially from the decision) have largely decided that outsourcing development is the way to go. 

    If you know this is true, have you considered placing an anonymous tip in the proper place?  That's unethical at best and possibly illegal.

    I was actually wondering lately whether there are a lot of kickbacks in these outsourcing deals.

  • seizethedave (cs) in reply to Depressed
    Anonymous:

    [:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(][:'(]

    I work at a company where certain, mmm, influential individuals (who benefit financially from the decision) have largely decided that outsourcing development is the way to go.  I have seen much of this type of coding:  things that don't work or are designed terribly, disparate systems that need to be crammed to work together, all in pursuit of "quick hit" solutions (that somehow never turn out to be "quick").

    And then I get to see the politically connected [6] and clueless project manager types [:-*] who know nothing of the technology or the business take credit [H] for things that the actual developers [8-|] who work here do (quite literally, they actually claim they are developers).  Actual developers mostly aren't allowed to talk to the business directly. [:#]

    If my job paid less, I would be gone *so fast*.

    You'd probably [}] be happier [;)] making less.

    /zen [C]

  • spotcatbug (cs) in reply to dubwai
    dubwai:

    I was actually wondering lately whether there are a lot of kickbacks in these outsourcing deals.

    It doesn't even need to be an illegal kickback. VP's get giant bonuses for reducing short term costs all the time.
  • spotcatbug (cs) in reply to spotcatbug

    Can we at least get the ability to edit our posts so that we can attempt to fix them?

  • BigZaphod (unregistered)

    I've seen this problem before at a place I used to work. They blamed Oracle up and down for being slow and lame. After spending some time playing around with it, I found that the Oracle layer they had coded had some seriously stupid code in it that would run queries that returned thousands of rows when 1 row would do, then iterate over those rows and run more queries on each one, etc. This was repeated over and over throughout the code under the grossly mistaken impression that Oracle didn't support the particular kind of join they wanted to us in certain situations. This was in place for years with numerous customer complaints and nothing was ever done about it because clearly it was just Oracle's fault. Ugh. Glad I'm not there anymore!

  • Gordy (unregistered)

    This sounds so familiar.

    I remember back in the mid 90s working on an radio system that was being implemented in C++. Half the team were permanent employees, the other half were contractors. This project was the company's first C++ project so everyone was learning as they went. Many had formal C++ trainning but not everyone. The contractors were very keen to be on the project since it allowed them to get C++ onto their CV/resume.

    It was not until one of the contrcaters left that we did a code review of one of his work items. His task has been to create a class that would allow use to track the stae of some flags in the system. The number of flags was small (8-16) and was not expected to grow. What we expected to find was a wrapper around a fundamental type (e.g. unsigned int) with getters and setters. What we got was page after page of code that implemented the generic concept of a bit and then went onto represent the concept of a group (arbitrary number) of bits. I think he managed to use some of the RogueWave classes as well. It was incredibly over the top and totally unsuited to our application since it was around 5 times larger than necessary.

    We could not work out why it had been done this way and finally concluded that he'd done it that way to learn more about C++. This was in the mid 90s with Y2K looming a few years away. We must have been paying in 30-50GBP per hour for the two (or three) weeks it took him to create this at the end of his contract; a minimum of 2400 GBP (max 6000 GBP) for something that any decent C++ developer could do in half a day; with the other other half day for writing the tests.

    That experience has coloured my view of jobbing contractors. No doubt this is a very unfair view but it has made me very wary of bring contractors in on projects.

  • vhawk (unregistered)

    Top-tier consultancy firms also hires programmers fresh from university or even those that have just completed their wonderfull MC** certification or other worthless money making certification. These people are then supposed to know what they are doing.  The truth is that these people knows very little about real life programming (I have seen NT kernel level software where the same method was layered in three or four wrapper classes that did nothing more than calling the original method. - and the biggest software company this side of the galaxy hired the people that did this)

    Writing software is all about problem resolution and very little about anything else.  Most programming languages have the exact same logical operators and constructs and apart from the tools, programming on windoze / unix / vms etc etc platforms is simply programming.
    Even after 26 years as a programmer and 15 years as an consultant I'm pretty sure that I still write stuff that can be proudly published on wtf when using a language that I am new at.  One often finds this type of design flaws when someone is new at programming or new at the programming environment.  If I had to do this web page, experienced web developers will be in stitches and rolling on the floor laughing - which does not do away with the fact that I again excel at equiptment control and interfacing systems and doing horrible program maintenance on stuff written in a horrible programming lnguage called ABAP.

    Ok there is my 2c

  • ProffK (cs) in reply to vhawk

    Hey, I was hired and placed, with no experience, by a consulting firm, and I was quite sucessful at ABAP; I even liked it.  I even liked the cryptic four letter table, five letter field-names, half German half English data dictionary.  The code editor sucked.

  • V. (cs)

    if loading ten items out of the database took more then a few seconds I would ask myself questions....

  • dhromed (cs) in reply to V.

    I wonder of some of the queries used DISTINCT.

  • foxyshadis (cs) in reply to xinbi
    xinbi:
    Have you ever thought that maybe bad coders (thinking they're great coders) look at great code and think, "What crap!"  ??

    Sometimes the difference can be subtle. A lot of highly portable low-level code is an absolute mess of macros, branches, and supporting functions, in order to make up for the differences and deficiencies of different compilers/databases/etc, and optimize the speed under different circumstances and architectures. (The BSD str* functions are good examples.) It might take some work to figure out if it's a badass bit of great code once the light shines, or a glorified bogosort.

    Of course, leaving it as simply good, standard, short code beats tuning it into a turbocharged racing machine for anything that's not a simple library function.
  • konijn (cs) in reply to ProffK

    >Hey, I was hired and placed, with no experience, by a consulting firm, and I was quite sucessful

    >at ABAP; I even liked it.  I even liked the cryptic four letter table, five letter field-names, half

    >German half English data dictionary.  The code editor sucked.

    ?? What year was that, things have evolved nowadays ;)

     

  • dubwai (cs) in reply to ProffK

    ProffK:
    Hey, I was hired and placed, with no experience, by a consulting firm

    nothing against you personally but this is exactly why I think outsourcing development is for suckers.  How much was the consulting firm charging for your time?  $100/hr? $200/hr?  That seems to be the going rate for completely inexperienced college grads through consulting firms.  Hell, I was one of them.  It's a rip-off.  You aren't paying for the programmer, you are paying for a new Porche for a manager at the consulting firm and perhaps some kickbacks to your own middle managers. It could happen; there's plenty of profit in those consulting fees.

  • UncleMidriff (cs) in reply to vhawk

    Anonymous:
    Top-tier consultancy firms also hires programmers fresh from university or even those that have just completed their wonderfull MC** certification or other worthless money making certification. These people are then supposed to know what they are doing.  The truth is that these people knows very little about real life programming (I have seen NT kernel level software where the same method was layered in three or four wrapper classes that did nothing more than calling the original method. - and the biggest software company this side of the galaxy hired the people that did this)

    Writing software is all about problem resolution and very little about anything else.  Most programming languages have the exact same logical operators and constructs and apart from the tools, programming on windoze / unix / vms etc etc platforms is simply programming...

    I can attest to this.  I'm no more than a year and one month out of college (with just a minor in computer science), and already I'm working as a Systems Analyst/Programmer Level 3 (out of just 4 or 5 levels).  Let me assure you, I am nowhere near experienced enough to be in this position.  How I got here has convinced me that contracting is evil.

    When I first started this job, I was a Junior Web Developer (nope, no web development experience in college whatsoever) for a subcontractor of the main contractor that worked for the organization where I am physically located.  Then the main contractor lost the contract, and since the organization where I'm working didn't want to start over with brand new contractors, the majority of us contractors got hired by the new contracting company that won the contract.  However, they low-balled the bid, meaning that the same positions would now potentially be paid much less.  Even though the organiziation could have ended up paying less for the same positions, they didn't want a bunch of unhappy workers hurting productivity.  So what do they do?  They tell the contracting company that they need the contract employees put in higher positions than they had before.  They get continuity in workforce, the contractors get paid the same or more, and the contracting company gets to charge the organization more...everyone wins!  Except now you have people like me that, even though they're decently good workers/programmers/what have you, absolutely do not have the experience needed for the position they are in.

    Another reason contracting is evil is because it creates too much separation between employer and employee.  I work for the organization; they see my work, they have to deal with me on a day to day basis, they like me, and I like them.  I'm employed by the contracting company; I haven't seen any of the people by whom I'm employed since the day I was hired.  So, the contracting company can screw me over as much as they want, they won't have to deal with Grumpy Adam, and they still get paid by the organization.  I can work my ass off and while the organization might appreciate it, they won't be able to do jack for me, because I'm not their employee.

    *sigh*

    Ok, I'm done for now.

  • Spuddo (unregistered) in reply to UncleMidriff

    I actually have a reversed version of this story. A customer was having terrible performance problems and they were convinced we were doing something stupid with the database. After 6 months of tweaking  and emergency support calls with no real results on their side they finally moved their database to a different machine. Immediately all of their problems disappeared :)

  • dubwai (cs) in reply to UncleMidriff
    UncleMidriff:

    Another reason contracting is evil is because it creates too much separation between employer and employee.  I work for the organization; they see my work, they have to deal with me on a day to day basis, they like me, and I like them.  I'm employed by the contracting company; I haven't seen any of the people by whom I'm employed since the day I was hired.  So, the contracting company can screw me over as much as they want, they won't have to deal with Grumpy Adam, and they still get paid by the organization.  I can work my ass off and while the organization might appreciate it, they won't be able to do jack for me, because I'm not their employee.

    The other side of this equation is that the contractors who don't have the experience they need or the time they need go into crisis mode and produce extremely poor software that is extremely expensive to maintain.

    At my company, there is a project that is so overdue and overbudget that the contractor isn't even being paid anymore.  Every few months they bring in a new set of new-hires to keep working on it.  I figure that from the contractors perspective, they know they aren't going to get anymore contracts and they aren't getting paid, so why put their competent people on it?  They just use this project to train their new-hires.

    If they ever finish (2 years late) the full-time employees here will have to maintain this system and not only is it poorly implemented, it's poorly designed.  Apparently the contractors liked flash or wanted to learn it so they developed the whole front-end in flash.  It's a B2B site.  There isn't any animation.  It's nothing you couldn't do with JSP or ASP.  Tthe rest of the system is developed in 6 (yes 6) different languages.

  • DWalker59 (cs) in reply to UncleMidriff
    UncleMidriff, that was refreshing to hear you say that you don't have enough experience to be in the position you're in.  With smarts like that, you'll be better than most programmers when you do get the experience!
  • JohnO (unregistered)

    $500K is nothing and at least that project went to production.  We had a project that cost $120M and never got to production.  We literally flushed $120M down the toilet.  How does that happen?  You bring in one consulting company and put one of their guys in charge of the project.  The more hours the project takes the more he makes because, you got it, he gets a cut of every hour billed on the project.  You also let him decide early on if the system meets the initial "stress" test.  Sure, he's going to cancel his own project if it doesn't pass the test.  The company managers on the project are totally hands off and insist on big-bang deployment postponing the train wreck as long as possible.

    The really sad part isn't the expensive contractors -- it's the idiotic company management that should be overseeing the contractors and don't or are too incompetent to do so. 

    Contractors are like employees. There are good ones and bad ones.

  • ilmari (unregistered)

    One customer of ours, for whom we do Linux and MySQL support, had been complaining for ages that the database server was too slow and needed more tuning. So, after spending hours tuning the very last drop out of the database server and getting the load time for the slowest page down to 2 minutes (yes, two minutes!), my boss finally demanded to have a look at the PHP code for the page. It turned out the customer's app developers couldn't even spell SQL, and did stuff like:

    SELECT * FROM TABLE;

    only to count the number of rows returned and throwing away the data. This on a table of several hundred thousand forum postings. And this was only one of the major brain damages in that one page. :'(

Leave a comment on “Your $500,000 System”

Log In or post as a guest

Replying to comment #:

« Return to Article