Rants, rambles, news and notes from another geek

Just Released! Smart Client Software Factory June 2006

The Client Team at patterns & practices is pleased to announce the release of the Smart Client Software Factory.

We’d like to thank everybody in this community for the feedback and participation. Special thanks to those who have closely followed each drop since we started and to our Expert Advisory Board.

We really appreciate the time you invested in helping us identify high priority areas for us to work and steer the project in the right direction.

What’s next? Hands-On-Labs for Developers and Architects, a ClickOnce chapter, VB Guidance packages, and a few other surprises.

Stay tuned and keep the great feedback coming!
p&p Client Team

Guidance Automation Extensions and Toolkit: June 2006 Release

The patterns & practices team is please to announce the availability of the June 2006 CTP of the Guidance Automation Extensions (GAX) and Guidance Automation Toolkit (GAT)! As reported previously, this is a relatively minor update to the previous December 2005 CTP which includes some important bug fixes and usability improvements.

What are GAX and GAT anyway?

GAX and GAT are really the foundation of Microsoft’s Software Factories initative. Software Factories built on these technologies are collections of guidance that help architects and developers build specific types of applications with improved consistency, quality and productivity. This is achieved by integrating automated guidance related to the factory’s application scenario deeply into Visual Studio - for example, using templates, wizards, recipes and code generation, along with supporting patterns and architectural documentation. The patterns & practices team is currently working on several Software Factories, including the Web Service Software Factory, Smart Client Software Factory and Mobile Client Software Factory.

The Guidance Automation Extensions (GAX) extend Visual Studio 2005 to provide the core runtime environment for the guidance packages included in these factories. GAX allows you to install and enable a guidance package for a Visual Studio Solution, and it will add the appropriate templates, recipes and wizards to the development environment to make it easy for you to complete tasks, such as adding a service interface or business entity to your web service solution. The new version of GAX also includes a new window called the Guidance Navigator which makes it easy to discover the available guidance and read any related documentation. You must have GAX installed before you can use any guidance packages.

The Guidance Automation Toolkit (GAT) provides a simple guidance package that lets you author new guidance packages or customize existing guidance packages. This is extremely important, since even though we are working hard to make our Software Factories as relevant as possible, each organization and project is different - so by customizing the&nbsp_place_holder;guidance packages you can ensure that they fully meet your requirements and comply with your architecture and environment. You do not need GAT installed to use a guidance package, but over time it’s likely you’ll want to customize something so it’s definitely worth installing now.

Should I upgrade from the previous release?

Yes - while this is a relatively minor update from the previous December 2005 CTP, it does contain some important fixes and enhancements as outlined earlier by Wojtek. Even more importantly, the wave of p&p Software Factories that will be hitting the streets over the next few months will require the new release, so upgrading is definitely recommended.

Unfortunately it is currently necessary to uninstall any guidance packages you already have installed (including GAT) before you can uninstall the old GAX. You can then install the new GAX and reinstall any guidance packages you want to use. Believe me we know this is a pain (we’ve gone through this process a lot in our projeccts) - so it’s definitely something we’ll work to improve in the future.

Will existing guidance packages still work with the June 2006 release?

In general, yes - but there are a couple of tricks you’ll need to know.

First, there are some minor changes in the new version of the T4 text templating engine that we include in this release (it’s the same version that’s in the June 2006 release of DSL Tools). Depending on how the templates were originally authored, it may be necessary to make minor changes to any included T4 templates so they can run on the new version. In general this just involves adding the declaration <#@ assembly name=”System.dll” #> to the top of the file.

The other thing to watch out for is that the version numbers for the GAX and GAT assemblies have changed. We install binding redirects with the new GAX to enable older guidance packages to redirect to the new versions - but this only works at runtime, not when compiling the source with Visual Studio. So if you open the source of an old&nbsp_place_holder;guidance package with the new GAT/GAX installed, you will need to update your assembly references.

You can get more details on these issues in the Release Notes installed with GAX.

Why is this still a CTP? What’s the future of this technology?

Like the previous releases, this new release is still labeled a Community Technology Preview. This is because the deliverables are still unsupported, and we can’t promise to maintain compatibility as we continue to evolve the technologies. Keep in mind that both GAX and GAT are only designed to run on development machines, not production servers, so even if something does blow up, it’s not going to blow up your production systems.&nbsp_place_holder;That said, we’ve gone through the same quality gates with GAT and GAX as we do with any other p&p release, and we are confident we have a high quality release. Since all of our factories will depend on this technology, we need to be!

We really are very excited by the potential of this technology and of Software Factories, and we are continuing to work on enhancing the infrastructure, authoring environment and the factories themselves. While we don’t yet have a solid product plan that we can commit to, we are working to significantly enhance these deliverables and integrate them much more deeply into Visual Studio and Team System. The goal is that eventually most of the capabilities you see in GAX and GAT will be absorbed into Visual Studio. We’re going to need your help to figure out what areas we should be focusing on, so expect to hear much more about this work on my blog and on the Guidance Automation Toolkit Forum.

This posting is provided “AS IS” with no warranties, and confers no rights.

Editor’s note: This post was copied verbatim from Tom Hollander’s announcement post. __Since the end of the 2006 fiscal year is upon us (actually past us by the time you read this), you can expect a smattering of announcements from patterns&nbsp_place_holder;& practices.

Enterprise Library for .NET 3.0 - What Would You Like to See?

Tom Hollander posted this some time last week and I missed it.

We’re getting ready to start the planning process for the next release of Enterprise Library for .NET Framework 3.0. So where should we focus our efforts? While we have a few ideas up our sleeves, the best ideas are likely to come from people who are using Enterprise Library on real applications. So don’t be shy - tell us what you want!

Please to go to Tom’s blog post let us know.

My Outlook TRAF System

Back when I was in the consulting world, I got a lot of email. Or so I thought. Then I came to Microsoft.

The amount of email I get here–and I’m not talking about junk mail–is unbelievable. Microsoft is an email driven culture. And that is fine, it works for the most part, but it does require adjustments to how you deal with it.

Somewhere along the way my wife taught me a system for organizing stuff that she called FAT: File, Act, Toss. It was about focusing your attention on the right things, but it always felt slightly lacking.

When I was involved in a startup, one of my business partners loaned me one of those “personal productivity” courses on CD (sorryΓǪ I don’t remember which one). I spent a month or so listening to them in the car, but only some of it stuck. One of the two things that really stuck was a thing called TRAF, which re-ordered the FAT system a bit and introduced Refer as the second option in the workflow.

Putting Toss at the front felt very right to me. I’m kind of famous as a development lead for saying “nothing makes me happier than deleting code”, so it shouldn’t be all that surprising to find that I also enjoy deleting email.&nbsp_place_holder; So, I loosely applied it to my email, but didn’t really get aggressive about&nbsp_place_holder; it. I basically kept my old way of doing things in place–lots of folders, rules, etc.–with a little bit of a prioritization system on top. And for the most part it worked.

But as my responsibilities here at Microsoft have grown, so has the volume of email I receive. As a result, the system I’ve been using is starting to show scaling problems. Too many folders that aren’t actually helping me find things, too many items in my Inbox, and most importantly a feeling that I’m losing control of it. So I’ve been spending a lot of time over the past month or so talking to different people about how they organize their email.

Many people just keep a giant Inbox folder with no real plan, and depend on search and sort to find what they want. If something scrolls of the top page, it may get lost and not dealt with, but that is just how they work it. Others have very complex folder structures where every thing has a special place. Brad Wilson and I used to have frequent discussions about this stuff. Folders or no folders? Search folders or a good search engine? Categories? Unread flagging? The options are endless.

But I kept coming back to TRAF. After Brad left the patterns & practices team, he started similar discussions with a PM on his team named George Bullock. George had also spend a lot of cycles thinking about how to solve this problem and had come to his own conclusions. Apparently Brad shared some of my TRAF ideas with him and it sounds like it influenced his thinking based on this recent blog post.

After reading George’s post, I’ve been putting together a new system for myself. Unlike George, who replaces File with Follow-up, I stick with the literal definition of TRAF: Toss, Refer, Act, File. I use TRAF as a preprocessing system for managing my Inbox.&nbsp_place_holder; It is about triage–the act of sorting things into a priority list in an efficient and effective manner. From wikipedia:

Simple triage is used at the scene of a mass casualty incident to choose patients who require immediate transport to the hospital to save their lives as opposed to patients who can wait for help later. First aiders performing field triage on the battlefield or at a disaster site usually do not need to assess resources until transportation becomes available.

As George points out, the challenge comes with dealing with the Act part of the process. Even with this pre-processing approach there is still too many things that are in the “Act” category. So much of my process (and his) is about dealing with that problem.

So let me show you how I have decided to implement my email triage system…

