Category Archives: Tech

Fox Valley Day of Dot Net

As promised here are my slides and the list of links I never got to talk through. Thanks for all the great questions during the talk and the suggestions in your comment cards. Good stuff and much appreciated.  I’d love to do this again somewhere, let me know if you want me at your location.

Windows Workflow Foundation 4 for Fox Valley Day of Dot Net

Windows Workflow Foundation 4 is fairly interesting, fairly unique in the large list of players in the BPM field. It does seem like some additional sessions of more advanced topics are going to happen so stay tuned. The MSDN samples below are an absolute must. You can search for the name and find more documentation about each. I also had good luck with the VS2010 guidance package for my first introduction way back when.

MSDN samples –

Ron Jacobs video and blog




I am happy to let you all know I’ll be speaking at the Fox Valley .Net Users Group, Day of .Net event on March 5th, 2011. I’ll be covering Windows Workflow Foundation 4 (WWF4) where I’ll outline the basics with … Continue reading

Workflow – Coordinate People and Systems

A few years back the company I was working for brought in somebody to come up with some ideas for our system architecture in preparation for a big enhancement push. We laid out our goals which included heavy automation of business processes, leaving people in positions to do what they do best supporting our call center. That also means high visibility of the business processes to all staff and eventually our clients. This person’s answer… Biztalk. OK, you could argue that it is acceptable in executing business processes, at least so long as these processes rarely involve people. I think of NServiceBus in a similar way. Or any of the BPEL (Business Process Execution Language) oriented products out there. They do facilitate processes made up of work done by a variety of systems, something often called service orchestration. But most of these systems totally fail in helping where people are involved.

Of course there is a counter story to this. Ask a business person to find workflow solutions and you come up with things like SharePoint, or FileNet or even PeopleSoft. They are mostly about coordinating unstructured data in documents between people with some sort of rules: approvals, routing, limits that sort of thing. Most of the high level decisions and calculations must be done by people. Even when the the decision process is understood well, the way these systems are built frustrates additional automation because the data tends to live in blobs as pdf files or scanned images. There are CRM systems that do a little bit better if they are reasonable at allowing custom data to be associated with the “customer” records, and the automation can access that data as meta data to the document. Think SalesForce or Microsoft Dynamics. But most really don’t do any better at real automation when you have useful back end systems.

What should a good workflow system do?

Workflow coordinates people and systems to get stuff done.

Software Craftsmen or what?

Dan North published a shot across the bows at the signers of the Software Craftsmanship Manifesto. Apparently me living in a snow cave the last couple of years has been bad for my geek cred, I wasn’t even aware of it. But the sentiment it tries to encapsulate has been around for a long time. We all generally agree our industry sucks because we consistently under estimate, under deliver or outright fail on software projects. These software craftsmen believe that, as best I can tell anyway, the reason for this is that our ranks are made up of either ivory tower software as art sorts, epitomized by certain speakers, writers and open source gurus, or of “I am only in this for the money” types that hack their way through the coding until systems collapse of their own weight. Or something like that. What is needed is more of a middle ground with standards of professionalism, quality, collaboration and so on, rather like we think of building craftsmen in other professions.

Dan North’s post has garnered a lot of attention, one because he is the well known, self-effacing and generally good guy that he his, and two because he shoots poo over the whole manifesto. He believes that the people who buy software don’t really give a hoot about what goes into the software, it is purely the utility of it that they care about, and for the least cost:

“Software Craftsmanship risks putting the software at the centre rather than the benefit the software is supposed to deliver, mostly because we are romantics with big egos. Programming is about automating work like crunching data, processing and presenting information, or controlling and automating machines.

Non-programmers don’t care about the aesthetics of software in the same way non-plumbers don’t care about the aesthetics of plumbing – they just want their information in the right place or their hot water to work. (Although it’s fair to say they appreciate decent boiler controls.)”

His very lengthy elaboration is both entertaining and thought provoking. So whats not to like? The last line in his leader, the one about appreciating boiler controls hints at it. I disagree that the buyers can’t really see what’s going on behind the scenes enough to tell if the the system is quality or not.

Users are enormously attuned to how systems work for them, or against them. They largely experience the design and quality through user interfaces, but not exclusively. Right at their fingertips they can tell if they have to jump from system to system to find what they need to get their jobs done. They can tell if the information being shown is accurate, because they have to live with the consequences of it not being accurate. If the information is delayed, they have to live with that. If the system is incomplete requiring manual workarounds or business processes, they have to live with that. If the system represents information in a way not consistent with how the users think of that, say a contact has a company vs a company has contacts in a sales process, they have to fight with the cognitive dissonance. If the system throws errors, they deal with that. If fixes and modifications take months to deliver, or are years between deployment they have to live with that. If the system is down a lot, or slow, or inconsistent in how they have to use it they notice that. And they think it sucks!

Most of the things that the Software Craftsmanship true believers are trying to accomplish are directed at just these kinds of problems in development. Just like you choose a certain quality of concrete and method of construction for a bridge, you need a certain qualities of development practices to consistently build applications and systems. When my plumber told me he wanted to use copper pipes because they were quieter than PVC, I believed him, and they were. When I say we should require developers to not build SQL in line to prevent a common security breach, I want to be trusted with that.

Dan would not disagree with this. He is actually more worried about the craftsmen becoming to caught up in the glory of it all:

“So here’s my concern with the idea of Software Craftsmanship. It’s at risk of letting programmers’ egos run riot. And when that happens… well, the last time they went really nuts we got Web Services, before that J2EE. They convinced the British government that they wanted an uber-database to store Everything Ever About Everyone. You see where I’m going?”

But that isn’t what they are doing as best I can tell. Perhaps some are, and to be sure, developers putting technical concerns over outcomes is an issue in our field. But on the flip side, exhibit A, Corey Haines giving typing classes to improve productivity. Brilliant! I am always amazed when I see developers that don’t know how to use a text editor well. If you can’t manipulate text really well, you certainly aren’t going to take the time to refactor rotten code. As a jazz guitar player, if can’t play Donna Lee at 240 bpm, I probably can’t get a gig. Should be the same with typing.

The real problem is the manifesto itself which really doesn’t say anything concrete. Signing it is really just aligning yourself with a School of Thought, utterly unquantifiable or indicative of outcomes. Dan’s most salient point is that we have no way of knowing to what degree if any a person is a craftsman or not, and the manifesto helps in no way at all. On this point I agree completely.

There is a another point on productivity there, blasted in another post I thought was funny in an Angry Coder, profane style, but I’ll hit that another day.

Sharepoint 2010 on Vista notes

I have had a fairly simple problem at work for which the solution was to use the shiny new Word Automation Services of Sharepoint 2010. In the past in order to do Sharepoint development, you had to run your development environment on Windows Server instead of your normal client OS. I had tried to setup a virtual machine running Sharepoint, Sql Server and VS 2010, but even giving it 4 cores and most of my RAM, it was still minutes per click. Crazy. So, following this article, I started to setup my normal machine, still running Vista because of our legacy development environment, to run SharePoint 2010. I succeeded eventually, yahoo! But, this post is to document some of the pitfalls I encountered and how I solved them.

The basic documentation for doing all this is here. Read through this carefully. But before you start, do this first. In spite of what some of the documentation  says, Vista SP2 is actually required. I would do that install first along with updating to Sql Server 2008 SP1 with at least Cumulative Pack 2 or greater before even trying to get started. Also make sure all your Windows Updates are completed after installing these components.

Do the install in exactly the order the document stipulates. Because some of the hotfixes and service packs took longer to download than others, I tried to multitask and do some of the steps out of order. Bad choice!

I did require some IIS setup beyond all the steps in the doc. SharePoint may not setup your web server with everything it needs. If it isn’t working, check your app pool setup. The users will need rights to the SharePoint databases, and you probably want these app pool/Filters separate from your other development app pools.  In addition, I ran into a Web config issue with a filter that I forgot to write down the answer to! I also had to comment out the <requestFiltering> element under <system.webServer> or I would get a page not found error. Here is a list of changes the installer will make though.

The SharePoint install, deep in the bowels of the documents, recommends that you setup aliases for all the SharePoint databases. Use the Sql Native Client Configuration tool after your install so you can use your existing local database instance rather than the default instance SP will install to. Then just detach the databases and attach to your normal instance. Always good to limit how many instances you have running.

Hopefully this will save somebody some time down the road. Or convince them to move to Windows 7.

Why is workflow still so hard?

Almost 15 years ago I think I did my first bit of software that was called “workflow”. It was a Lotus notes application that today we would basically call “email with attachments”. OK, there were some automation bits in there where depending on some content in the document, it might get routed to this person or that. Not long after that I realized that it wasn’t much of coding effort to have a web page with a big ol’ chuck of code that went something like this:

if (field > 20) SendMailTo(boss) else SendMailTo(gopher)

Only a few years after that the industry created BPEL so you could take that and say it in 50 lines of xml text*. Now in the 21st century, you can do this with a graphical designer in SharePoint, Savvion, K2 or open sourced alternative that is supposed to be so much easier than hiring a developer to type that line of code above.

So why aren’t more businesses, developers, organizations lining up to buy or build workflow type automation? This question has started to bother me a lot.

One thing is certain to me now. Turning a flowchart into code solves the wrong problem, convenient as it is. How we represent the decision block,task, activity, state, value, or triangle on a whiteboard is NOT what is holding us back. That is a notation, nothing more, and people can learn new notations quite easily. At least they can learn a notation quickly compared to how fast they can learn to automate their business functions.

Experience that tells me workflow oriented systems are the right way to solve many types of systems problems. By systems, I mean organizing people and computers to get stuff done. But, all indications seem to say this isn’t going well at very many places right now. Why? Sounds like a lot of interesting conversations are in the works!

* I actually have no idea how many lines of bpel are needed to do this.

VirtualBox drive trick

I have used VirtualBox as my desktop vm tool on and off for a couple of years. It is easy to get going, especially compared to the free VMWare server option and has worked pretty well. I recently started having disk space problems though and wanted to move everything to a new HD. Seems to be a common problem. The default is to look in your home directory, like c:\Users\me\.VirtualBox and then use relative paths from there for Machines and especially for Sandboxes under a machine folder. You can set the machines folder for future vms, but not for existing. Seems others were having similar problems. Here is what I found.

After shutting down all my vms, I moved the whole structure to my new drive. Then I found an environment variable VBOX_USER_HOME that I set to the new root folder, e:\vms in my case. I set that and viola, worked just liked I hoped.

Software patents should be declined

[Here is most of the text of a letter I sent to the US Patent and Trademark Office today based on a request for comments due 9/27/2010 minus some identifying introduction. Unfortunately, the comments are specifically requested for the guidance on a technical matter, but I posted this anyway]

My perspective on this comes from the point of view that innovation by small business is the current driver of our economy, and nowhere is this more true than in the field of software development and the economy that exists on the infrastructure of the internet. This is quite a change from the time when the patent office was first opened. At that time the large capitalization required to build factories and machines needed to run them needed some encouragement.   As I understand it, the patent was created to provide that encouragement, to protect the investments that only a long safe run could provide.

Today for software development, the opposite is true. While a need for patents still exists, software does not have this need. Software is able to be produced by small groups of people in a very short period of time. It can be created with a low up front investment on devices costing less than $1000. Even more importantly though are the systems that modern software runs on. These are general purpose systems whose major advance over the last 50 years has been the building blocks of shared components out of which specific programs are built. Most specific programs are themselves made up largely of the same components that every other program is made of. These components are specifically designed to be generally applicable to a general domain, whether it’s business, entertainment, science and so on. These components are almost always protected by copyright under various commercial or open source licenses. The combination of low barriers to entry and widely shared components that everybody can use are what led to the almost unimaginably fast rise of the internet economy. Usually, the unique part of a program that might be patented is small in size compared to the size of the parts made up of the components. That some combination of the components we all use might have been patented in some particular way we can not use, cannot find without great expense, in many cases can see in prior art that was not patented, and is often just mathematics, is a huge detriment to the idea of using software to drive innovation in our own business.

It has been the work of others to evaluate the specific rules that might quantify whether one software patent is accepted or not and I am not an expert on this. It would be my hope though that the acceptance of software patents would be for a very narrow class of programs if at all. Most software patents should be declined. This will keep the cost of entry into the field low, risks for companies funding development low and promotes the innovation needed to continue to progress in our field.  The copyright is enough protection and its enforcement is much more concrete than that of a patent. I think we need to be clear on why the patent was created. It was created to protect investment to encourage capital. That it did so by protecting ideas was secondary, a means to an end. Today for software development, investment is better protected by not having to worry about software patents.

Philip Nelson

I didn’t quite call it on Wave

Awhile back I posted a view on whether Google Wave would succeed or not, reacting to Anil Dash’s prediction it wouldn’t succeed. I don’t think Anil Dash was correct, but I am not sure I was either:

It is way too soon to say if Wave will succeed or not, but looking at innovative ideas from the lens of your current thinking will probably result in misguided conclusions. You really have to think about these things as new, and decide if people will adopt them. Once enough do, they can become competitors to existing products, tools and technologies. The question is not whether Wave replaces email. It is whether people find ways to use wave that aren’t served by existing tools. Once that happens, people themselvles will decide whether it’s a replacement, an addition, or a waste of time.

Well, I suppose I was correct in the sense that the answer really was whether or not people would find ways to use Wave: they didn’t. And neither did I.

Wave was probably too soon, or too much a gleam in a bunch of engineers eyes to be successful. Still was a pretty amazing bit of technology though. I did have one killer idea for it. I should really, … nah.

Following Health IT

I have been starting to follow the debate about improving health care by improving health care IT. Health and Human Services and the US CTO, Aneesh Chopra had an open web conference followed up with a blog with open comments. I posted a comment there about the disconnect between how Electronic Medical Records(EMR) systems are precieved by providers and by everybody else with some suggestions.

This debate really resonates with me. One the one hand, there is this belief that improving EMR systems will lead to efficiencies. As is so often the case with IT initiatives though, the case seems based on faith more than on facts. As the debate has developed it is becoming more obvious to me that much of this discussion is just shifting the effort of making sense of free text doctors notes from those who want useful facts to those who provide the facts. In otherwords, rather than a doctor writing on a piece of paper that can be scanned and presented graphically, they need to fill out a form with stuctured fields on it that are needed by all the downstream consumers of the information. The doctor, or perhaps a records tech in the practice, needs to codify the notes to make data available at their cost, rather than a records tech at the consumer’s location. Either way somebody has to do this. Since this could be a fairly specialized task, should it really be distributed across tens of thousands of small doctors offices, clinics and hospitals? I wonder.

This isn’t the only problem I see and I’ll post more as time goes on. But, what really is resonating with me is how often we spend time rushing to solutions with paradigms we already know when understanding the problem is only partially done. Sure, sometimes these can happen together, but in the case of health IT, thinking really needs to precede action.