08.25.11

Thanks Steve

The news that Steve Jobs has stepped down as CEO of Apple made me think of my favorite Steve Jobs quote

“Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’ opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”[Stanford commencement speech, June 2005]

I’ve kept this for a number of years now and it helps me to remember where I’m going or more importantly where I should be going.

08.3.10

Your Professional Half Life

The term half-life is commonly known as the mathematical and scientific description of exponential or gradual decay and comes from the slightly longer term “half-life period” which has origins back to 1907*.

On my drive in to work today I was thinking about applying this principle to professions and/or different jobs. Working with the web, it is necessary to put aside time each day to read blogs / news sources just to stay remotely in sync with whats happening. It is a demanding profession in this respect. Going away for two or three weeks with no internet access can leave you feeling you’ve got a lot to catch up on. As a web developer you are not going to suffer that much from such a short time period but what about one, two or three years?

I want to define professional half-life as

The point in time in which negative effects in either knowledge or practice have occurred which have been caused by a period of absence from the role in question.

In web development it would be possible to notice degradation in both more generic practical areas like forgetting how to touch type, or remembering how to print screen in OSx to very specific knowledge like browser specific CSS rules and the finer points of an apache http.conf file for a production box. Your job’s half-life is concerned with not only remembering what you knew before, but also catching up with the things you didn’t know.

It would be difficult to give an actual time for professional half-life but if we look at a range of jobs we can classify them into at least 3 categories. Here are some quick examples.

Short Half-Life – Engineers, programmers, scientists, web developers.
Medium Half Life- Human resource managers, account handlers, police / fire service
Long Half Life – Hairdressers, refuse collectors, gardeners, receptionists

So what job do you do and what is its half-life ?

* (John Ayto, “20th Century Words” (1989), Cambridge University Press.)

Edit: Small discussion about this post on Hacker News

07.17.10

No Retainer. Seriously ?

I had a conversation today with a new colleague who told me that at his old agency, they didn’t use retainers.

What no retainers ? Seriously ?

If you’ve not come across the concept before (or perhaps you have another name for the same thing) I am defining a retainer as

A contract established between the agency and the client whereby the client pre-book the agency by purchasing x number of hours for the forthcoming months / year.

On the surface it may be tempting to think that the retainer benefits the agency more than the client, after all there are lots of agencies right? On closer inspection I would argue the opposite. While there are many agencies out there, once you’ve invested heavily in finding one you are happy with you need to make sure they commit to you as well as you committing to them. Failure to realise this will end up costing you more in the long term.

A retainer establishes a long term relationship

This much is obvious but not all the benefits of such relationships are so obvious. Consider the following:

  • You all know each other well. You’ve also probably been out socially on one or two occasions. Being relaxed and knowing the people you deal with daily will make a difference.
  • The agency knows it is in for the long term. They write better code and have more pride in their work. They know the people that will be replacing feature x,y and z are themselves. They have the opportunity to make things really nice.

Retainers guarantee relationships continue

Many clients think they have the upper hand in the relationship, but often with a good agency this is simply not true. The attitude of the marketing dept may be ‘of course the agency wants to work with us’ but without a retainer this has not been established. Agencies operate at a fixed capacity and the next big and exciting piece of work to come through the door may be just a little bit too good not to take. Without a retainer the agency can just walk away.

Retainers buy ideas

Buying 30 hours a month means it has to be filled. It is in the interests of both parties that this time gets used both this month and every month going forward. This should mean that both parties are spending plenty of time thinking how to fill it and this translates into ideas, lots of ideas.

Retainers buy priority

Without it you might end up at the back of the queue. We’re are often in the situation of having a full schedule for 3 months into the future. Without booking your work in by pre buying time, 3 months is a long time to wait.

Retainers cost you less in the long run

The cumulative effect of all of the above results in a tidy and efficient working relationship. The end result of this finely tuned machine will not only be financially beneficial but the effort required to get good ideas and a motivated team working on your site / product will be less.

07.16.10

Using BIT operations in PHP – an example

An extremely useful way of storing flags/values in PHP is to use bit operations which set the bits in a single integer value, which you can then test against. Often when a system grows, you need a flexible way of adding new flags with the minimum of impact. Using the method below, doing so is as easy as adding a new constant to your model and using it.

If we have the following constants defined in PHP (we usually store these in the model)

Then these are represented as bits like this

We can then go about setting the bits in variables, which we will later use to test against.

Using the bit map above, you can see why this happens.
If we take $iUser1 and do an ‘&’ with kListOne you get this

Doing an ‘&’ looks for bits that are set in both comparators and gives us 2 which is the value if kListOne, so we know they are subscribed to this.

I would be interested in knowing what other people use bit operators for, so feel free to comment below.