When an email arrives, it starts as an unread message in the Inbox folder. Periodically during the day, I execute the following process on the Inbox, focusing primarily on the Unread ones.

  1. Toss: Can this message be deleted? If so, then delete it. Yes, I mean deleted. As I mentioned above, I’m not one of those people who thinks I need to keep every email that is ever sent to me.
  2. Refer: Can this message be handed off to someone else? As George rightly points out in his post, this is different than having something that you must act on that requires help. This is about actually giving this problem to someone else.
  3. Act: This is my problem. I have to deal with it. There are two alternatives: * Immediate: It must be dealt with now. Do it and then mark it as read and move it to the Archive folder. * Not Immediate: Flag it with a priority flag and mark it as read. Leave it in the Inbox. Since I’m using Outlook 2007 for my email, I have the nice new Priority flags labeled Today, Tomorrow, This Week, Next Week or Custom. I don’t know if I need custom or not, we’ll see.
  4. File: I can’t delete it, it isn’t someone else’s problem and I don’t need to do anything, so file it away by marking it as read and moving it to the Archive folder.

That is pretty much it.

A couple of times in there I mentioned the Archive folder. Here at Microsoft we have a policy that only allows a very small amount of stuff on the Exchange server. Whether this is to encourage us to get rid of old mail or because the guys in IT don’t want to deal with the disk space, I don’t know. Regardless, this makes us use the Outlook Auto Archive feature aggressively.

But this system really depends on the Inbox being the place where I keep my TODO list. I don’t want Auto Archive coming along and grabbing stuff that I haven’t done yet and moving to my Archive.pst file. So, I introduce an Archive folder underneath the Inbox and move items there when they are ready to be filed. I configure my Auto Archive rules to process this Archive folder and to ignore the Inbox.

Astute readers will see that I don’t describe any other folders in this system. That is correct. No folders. For non-mailing list mail, I’ve given up on folders. (For mailing lists I use Inbox Rules to move them into folders, one-per-list.)

The next part of this whole new process is about metadata tagging. If you think about the problem I was trying to solve with&nbsp_place_holder; folders, it was about having a way other than searching to find things when I need them. Search is good, but sometimes you have other information you can apply and you should be able to apply it.

New in Outlook 2007 is a unified Categories system shared between the components where items can have more than one category assigned to them easily and clearly. Just as you can easily right click on an email and assign it a flag, you can right click and assign one or more categories. So my intent is to create a set of categories to use to help me when I want to do this kind of searching.

My straw-man category list looks like this right now, but I suspect I will make changes to it once I figure out how I use it. I do know that I probably want it fairly short, but I also want it to be fairly inclusive.

  • Personal
  • Family
  • Friends
  • Projects
  • Dev Team
  • Group (p&p)
  • Division
  • Corporate
  • Public Speaking
  • Training
  • Legal
  • OOF Me
  • OOF Others

One thing to remember, and a thing that is challenging me to get this category list right, is that the category list is shared between the all the components in Outlook (mail, appointments, contacts, etc.). So it is hard to get this right. Things like the two OOF categories are for providing visual queues to calendar items, but may also be applied to emails by my team members when they tell me about their time off. (For that example, I would probably also have the Dev Team and Projects categories on the message as wellΓǪ I’m not sure.)

The thing that worries me about these categories is that I’m worried that I won’t actually use them. But the plus side of this possibility is that I think the new Outlook 2007 search is very good and will suffice. Again, only time will tell. I hope I use them and I hope they help.

One other technique that I like from George’s system (I’m not sure he mentioned this in his blog post) is to use Search Folders to help with all of this. Again, I’m not sure exactly what folders I’ll use, but this looks like a reasonable starting point:

  • Act Today
  • Act Tomorrow
  • Act This Week
  • Act Next Week

I’m considering a search folder per category, but I’m going to hold off on that until I see if Search is good enough. I know you can do it, I just don’t know if I need it.

So, this is the system I’m going to use this year. It probably seems a bit insane to use less organization for more email, but I actually think it is going to work quite well. One thing that I already see that would&nbsp_place_holder; be a nice feature (perhaps I’ll write an Addin for this) is to be able to easily do a search & replace on categories. I use this in Quicken all the time when I reorganize my finances, and I suspect that will be the feature that enables me to be a bit more agile about my category list.

Questions? Comments? Fire away. I’d love to hear what you think.

Web Service Software Factory: July Community Drop

Missed this earlier in the week:

Web Service Software Factory: July Community Drop (6/26/2006 9:15:30 PM)

Want to see the Enterprise Library application blocks in action in a realistic service oriented application? And would you like automated guidance to help you build your own applications that comply with a proven architecture? Then check out the July Communtiy Drop of the Web Service Software Factory. In addition to providing a reference implementation, written and automated guidance around building service interfaces with ASMX, this latest drop includes a new data access guidance package that makes it easy to build a data access layer using the Enterprise Library Data Access Application Block.

Posted By tomhollander

Go to patterns & practices: Enterprise Library

Congrats to the team!

Thoughts on FIT and DSLs

This topic came up a few times this week at Tech Ed, so I decided to share my thinking on this topic.

