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?'

No comments: