Wrong on so many levels…

I'm stuck doing some re-work on an inherited system. It's a long story. As I'm threading my way through this mess, however, I stumble on a function. It's a remarkable function. This function is a tiny monument to twisted intent, and it's certainly worth two minutes of your contemplation.
Ok, so before you behold the actual code, take a minute to think about all the other screwed up routines you've seen in your day. The routines that stretch on for pages and pages, with nested loops six-deep and variables whose scope has been violated back and forth and forth and back.

This isn't like that.

This one is subtle. Elegant. Take a look at this baby and see if you can appreciate the totality of its ruin.

Private Function Add(ByRef Which As Integer, ByVal HowMany As Integer)
    Which = Which + HowMany
End Function

Ok, so what's wrong with this code? How many of these did you get:

  • It was found in an asp.net web page as vb.net code. Vb.net, of course, features the "+=" operator, which replaces this whole function rather neatly.
  • The whole "which" and "howmany" naming convention reeks of "apples" and "oranges", not to mention its disdain for mundane pursuits like variable naming conventions.
  • The "byval" and "byref" are actually correct here, but I've got $20 that says it was wrong the first time through. -g-
  • It's a function, right? (what's it return?)

Whew ... boy, that was fun. I hope you enjoyed it, too.

What’s the difference between an ISV, a VAR, and an SI?

When I communicate, I try hard to do so with some precision. I try to choose my words carefully, and I do my best to ensure that the message I speak is received and understood as I intend it to be. A common vocabulary really helps here. I'm a big fan of everyone meaning the same thing when they use a word.

I recently found myself struggling with some peers over what seemed to be a misunderstanding in terms - specifically, what is an ISV? I did some digging and found a general consensus - read on for results and commentary.The terms ISV, VAR, and SI are thrown around in a lot of discussions about our industry, particularly in discussions of markets and marketing. These terms are usually assumed to be universally-understood, and are usually meant to be exclusive; that is, every company falls into one and only one of these categories. As is often the case, a deeper understanding of the question reveals a little more complexity.

At a minimum, I question whether these terms are universally-understood. I'd expect nearly universal recognition of what the acronyms stand for (ISV=Independent Software Vendor, VAR=Value-Added Reseller, and SI=Systems Integrator). I don't believe, though, that everyone agrees on what these terms mean. When you add modifiers on top of the base terms (ie, micro-ISV), you can get to the point where you're talking about apples and oranges.

So faced with this lack of clarity, I did some googling. As you can imagine, I found a lot of links; these are the ones that stood out.

http://www.osisoft.com/5_1062.aspx This seemed to be the best overall breakdown. There are some very specific cues in here, which I found helpful in breaking through the fuzziness in terms.

http://software.ericsink.com/Small_ISV_Defined.html This definition distinguishes ISV's from VAR's (like SI's). Eric owns his own small ISV, so his site has lots of great information for that audience.

http://www.tsleads.com/how_we_help/channel_marketing.htm Here, all 'partners' grouped together. Not nearly as clean as the first definition, I think.

The themes and ideas that stood out in this search:

  • The lines are blurry. As hard as we work to classify companies, we have to expect that each company is mainly in one category or another, but may have activities that fit in one or more of the other categories.
  • ISV's make products. "Shrinkwrapped software" comes from ISV's. Even if all customers don't get exactly the same software (shrinkwrapped), if the company positions their software as a product, they're an ISV.
  • SI's vs VAR's In general, SI's tend to be more software-oriented and more likely to contribute more custom work, while VAR's are more hardware-oriented and more likely to add small amounts of integration work - customization, for example.

Hopefully, these findings will be of some help. If you find any other helpful links, please let me know!