Is Guidance Automation Too Complex?

Over the past couple of weeks, I’ve gotten a chance to spend time investigating the Guidance Automation Toolkit. For those who aren’t familiar with GAT, it is the underlying enabling technology that powers p&p’s Software Factories. Several of p&p’s factories include data access guidance, but that works against an actual database rather than a VSTDB project. Given my newfound love for VSTDB + my interest in GAT, I thought I would whip up some simple automated guidance.

The key word in that last sentence is “thought”. Turns out that authoring guidance in GAT is extremely unfriendly. GAT’s unit of automation is called a recipe, which consists of arguments, wizards and actions. Arguments are GAT’s equivalent of variables, wizards gather argument data from the user and actions execute changes to the solution based on the values of the arguments. There’s more granularity to the GAT authoring model – for example, GAT arguments have optionally have value providers and converters (which should be called validators) – but you get the basic idea.

What makes GAT so hard is that all these recipe elements are wholly independent. This makes individual recipe elements easy to write and recipes fairly modular, but at the cost of making recipe very difficult to write. Your recipe has to define both the list of these elements that it uses as well as their interconnections. For example, arguments optionally contain value providers and converters. They are exposed to the user in wizards as either custom pages or arguments. They are fed into actions as input parameters. Action input parameters can also come from the output parameters of other actions. All these interconnections have to be hand coded in XML with fully specified type names like “Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library”. Ugh.

The good news for GAT is that help is on the way. Clarius’ Software Factories Toolkit includes a graphical domain specific language for authoring recipes. With that tool, you can pick the various recipe elements from a list and connect them graphically instead of hand coding all of that in XML. But why do we have this problem in the first place? How much are we gaining by using this XML format in the first place? Frankly, I don’t think very much. I think it would make more sense to define recipes in code than XML.

I was talking to Michael Lehman about Project Glidepath, which is built on GAT. However, Glidepath only uses GAT for integration with Visual Studio’s menu system (which seems much more difficult than it needs to be, but that’s a separate post). Instead of GAT’s recipe system, Glidepath plugins simply expose an Execute() method. Within that method, the plugin can do whatever it wants. Michael showed me the code behind the Vista Bridge package, and it is MUCH simpler than the GAT equivalent. I could see having a little more structure than just Execute(), but GAT seems like overkill in comparison.

Sometimes complexity is necessary. But I can’t help but think that GAT’s complexity wasn’t really necessary. Wouldn’t it have been simpler and just as modular to define a recipe in code instead?

Morning Coffee 61

  • Nick Malik wonders if architecture is code or if it’s data? Frankly, I have nothing to add to this, but thought I should link to something Nick wrote since he’s letting me share his office for the next few months while I’m engaged with one of the teams he mentions, though he begged me not to disclose which one. 😄
  • Ted Neward’s Five Minute Management Lessons for Developers made me snicker.
  • Xbox.com is running a new contest called “My Mom’s a Gamer“. Mine is. These days, it’s mostly casual games on MSN Games, but back in the day she played both the Atari 2600 and Colecovision. She would play Space Invaders for hours. And curse. A lot. Most kids learned to curse on the playground, I learned from my mother.
  • Mark Cuban claims the HDTV is the new PC. TV and PC technologies are certainly evolving as they merge, but will that platform be as open as the desktop PC or the browser? It better be.
  • According to Nick Carr, Citigroup is looking to cut $4.6 billion in spending over the next three years and that IT will be one of the “cornerstones” (i.e. hardest hit) of that effort. I had a chat with an Meta analyst in Australia a few years ago who suggested that IT spending was going to go thru an innovator’s dilemma phase. Huge companies (like Citi) with huge IT budgets are facing significant competition from small companies that can’t afford huge IT budgets. These smaller companies get used to running a tighter ship and tend to be more competitive as they grow and are able to directly face off against the big fish.

Morning Coffee 60

