I don’t really like to repeat myself but I’ve found another example of code that isn’t. It has a name, and that name is evil BizTalk. I’ve wanted to write about BizTalk for a while but I’ve been holding back because it’s a large and complex product that I wanted to do proper justice to.

Ok, so let’s get the nasty out of the way first. BizTalk is partly the reason that I’ve done very few blog posts recently. It is also the cause of an annoying pain at the base of my skull that didn’t go away until I stopped ‘doing’ BizTalk. There are many reasons why and I could go on and on about:

  • how it neatly hides important detail from you that you need to problem solve issues;
  • cryptic error messages;
  • property boxes in property boxes in property boxes;
  • lack of effective development environment;
  • high license cost;
  • … yada yada yada …;

Ironically at the same time I was using BizTalk I was also reading the design of everyday things. Whilst not strictly a book about technology, the ubiquity of computers these days makes it a compelling read for programmers like me. Anyway, the point is that BizTalk very neatly violates almost everything that Donald Norman holds dear.

If it’s so bad then why are you using it?

Good question. You read my mind. You see it solves a couple of problems for me, firstly a very expensive software product requires it out of the box so I really have no choice. However, and here’s the interesting part, it does two “big picture” things very well. Indeed, if you ignore the nitty gritty pain of what you had to do to get it to work it solves a couple issues of system integration reasonably well.

  1. Message Handling – the BizTalk server wants to receive a message and do something with it. It is able to take messages from a variety of sources: database, file drop, FTP, HTTP, SOAP, Email, etc. Once this message is received it can be routed to an ‘Orchestration’ which takes the message and applies some logic to it. This can involve changing the shape of the message and or sending it on to a variety of other systems.
  2. Business Focus – the fact that BizTalk server can take messages from a variety of sources means that it becomes the natural place to put things that ‘process external data’. This doesn’t sound like a big deal but when you’ve worked in companies that have attempted this solution without something like BizTalk you’ll know what a mess this becomes. Many programmers, many ideas, little consistency, integration headaches.

So it’s good right?

Well yes and no. I can’t pretend that I’ve even scratched the surface of what BizTalk does, it’s a beast. However, for what I need to do I’ve created about a half a dozen or so orchestrations and a few mappings and every one was as painful as the last. It just doesn’t seem to get any easier.

You see, the bits of BizTalk I like, are relatively quite small. The bits I don’t like are the bits that try and take programming control away from me by providing me with some half-baked UI that ultimately is going to produce me a piece of executable code. And that’s my point. If it’s going to produce executable code why not just give me some powerful libraries (which must exist anyway) and let me write it? Indeed, I’ve had a couple of people tell me that they don’t really like BizTalk either and when faced with a ‘BizTalk challenge’ their solution is to write a custom pipeline to handle it (for those not in the know, this solution gets the job done but it’s like buying a tractor to get your groceries with).

The part of BizTalk that I would pay money for is probably not worth that much. However, I’m smart enough (just) to know that if I wanted to roll my own which just contained the features I wanted I would still be doing it in 2009. So for now, I guess, The Beast and I will get along fine. If there’s ever a viable alternative The Beast and I will be parting ways.

I am a fully paid up member of the ACCU. I joined because it seemed most of my now ex-colleagues were members and I’m a sucker for peer pressure.

Anyway, as you’d expect from a magazine dedicated to C and C++ users it occasionally has articles about C and C++. This quarter’s doozy is from a chap we’ll call Stuart. Now it looks like some of the things that Stuart is doing for his PhD are quite interesting. However his article about the similarities he has managed to draw between Haskell and using partial-template specializations in C++ gives me the shudders. It is based, in part, on the work of Andrei Alexandrescu. As charming as Mr Alexandrescu is in person I wouldn’t let him anywhere near any of my production C++ code (if I had any). But that’s beside the point.

Now I have to admit that I don’t know any Haskell and I’m also not a lover of C++ much either so I can’t bring myself to actually RTFA. However the article is full of little code snippets like this:

    template <typename T> struct Head;
    template <int x, typename xs>
       struct Head<IntList<x,xs> > {
       enum { value = x };

    template <typename T> struct Tail;
    template <int x, typename xs>
       struct Tail<IntList<x,xs> > {
        typedef xs result;

Why anyone would hate themselves enough to actually do this and write about it I don’t know. Especially when you could just use Haskell and not have to wrap your head around this lunacy.

But I know there is a simple answer. I should just unsubscribe from the magazine if I don’t like it. But sadly for me it’s not that simple. Stuart is obviously a clever guy, it almost goes without saying. But he’s wasting his brain cycles. Surely he must have better things to do with his time.

Then I read this 2005 interview with the glorious Alan Kay. If you have the time I suggest you read all of it because he makes some really very excellent points. In reference to my pain though this one stands out:

Perhaps it was commercialization in the 1980s that killed off the next expected new thing. Our plan and our hope was that the next generation of kids would come along and do something better than Smalltalk around 1984 or so. We all thought that the next level of programming language would be much more strategic and even policy-oriented and would have much more knowledge about what it was trying to do. But a variety of different things conspired together, and that next generation actually didn’t show up. One could actually argue—as I sometimes do—that the success of commercial personal computing and operating systems has actually led to a considerable retrogression in many, many respects.

You could think of it as putting a low-pass filter on some of the good ideas from the ’60s and ’70s, as computing spread out much, much faster than educating unsophisticated people can happen.

And while Stuart carries on trying to make C++ like Haskell, rather than just using Haskell, another wasted brain drops into the soup.

Carrying on the theme of whimsy from last week I had an interesting week this week where I did almost no development at all. You see this week I’ve been only answering questions. Why? Well I’m trying to be Dave and I think I might have gone too far.

Dave – a go go

Let me explain. Dave is a person, yes. But Dave is more than a person. Dave is a way of life. A way of life that could make you popular and respected where you work but at tremendous personal cost.

I first met the real Dave about 4 years ago. A couple of years younger than me he was quite the most dynamic and down-to-earth person I had ever met up until that point. He was also well respected (by technologists and business people), well liked and quite successful.

If you could try and categorize what being Dave is about into a well-known personality type then I think he’d be an incrementalist, but beyond that Dave somehow knows everything, is very easy to talk to, and eager to help. This combination of traits means Dave ends up answering a lot of questions.

The most interesting thing about this combination of traits is that once you decide on being Dave you will end up being involved in a lot of things. The more things you’re involved in the wider the knowledge of your Dave-ness will spread. It’s a vicious circle.

American-slang has a great word for Dave he’s the go-to-guy. It sums it up very neatly, but it’s a bit Ronseal. I prefer Dave. It’s more about a person, which is exactly what being Dave is all about.

Robert – do do do

But the garden of Dave is not all roses. Eventually you know too much. Too many people know-that-Dave-knows and that Dave will help them if Dave doesn’t know. In short, every one will want a piece of your Dave-ass.

The late Robert Townsend in his excellent book says:

The world is divided into two classes of people: the few people who make good on their promises (even if they don’t promise as much), and the many who don’t. Get in column A and stay there. You’ll be very valuable wherever you are

Being Dave is counter-productive to this noble aim. As word spreads that there’s a new Dave in town your personal productivity will nose-dive and you can’t promise shit. You’ve stopped doing your own work and you’ve become the grease that keeps the company moving, a facilitator rather than a producer.

Lucy – no no no

This is where you have to sprinkle a dash of Lucy. Lucy Kellaway is a columnist for the FT and is a commentator on managerial and workplace cults. Her advice is probably the sagest of all. Sometimes you just have to say no. A lot of time and effort can be saved by saying ‘No’. The trick is to say ‘No’ without actually ever saying it.

Indeed in our insane ‘Yes’ culture the only way you can be Dave and Robert, and hold your sanity, is to be Lucy too. Just as long as your remember who you are you’ll be just fine.

I guess I’m going beyond the remit of technical blog here and exploring an area best left to people that know more about it than me. So I’ll keep it brief. More and more I’m coming to realise that the ‘them and us’ of software development is a problem. There are many thems and sadly just us, and since we’re obviously the good guys that makes them the bad guys.

What would Al Do?Dale Carengie in his 1933 book writes that very few people ever think of themselves as bad people. Even the really bad ones. Al Capone, arguably the most notorious gangster in history, claimed that he was just providing a public service (effectively saying that the ends justified the means).

The totally unsurprising fact is that almost everybody feels this way about their actions. The reason that we don’t all get along though is that my interests, and hence my actions, are often divergent from yours. Like when you go and commit that change to that function, that I said I didn’t want you to make, you did it because you’re you. And you probably have a very good reason for it. The problem is that I will instantly brand you a jerk, and if I don’t know you very well your jerk-ness will be hard to shrug off. Trust me, you’re pretty much screwed.

The anti-dote to this problem is for me to try and get inside your head and understand why you acted like you did. Maybe then we can find a better, mutually acceptable solution or I can persuade you do it my way. But it’s soooo much harder to do and it sounds really lame. It’s so much easier to write-off perfectly justifiable behaviour as bad and bitch about it for a while.

Welcome Trevor! Trevor is an ex-ex-ex-colleague and he’s nasty. He looks nasty, he talks trash and he has no time for me (or anyone else) because I don’t have a PhD and my IQ is so low that I may as well dribble from the left-side of my mouth and eat through a straw. Trevor is clever. Very clever (almost magical) Trevor. Part of Trevor’s problem was that he was often interrupted during the working day by people who didn’t think about what they were asking. They ended up wasting his time and that really annoyed him. Once I figured this out I made no attempt to have a conversation with him because I knew my opinion was of no interest to him. He just wanted to end whatever conversation we were about to have as quickly as possible. So, I kept our conversations to a minimum and made sure to if possible ask him questions to which he could answer yes or no. Over time it seems that this approach gained me some credits with Trevor. Although we could never be friends some of my fellow ‘retards’ admired the relationship Trevor and I had.

My advice? Hug a Trevor today. It’s worth it.

I remember when I was a kid that I had a certain amount of awe for some companies. I particularly remember that I used to think that HP was cool. I mean, how couldn’t they be? For one thing they made all that fancy scientific equipment but not only that they made all those neat calculators that did the whole reverse-polish thing.

The Mighty HP42s

I owned a HP42s (pictured left) and it was a very very cool item indeed. The ‘s’ stood for scientifc but it had it’s own stack based programming language that allowed you to write simple applications. You could even plot graphs onto its two line display. But only if you were sick and twisted, like me.

In the early 90s I spent a long summer trying to program an HP Deskjet 560c from a DOS program using only PCL5. It was quite a slow task and Windows would make the entire thing a subsequent waste of time but I had nothing but the utmost respect for the hardware.

But everything made by HP I’ve owned since then has been of poor or low quality. I owned an inkjet that broke down before the cartridges ran out. Then I bought a WiFi printer that has lasted longer but never loads a page straight. Then I bought a scanner that:

  • for some reason comes with about 300Mb of software that is garbage and I don’t want but the scanner can’t do without
  • the software doesn’t work very well and has a clunky non-standard interface which makes the whole experience regrettable

Last night a friend ‘dropped’ round an old HP notebook ‘nx6110′ for me to fix. The notebook was not broken just missing a driver, but the entire experience of getting that driver from HP left me sad and demoralised. Once I had discovered the product model number and located the driver I noticed that the driver was 24.7Mb (it subsequently transpired that this package contained the driver for 3 different OSs but still)! When I tried to install it it wanted to install itself into a non-standard folder in C:\ which annoyed me. Nor did the folder get automatically cleaned up afterwards.

After that joyless experience I wanted to install the WiFi drivers but it was impossible to tell from the notebook and the website which one to install. They had at least 5. Should I install one? Two? A combination? Simply unclear. I unsuccesfully tried to install 3 or 4 and just gave up in the end. I was sick, tired and angry of the low quality HP product and support.

What is going on? There’s no joy in owning an HP product anymore, and in fact I would say that this has been true since before the Compaq merger. I can’t remember the last time they made a product that generated desire like Apple or even Dell. So I guess I’ll just polish my reverse-polish HP42S and remember the gold old days and how things used to be. Perhaps new research direction can save them but as a consumer I’m not going to buying any more of their products unless they produce something exceptional.