The key thing to understand about FIT is that it is an attitude about separating the content of an acceptance test from the engine (and code) that runs it. The purpose is, of course, to better enable the customer to create tests that the developers can work against. The wiki tables (or Excel worksheets├óΓé¼┬ª I don├óΓé¼Γäót care) in FIT-like systems&nbsp_place_holder;are basically just simple programs written in an easy to understand domain specific language. Most business people use spreadsheets as their primary communcation language├óΓé¼”possibly even more than their native speaking language!

Ward Cunningham (inventor of Wiki and FIT) and I have talked about this a few times. The biggest problem with many FIT implementations is that FIT was created to provide a simple way to provide input for heavily data driven tests. The DSL in this case is custom tailored for providing something like accounting or financial data to an engine that can test the inputs and outputs. This kind of acceptance testing is very powerful and valuable when the system you are testing is an accounting application, but what about when you are testing something else?

To my mind, the problem is in assuming that wiki tables are appropriate for describing the customer acceptance requirements for all problems. It seems much more likely that different classes of problems will have their own DSLs associated with them. And wiki tables may not be the best way for the customer to communicate that.

So what is the best way for your customer to communicate? That all depends. That is the real challenge for the team to figure out. And it is worth figuring out. Learn your customer’s language and figure out how to turn that into a DSL that you can execute so you can get real automated acceptance tests written by the customer. This is the real holy grail of agile software development. Can we find it?

The Key to Adopting Agile Methods

On Monday Alan Ridlehoover and I presented “Incorporating Agile Development Into Your Organization” at Microsoft Tech Ed 2006. We had the pleasure of having our talk at the first talk of the first day in the Architecture track. As it turns out that was good, but that is a story for another post…

Alan and I met with many people including Brad Wilson, Michael Puleio, Mitch Lacey and Jim Newkirk discussing the various things that had enabled successful adoption of agile techniques. After listening to everyone we decided that most of the agile community has been writing books on all of the technial aspects of the problem instead of the softer parts. We have lots of books on TDD, Pair-programming, version control, unit testing, even emergent design.

And these are all good things to be talking about. They are important ingredients in the recipe for agile adoption.

But you will fail if you focus exclusively on these things.

And that is because the most important part of agile is not the technial “how to” parts. It is that agile teams have different values than non-agile teams. And changing values requires cultural change.

Cultural change is a softer thing that is hard to teach to technologists, so we shouldn’t really be all that surprised that we don’t get much coverage on it. The astute reader will be able to point me to dozens on paragraphs on dozens of books that talk about how you will have to promote cultural change, but then the next paragraph is about the next technique for writing the code or reporting on the status. We understand these things. These are tangible problems that we can identify, analyze, troubleshoot, measure and test. And again, I say, if you focus exclusively on these things, and ignore the cultural issues your agile adoption will fail.

The most interesting thing about this to me is that the agile manifesto guys got it right. They quite clearly recognized that this thing is about culture and values and is not about specific techniques or tools. And then almost every one of them went off and wrote a book or a tool that talk about the techniques and not about how to change people’s values.

So, that is what we need. We need a book that tells us how to change people’s values and attitudes about software development. If you we can teach that, then the rest will just fall into place for free. The techniques become obvious when people’s minds are in the right place. And the techniques become obstacles when they aren’t.

WinFX Is Now the .NET Framework 3.0

Excerpted from Somasegar’s WebLog:

The .NET Framework has always been at the core of WinFX, but the WinFX brand didn’t convey this.&nbsp_place_holder; The WinFX brand helped us introduce the incredible innovations in terms of Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), Windows Workflow (WF) and the newly christened Windows CardSpace (WCS) formerly known under the codename “InfoCard.”&nbsp_place_holder; The brand also created an unnatural discontinuity between previous versions of our framework and the current version.

With this in mind we have decided to rename WinFX to the .NET Framework 3.0.&nbsp_place_holder; .NET Framework 3.0 aptly identifies the technology for exactly what it is - the next version of our developer framework.

Go read Soma’s blog post for the rest of the post and all the details.

Tech Ed 2006 Is Almost Here!

I just wanted to post a quick note about TechEd 2006 in Boston. I arrive Sunday afternoon and will be presenting ARC201 “Incorporating Agile Development into Your Organization” on Monday morning with Alan Ridlehoover. Please come, we’d love to see you.

Other than that I will be around, talking to customer, meeting people and otherwise making a nuisance. Ping me via TechEd Connect if you want to hook up.

Roles in an Agile Team

I’ve been desparately trying to catch up on blogs, work, life and such and have been failing miserably. More on that soon…

But I wanted to quickly share a blog post titled Roles in an Agile Team&nbsp_place_holder;by Michael Puleio, one of the great agile-minded developers here in patterns & practices. If you aren’t reading his blog, you should be.