I recently gave a presentation at the Kentucky Day of .Net community conference.  Throughout the preparation for the presentation, I had almost completely made up my mind that it would be the last public presentation that I would ever give.  It took a lot of time to put the deck together and I never felt like the demo got my idea across. 

So it comes to Thursday night before the Saturday conference and I'm awake at 12:30 am.  For those of you who don't know me personally, being awake that late on a "school" night just doesn't fly for me. I'm doing a mock presentation on my finished deck and the nerves hit.  I felt like I was going through my high school days of insecurity.  I had a very real fear of giving the entire discussion with my fly open.  So the nerves calmed down after some sleep only to resume about 20 minutes before my presentation began but in 10 fold.  I realized that I forgot my note cards at home.  I quickly text my loving wonderful wife and she texts me about 20 text messages of the cards verbatim.  This was amazing.  Thank you, sweetie!  As time got closer the presentation, my hands were shaking, I'm pretty sure that I had sweaty pits.  Yes I know: "eww, Grosse!".  I get to my presentation room about 30 seconds before I am scheduled to start so I'm stressing out about that.  I was pretty close to vomiting because of my nerves. 

I shakily switch on the deck and take my position in front of the room and the entire congregation (7 people) are looking at me and then it hit...confidence.  I didn't expect this.  I fully expected to nervously make my way through the presentation and there was a flood of confidence.  I didn't have to picture the crowd in their underwear...and let's be honest, that is disgusting at a tech conference.  I didn't have to take a shot of vodka before I started.  There were no performance enhancing drugs.  It just all came together and flowed. 

By no means did I give a perfect presentation.  Things were rough at times but that was because of lack of skill not nerves.  There was a rush of adrenalin.  It was a pretty positive experience at the time.  I apologize for the graphic nature of this post.  My hope is that people who are hesitant to give presentations, take that step and overcome their fear.  I did and it worked.

The end result is that the entire preparation time absolutely sucked, but the presentation was awesome.  I'm going to attempt to present again and if the preparation time improves, I may make it a habit. 

To pre-cap, I'll be speaking at Kentucky Day of .Net this coming weekend.  Here's the schedule.  My topic is "How to Customize your TFS Process Template to meet your actual Business Process"  or something like that. 

Basically my opinion is that a company's process(es) should not try to fit in the wrong sized box.  Every organization has slightly different requirements for documentation, process, collaboration, and reporting.  My presentation demonstrates how an organization can create custom process templates for TFS 2008 to help manage their process (not change their process). 

When I decided to do this presentation, I had never customized a template.  I only knew that you could do some customizations.  I figured the best way to learn something is to teach it and now I know that TFS is very extensible and customizable.  By using a very componentized approach, you can plug into a bunch of facets of the application lifecycle management suite that is TFS.

What is TFS?
  • TFS is a Project Management Tool
  • TFS is Work Item Tracking
  • TFS is Version Control
  • TFS is Reporting
  • TFS is a Build Server

I'm obviously not going into detail on each topic.  I'm going to focus on the first bullet, Project Management Tool.  TFS is not a replacement for Microsoft Project.  On the contrary, MS Project is a compliment to TFS.  There are add-ins for TFS available for MS Project.  Instead, TFS offers a guidance template to assist in the non-task tracking part of project management.  Microsoft packaged two templates in with TFS 2008 but several others are available for download.  My assumption for my presentation is that an organization will want to either customize one of the available templates or create one from scratch. 

Planing

Project management is a tricky beast.  It is important to plan out your standardized way(s) of managing the lifecycle of a project just as you would plan the actual project.  Analyze what your requirements are for types of activities, reports, workflow, and level of documentation before you try to customize the template.

Customize

Before trying to customize a template, you should explore what a template is made of.  To do this, download the TFS 2008 Power Tools.  After installing it, you'll notice some new options in the VS 2008 menu.
image image image

I started by opening up the Team->Team Foundation Server Settings->Process Template Manager dialog:
image

Note that you can download either of the pre-packaged templates.  I downloaded the Agile template to my hard drive and renamed the folder to XP Process Template.  Here is a make-up of the folder structure:
image

The main file in the template is ProcessTemplate.xml in the root directory.  It contains references to the name of the template, a description and the collection of plugins.  If you open the file in VS, you get a nice GUI that allows you to navigate not only the ProcessTemplate.xml file but also the child directories and their configurations.

While each piece can be customized, it's important to spend time planning for what and how you need to monitor and manage your projects.  Keep in mind that you may have multiple templates within your organization.  Each type/size/department/purpose of an application is potentially a horse of a different color.

Here's a copy of my presentation.

