Sunday, October 31, 2010

Continuous Feedback

The Agile Manifesto states that we value “Individuals and interactions over processes and tools”; however we rarely discuss methods to improve the individuals on the team or their inter-personal soft skills. We need more practices that help develop the people on the team to increase the performance of the team. Improve the people and the process will take care if itself. For this reason, I want to introduce a practice I named “Continuous Feedback”.

Continuous Feedback is a practice where the team provides praise and criticisms to other team members to allow them to understand how their performance or behavior is being perceived by other members of the team.

Differentiation
The idea is based on Jack Welch’s concept of “Differentiation”. His concept is to split the organization into 3 segments: the top 20%, the middle 70% and the bottom 10%.

The top 20% of the workforce are the stars of your organization. Lavish them with rewards and bonuses. They are smart, they get things done and they are your leaders. Reward, challenge and develop them or else someone else will!

The middle 70% will require the most attention. Do not diminish the importance of the middle 70%. They are the heart and soul of your organization. The top performers in this segment will need to be developed to move into the top 20%. The people on the lower end of the 70% will need to know where they stand. People react differently when challenged. Some will “step up” others will “step down”. Either way, it is each person’s responsibility to make those decisions based on honest feedback and by knowing exactly where they stand.

Finally, cut the bottom 10% out. By cutting out, I’m not talking about firing people unexpectedly. Let these people know where they stand. By knowing they are in the bottom 10% they may leave on there own. Nobody like to be were they are not wanted. Inversely, they might know where they stand and by understanding exactly where they stand they may be able to move into the 70% or higher!

I know the idea of eliminating the bottom 10% sounds harsh, but most companies/teams never purge the weakest performers and this builds resentment within the other team members.

We all know who these people are and we never provide feedback to let them know where they stand. It’s easier to avoid the situation than to confront them. Nobody wants to be “mean”. However, when layoffs happen they are surprised to find out they are first to be let go. Isn’t it fairer to let the weak performers know exactly where they stand? If you didn’t provide that feedback, aren’t you part of reason they were let go?

Over time, cutting the bottom 10% becomes extremely difficult. Think about it. You can probably think of a few people on your team or in your department you wouldn’t mind if they were “released”. Now image if you had to go through a couple more rounds of cuts. The bottom 10% quickly becomes very qualified people! Your middle 70% doesn’t consist of people “hiding out” in the organization, waiting to collect a pension, those people are long gone. Your organization’s middle 70% are the best people in the industry!

The Game
At the end of every iteration we hold a Retrospective meeting we, as a team, we discuss what went well, what we could improve on and how we could make the process better. As a part of this meeting, each member of the team must select the people who they believe to be in the bottom 10%. On our team 10% is one person. We do not publicly discuss why they were chosen. But they are encouraged to meet with the person to get feedback during the next iteration. After the exchange of the bottom 10%, each person must select the top 20% and during the meeting explain why they picked them as a top performer.

We publicly select the top 20% and the bottom 10%, and publicly state why top performers are in the top 20%. We allow each member to privately receive feedback from members so they can improve and know where they stand within the team. Giving and receiving constructive criticism are important soft skills that now get practiced regularly.

Saturday, August 28, 2010

My Windows (with git) RVM

I was disappointed to learn that RVM (Ruby Version Manager) doesn't work on Windows, however I wasn't surprised. Windows and Ruby don't always play well with each other.

I'm also a fan of Homebrew on my Mac. Homebrew is a command line package manager that downloads applications and creates symlinks so they are always on your path.

I hate working with Windows environment variable since they don't always reload without logging off and back in again.

For all of these reasons I started thinking about how I could configure my laptop to use multiple versions of Ruby without hacking my PATH environment variable.

My solution was to create a C:\Ruby directory and initialized a git repository within that directory.

I downloaded the 1.9.1 7-Zip package from rubyinstaller.org and extracted it into C:\Ruby. Then I added/committed all the files to a branch named 'v191'.

Finally I updated my PATH to include the C:\Ruby\bin directory.

To install a different version of Ruby I created a new branch named "v192", delete all the files and committed the deletion of the files. Here are the commands:


git checkout -b v192


rm -rf *


git add . -u && git commit -m "Cleared directory for next version"

After I have a clean C:\Ruby directory, I extract the new version to C:\Ruby and add/commit them to the git repository.

After installing I can do a git checkout {branchname} to switch my version of Ruby.

Monday, August 16, 2010

Migrating the blog

