Tim Murphy's .NET Software Architecture Blog

November 2006 Entries

Team Foundation Server Frustration

Did someone set the way-back machine for 2001.  I am trying to setup up a virtual server with TFS and it feels like I am installing Sharepoint Portal Server 2001.  It is so unforgiving that if you miss a step it is hosed and it leaves you little or no way to fix the problem.  It expects things the way it wants them and that is that.

Of course some will say "just follow the instructions silly", and they would be right to a point.  Still, I think application setup tools should be forgiving and make as few assumptions as possible.

I figure I will just put this into my little bag of design lessons learned.  Where ever possible take into account that prerequisites for your application may already be installed and not in the optimal configuration.  Give your users a way to resolve discrepancies.

VS Guy's Evil Brother

The consultant who will remain nameless (cough, cough, Nyman) is at it again.  VS Guys has shown his true colors.  He is now Doctor Defect!

Gathering Requirements From A User Perspective

My wife asked me some questions out of frustration the other day which got me thinking.  She wanted to know why I would ask here if she had plugged in the camera when she called me at work asking how to download her pictures?  Why would I ask one of our friends what that friend wanted to do with the computer she was going to purchase when what she asked was what I thought was a good computer?  This woman is a mother with three small children, what would I think she was going to do with it?  Looking back it was probably safe to make some assumptions, at least on that one.

This type of situation falls into the categories of trouble shooting as well as requirements gathering and many other areas that we venture into as IT professionals.  These were all very good questions that speek to how I and I believe many people in our industry attack problems.

Do we over complicate problems by asking questions that are too basic when we don't need to?  I think that we get so used to working the hard problems that sometimes we forget to answer simple questions with simple answers.  Most times we are trying to make sure that we don't assume too much since doing so would mean that we will end up building the wrong solution.  Ensuring that we do not assume anything does not mean ignoring what we already know.

So what is the solution?  Take a quick inventory of what you already know.  If you still need more information then ask appropriate questions.  Otherwise, propose a solution that fits what you know and validate it.  Remember, a frustrated user (or spouse) is never a good situation.

Working With Virtual PC And Virtual Server

I have been working on setting up demos of VSTS and TFS on a VPC and Virtual Server.  Along the way I have come across a number of snags.  Some I have managed to work around.  Some I have no answers for.

First let me say that I didn't originally install VPC, Virtual Server or their operating systems.  My normal machine didn't have enough horses to run these applications so I had our company's admin setup a new machine and install the basics for me.  There seemed to be network problems which may be contributing to the situation.  I am not blaming the administrator, just saying that I wasn't the first one to touch the machine.

The first thing I ran across is the VPC is saying that Shared Folders is not installed and I need to access the DVD image from the host machine.  I chose the option to Install or Update Virtual Machine Additons with no effect.  The solution was to install MagicDisc and mount the image file.  At that point I could capture it as a drive.

In order to make an ISO available to the Virtual Server it was necessary to go into the Virtual Server Administration Website and configure the virtual server.  Within that there is a CD/DVD section.  It allows you to determine the physical location of an ISO and will update the virtual server in real time.

So far I have not resolved the network issues.  I believe it may have to do with the virtual server being part of the company domain which I couldn't connect to at the time.  That is a problem for another day.

My Hero

I got a Visual Studio Guy last year for listening to some MSDN webcasts.  One of the consultants that I work with likes to put villainous captions on him.  Check it out.

Visual Studio Team Systems Resources

I have been doing some work with VSTS and ran across a few resource that I thought some people might find of interest.

In future posts I plan to compare and contrast VSTS with GAT/GAX.

Overcoming The Challenges Of Agile In The Enterprise

The idea for this blog entry came from a conversation I had the other week with another consultant in the company that I work for.  He was saying how he had used TDD for several projects and believed it just won't work in an enterprise wide project.  This surprised me since most of the articles I have read and podcasts I have listened to say that this is not the case.

You will hear various people say that agile methodologies can or can not work in an enterprise environment.  I believe it is true that agile methods lend themselves to smaller teams, but how can we make them work on a larger scale.  I was going to say that the solution should be called the Unified Process (similar to the Unified Theory some physicist are trying for), but that is already taken.

I think one thing we need to consider is combining multiple approaches of managing design and development when working on large scale systems.  One perspective would be that at the enterprise level where we need to ensure consistency.  This is where the architect lives.  I believe there needs to be an overarching view of the systems that are used to drive the company.  Applications need to be integrated and resources need to be coordinated so that redundancies can be extracted and leveraged.  I also think it is important to prescribe certain standards at this level.

The other perspective would be at the application level where we are building specific features for defined users.  Here agile methods would be applied to increase the quality of individual components.

Of course this is and idea that needs expanding on.  I will try to continue this theory in later post.

Interesting Facts From Podcast

In the latest ARCast Ron Jacobs talks with Scott Guthrie.  As if that wasn't cool enough Ron asked him what he was most proud of.  In a long list of things Scott happened to mention something that relates to one of my earlier posts.  It seems that Disney's FastPass is run on machines using the .NET Compact Framework.  Now that isn't a Hello World demo.

Evaluating Cost vs. Savings

Ok, so this isn't that far from another post I made recently.  I am merely continuing to think about different aspects of the same problem.

During the last couple of months the client that I have been working at has been trying to see where they can cut scope to maintain their timeline.  One thing that I realized while listening to a podcast the other day is that they are not taking into account the cost saving that would be gained by moving the release date and delivering the code.  On the podcast they were discussing how you justify architecture on a project.  I believe it works just as well for defending features as being in scope or out of scope.

The question becomes what feature can you implement that would save more than not implementing that feature (sounds like a circular reference or an unsolvable problem).  The tongue-in-cheek answer would be that if it wasn't going to return more than it cost to implement it wasn't worth developing in the first place.  The more serious answer would be something like automating the lookup of customer data that used to be in file draws.  Ok.  You don't see that much any more, but you get the idea.  It is something that reduces the amount of time required for an employee to do their work.

Election Technology

I figured that today this topic was appropriate.  I'm not going to try to convince you to vote for a candidate.  There are just a few things I have noticed during this election season that I wanted to rant about.

Anyone who says that politicians are not technically savvy is probably right.  The people who work for them are another story.  They make sure that the candidates are blogging and podcasting.  They also inform the people who are calling your house how to block their numbers a number of ways so that you don't know who is calling (at least until you see "Unknown" pop up for the 100th time).

They know your name and where you live.  I had someone show up at the house this last weekend and had my name on his sheet as someone he was supposed to talk to.  Now it wasn't that I was a registered voter, because my wife is registered and and they weren't looking for her.

Now since I am in the Chicago area, famed for stuffing ballot boxes, I want to touch on misuse and flawed voting equipment.  I saw a documentary on HBO the other day that scared me.  They show video from previous elections of touch screen voting machines that counted a vote for the person you didn't pick.  In another case they showed how if you had a corrupt election judge you could alter the results that the machines produced.

So what is my point?  I love technology, but not when it is used to harass me and possibly could rewrite history from the way it actually should have been.  I don't have an answer at this point, but I think we need to be on our guard about how technology is being misused in our election process.  Use the technology to investigate what the candidates are saying.  Find out where they are splitting hairs to put their opponent in a poor light.

Trouble Shooting Skills

Over my career I have worked with individuals who were problem solving challenged.  Sometimes their critical thinking were in short supply.

I think that mentoring is the best way to teach these skills.  When a team member has a problem don't solve it for them.  Ask them questions that make them solve it themselves.

One of the questions that you can teach is to evaluate the resources that they have to indicate what the cause of the problem is.  They should start thinking about things like the list below.

  • Review production logs.  This is the quickest way to solve obvious problems.
  • Bring production data to the testing environment and debug
  • Do a mental code walk through inputting the known data elements.  Some times you can see where the problem is by matching the observed behavior to the flow of the code.
  • Reproduce the issue step by step.  It is hard to tell where your problem is if you don't know when it occurred.
  • Learn how to question the person that reported the issue.  They may have a clue that they didn't think to detail when they logged the problem.

Asking leading questions helps.  Questions like "Why do you think the error is in the data access layer" can help a developer to work through the problem.  After all, the role of an architect is to pass on what they know.  Part of that is your trouble shooting skills.  Be generous.

Using Tasks to Manage Time

One of my biggest demons is losing time to activities that are not one of my main priorities.  I also have the problem of trying to remember all of the items that are assigned to me.  Now what was I working on?  Oh yes, a blog post. :)

Lately I am trying to use Outlook tasks to manage my time and priorities, at least at work.  I believe that it was  Scott Hanselman that talked about Tiddly Wiki and the Getting Things Done version.  Personally I have not been able to get it to work.  I got frustrated and gave up on it.

The main idea is to keep your tasks and priorities in front of you at all times.  You also need to make sure that you constantly re-evaluate the importance of your tasks and work the highest ones.

I'm not saying anything new.  For the most part this post is to encourage myself as much as anyone reading it.  Get organized and get moving.

Architect Community and Resources

Being an architect or becoming an architect is not an easy thing to do.  In most companies if there is even a single architect you are lucky.  This means that you are on your own to figure out what an architect should really be.  No wonder no one can agree on what an architect is.

One thing I would like to see is an apprenticeship and mentoring program within the architect community.  Experience is key to becoming an architect, but there are component skills that can be grown and nurtured.  We need to be teaching communication, negotiation and decision making skill.  Architects need to learn to balance technology and business concerns.

Microsoft has stepped up and created a respectable certification program (ARCast on the Microsoft Certified Architect) , but there isn't a path to get there.  IASA and WWISA before it have tried to build a community.  Here in the Chicago area neither organization has really taken off.  Hopefully we can get our first IASA chapter meeting in our area at the beginning of next year.

SkyScrapr is a recent web site that seems to be driven by Microsoft which has the potential of being a good resource.  If you visit it you will see that it is growing.  Currently it has definitions, a blog, some articles, hosts the channel9 ARCast Show and Ron Jacobs' architect video series.  Sounds like a good start.

Another resource that you should check out is the architecture forum.  If you need a question answered it is a good place to hang out.  Don't just sit on the sidelines get involved.  If you make a few posts you might get some good discussions going.

But back to the point.  I really think that the only way to get away from developers calling themselves architects is to create an environment to nurture budding architects.  If anyone knows of an existing program that is available to a wide audience let me know.  I would really like to hear thoughts from others on this.  Please leave comments, whether you agree or disagree.