SCRUMMmmmmmm….

I recently started using the SCRUM methodology to help deliver a team of SharePoint developers. Since I am still quite new to SCRUM I thought a few of you might benefit from my experiences and the pitfalls along the way…

Stick to the plan

If you ever think of using SCRUM my first and most important advice would be to start out by following the rules of SCRUM to the letter. Start out by doing what has been described in many books, websites, blogs, … change the process and the way of working only after doing a few sprint runs. Not a single rule of SCRUM has been written down without any reason. So, why would you not give it a try instead of changing the rules from the start with the risk of a failing  project, de-motivated team, … (as I did, what did you expect?!)

In my first project as a SCRUM master I saw the benefits and knew what I wanted to achieve, but due to the limited time available I started to do the work instead of my team: I started creating user stories myself, left only limited room for discussion (just the stand-ups), didn’t really include the team in defining a sprint backlog. In fact I was just playing the project leader and pretended to use SCRUM.

Nevertheless I hoped that by using SCRUM I motivated the team, created room for changing specifications and helped to spread the knowledge about the project amongst all team members, … But what I really achieved was a dull stand-up, no motivation and a failing project. No sense of responsibility for the project whatsoever had been introduced…and it became painfully clear.

It was by reading a book on the subject that suddenly it appeared to me what I had been doing was all wrong! And the answer to my problems had been there all the time…I just needed to follow the rules (how many times have I been that before :) )

Yesterday I started a new sprint planning with a renewed hope of achieving the goals I had set. The product owner had a small set of things to be done (I must say that there’s still some work there..). With the team I started to go through the list and encouraged them to ask questions. It was really funny to see how the planning poker made them nervous and afraid to not make a fool out of themselves, but the result was that they were all trying to find out what a certain job was about, what effort it would take and how it needed to be done. I was really surprised that this simple trick created such an involvement and awareness about what the team members had been doing. To cut short: we as a TEAM established a first real agreed sprint backlog. The team committed to the plan and everyone seemed to enjoy the new way of working.

One step at a time

Did you ever start about a million jobs at a time and never finish one of them? Well, I did…and so did my team. When we first started using a scrum board, it was filled with users stories that involve a whole set of taks that on average take about 3 mandays. The result was that everybody was doing multiple tasks at a time and never ever one was reaching the ‘done’ column.

More importantly it was quite impossible to follow-up on these tasks…I didn’t have a clue why things were slowing down and what the status of the project was. Yesterday we started working with user stories that are made up of a bunch of task that never take longer than a few hours. This is more manageable and more fun (because we now reach that final column on the board), and it all has a fantastic side effect: all tasks can be taken up by different members of the team. What used to be the responsibility of just one person is now distributed among the team. Communication occurs more often and the frustration seems to disappear all by this one easy little rule!

Demo time

Motivation is really key to success in my current project (have I mentioned that it is in the public sector…makes things easier to understand :) ). Therefore another really dumm ass idea of me was to win time by not doing a demo on the end of the sprint.

It is clear now that it encourages to deliver a fully working, fully tested product at the end of each sprint. It makes my team proud if they can show off the new functionality and it again raises the awareness on the complete project. Plus it gives me a great chance to thank them for their work.

I can’t wait to see what the result of our new approach will be. I’ll keep you posted!

PowerShell Escape Special Characters

