Tuesday, 31 January 2012

"The Delegator" - Positive or Negative Epithet?

In a recent meeting, an action arose and I asked one of my team (PJ) to catch it and complete it. He (tongue in cheek) commented to all those at the meeting that I was "the best delegator" he'd ever worked with. His humorous implication was that I don't do any work, I just get other people to do it for me. I've known PJ for years and worked on many successful projects with him, so I was happy to be the butt of his joke. However, I see delegation is a positive thing, so it set me thinking about how different people understand the verb "delegate".

The dictionary says it means "to give a particular job, duty, right, etc. to someone else so that they do it for you". The fact that one is giving one's work to somebody else to do doesn't sound altogether positive, but if we accept that a team can do more work than one individual, and if we accept that a team needs a leader to coordinate and dispatch work around the team, then the team leader isn't delegating his/her own work, they are simply spreading the team's work around the members of the team.

However, in my mind, delegation is a tool to help the team learn and grow. And that means that I choose to delegate some of the management work to members of the team also. By doing so, I can coach them to learn new skills; and I inevitably learn new things as we go along too.

Not everyone wants to be a manager, but everybody needs to understand the objectives and challenges of management. Armed with knowledge of management, one can work in harmony with one's leaders and management. Moreover, it is often the case that the perception of the team leader's role is not a match for the actuality. For me, team leadership is about a) achieving more than I can manage on my own, b challenging myself and my team to do new things, c) helping my team members to become the best they can become, d) learning from others, e) enjoying the benefits of being part of a successful team.

So, "The Delegator", is it a positive or a negative epithet? In my mind it is a distinctively positive name. It means I'm helping my team to learn and grow, and I'm helping them with their career and their ability to enjoy their working days (and at the same time they are helping me to do the same).

Tuesday, 24 January 2012

You Can't Fire Everyone

Some years ago I was taught a memorable and valuable lesson by my erstwhile programme manager (we'll call him BJ). I was brought into the project to provide knowledge of i) business intelligence, and ii) software documentation appropriate for the regulated pharmaceutical industry. After a while on the project, BJ asked me to act as BI Delivery Lead. He promised me the ability to recruit a team but initially supplied me with two existing staff members.

After a week I went back to BJ and said he'd have to provide me with two different staff members because the first two a) knew nothing about BI, and b) were at each other's throats all day long. BJ told me that nobody else was available; I'd have to make it work. Then he put his hand on my shoulder and told me he'd especially chosen me to act as BI Delivery Lead because he knew I had good people skills. Flattery is a good management technique! But more importantly, BJ was teaching me an important team leadership lesson: developing people is just as important as developing software.

It's a lesson I'll never forget and, as I worked with my two staff members over the following months and we all achieved increasing degrees of success, I discovered that developing people can be at least as satisfying as developing software.

I was reminded of this specific lesson when I read Roy Osherove's You Can't Fire Everyone post on his 5Whys blog in December. Roy's blog is a treasure trove for those who want to become a better team leader. Roy typifies the process of team development as following three phases: the chaos phase, the learning phase, and the self-leading phase. Roy describes how to recognise which phase you're currently in, and how to progress and develop your team. Recommended reading.

NOTE: Monitoring the SAS 9.2 Metadata Server

There's a nice walkthrough of some of the features of the SAS 9.2 metadata server on the SAS Professionals web site in the Social Media / Videos section. You'll have to be a SAS Professionals member to view it from the link I've provided, but if you're not already a member it's a good reason to join now (it's free).

The 7 minute video is particularly useful if you've recently upgraded from 9.1 and would like a reminder of the nice new features you now have available to you.

It particularly caught my eye because I've just recently added the SAS Platform Administration: Fast Track (SPAFT) five-day course to my training repertoire. So, if you plan to attend this SAS UK course this year, you might just find me teaching you (please don't let that put you off booking!).

Wednesday, 18 January 2012

Code Kata #1

In yesterday's post I described Code Katas and how they can be a useful form of programming practice. Dave Watson (the "inventor" of Code Katas) offers 21 on his Code Kata blog. I intend to publish my own from time-to-time, and here is the first. Enjoy...

Imagine you have to write some code for a vending machine. You are given a) the price of the product to be vended, and b) the amount of money tendered by the customer. Your task is to deduce what change to offer, i.e. how many of each type of coin. Optimise your result by minimising the number of coins given in change. Assume your vending machine has unlimited stocks of the following denomination: 1p, 2p, 5p, 10p, 20p, 50p, £1, £2.

Two examples of input and output follow:

i) Product price is 70p; money tendered is £1, i.e. 100p. Optimal output is 1 x 10p and 1 x 20p

ii) Product price is 63p; money tendered is 80p. Optimal output is 1 x 10p, 1 x 5p, 1 x 2p

This challenge is entirely language-independent, so your solution can be produced in the manner that best suits your regular coding activities. Hence, you might write your solution using DATA Steps and/or you might use macros. Your input values might be provided as global macro variables, or parameters to your macro(s), or supplied within a data set.

Once you've cracked the above, you might want to consider the following additions - perhaps on subsequent days.

A) Accept a "list" of coin denominations as additional input rather than hard-coding the list I supplied above. The list might be as a parameter to your macro, or in a data set

B) Rather than assume an unlimited stock of each coin in the machine, accept an input "list" that tells you how many coins of each denomination are in the machine. Consequently, you will need to consider the possibility that your result is a refusal to vend due to "insufficient change"

C) Rather than writing a simple textual result to the SAS log, produce some kind of coloured report or graph depicting the change given

You also might like to consider different solutions. The use of arrays or hash tables would be two alternatives.

Tuesday, 17 January 2012

Code Katas

Last week I made a brief mention of Code Katas and how they can help you as a form code practice. Let's find out some more.

The basic concept surrounding Code Katas encapsulates the ideas that a) we are professional coders, b) practice improves one's skills. Wikipedia tells us "Code Kata is a term coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a bow to the Japanese concept of kata in the martial arts. A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition".

Dave has a blog for his books, and a sub-blog specifically about Code Katas. His Code Kata blog tells us all about the background and Dave's reasoning for using Katas.

I greatly enjoy the consultancy and the project management work that I do, but I get at least as much enjoyment from coding too. Not only coding to a specification, but coding for coding's sake. And that, in a nutshell, is what a Code Kata is - coding for coding's sake. If you were into tennis, you might focus on competitions wherein you have to give your best, but you'll be able to achieve better results in those competitions if you practice regularly. There are no prizes for practicing, but it sure helps.

Who benefits if you become a better coder? Your employer or client will certainly benefit, but your own career prospects will improve too. So, don't limit yourself to doing your Code Katas within core hours. Maybe it's something you might consider doing over lunch, or after hours.

Dave lists 21 Katas on his site, most of which I've found applicable to SAS. I'll offer my own contributions from time-to-time here on NOTE:, starting tomorrow. In the meantime, please feel free to send your own Code Katas to me. I'll publish some of them.

Monday, 16 January 2012

Engage More Closely With NOTE:

The NOTE: blog is powered by Google Blogger. Google have rolled out a number of improvements to Blogger recently. One of those improvements is support for threaded commenting, which means that it is now much easier to differentiate between whether someone is making a general comment on the thread, or responding to another comment on the thread.

I hope this will mean that we can engage in a more full and lively conversation in the comments on each posting.

What do you think?