I don't know if any reads this anymore, but I am moving my blog from http://blogs.giffordconsulting.com/ to http://blog.giffordconsulting.com. Hopefully your reader didn't pick up all these posts as "new". They are not "new". They are, in fact, very, very, very old.

I had lofty aspirations when I started blogging back in 2005: 
  1. I would blog frequent
  2. I would develop a community of bloggers under the giffordconsulting.com domain.
  3. I would contribute to the SubText blogging software project
I didn't do any of those things...I did join Twitter!

The new blog is hosted in the cloud:
  1. I don't have to pay anything
  2. Upgrade or fix software bugs
  3. Worry about bandwidth when I get on Hacker News (Is that another lofty goal?)


Testing Carriage Returns in FitNesse

FitNesse doesn't allow carriage returns in test fixture table. Normally, I replace carriage returns with a comma (or some other sentinel value) and pass it back to FitNesse. I noticed a posting on the FitNesse email group that recommended defining a variable and then using the variable in the table.

An Example:

!define multiLineAddress {Gifford Consulting
Attn: Tim Gifford
123 Main Street
Des Moines, IA 50266}

!|Check Address|
|Address|
|${multiLineAddress}|

Saturday, August 7, 2010

Microsoft OPEN.NET

Late last week we learned that Microsoft is de-funding the Iron projects (IronRuby, IronPython). Many have suggested that the community should take over the projects, but without access to the DLR, CLR and the compilers success would be limited.

However if Microsoft opened up the DLR, CLR and compilers for what I'm going to call "Open .NET", we in the community could make some interesting things happen on .NET.

I know it sounds crazy to open source the .NET platform, but I don't understand what competitive advantage Microsoft maintain by keeping it closed.

I want to mention a couple advantages they would gain by opening it up.

Allowing the community to create libraries and offer bug patches to the CLR, DLR and compiler we (the community) would feel involvement in the platform. This involvement would translate to more community created libraries and solutions.

Microsoft wouldn't have to create tools and libraries that already exist (ala MsTest) and focus their efforts on expanding the platform.

I'm not proposing that all products and innovation that is created by Microsoft shall be Open. They can build new technology within and around the open platform and release those changes to the community core projects after the product announcements.

Create native extensions for Windows that increased performance and scalability. Create products that only run on IIS or SharePoint. Microsoft's current "enterprise" customers would continue to use the proprietary and supported versions of the compilers and runtime.

Without an "Open.NET" Platform, projects like IronRuby and IronPython are not feasible outside of Microsoft. This innovation while secondary to Microsoft's corporate strategy is important to many of us in the community.

Wednesday, June 9, 2010

Scheduled Restart

I haven't been blogging for a while and have missed it. Twitter allows for quick quips and lunch/bar conversations allow for a deep introspection but I've been missing a venue to formalize my thoughts and to improve my writing ability.

Topics I will cover:

  • Lean Software Development
  • Test Driven Development
  • Automated Acceptance Testing
  • Technology Reviews
  • Book Reviews
  • Experience Reports
  • ...and random posts when I need more that 140 characters.


Tuesday, December 11, 2007

Team Foundation Server forces teams toward open source solutions

Source control is the lowest common denominator with software development. All (...ok...most) software development teams have a system in place to manage the version of their software source code.
Within the Microsoft eco-system there are 2 options provided by Microsoft:
  • Microsoft Source Safe
  • Microsoft Team Foundation Server
SourceSafe has a bad reputation so within the last couple years, teams that develop on the Microsoft stack have been forced to limp along with Source Safe or upgrade to Team Foundation Server.
I don't want any one to get the impression that I don't like TFS; because I do. I like the integrated lifecycle, powerful reporting, task and project management tools. I like these things when they are needed. However, most mid-market software development shops don't need (or can't afford) all those tools.
But what if you want the tools? Have you ever tried to determine the pricing for a Team Systems rollout? Can somebody tell me how much it will cost to roll out TFS for a development team of 10 developers? I've tried to do the pricing, but can't navigate the licensing.
So what should you do if you need a source control tool?
a.) Spend a couple days putting together a proposal to submit to your boss, who will submit it to her boss which will ultimately be rejected for "Budgeting Reasons".
b.) Do you stick with Source Safe? Not because you want to or think it's the best solution but because it's the only other alternative from Microsoft?
c.) Or do you install a Subversion Repository (free + time) on an existing server (free), install TortoiseSVN (free + time) on the developer workstations and hold a day of training with the development staff (time)?