Master or Shepherd?

Martin Parry poses an interesting item of "idle chat" over at his blog.

In a nutshell, Martin’s post revolves around classification of developers on a scale from M (master) to S (shepherd).   The notion of master and shepherd came from a sheep dog analogy.  Martin’s particular example, probably quoted from some real code that is running live somewhere, is a good example of a developer failing to understand the basics of event-driven development (you’ve put the odd Sleep(500) in your pre-production code too, right?)

Martin asks us to rate ourselves using the type indicator below:


I would say that it’s probably a sliding scale that we need to adopt.  Sometimes I do swing towards the Master side, whereas other times I lean towards the Shepherd side (resisting the temptation to replace S with Servant, of course).  If I had to be specific, I guess I would swing to the left (I never thought I’d hear myself say that, never mind put it in print – no doubt somebody will quote me out of context!).

For me, the position really depends upon the nature of the task, the time available to complete the task and a variety of other external pressures.  Perfection is a good goal, however in a commercial environment, it is one that comes with a high price tag.  Your boss doesn’t really care whether you’ve implemented the cleanest data access layer using ACME ORM – he just cares about the data being inserted, updated, deleted, processed and displayed (to him, even the data has a semantic difference).

For example, whilst I’ve used Sleep(500) in pre-production code, I do find myself under time pressure to complete and as such do find myself leaving the odd "to do" in my code.  I may not write the most memory-efficient algorithms all of the time, I may need to use a code profiler from time to time – is it not better to be feature complete than behind schedule?  Sometimes, more so in a commercial environment, getting the job done is more important than writing perfect code.  As long as the tests pass, deadlines/budgets are met and the user/product owner is happy with your offering, you’re on the right track.  So yes, feel free to swing as far left as your schedule and budget allow.  If you reach the extreme left, excellent stuff (I’d be interested to learn more about your definition of Master!)  But don’t be too worried if you find yourself sitting left of centre, it’s probably a very popular place (again, another phrase I never thought I’d say let alone write).

Ultimately though, Martin’s key point revolved around understanding the machine that you are developing against.  I’d say it goes beyond understanding the machine, you need to understand the framework that you are developing towards (e.g. Microsoft .net) and the tools that you are using (e.g. Microsoft Visual Studio).

It’s fair to say that what started out as a little idle chat, Martin’s post certainly got me thinking.