I organize a series of lunch and learns at my company.  Earlier this week, one of the presenters said he wasn't going to make the presentation which left me to produce a TFS 2008 overview presentation quickly.  Here is my presentation and the list of resources that I used to produce it quickly.

Some people call them postmortems; others call them debriefings; I call them personal improvement sessions.  I am just wrapping up a project that has had a very aggressive timeline.  I'll be able to announce the project in two weeks when the new website goes live.  Here are some of the PM/technical details:

  • Background
    • We partnered with a design firm.  They give us PDF's and jpg's and we make pages within Sitefinity
    • The design firm has corporationX as a client but three way, day-to-day interaction takes place between my company, the design firm, and corporationX
    • CorporationX is responsible for all back-end/business functionality and will expose that functionality through web services
    • The site must be content managed (Sitefinity)
    • The development team (at my company) consists of 4 developers and me as a part-time PM. (1 sr. developer, 2 jr. developers, and 1 new grad)
    • The entire site (160 pages) have to be developed in 9 weeks
  • Technical
    • The site is JavaScript/Ajax intensive
    • Sitefinity is the content management solution
    • .Net web services are provided by corporationX
    • JSON is the data format between the UI and the web service
    • Work Item control, reporting, development team collaboration, builds, and source control are handled via TFS

Now to make a long story short, we delivered 8 minutes late on a 9 week project.  That's not even a real number because abut 2/3rd of the way through a change request for 1 extra week of work went through and we delivered that with the final result.  If you consider that, we delivered 8 minutes shy of a week early.  I am extremely proud of my team and what they accomplished.  I look forward to sharing the end result with you in two weeks.

Now, the point of this blog post is about the final discussion as a team.  My focus for the past few months is self improvement.  I am trying to become a better developer, better employee, and better husband.  I am assuming that these are not mutually exclusive. :)  I wanted to force my focus on my team and see how it worked so here is my little experiment.  I gave my team 5 days notice that we were going to gather as a team and identify things we liked/disliked about the project and about each other.  Then after the project ended (litterally 8 minutes after it ended) I gathered the entire team (developers and me only) into a room and we started the discussion with the rules:

  • What is said in this room is never spoken again
  • What is said in this room is to improve ourselves
  • No one has hurt feelings regardless of what is said in this room
  • Keep joking to a minimum
  • Everyone has to be Honest
  • No one gets interrupted when it's their turn to speak
  • No management in the room

The first topic for this discussion was the interaction with the design firm and corporationX.  Unfortunately due to the rules I made, I can't give specific examples but I hope to give an idea of how you can utilize this idea in the future.  We each, one at a time, identified at least one thing we enjoyed about working with both the design firm and corporationX and then one thing we wish we could have changed.  This was a great ice-breaker for the next discussion.  Some very valuable feedback about my PM style and process was presented with this first part and I will certainly take the comments seriously and improve myself.

The next topic was potentially the most difficult.  Each of us had to face the another team member and tell them to their face what we liked and what we didn't like about how they operated/developed/conducted themselves throughout the project.  It was hard to tell someone that you just spent the last 9 weeks becoming friends with that you didn't like <something about how they worked/>.  We were all afraid of harming relationships.  Some comments were made that truly changed the way I thought about myself and how I worked.  This is EXACTLY what I was hoping for.  The feedback on this process was fantastic and I will surely implement this idea on future projects.

As if you couldn't tell, I've been participating in a lot of community based events recently.  The Ohio Web Leaders (OWL) are a group of marketing professionals that like to collaborate and share information.  Because of the marketing focus, it is a different type of community.  We don't sit around and talk about Continuous Integration or Behavior Driven Development.  Today's meeting was focused on search engine trends and changes.  The talk was called "Summer of Search" and briefly discussed several changes that have happened in the search world this past summer:

  • Digg + Google
  • Cuil
  • Yahoo + MSN
  • A couple of other tidbits

The presentation was interesting and, as always, provided me with a new perspective to look at things. 

Digg

If you're not familiar with Digg, it is a service/site that allows users to identify articles/pages on the web that they enjoy or found interesting or provocative or "dug."  The idea behind this is that people in general will find pages more interesting if other people found them more interesting.  The theory is based on the idea that the general world community identifies the best pages on the web.  This concept is referred to as "Crowdsourcing" or "folksonomy."  Wikipedia uses a similar concept of trusting the world-wide community.

To make Digg even more useful, it has implemented a recommendation engine that identifies similarities between two diggers and begins recommending articles that the user may also digg.  This proactive method of marketing is useful to both the advertiser and the user.  As a user diggs more pages, he/she is weighted more and their digg thus contains more value and can shoot a page's ranking upwards faster.  A page that receives a lot of diggs gets what is referred to as the "digg bump."  The digg bump identifies a trend that a site experiences when a page's digg ranking is high.  A sudden spike in traffic followed by a rapid decline will occur.  The level does not decline as low as the original traffic level though indicating that the bump was a slight bump over time.

Enter Google.  Google is in negotiations to purchase Digg for an estimated $200 million.  It's a great deal for Digg who has $11 million in venture backing and 25 employees.  Similarly it's a good deal for Google who has lots of money and the need to be able to better rank its pages that return in a search.  The rumored result will be that users will be able to identify pages that were good answers for particular searches and then searches can be even more customized than they are right now.  Of course the "evil multicolored corporation" is also rumored to use this to better offer ad space...but that's all yet to be seen. 

Cuil

I have to admit, I had never heard of Cuil before today.  Apparently they are a new player in the search engine market that claims to have the power to take Google on.  While I have my skepticism, I figured I'd give them a shot.  My search results for "Rick Kierner" (I know...everyone searches for my name) were drastically different on cuil than on Google, yahoo, and live search.  The results seemed to be significantly older and less useful.  We'll see if this improves over time.  One interesting idea is that Cuil will not collect any personal information about my searches.  While I see where some people would gravitate toward the privacy of Cuil, I also wonder how Cuil would give me customized search results.  Without knowing who I am, how do they rank a golf pro shop in Columbus above one in Atlanta?  Just a thought but some personalization may be a good thing.  The Cuil strategy is to index more sites and more pages than any other search engine.  They claim to have over 120 BILLION pages indexed.  They do put more weight on sites that are heavy in content though.  Not sure it's a good thing but it will be interesting to watch

Yahoo + Microsoft

Everyone has heard the drama between Yahoo and MS.  It appears as though the MS/Yahoo merger will never happen.  I'm not saying it would have been a good idea but it would have been interesting to see if the merger could have dethroned Google.  The MS stock holders don't really want MS in the search market.  To date, they've been unprofitable and the stock holders want the efforts focused in other areas.  At the same time Yahoo's stock price is falling and consumer confidence (in their search results) are also dropping.  All this while Google is growing in market share and user confidence.  The big killer for the merger was Google's partnership with Yahoo on advertising. 

A few other tidbits

Wikia Search

Wikia Search  is a new search engine that relies solely on the world-wide community to rank and describe pages.  The rankings and descriptions directly affect the results of any search.  I would like to point out that my blog comes up 4th on this engine when searching for "Rick Kierner."  So I guess it must be awesome!

Google Suggest

Google Suggest went live today.  As you can see it is a complete and utter failure:

image

Just kidding multi colored monster.  It's really cool.  Based on the letters you type into the search box, it suggests what you may be searching for and thus saving you key presses. 

Provocative Thought

Here's an observation:  When I talk to a child in today's environment, it seems abbreviated and scattered.  Is this a result of quick results being given to children today.  Kids today have mastered the ability to identify what to search for to get the results from the search they want.  While I would search for "Beds and Breakfasts in the Canadian Niagara Falls", a child would probably search for "Canada Niagara Bed and Breakfast."  It's an interesting observation and I'm not saying it's a bad or good thing...just an observation.  Are we thinking google; Are we thinking in SMS?

Just ran into a situation where a marketing person needed a list of every page in my project and its URL.  I got this query from a coworker and he graciously let me publish it to my blog.

   1: DECLARE @PageID uniqueidentifier
   2: CREATE TABLE #temp 
   3: (name VARCHAR(1024),
   4: url VARCHAR(1024)
   5: )
   6:  
   7: DECLARE curs CURSOR FOR SELECT ID FROM sf_pagebase
   8: OPEN curs
   9: FETCH NEXT FROM curs INTO @PageID
  10: WHILE @@FETCH_STATUS = 0
  11: BEGIN
  12: declare @url varchar(1024)
  13: declare @ParentID uniqueidentifier
  14: declare @MenuName varchar(1024)
  15:  
  16: SELECT @MenuName = NULL, @url = NULL, @ParentID = null
  17: select @url = '/' + Name, @ParentID = ParentID, @MenuName = MenuName from sf_pagebase pb 
  18: inner join sf_cmspagecontent cpc on pb.id = cpc.id 
  19: where pb.id = @PageID
  20:  
  21: WHILE @ParentID IS NOT NULL
  22: BEGIN
  23:  
  24: SELECT @ParentID = ParentID, @url = '/' + Name + @url, @MenuName = MenuName + ' > ' + @MenuName from sf_pagebase pb
  25: inner join sf_cmspagecontent cpc on pb.id = cpc.id WHERE pb.id = @ParentID
  26: END
  27: select @url = '~' + @url + '.html'
  28: if (@MenuName IS NOT NULL)
  29: INSERT INTO #temp VALUES(@MenuName, @url)
  30:  
  31: FETCH NEXT FROM curs INTO @PageID
  32: END
  33:  
  34: CLOSE curs
  35: DEALLOCATE curs
  36:  
  37: SELECT * FROM #temp
  38: order by url
  39:  
  40: DROP TABLE #temp