To experiment with SharePoint 2010 without the hassle of starting slow VM’s I installed SharePoint 2010 on my Windows 7 environment. To limit the performance impact on my system when I’m not working on SharePoint I ended up with these great little PowerShell scripts to start/stop the server. My SQL Server instance is named SQL$SHAREPOINT so I needed to modify the script a little to change the name of the service. However, when I changed the instance name the script was not finding the service until I realized that the $ sign is a special character in PowerShell that needs to be escaped by using the backtick `.

One more PowerShell lesson learned!

Calendar changes in SP2010

Do you know that feeling when you just got a new toy, the one you were hoping for a long time ago…and then when you start playing with it, it has all these neat little features that you didn’t even know about...I feel like a kid again ;)

Can’t keep up the tension any longer: SharePoint 2010 has some calendar support on steroids :)

In MOSS 2007 and Office 2007 you had this notion of overlay calendars in Outlook: view two calendars on top of each other so you are able to compare. It was a feature only available on the Outlook client.

image

SharePoint 2010 now offers the same functionality in the browser. The ribbon of a calendar contains a button ‘Calendars Overlay’ which takes you to a screen where you can add up to ten calendars to the current view. Even more, it allows you to add SharePoint calendars (across site collection boundaries) and Exchange calendars using the Exchange webservices:

image

The result is this neat overlay view:

image

On the left you see the calendars in the current View. In the calendar you see multiple items lined up next to each other each with their own color code. And just to point out…there is an ‘Add’ button!

Minimal master page SharePoint 2010

The minimal master page for SharePoint 2010 is available at MSDN Code. Designers get your engines ready!

http://code.msdn.microsoft.com/odcSP14StarterMaster

Add Domain account to local Administrators group

One lesson learned from the Ignite sessions is that in the future release of SharePoint PowerShell is the way to go for SharePoint admins. Hundreds of commands are available to do any kind of manipulation of your server farm. Looking at the “blue screen of death” has never really encouraged me to get my hands dirty. Time to be brave and follow Todd Klindt’s advice…force yourself to do it!

I found this great installation script written in PowerShell by Garry Lapointe to script the installation of a MOSS 2007 portal. This got me thinking: I am installing SP 2010 on my virtual machines, so why not try to do the same and create a script for 2010?

I started out with a script to add a domain account to the local administrators group. Must say that after this work I start to like the flexibility. More to come!

###################################################################
# Name:            		ADUserToLocalGroup.ps1
# Creation Date:    	November 7, 2009
#
# Purpose:        		Add a domain user account to a local group
#
# Inputs:       		username: 		The name of the domain user to add
#						domain:			The domain of the user to add
#						groupName:		The name of the local group to add the user to
#						action:			add/remove
#						computerName:	the name of the computer to add the user to
#
# Usage:        		ADUserToLocalGroup.ps1 -username {username} -domain {domain} -groupName {groupname} 
#						-action {add/remove} [-computername {computername}]
#            			If no computerName is specified the local computer is used
#
# Acknowledgements:    	Portions of this script were originally posted on the
#            			following websites. A big thanks to the original authors!
#
#    	http://myitforum.com/cs2/blogs/yli628/archive/2007/08/30/powershell-script-to-add-remove-
#            a-domain-user-to-the-local-administrators-group-on-a-remote-machine.aspx
#    	http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!676.entry
#    	http://www.microsoft.com/technet/scriptcenter/resources/qanda/mar08/hey0311.mspx
#		http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx
#
##################################################################
param
(
	[string]$username = $(throw "The parameter -username is required."),
	[string]$domain = $(throw "The parameter -domain is required."),
	[string]$groupname = $(throw "The parameter -groupname is required."), 
	[string]$action = $(throw "The parameter -action is required."), 
	[string]$computername = "localhost"
)

#Try/catch/finally function for v1 compatibility - taken from Adam Weigert's site
function Try
{
    param
    (
        [ScriptBlock]$Command = $(throw "The parameter -Command is required."),
        [ScriptBlock]$Catch   = { throw $_ },
        [ScriptBlock]$Finally = {}
    )
    
    & {
		$local:ErrorActionPreference = "SilentlyContinue"

        trap
        {
            trap
            {
                & {
                    trap { throw $_ }
                    &$Finally
                }
                throw $_
            }
            $_ | & { &$Catch }
        }
        &$Command
    }
    & {
        trap { throw $_ }
        &$Finally
    }
}

#Set the computername
if($computerName -eq "localhost"){ 
	$computerName = gc env:computerName 
}

Try {
	$computer = [ADSI]("WinNT://" + $computername + ",computer")
	$Group = $computer.psbase.children.find($groupname)
	$members= $Group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
	
	if(($action -eq "Add") -AND ($members -contains $username)) {
		"The domain account specified (" + $username + ") is already a member of the local group (" + $groupname + "). No action taken."
		break
	} elseif (($action -eq "Remove") -and ($members -notcontains $username)){
		"The domain account specified (" + $username + ") is not a member of the group (" + $groupname + "). No action taken."
		break
	}
	
	if ($action.ToLower() -eq "add"){
		$Group.Add("WinNT://" + $domain + "/" + $username)
		"User '" + $username + "' has been succesfully added to the group '" + $groupname + "'"
	} elseif ($action.ToLower() -eq "remove"){
		$Group.Remove("WinNT://" + $domain + "/" + $username)
		"User '" + $username + "' has been succesfully removed from the group '" + $groupname + "'"
	} else { 
		"No or wrong action was specified, no action was taken." 
	}
} -Catch {
	"Exception occured in ADUserToLocalGroup: " + $_.Exception.Message
	"Parameters:"
	" 		- username: 	" + $username 
	" 		- domain: 		" + $domain 
	" 		- groupName:	" + $groupname
	"		- action: 		" + $action
	"		- computername: " + $computername
	throw $_
}

SharePoint 2010 Ignite - Amsterdam

Just came back from the SharePoint 2010 Ignite course in Amsterdam. Together with 150 SharePoint experts I had the chance to discover all the new features in the upcoming SharePoint 2010 release. It has been an interesting experience to see how the product is evolving to a much more mature application. Some quick random highlights:

  • The architecture has changed a lot to allow a much more scalable and manageable topology. I think the disappearance of the SSP is one of the biggest changes in the product. Instead we now get a whole list of pluggable service applications. But there are a lot of other huge changes which will make our life a lot simpler: extended logging, multiple databases instead of storing everything in the content database, restoring content by using detached databases, sandboxing, …
  • A lot of the problems in SP2007 have been solved. Commonly required features have been introduced. I think of the more mature ECM features (including taxonomies, tagging, rating, publishing of content types, document ID generation, document sets, document linking, …), WCM improvements (introduction of the ribbon, introduction of wiki's), …
  • The UX improvements definitely will make this product easier to use.
  • One major improvement is the BCS, formerly known as the Business Data Catalog. It has never been easier to import external content into SharePoint lists.
  • Search...I'm sure you'll be amazed by FAST search. Visual result sets, deep refiners, contextual search, phonetic search, lemmatization, … search as it should be.
  • Social improvements: I'm not convinced by the value of the social aspects introduced in this version. However, search based on social distance will most certainly improve the results even more. Mixed feelings about this.
  • Excel services and the REST services: certainly something to look in to
  • Powershell administration: I forgot the number, but more cmdlets than you can ever remember exist. Nothing you can't do in PowerShell.

I can go on like this for hours. Time to get my hands on this and start to play with it…got the SharePoint bug J

More to come.

   

  

Exciting times

Starting from this week everybody should prepare for a blog-tsunami because SharePoint 2010 has arrived! It looks like Xmas is a little early this year: lot's of goodies and new resources are being published, the long awaited SharePoint Conference is taking place and many enthousiastic geeks have had to wait too long to start blogging on what they discovered in the latest release of SharePoint.

For those of you interested, here is a list of interesting resources: