My tip for new Scrum Masters

September 16, 2013

When I became Scrum Master, I initially felt pretty helpless. I had been trained, but the training told me to nudge people but not manage them. Guide and mentor the team — but let them be the drivers. I originally found these concepts difficult to grasp. I needed to figure out how to be effective.

What the training did not make clear to me is that when acting as Scrum Master, you are not focused on the topic being discussed. Instead, you are focused on how productive the discussion is. Is it in line with the goals of the meeting? Is it taking more time than can be afforded? One of ways a Scrum Master can help the team without interfering in its autonomy is with time discipline. I am still surprised how much the members of my team appreciate having someone who keeps the discussion on track and time-boxes discussions. For new Scrum Masters, I think this is a great way to be a value to your team.

Start by scheduling every meeting the team needs for the next sprint. This way you have the longest lead time to learn about vacations and odd schedule conflicts, and it gives you the best chance to have your favorite rooms.

A couple of days before each meeting, write a time-based agenda. Pay special attention to how long something really takes. For example, assume that you are going to break down Product Backlog Items (PBIs) and you have a one- hour meeting. Subtract ten minutes for late comers, setup, questions, and other beginning meeting noise and then decide how much time an item needs. If the team wants 10 minutes, then the Product Owner (PO) can bring in five items. I usually use 10 minutes to break down an item and give the PO the option to take another 5-10 minutes at the end.

In order to keep meetings moving along, you may need to get the discussion back to the main topic. Interrupting a person mid-sentence to keep a meeting on track is tough when you start as Scrum Master. It’s easier if you make a card, such as “Time” to hold up. Explain that you will do this up front so that everyone understands, and let the speaking team member wind down or summarize. In my experience people appreciate someone doing this, because you are respecting their time.

If you’re uncertain about the importance of the topic being discussed, when time is called, you can let whoever the meeting is for decide whether they need more discussion or just vote – thumbs up for yes and thumbs down for no.

I find it helpful to bring a stopwatch to meetings. A stopwatch is a dedicated device, so it works better than a cellphone, where you might need to mess with the screen turning off. It’s easy to read and operate.

It takes a lot of little things to increase the team’s velocity. Keeping track of time is a good place to start. It ensures all the meetings happen and that they are productive. But more importantly, people will be happier to go to meetings that are valuable and where issues are resolved.

Sample ceremony agendas (assumed attendance: five team members, Scrum Master, and Product Owner).

Standup (15 minutes)

  • Make sure all P1 bugs are being addressed (1-3 minutes)
  • Product quality status (1-3 minutes)
    • Note any failures in acceptance tests
    • Note current bug count
    • State any issues with current release
  • Team member updates (1-2 minutes each)

PBI break down grooming (1 hour)

  • 10 minutes — Noise
  • Five PBIs for 10 minutes each
    • If a PBI runs over, PO has option to continue or move on

PBI bulk estimation (1 hour)

  • 10 minutes — Noise
  • 20 minutes — Team reads easy PBI out loud
    • Assuming that we have 20 PBIs to groom
  • 15 minutes — Sort PBIs by complexity
    • Anyone who has a question marks the PBI with a sticker
  • 10 minutes — Discuss any PBIs with stickers
    • POs go first
  • 5 minutes — Bucket PBIs

Retrospective (1 hour)

  • 10 minutes — Noise
  • 15 minutes — Go around the room asking what went well and what went badly
  • 10 minutes — Deeper discussion in impediments
  • 10 minutes — Prioritize impediments to work on
  • 10 minutes — Go over the team rules and ceremonies and make sure they make sense

Planning meeting (2 hour)

  • 10 minutes — Noise
  • 10 minutes — Discuss bugs for next sprint
  • 15 minutes — PO goes over two sprints worth of backlog items explaining at a high level what they want next
  • 15 minutes — Discuss order of items, missing items, impediments that should be added to top of list
  • 10 minutes — Break
  • 5 minutes each to discuss PBI
  • Any PBIs that needed more discussion get the rest of the time

Fun with HTML escape codes

March 17, 2011

