What's the difference between a bug and a feature?



  • A while back, I wrote up an integration for XYZ Networks, one of our major clients.  It allows partners to send in a query via SOAP message and get back scheduling information, which they use to configure their local broadcasts.  We gave it several months of testing before putting it into production, and it's pretty solid.  It's been running in production for over a year now, and I believe I've gotten a grand total of one bug report that didn't turn out to be a case of user error, and that one was easily fixed.

    ...that is, until a few days ago.  I got a report that a user error (entering otherwise-valid data on an invalid slot) was causing the integration to report the data, which was throwing off the partners' broadcasting.  Fair enough, that sounds like a problem.  I want to fix it right, so I ask for a precise definition of "valid slot" so I'll know what to filter out.

    The next day, I get pulled into a conference call with a couple people from Product Management and a representative from XYZ.  Turns out he's been thinking about it, and he doesn't want invalid slots filtered out afterall, because he's thought up a way that they can (ab)use this functionality to work around a WTF in ZYX's workflow (one of their broadcast partners) because ZYX is too lazy to fix things right on their end.

    In the end, I offered to write up a stored proc for them that would report valid entries on invalid slots, so that they could make sure that they're only getting the ones they intend to, and not more user errors.  The guy from XYZ said that sounds like a great idea.



  •  It doesn't rinse out the SOAP? What kind of washing machine is this!?

     

    Oh, it's a program? Never mind...



  • @cheapie said:

     It doesn't rinse out the SOAP? What kind of washing machine is this!?

    Oh, it's a program? Never mind...

     

    I only wish I could rinse the SOAP out of our arcitecture.

    Some people, when presented with a problem, think "I know, I'll use XML."

    <Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>

     


  • Considered Harmful


  • Discourse touched me in a no-no place

    @joe.edwards said:

    You forgot xmlns:Problem="http://trwtf.com/Namespaces/2013/Problem/v/1"
    You only get the full horror when you've got many different namespaces. (Or if you decide to be evil-incarnate and do the actual messaging by serializing the SOAP into JSON…)



  • I'd say "the documentation".



  • @dkf said:

    @joe.edwards said:
    You forgot xmlns:Problem="http://trwtf.com/Namespaces/2013/Problem/v/1"
    You only get the full horror when you've got many different namespaces.

    I just had to debug an issue where the only error was: "Validation Failed - Line 1 - Element: [Extenstions] has invalid child element: [Premium_Record], expected element: [Premium_Record]"

    Namespaces can blow a goat.



  • The difference between a bug and a feature is quite a philosophical question. One could define a bug as an undesired feature. It seems that you desire something different than XYZ's representative. So, for you it looks like a bug and for XYZ it looks like a feature. More precisely, it looks like a convenient counter-botch for ZYX's WTFery in their workflow. :-)



  • @Mason Wheeler said:

    Stuff

    That happens all the time around here. We fix a bug in the program and customer X decides that they want the buggy behavior back because they were exploiting the bug to get some partial functionality that they've wanted for awhile. I'd link to the XKCD, but I don't want everyone to have to stare at Rosie.

    In the end, we end up making a setting out of it.



  • I forgot which xkcd it was. I'd link to the Jargon File's "bug-compatible" and "bug-for-bug compatible" pages, but my proxy censors it for "Hacking".


  • Discourse touched me in a no-no place

    @HighlyPaidContractor said:

    I just had to debug an issue where the only error was: "Validation Failed - Line 1 - Element: [Extenstions] has invalid child element: [Premium_Record], expected element: [Premium_Record]"
    It gets better than that. You can have the validation keel over because someone omitted to put in xmlns="" as an absence of namespaces is not the same as an empty namespace. Or there's the third party libraries that only validate the namespace alias and not the actual namespace: woe betide you if your serializer decides that "ns2" should be changed for "ns3" one day (despite getting the namespace URIs correct).@HighlyPaidContractor said:
    Namespaces can blow a goat.
    Awesome idea. Awesome execution. The second "Awesome" is more in the medæval sense of “Cower in fear before the face of a wrathful God!” sense, of course. Frankly, I've not seen any namespacing system done worse than XML namespaces. Want to have twenty different prefixes for the same namespace? Sure! Normalize the URIs or require them to resolve to anything relevant? Why?



  • @dkf said:

    @HighlyPaidContractor said:
    I just had to debug an issue where the only error was: "Validation Failed - Line 1 - Element: [Extenstions] has invalid child element: [Premium_Record], expected element: [Premium_Record]"
    It gets better than that. You can have the validation keel over because someone omitted to put in xmlns="" as an absence of namespaces is not the same as an empty namespace.

    I'll just leave you with this...

    <HTML>
    Dim sFindText As String = " xmlns="""""
    Dim sOutputFileText As Text.StringBuilder = New Text.StringBuilder(My.Computer.FileSystem.ReadAllText(sOutputFileName))
    Dim iPosition As Integer = sOutputFileText.ToString.IndexOf(sFindText)
    

    Do While iPosition > -1
    sOutputFileText = sOutputFileText.Remove(iPosition, sFindText.Length)
    iPosition = sOutputFileText.ToString.IndexOf(sFindText)
    Loop
    My.Computer.FileSystem.WriteAllText(sOutputFileName, sOutputFileText.ToString, False)



  • @HighlyPaidContractor said:

    @dkf said:

    @HighlyPaidContractor said:
    I just had to debug an issue where the only error was: "Validation Failed - Line 1 - Element: [Extenstions] has invalid child element: [Premium_Record], expected element: [Premium_Record]"
    It gets better than that. You can have the validation keel over because someone omitted to put in xmlns="" as an absence of namespaces is not the same as an empty namespace.

    I'll just leave you with this...

    Dim sFindText As String = " xmlns="""""
    Dim sOutputFileText As Text.StringBuilder = New Text.StringBuilder(My.Computer.FileSystem.ReadAllText(sOutputFileName))
    Dim iPosition As Integer = sOutputFileText.ToString.IndexOf(sFindText)
    

    Do While iPosition > -1
    sOutputFileText = sOutputFileText.Remove(iPosition, sFindText.Length)
    iPosition = sOutputFileText.ToString.IndexOf(sFindText)
    Loop
    My.Computer.FileSystem.WriteAllText(sOutputFileName, sOutputFileText.ToString, False)

    I had a clever reply but it vanished once I saw the source code of your post.


Log in to reply