Saturday, December 12, 2009

Cooks and coders .......

C&C for some would be command and conquer, and rightly so it's a great game.

Though here I'm talking about Cooks & Coders. It would seem that there is a high correlation between people who enjoy building technical systems and preparing meals ....... and I think I've found a few commonalities as I've been a professional chef and a coder, and have been doing both for a while now !

Either process is a form of managing ingredients/components, getting the right things in the right place at the right time and in the right condition.


The Menu a.k.a. Design and Requirements

Now some things go well together, like web browsers and xhtml, gravy and steak, PHP and web servers, pasta and white sauce, etc. Other things do not, javascript and MySQL, ice cream and lobster (well maybe not .......), cobol and anything (ok ok I know it's good at things, just not near me).

So there are obvious compliments in both areas, some things work well in the situations they are either suited to or actually made for, simple enough. Any decent engineer or chef will know when it's not right and your pushing a square peg into a round hole, or ice cream into a lobster.

A recipe / white paper will give you the basis of what is needed in most areas, how to cook yorkshires for a sunday roast or how to set up LAMP and do some hello world web services calls using REST or the like.

Getting the correct ingredients is vital, second only to the quality of them. A bad cut of rotten meat is going to be about as much use as badly written alpha code in a production enviroment. A unprofessional or inept C&C might give it a go, ignorant about food poisoning or more likely just don't care or take pride in the end result.

As an aside, the care is another common trait of good C&Cs, the knowledge that the end result is a reflection of the care and thought that went into the creation. Personally I get a similar pleasure from cooking a full Sunday roast (as I'm just about to today !) as I do from seeing a completed and working chunk of code, strange but true.

You'll find the inexperienced, inept or ignorant trying to put in as many flavors, hacks, seasoning, Drupal modules as they can in an attempt to impress with pointless confusion, or cover up their own mess, burnt steak, opposed to focusing on what I think is one of the most basic traits of a good C&C :

"You know you've done it well when there is nothing left to take out, opposed to the second school of though who thinks they are done when there is nothing left to put in"

You can spot the second lot a mile off, messy kitchens, very messy code, hacks all over the place, no comments, bloat ware, no idea about what's on the menu.


Knowledge of ingredients

Some C&Cs really know their ingredients, for example an ex colleague Scott knows more about PHP that anyone else I know (and probably just about all the people I don't know, being a PHP guru for Facebook  likely helps ......) so when it comes to approaching a task having that knowledge will manifest itself by the use of the ingredients.

An example being I was messing about with some parsing oblivious to the DOMDocument class, a question to Scott and the whole issue was dealt with in 4 lines of simple code. Much the same and one cook trying to make a prawn cocktail sauce from 50 ingredients and another just mixing mayo and tomato ketchup.

Know your stuff and keep it simple with the correct things in the correct place.


Timing

Not only in humour, but in cooking and coding it's key. Bring a project in on a (realistic !) deadline is near identical in both areas. You have a set bunch of ingredients that will take a certain time to sort out, they have to be prepared and mixed in a certain order as well as all being done at just the right time so they can go out to the restaurant on the plate, or onto the production server in one go.

Experience, training, awareness and being mindful is a shared requirement of C&Cs. "Ah yes I need to get the onions going as they will take ages to soften properly before using them" = "Best I get Bob working on the database schema as we'll need that sorted before moving on".


People

Sitting down a sorting out a menu, shopping list, requirements, design then staffing your kitchen / development team is key.

It's my belief (which has been proven to me over and over) that it's the people that make a good product or menu, the procedure, method, buzz word bingo play a minor and usually distracting role. Good C&Cs know what to do and what needs to be done, give them the vision, support and get out of the way.

I can attest to that from being a kitchen and people either start messing with your soup or stand right in your way and ask if there is anything they can do (most of the honest answers like "No I don't think you can actually do anything" or "leaving would help lots" typically have to be kept in ones head, unfortunately).

Plenty of books and information out there on how teams gel and the importance of leaving ego out and focusing on the common goal and helping, learning and sharing with each other so I'll not go over that. The only point I'd touch on there is when you are in a decent team and you get to the point of flow it's wonderful, nothing can stop you the creativity is racked up to 11/10, the light bulb comes on above your head with such intensity that people think your a light house.

It's very easy to see and empathise with people who are trying to work and constantly get interrupted by thoses who are inept and naive of such things, or how creative people work.

Peopleware: Productive Projects and Teams (Second Edition), is an awesome read on this.


Roles

General Manager = CEO/CTO

If you don't have one of these that has worked in a kitchen or who will find a capable head chef then get out of the way, your are in for a LOT of trouble, avoid at all costs I say.

Head chef = Technical lead

Has to be strong, protect the menu and team from outside influences. Must be recognised by the company in that role, and supported by senior management. The good ones will have worked their way into the position from many kitchens/dev teams working in various languages/cooking styles. The bad ones typically BS their way in with a few buzz words then google'd "Oh yes we're going to use SCRUM and Ruby on Rails to build your browser based text parser", it's any coders job to point this out to the senior management. They will likely get upset and blame you for not helping or sorting it out, the good ones will fire them, learn and move on.

Attempt to micro manage and frustrate the good ones at your peril.

Chefs = Coders

Pretty much what the blog is about, get good ones, give them a decent kitchen (dev toys) quality ingredients (languages, IDEs, licenses for proprietary things when needed) and get the hell out of their way !

Matradee = Customer liaison

Now this is the bridge between the head chef and customer(s). Trusted to give the feed back to the chef and deal with tricky orders or upset customers, also knows enough about food/technology to speak about the menu/product to customers.

Maturity & a level head is vital, promising four roast boar and a salad buffet in 13 seconds to a customer is not an order you'd want to give to a head chef ........"Oh yes, control satellites AND translate Japanese into Russian in real time, yes that will only take an extra 2 hours on the project" ...... danger danger Will Robinson.

Waiters = Support Staff

Make sure they know what is on the menu, how to answer the common RTFM questions and how to ask chefs questions.

Specialists

I remember working with a pastry chef once, she didn't care for doing much else though she could; Choux Pastry was her magic. Much the same as getting in a LDAP expert who just designs and sets up a directory will all ACLs as easy as falling out of bed.

Project Management

Basically ............. it's identical, it's all about teams of people.



So basically it's an expression of creativity and enjoyment in the end result and proof to why some autism is a good thing !!

@JeremyHutchings

No comments:

Post a Comment