As I learn how to be a blogger (including the abandoning of Windows Live Writer), I keep finding lots of interesting new things. For instance, in my last post, I needed to escape the square bracket “[“. In my research, I found of list of HTML escape codes, including the one that I needed: http://www.degraeve.com/reference/specialcharacters.php


WordPress understands PowerShell

March 16, 2011

While constructing my last post, I wanted to include a PowerShell function. I attempted to use Windows Live Writer because I thought it would be easier to include code. Windows Live Writer had three source code formatting modules:

  1. Insert Code (http://plugins.live.com/writer/detail/insert-code-for-windows-live-writer)

 

   1:  function Test-CodeFormatter
   2:  {
   3:      [CmdletBinding()] param()
   4:      
   5:      1..10 | foreach-object { "{0} {1}" -f "Hello", "World" }
   6:  }

  1. Code Snippet (http://plugins.live.com/writer/detail/code-snippet-plugin-for-windows-live-writer)

   1: function Test-CodeFormatter

   2: {

   3:     [CmdletBinding()] param()

   4:     

   5:     1..10 | foreach-object { "{0} {1}" -f "Hello", "World" }

   6: }

  1. Source Code Formatter (http://plugins.live.com/writer/detail/source-code-formatter)
  1: function Test-CodeFormatter
  2: {
  3:     [CmdletBinding()] param()
  4:     
  5:     1..10 | foreach-object { "{0} {1}" -f "Hello", "World" }
  6: }

All three of them looked pretty terrible in WordPress. After a little more Bing searching, I discovered: http://vkreynin.wordpress.com/2009/02/24/syntax-highlighting-in-wordpress-using-windows-live-writer/. This allowed me to paste my code in directly as html:

<pre>1
function Test-CodeFormatter
{
    [CmdletBinding()] param()
    1..10 | foreach-object { "{0} {1}" -f "Hello", "World" }
}
[/sourcecode]</pre>

And it finally looked pretty. Smile

function Test-CodeFormatter
{
    [CmdletBinding()] param()   
    1..10 | foreach-object { "{0} {1}" -f "Hello", "World" }
}


Loading a .Net 4.0 Snap-in in PowerShell V2

March 14, 2011

I recently started developing a PowerShell snap-in, and without putting much thought into it, I created a .Net 4.0 project. After getting the initial code ready, I attempted to load the snap-in and got the following error:

This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

After a bit of searching, I found that this was not a PowerShell issue, but a .Net one, and the solution was to add to the PowerShell.exe.config file. The following was needed:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

(http://tfl09.blogspot.com/2010/08/using-newer-versions-of-net-with.html)

For PowerShell to work using remoting, the same solution must also be applied to wsmprovhost.exe (http://tfl09.blogspot.com/2010/08/using-later-versions-of-net-framework.html). 

In ultra-lazy fashion, I spent half an hour writing a function to place one of these configuration files for me, which is probably 10 times as long as it would take for me to do it all the times I will need to. However, writing scripts is fun. Smile

function Write-DotNet4Config
{
<#
    .SYNOPSIS
    Function to write .Net 4 configuration files for me so I don't have to remember
    
    .EXAMPLE
    Write-DotNet4Config "$env:SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe"
    
    Writes a configuration for the given executable if none currently exists.
#>
    [CmdletBinding()]
    param($executable, [switch]$whatif)

    if (-not (test-path $executable)) 
    { 
        Write-Error "Cannot find executable $executable"
        if (-not $whatif.isPresent) { return }
    }
    
    if(test-path "$executable.config") 
    { 
        Write-Error "Path already exists"; 
        if (-not $whatif.isPresent) { return }
    }
    
    $versions = @("v4.0.30319", "v2.0.50727" )
    
    $config = @"
<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        $($versions | %{'<supportedRuntime version="{0}"/>' -f $_})
    </startup>
</configuration> 
"@
    Write-Verbose "XML: $config"    
    Write-Verbose "Output file: $executable.config"

    if($whatif.isPresent)
    {
        Write-Host "What if: Writes to file $executable.config"
        Write-Host "What if: Writes xml: $config"
    }
    else
    {
        ([xml]$config).Save("$executable.config")
    }
}

Who am I? White, James White

March 14, 2011

Who
My name is James White, professional programmer. I rank among those programming geeks whose love affair started at a very young age–a maze game in BASICA. My background is in philosophy and psychology, although I did a bit of computer science study. Upon my discovery that one of these topics was more fun and paid well I became a professional programmer. Currently I work for Microsoft on Lync Server. My day-to-day work is focused on C# and PowerShell. To keep things spicy, I occasionally perform web programming, SQL, and C++, with a goodly portion of my time spent on MakeFiles and unit tests.

What
As someone who loves to read, I have many thoughts about many subjects. Lately those subjects are mostly programming theory, project management, and what thinkgeek toys are most fun to play with during compilation. Language theory and how languages change the way you code is a favorite subject of mine right now. I plan many posts on the uses and abuses of different languages.


Follow

Get every new post delivered to your Inbox.

Join 223 other followers