My car has a new battery so I am back in the office with my nose on the grindstone. I’ve spent most of the morning talking about SOA and my MSIT project, so I only have a few items today.

  • Nicholas Carr illustrates the coming competiton between SalesForce.com and Google. Very interesting. Of course, that doesn’t damp “their mutual disdain for the Horrible Monster of Redmond” as Carr puts it.
  • I decre that Peter Schneider officially has too much time on his hands. I mean, if he’s got time to implement a compiler and interpreter for Brainfuck in Powershell, what else has he got time for? On the other hand, it’s short and shows how internal DSL friendly PS can be. (via Larkware)
  • Jeff Atwood wonders if MTurk is a failure. I wrote a year ago that MTurk is a successful feature, but would be a failure as a stand-alone service. As I wrote then, “I’m guessing it would be worth it to Amazon to run the service even if they were the only ones using it.”

Afternoon Coffee 59

Friday’s Morning Coffee didn’t happen because I fraked up the DNS settings when I moved devhawk.net to a new registrar. Today’s morning coffee was drastically delayed on account of car troubles. Tuesday, I have an 8am meeting so tomorrow’s not looking good either.

  • The big news for Xbox 360 is details on the Spring Update. Big news is WLMessenger integration + a QWERTY thumb pad that snaps right into the controller. (via Gamerscoreblog and Major Nelson)
  • Speaking of Xbox, I completed the Old Spice Experience Challenge today on my lunch break (couldn’t go to the office due to the car troubles). My reward is an upgrade to level 2, a gamerpic I’ll never use and a free copy of Contra. (Estimated total value: $5)
  • Scott Guthrie continues his series on new language features in C#3/VB9. This time it’s lambda expressions. This is the “killer” feature in the new language version IMHO, since you can use lambda expressions either as code or data. Furthermore, it’s up to the class/method handling the lambda expression to decide if it should be treated as code or data. That decision is made and design time, but the upside is that as a developer, I write my queries exactly the same way regardless if they are to be executed directly (aka code) or analyzed (aka data). Scott also metions a few new LINQ to * projects: LINQ to Amazon, LINQ to NHibernate and LINQ to LDAP.
  • Speaking of LINQ to *, here’s LINQ to 3D Objects in a C# ray tracer. I think it’s safe to say that LINQ to *whatever* is the new hotness. (via DotNetKicks)
  • The new version of F# is out. Looks like the big new feature is Active Patterns which is described in this draft paper. If I only had more time to investigate this. (via Don Syme)
  • For the third time in the past six months, my laptop power supply has died. I’ve never had a problem like this before, much less three times. It’s not even the same laptop as I recently moved over to a Tecra M4 Tablet. I just don’t get it.
  • P&P has shipped the 3.0 release of Enterprise Library. Tom Hollander has the details. Personally, I am most interested in the new Policy Injection Block.
  • Having worked with self-signed certificates and understanding what a PITA they are, it’s nice to see that IIS 7 has explicit support for them.
  • I saw a reference to “The Halo Effect” on one of the political blogs I read. Needless to say, as an Xbox gamer, my first reaction was that this had something related to Master Chief. It doesn’t.
  • Joe McKendrick compares SOA governance to national governance. Given our polarized political climate, this analogy may hurt more than it helps. Also, the next enterprise architectural board that has equal “branch” footing with IT and executive management will be the first.

Morning Coffee 58

  • Nicholas Allen points out that Messaging is not a Transaction. Of course, what he really means is that Messaging with WCF is not a Transaction. Messaging with SSB is in fact a transaction (well, more accurately, it’s transactional but you get the idea). Nick’s right that you may not need anything more than simple retry semantics that you can implement yourself in your application protocol. But SSB has spoiled me. Why should I have to write the retry semantics? Why can’t my messaging stack provide that for me? Or put another way, if I need a “precicely defined failure model”, wouldn’t I be better of choosing a messaging stack that provides that out of the box?
  • Steve Hartman explains how to use span Remote Desktop Connection across multiple monitors for use with VPC. I wonder if this will work on my machine, since my multi-monitor setup is an L shape, not a rectangle. I’m offsite today, so I’ll try it tomorrow (via DotNetKicks)
  • According to news reports, Microsoft is negotiating to provide DRM free music too. I wonder how well this will work for Microsoft given that both Zune and PlaysForSure provide subscription services. I would assume the $15 all-you-can-listen style subscription services wouldn’t be DRM free. Given that program is one of the (few) selling points they have over Apple, will the availablity of DRM Free music undercut the interest in subscription? (via Dale)