• Pony Gumbo (unregistered)

    Cue the avalanche of "The real WTF is ASP/Vbscript" comments

  • Mike (unregistered)

    I've heard of some military-industrial subcontracts that had this happen. The system had to meet specifications on size, materials, weight, and power requirements, but nobody thought of requiring it to work. You could have filled the box with some lead weights, power resistors, and maybe a fan, and it would have met specs.

  • Andreas (unregistered)

    "I didn't know you'd expected to get paid."

  • Barf (unregistered)

    "What do you mean there's no ice? You mean I've gotta drink this coffee hot?!"

  • (cs)

    If Mr. Q. was sued, this is the kind of thing that wouldn't hold up in court. There is a reasonable expectation that the thing being produced was also intended to be functional and do what it was intended to do, to a reasonable extent.

  • Cloak (unregistered) in reply to Pony Gumbo
    Pony Gumbo:
    Cue the avalanche of "The real WTF is ASP/Vbscript" comments

    Ohhh, shut up!

  • Patrick (unregistered)

    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

  • Ron (unregistered)

    this Q fellow probably has some close relatives working for my government's civil service. it would explain a lot.

  • Zygo (unregistered)

    I have experienced this more than once.

    I'm baffled by whatever bizarre thought process somehow gets to the conclusion that I've implicitly asked someone to spend time and money to build something that intentionally doesn't work. (*)

    Functionally incomplete is one thing, broken is another.

    (*) OK, so I've never asked anyone to build an industrial control system that was designed to cause an explosion, so it could be stolen by international industrial espionage agents who would use it to run a pipeline control system until some predetermined date when it would blow up in their faces. But I would hope that if I ever did ask for such a thing, I'd have to put the "contains difficult-to-detect bugs that make it lethally dangerous to use in 1979" requirement in writing.

  • (cs) in reply to Patrick
    Patrick:
    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

    He looks like he's about to spit on me.

  • Eric (unregistered)

    "Well I didn't know you expected to work here"

  • nobot (unregistered)

    What? You want a PRODUCT??

  • Joe (unregistered)

    One of the problems for Dave is that Q is the "senior" developer. So chances are that Dave has to shut up and bite his lip about this. He can complain to coworkers, but in the corporate world, Q's word would be taken over Dave's anyday; especially if he was good at covering his own ass.

    I'm not entirely sold on the WTF'ness of the first bullet point. Hardcoding things like menus can be acceptable in a rapid prototype. If you're under a time crunch and know you'll be able to refactor after the client is presented with the work, then this isn't the worst thing ever. Now, if it had made it into production, that's another story entirely.

    Captcha: waffles - Mmmmmm. I just had lunch. Wish I had me some waffles right now.

  • (cs) in reply to Someone You Know
    Someone You Know:
    Patrick:
    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

    He looks like he's about to spit on me.

    LOL! The guy in the picture is me. No, honestly... It's from my portfolio on iStockPhoto.com. (Thanks for using it by the way!!) I come here every morning to put off doing some real work and got quite a shock seeing myself on the front page! :D

  • Iain Collins (unregistered)

    "As software developers, we automatically know what our clients want. Even if during the requirements gathering phase the client tells you they want you to zig, you know that they actually want you to zag."

    This depends on the client, but in my experience when it comes to complex software clients usually don't have a very good idea of what it is they want, or how it should work because they often haven't thought their processes through nor can they envisage really well designed ways of handling whatever problem they want the software to solve (and they expect you do to that tricky 'problem solving' for them, not to just crank out code). I find this to be overwhelmingly true even for technical clients.

    As arrogant as it may sound, while I think it's very important to listen to clients so that you understand their needs then propose a solution based on that (with mock up interfaces, or flow diagrams if it's software without a visual interface) - I think that you should not simply listen to client then go out and then just go and build what they've asked for (unless their requirements are highly detailed and they clearly do know what they are asking for, which is roughly one in hundred clients at best).

    Simply building what people say they want verbatim is a recipe for underwhelming, rudimentary software that ends up being frustrating and confusing to use and ultimately adds little value (and that the client is ultimately disappointed with, more often than not). That is probably a fair summary of most software written to fulfill government contracts (written to spec. - specs. which were written by people with little to no knowledge of how to build great systems or great software).

    I find developing good solutions is often about really getting to know the clients environment and individual challenges, anticipating problems the client hasn't, and presenting those issues and solutions back to them (with visual cues, such as a mock up of how the solution might effect the interface for the end user). I find people find it easier to immediately see the benefit of a proposal if you can show a direct application of what you are suggesting in a real-world scenario (likewise, it can also make it clear if you've misunderstood what they are trying to achieve).

    Most people are not that great at problem solving and so won't have a good idea of what to ask for, many are not that good at articulating what it is they REALLY want (verbally or in writing) and of course people often fail at both because they are just plain lazy (or not that bright).

    If you want to build a really great solution (and not just an average does-what-you-asked-for-no-more-no-less solution) then that means taking the lead in designing the solution - and sometimes that necessitates working out that when a client says they want "Zig" what they really want is "Zig, but Zag if $Foo is true, or $Bar is false".

  • (cs) in reply to Ron
    Ron:
    this Q fellow probably has some close relatives working for my government's civil service. it would explain a lot.

    He probably works for M. ;-)

  • David C. (unregistered)

    This reminds me of one job I worked at where we gave the customer an estimate of the time and money to develop his application. The customer looked over the itemized list and (in all seriousness) asked us to skip all the testing and just ship them the software.

    Fortunately, my management was smart enough to convince them to change their minds, although part of me thinks that maybe we should've sent them untested, crashing garbage, and then charge them per-incident support fees (much much more expensive) to fix all the bugs they insisted we not fix during development.

  • (cs) in reply to Iain Collins

    Righto. It's extremely rare that the client has the slightest clue what would work out best for them. Most likely they're going to ask you to copy the system their golfing buddy uses to run his company. Or just implement their paper system onto glass screens.

    What one has to do is try to get the client to step back, and tell you in general what their problems are, only then can you make suggestions on how to attack their problems with the right size solutions.

  • (cs) in reply to Iain Collins
    Iain Collins:
    As arrogant as it may sound, while I think it's very important to listen to clients so that you understand their needs then propose a solution based on that (with mock up interfaces, or flow diagrams if it's software without a visual interface) - I think that you should not simply listen to client then go out and then just go and build what they've asked for (unless their requirements are highly detailed and they clearly do know what they are asking for, which is roughly one in hundred clients at best).

    Simply building what people say they want verbatim is a recipe for underwhelming, rudimentary software that ends up being frustrating and confusing to use and ultimately adds little value (and that the client is ultimately disappointed with, more often than not). That is probably a fair summary of most software written to fulfill government contracts (written to spec. - specs. which were written by people with little to no knowledge of how to build great systems or great software).

    Darn, you beat me to it. I was going to say pretty much the same thing.

    The client should not be designing the software. The client should be describing his needs, and we should be the ones who design the software. A client definitely should not be dictating the structure of a menu.

    When I think of a client designing the product, I think of that Simpsons episode where Danny DeVito plays Homer's long lost brother, a wealthy automobile mogul. The guy lets Homer design the "perfect car" and the result is a disaster that ruins the auto company. (When a co-worker suggests making software "just like the customer wants," I have been known to show a picture of Homer's dream car on the projection screen in meetings. It's a parable to which people seem to be able to relate.)

  • (cs) in reply to DawgDoo
    DawgDoo:
    Someone You Know:
    Patrick:
    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

    He looks like he's about to spit on me.

    LOL! The guy in the picture is me. No, honestly... It's from my portfolio on iStockPhoto.com. (Thanks for using it by the way!!) I come here every morning to put off doing some real work and got quite a shock seeing myself on the front page! :D

    Well, then the question you should be asking is: is your face being used to represent David or Mr. Q?

  • (cs)

    Maybe Q thought he was making the prototype (i.e., didn't have to work, etc.) from a semi-working example. Okay, that's a stretch...

    One of the better results on a client project I started with the user documentation (comm package add-on programmers' guide). I didn't touch one line of code until the customer signed off on the manual. After delivery, they reported no bugs and requested only one change for a feature they didn't know was needed to speak to the other device.

  • Anonymous Coward (unregistered)

    The real WTF is ASP/Vbscript

  • (cs)

    The REAL WTF is NOT ASP/VBScript, but the fact that a supposed "senior" developer didn't have enough common sense to NOT screw up a prototype and instead made it worse.

  • Mitch (unregistered) in reply to Joe
    Joe:
    One of the problems for Dave is that Q is the "senior" developer.

    Agree. The Real WTF is that most companies award the "Senior" position based on longevity not on ability.

  • (cs)
  • (cs) in reply to Patrick
    Patrick:
    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

    I don't know, but it sure makes things harder to read.

  • Anonymous Coward (unregistered)

    I like the picture pretty much - just plain text wouldn't be as funny

  • (cs)

    Just to play devil's advocate...

    "...explaining that it was a prototype only and should be used to get the gist of how the system would operate, though little to none of the prototype code should be used..."

    What, precisely, is "it"? It's clear in hindsight that he means the prototype code he's handing over, but was it clear to the developer designing the menu that the MENU was NOT expected to be a "prototype only" of which "little to none" would be used?

    Because personally, if you handed me a non-working prototype and asked me to write working code on top of it, I'd think you were on drugs. You'd have to point me at the client so the client could explain "no, really, I'm retarded" and then I'd know what we were doing.

  • mexi-fry (unregistered)

    I have seen similar excuses from other developers. I think these things boil down to the difference between programmers in it for the cash and programmers who simply like programming. I cannot imagine anyone who loves what they do offering up so much needless humility.

    CAPTCHA: craaazy ... WTF? Who Told?

  • Sgt. Preston (unregistered) in reply to Cloak
    Cloak:
    Pony Gumbo:
    Cue the avalanche of "The real WTF is ASP/Vbscript" comments
    Ohhh, shut up!
    Is Cloak is feeling a little peeved because Pony Gumbo stopped him from submitting his "The real WTF is ASP/VBscript" comment?
  • Mogri (unregistered) in reply to CDarklock
    CDarklock:
    What, precisely, is "it"? It's clear in hindsight that he means the prototype code he's handing over, but was it clear to the developer designing the menu that the MENU was NOT expected to be a "prototype only" of which "little to none" would be used?

    Because personally, if you handed me a non-working prototype and asked me to write working code on top of it, I'd think you were on drugs. You'd have to point me at the client so the client could explain "no, really, I'm retarded" and then I'd know what we were doing.

    Regardless, what interpretation of that text leads you to "take what I am giving you and make it categorically worse"? He handed him something functional and got back something broken and messier.

  • Franz Kafka (unregistered) in reply to CDarklock
    CDarklock:
    Just to play devil's advocate...

    "...explaining that it was a prototype only and should be used to get the gist of how the system would operate, though little to none of the prototype code should be used..."

    What, precisely, is "it"? It's clear in hindsight that he means the prototype code he's handing over, but was it clear to the developer designing the menu that the MENU was NOT expected to be a "prototype only" of which "little to none" would be used?

    Because personally, if you handed me a non-working prototype and asked me to write working code on top of it, I'd think you were on drugs. You'd have to point me at the client so the client could explain "no, really, I'm retarded" and then I'd know what we were doing.

    what part of "little to none of the prototype code should be used" do you not understand? If I hand you a prototype and tell you to write a real product that works like the prototype does, you'd have to be high to interpret that as 'bollow it up some and play minesweeper for a month'.

  • Yes eh actually no (unregistered)

    Why did you use a picture of that guy out of MythBusters?

  • shadow of an elf (unregistered)

    got any old school code lying about? perfect chance to submit it and get paid.

    so what if it's assembly for a microprocessor? if it doesn't have to work, just slip it and head out for a long weekend.

    just change the college-sorta-appropriate comments, that's all anybody asks.

  • Blah (unregistered)

    I've heard of bank where the SOP is, when writing specs, to place "it must work" right at the beginning. They probably had something like that happen to them to come up with such a policy...

  • DigitalGnome (unregistered)
    David elaborated on the menu system, offering suggestions for the final design and left Mr. Q. to work. In the following weeks, David kept busy fleshing out the rest of the system.

    I think that's the real WTF here. Let's all work in independent silo's and not talk to each other for several weeks, then be shocked when things don't work out.

  • David Schwartz (unregistered)

    This is the reason I caution people against getting a price based solely on requirements and then expecting to get working, useful code delivered for that price. All you wind up doing is spending the rest of your life explaining that things not precisely stated in the requirements are totally obvious and then having to negotiate how much more they will cost.

  • What About Thad? (unregistered)

    I'm going to cut Q some slack. The people I work for are explicit that they actually want my code to work, and it rarely does, so he's one up on me.

  • (cs)

    If there aren't any functional requirements, then Mr. Q did exactly what he was asked to do. This is why I hate dealing with non-technical people on technical projects...because non-technical people are usually non-logical too.

    I've worked on plenty of web projects where you get a photoshop mockup of the a page, and naturally you ask a question like "What is supposed to happen when the user clicks on this button that says 'Create Account' <points at mockup>?" The answer is inevitably something along the lines of, "Obviously it should create their account."

    When you're still a naive consultant in this business, you interpret that answer as, "I don't really care how the account is created, figure out all those pesky details yourself." So you would go and design a whole system and figure out what kind of information a user needs to create an account, how to validate it, and how to persist it.

    Several weeks later you would get a phone call along the lines of, "Hey, there's a lot of bugs in the account creation page. I can't figure out how scan a picture of my dog and have the account creation page morph it into a faux-impressionist picture of an 18th century Victorian picnic by the lake. I'm e-mailing you a list of 43 other bugs I found on this page as well. Please can you fix this by lunchtime? My boss wants to see how the site is going and I don't want you to be embarassed if it doesn't work."

    The truth is that most clients DON'T KNOW WHAT THEY WANT. There's no such thing as requirements gathering in cases like that. What you're really doing is taking an idea cloud and figuring out the actual nuts and bolts of what the software should do, how the software does it, and how users make the software do that.

    Only after you have pieced that together can you even begin to think about your technical design.

  • tgsegse (unregistered)

    That's why I always have requirements like:

    • Keep breathing.
    • Remember to eat.
    • Bathe yourself.
    • Go pee-pee in the toilet in the bathroom.

    Keeps the developers in check. Sometimes, if I don't like the developer, I omit the first requirement.

  • (cs) in reply to Franz Kafka
    Mogri:
    Regardless, what interpretation of that text leads you to "take what I am giving you and make it categorically worse"?

    Why is it worse for your non-working prototype to have hardcoded values that can never fail, rather than external dependencies on databases and stylesheets? They're just other things that can go wrong in front of the customer.

    Franz Kafka:
    what part of "little to none of the prototype code should be used" do you not understand?

    The part where you didn't clearly specify whether you are GIVING ME the prototype code, or I am WRITING the prototype code.

    Surely you wouldn't give me code I'm not supposed to use, right? That would be STUPID.

  • (cs) in reply to savar
    savar:
    The truth is that most clients DON'T KNOW WHAT THEY WANT.

    The truth is actually somewhat worse. Most clients:

    • Don't know what they want
    • Don't trust you to figure it out
    • Don't want to pay for it
    • Don't want to wait for it
    • Blame you when they don't get their fantasy

    And that's why I don't work freelance anymore.

  • Ben4jammin (unregistered)
    The truth is that most clients DON'T KNOW WHAT THEY WANT. There's no such thing as requirements gathering in cases like that. What you're really doing is taking an idea cloud and figuring out the actual nuts and bolts of what the software should do, how the software does it, and how users make the software do that.
    This is true not only in programming, but also in network infrastructure. I do consulting on the side (network analyst by day) and my favorite client will call me, tell me what functionality he wants, and that's it. I get to decide how. He specifically forbids any attempt on my part to explain the "how". All he needs is an estimated cost and delivery time. So I would clarify the statement that the users may know what they want to happen (I want everyone to get email attachments faster) but they don't know how it should come about (I'm switching your dial-up to DSL and installing a router to share the connection).
  • Markku Uttula (unregistered) in reply to DawgDoo
    DawgDoo:
    Someone You Know:
    Patrick:
    Who is the guy in the picture? I swear Alex must have a library of bad clip art somewhere...

    He looks like he's about to spit on me.

    LOL! The guy in the picture is me. No, honestly... It's from my portfolio on iStockPhoto.com. (Thanks for using it by the way!!) I come here every morning to put off doing some real work and got quite a shock seeing myself on the front page! :D

    Interestingly, one of my ex-coworkers sent me an email asking if it was a picture of me photoshopped to contain a bit less geeky glasses than I normally wear. I didn't see any resemblence, so thanks for clearing my worries (of there being a box filled with stock photos of yours truly hiding on some isolated corner of the Internet:)

  • Franz Kafka (unregistered) in reply to CDarklock
    CDarklock:
    Mogri:
    Regardless, what interpretation of that text leads you to "take what I am giving you and make it categorically worse"?

    Why is it worse for your non-working prototype to have hardcoded values that can never fail, rather than external dependencies on databases and stylesheets? They're just other things that can go wrong in front of the customer.

    Who said it was nonworking? Yeah, sure the DB can go down, but so what? It's a functioning system.

    CDarklock:
    Franz Kafka:
    what part of "little to none of the prototype code should be used" do you not understand?

    The part where you didn't clearly specify whether you are GIVING ME the prototype code, or I am WRITING the prototype code.

    Surely you wouldn't give me code I'm not supposed to use, right? That would be STUPID.

    Of course I would - it's prototype code. Surely you're not so dense as to not know the diff between prototype code and production code.

  • Franz Kafka (unregistered) in reply to CDarklock
    CDarklock:
    savar:
    The truth is that most clients DON'T KNOW WHAT THEY WANT.

    The truth is actually somewhat worse. Most clients:

    • Don't know what they want
    • Don't trust you to figure it out
    • Don't want to pay for it
    • Don't want to wait for it
    • Blame you when they don't get their fantasy

    And that's why I don't work freelance anymore.

    I thought that the main part of dealing with clients was convincing them that you were competent and that it'd be better to leave design and implementation to the people who specialize in it. Sure it's hard work, but it pays well.

  • Spaandifilus (unregistered) in reply to David C.
    David C.:
    This reminds me of one job I worked at where we gave the customer an estimate of the time and money to develop his application. The customer looked over the itemized list and (in all seriousness) asked us to skip all the testing and just ship them the software.

    Fortunately, my management was smart enough to convince them to change their minds, although part of me thinks that maybe we should've sent them untested, crashing garbage, and then charge them per-incident support fees (much much more expensive) to fix all the bugs they insisted we not fix during development.

    Ohhh.. apple sauce! The realWTF(tm) is that you dorks didn't just say - "we'll do the bulk of testing in the requirements phase and reduce the amount of bugs that we ship". Amateurs!

  • Ben4jammin (unregistered) in reply to Franz Kafka
    Franz Kafka:
    CDarklock:
    savar:
    The truth is that most clients DON'T KNOW WHAT THEY WANT.

    The truth is actually somewhat worse. Most clients:

    • Don't know what they want
    • Don't trust you to figure it out
    • Don't want to pay for it
    • Don't want to wait for it
    • Blame you when they don't get their fantasy

    And that's why I don't work freelance anymore.

    I thought that the main part of dealing with clients was convincing them that you were competent and that it'd be better to leave design and implementation to the people who specialize in it. Sure it's hard work, but it pays well.

    In the above list, if you have trust, you can most likely overcome the rest. If you don't, it's pretty much a lost cause. I can see how this might be harder for programmers, rather than network infrastructure peeps like me. In the example I used above, if it used to take you 10 minutes to download an attachment and now it takes 10 seconds, you know I did something. If a program doesn't work as expected is it because the program is crap or the user isn't following a set procedure to have the expected outcome?

  • J (unregistered)

    With that title, I thought the WTF would involve VBscript's "option explicit" statement and the third paragraph confirmed my suspicion. Then you dashed my hopes completely!

    At one place I worked, a more senior developer asked me to stop using "option explicit" because it made it harder for him to revise my code.

  • Joe (unregistered) in reply to FredSaw
    FredSaw:

    OMG. I have that exact strip saved on my work laptop. I put it in meeting printouts when I know the end users I'm trying to gather requirements from have no clue what they're supposed to give me.

Leave a comment on “If Only I'd Been More Explicit”

Log In or post as a guest

Replying to comment #:

« Return to Article