Technorati Tags: ,
 

This past weekend I had the privilege to attend devLink.  devLink is a community based conference in Murfreesboro, TN.  I met some wonderful and brilliant people and lit a spark of motivation for my career and community involvement.  The conference had two parallel types of sessions.  First, the standard "eyes forward" presentation style sessions were loaded with people desiring some instruction or how-to knowledge on a particular technology or practice.  Additionally, a second type of session was held during each time slot: Open spaces.  Subsequent to the conference, I did some research on open space conferences and learned that none are the same and all should be agile to adopt to the community which is facilitating the discussion.  While new to me, apparently the open spaces have been around for a few years.  I wish I had known about them earlier.  Who knows where I'd be right now.

After the opening keynote, an opening circle was held to organize the open space sessions.  This involved members of the community identifying topics they wanted to talk about.  The topics ranged from "how to motivate the other 80%" to "Comments are Evil".  From there, each topic was put on a grid to identify time and geography.

After some administrative moving around of topics and condensing similar topics, we went to our first session.  If you had chosen to attend an open space session you obviously were not locked into that track.  Many people mixed up the schedule and attended both the "eyes forward" and open space styles of sessions.  Personally I stuck mostly to open spaces.  I found the discussions to be passionate, informative, challenging, invigorating, and thought provoking.  I had several of my ideas challenged and that in turn invokes creativity and additional thought.  From time to time, it is productive to take part in these types of exercises. 

The result of devLink for me was to establish several new goals to better myself as a developer and community member. 

  1. Contribute to an Open Source Project
  2. Present at a community conference (KY Day of .Net)
  3. Attend 6 community conferences in the next year (My wife probably wouldn't approve of more)
  4. Motivate junior developers at my company to attend community events
  5. Contribute to a regional web site wiki that represents the notes taken during the open space sessions.

Those are some tough goals to put on myself but I think they are attainable.  Now I just have to find the work/community participation balance at some point. 

I was asked this weekend at devLink how one would setup their first blog.  So after explaining it, I realized that I knew a lot of people without a blog that continue to offer me insight into certain things.  I have put together a list of things that one must take to have a blog.

  1. Determine if you need a blog. 
    • You need a blog if you have an opinion.  If you have knowledge that you'd like to share.  Whether that knowledge is how you optimized the performance of your distributed SOA implementation at you latest client or how your recipe to the sugar cookie that went over really well at the holiday party.
  2. Get a name for your blog.
    • Every blog needs a name.  The name of my blog is "RickDoes.Net";  clever, I know.  If you have a nickname, use it, otherwise use your actual name.  www.JamescBender.com; www.brianhprince.com; www.jeffblankenburg.com are some good examples.  I have also purchased www.rickkierner.com that redirects to this blog.  I personally use www.godaddy.com for my domain registration.  To get a domain name, you're going to drop a few bucks a year ($10-$20) to keep that name.  If you are looking for an even lower cost entry to the blogosphere, no problem.  Go to www.wordpress.com, www.blogspot.com, www.typepad.com, or <Enter blog hosting engine here/>.  You can setup a blog name at one of these service providers for free.
  3. Host your blog
    • A blog is a series of data elements or files that get served.  For that reason, you have to host that data somewhere.  You basically have two options here. 
      • You can setup a blog at a hosted blog engine (wordpress, blogspot, typepad, or whatever)
      • You can install a third party blog engine software package at your hosted domain.  This will be additional cost for the web site storage space and optionally a database.  Here are some software packages available for blog hosting.  At this time, I use SubText
      • Technorati Tags: ,,
  4. Publish Content
    • It doesn't matter how much  you post.  It doesn't matter what you post.  Just post what you want to share. People who care will subscribe, and people who don't...won't.  Your posts will be indexed by google and some day someone will use your post to help solve whatever problem they are working on because you were able to solve it first.  Isn't that nice of you :)
  5. Optional tips:

image

I'm taking the plunge.  I'll be speaking at the KY Day of .Net on September 6, 2008.  I'll be covering process customization within TFS.  If you're at all interested in efficiently developing software, come to my session.  I plan to dive into the following topics:

  • Customizing the process templates that are available out of the box. 
  • Identifying and creating custom work item types and their workflows
  • How to implement an iterative development process in TFS

Hope to see you there.

 

I  Found a very insightful post about what version of SharePoint is right for an organization:

Which SharePoint edition is right for you? - Part 2 - Sharepoint Use Cases

 

Technorati Tags: ,,