Tuesday, April 15, 2008

High Standards

I've been putting a lot of thought lately into what attributes my ideal company would have. The more I think about it, the less I actually care what the products are and more about what the internal processes and opportunities are.

I stumbled upon a blog which I have absolutely fallen in love with. The author is in the middle of writing several books on the level of Fred Brooks. I read the first couple chapters of Art of Ware 2.0 and it's a pretty good read so far. I think I may print out a copy of it out at work tomorrow (104 pages it may be wiser to go to a Kinkos... it's work related right?).

Anyways, there was an excellent post on what it would be like to use the sports industry hiring process as a means for hiring developers. Ideas such as contract-to-hire (probation) have seen great success in the industry but surprisingly haven't seen widespread adoption. A lot of good lessons can be learned from the analogy and it shook a few thoughts loose from my head.

One thing that jumped at me right away in the analogy to recruiting was the idea of 'the Bench'. As many sports experts will point out, having a deep bench is key to succeeding long term. This is a no brainer, the more talent you have on your team the more likely you are to succeed, but we need to dig a little deeper into the analogy to extract some more applicable lessons.

The difference between a 'Bench' and a 'Starter' player typically is the amount of raw productivity you get from a team member. Ideally we have a team filled with extremely talented individuals working on the next big thing and we have the Bench maintaining what has already been built. This accomplishes the task of having the Bench to learn by example from Starters. As great as that sounds, it is extremely important to change the line up.
  • A good Bench player won't stick around if you don't give him any play time. Simply put a developer will either get bored and leave or, equally bad, their skills will get worse or become out of date.
  • If a star player never sits on the Bench, you run the risk of turning them into a prima donna. Either the star developer will start demanding more than their worth, thus infringing on the bench or they will leave. Neither is good for the company.
  • Bad or new Bench players will never become starters if they are never given the opportunity to learn directly from your best and brightest.
  • If you never intermix starters and bench players, you have divided yourself into two teams which are both competing for resources and recognition within the company. (R&D vs. Support) This leads to more pointing fingers that creates overhead instead of accomplishing tasks in line with the company goals (unless your goal is to create overhead?).
Ideally team members are rotated quite often. Form a new team of developers every time a product is launched or a major release is made. Team changes in mid-development are almost always a bad idea. The only time I can see this ever really being a good idea is if the product is failing and needs a dramatic change in direction. As long as communication lines stay open in a company, teams should form themselves as employees recognize each other's interests, strengths, and weaknesses as well as the resources and efforts required for success.

As long as teams continue to reform, lines of communication will stay blurred and bureaucracy should remain only where it is absolutely necessary. This is incredibly important for long term success.

Communicate, Communicate, Communicate. That should be the primary goal of any organization. My new favorite question to ask employees at company's has just become, 'What avenues of communication exist within your company to a. share knowledge, b. get feedback, and c. find help?'

Thursday, April 3, 2008

No Silver Bullets

Living in "Entrepreneurial itch land" it is very easy to forget this very important principle of software. It's a constant search for new innovative ideas to revolutionize, not necessarily the world, but some part of people's lives. It's really a never ending search simply because every aspect of life can be innovated and that is what keeps me up at night.

So enough of the 'piphy', back down to the practical. Some time ago I decided that my current company could be something amazing if it implemented some measure of 'dabble time'. Recently known as Google's 20%. I have since changed my mind after reading some blogs from others with some truly insightful opinions.

First let me get this out of the way, Google was not the first to do anything like this. Check out 3M and W.L. Gore which have been doing this stuff for decades.

These are the reasons I came up with for why 20% time would solve my companies problems as well as some of the counter points I knew the idea would encounter:
  • Directly fosters innovation
    • The Good: Builds out the product portfolio. Increases existing product quality.
    • The Bad: Your spending 20% more on payroll than you should. You're spending less effort on the core product.
  • Directly increases employee satisfaction
    • The Up: Increases employee retention, Increases quality of new employees, Increases employee productivity
    • The Down: Is there a down side to happier employees?
  • Gets employees interested in each other's work
    • ++: Builds employee communication, Build projects understanding (synergy?)
    • --: Employees spend more time chit chatting and brainstorming than actually working. Employees focus more on new products than the core product.
To sum up, 20% time increases strategic diversity while increasing employee satisfaction and the downside is that you're distracting attention from the core product. This is great for larger businesses (100+ employees), but extremely bad for the tiny businesses (<30).

One extremely crucial thing that makes 20% work so well is that it is peer review process. When there are 30 people in a company you probably still know everyone and have various opinions about their work etc... This makes it possible for one charismatic person to single handedly change the focus of the company. This isn't 20% time, you've simply found a better goal for the company. Splitting mind share at the early stages of a company simply hurts your chances of actually succeeding. You simply can't afford any dead weight.

The idea behind 20% time is not to replace the core product, but to either enhance it or compliment it with another product. This means you should probably have enough clients to actually give a damn about what new and interesting things you're doing, otherwise you fall into the trap of creating solutions in search of a problem. Nothing hurts employee morale more than having dead weight at a company. It is definitely not good for client relations as competitive product X doesn't come with a price 20% time price tag.

So when is the time to start pulling the 20%? The short answer is, when it makes sense (in a business way). When you can start losing business to start-ups, when there are obvious products that can compliment yours, when you get big enough to have to worry about strategic diversity, and most importantly when employees spend more time complaining about a product than building one.

So why is 20% time not a good idea for my company? We certainly need innovation, and we most certainly need to increase employee retention, almost every company does. But we simply don't have enough employees, we have stretched our resources so thin that we are failing to keep up with our existing products. Our solution doesn't lie in new products, it's in cutting out the old.

I'll save that rant for another day. In the mean time, a few links on 20% time: