Maybe it's because of the relative youth of the profession of software development that we seem to be constantly looking to other, more established, professions for analogies as guides to how we should organize and manage our work. If taken too far, I think this type of comparison is detrimental such as the numerous analogies often made to the building trade - e.g."building software", and "software architects". There may be a few similarities, but overall the work is so different that adopting terms and practices from construction often leads to misunderstanding and frustration. What about a restaurant kitchen as an analogy for a software shop? Is there anything we could learn? I worked in a large restaurant as a waiter in college and had the opportunity to see how a traditional restaurant kitchen is structured. It is very hierarchical with distinct and well bounded roles.
At the bottom of the ladder are kitchen assistants. These are minimally skilled staff who perform much of the repetitive work of the kitchen such as cleaning dishes and prepping vegetables. In some cases they are ambitious cooks just looking for a foot in the door of a prestigious restaurant, but often they just provide unskilled labor and turnover is high. We might compare this role with traditional manual software QA workers or technical support positions. I'll call this level one. In today's world of automation, the need for this type of unskilled role seems to be vanishing quickly just as dish washing machines reduced the need for human dish washers.
If the person has had any formal training or experience, he/she would typically start out as a line cook. Initially, they would be trained to manage one station such as pantry - making salads and other cold items - that requires a minimal amount of skill. Depending on their skill and ambition, they may eventually learn other stations that require more cooking and time management skills such as the grill or saute station. This seems to parallel a typical programmer role. I'll call this level two. Frequently, many cooks are content to maintain themselves at level two for a career - maybe specializing in a particular role or supervising other cooks at a particular station. There is a parallel to some programmers who are content to do one or a few things well and don't desire the stress of anything beyond that.
After mastering all of the kitchen stations, the ambitious cook can move into the role of sous chef (under chef). This may be the toughest job in the restaurant. He answers to the head chef and is responsible for all the day to day management of the kitchen. He must supervise and train all the line cooks and kitchen assistants. He is responsible for the overall quality of the food and cleanliness of the kitchen. He not only must be able to step-in and do the job of any line cook who is absent, but he must also be able to fill-in for the head chef when he is absent. He often performs many administrative duties such as ordering ingredients. At this point, he is a head chef in-training. I'll call this level three and compare it to a senior developer.
Eventually, the sous chef may have the opportunity to become a head chef (sometimes called the executive chef). At this stage (I'll call this level four), his main focus is on the creative aspects of the kitchen - menu planning, presentation designs, ingredient selection. He is focused on the big picture and must now also consider many of the financial implications of his decisions. This level may be compared to a typical technical lead or architect in many software organizations. Depending on the size and number of projects there could be one or many individuals fulfilling this role for a particular organization.
What about other roles in the restaurant and analogies to software development? The "front of the house" folks are obviously the sales and marketing departments of the software organization, but much like a restaurant if the quality of the food is inferior there is little they can do to salvage things. Conversely, I've seen many restaurants where the service was abysmal, but they continued to survive because the food was so great. Ultimately, it's all about the quality of the product, but you need both sides of the house to be truly successful.
The owners or restaurant managers, seem to have a parallel with the development managers. They are responsible for hiring and evaluating the performance of key personnel such as the head chef. They are focused on the financial aspects of the business as well as the administrative and marketing aspects. As in a restaurant, their role is most effective when they focus on hiring talented chefs and holding them accountable to high standards of food quality and customer satisfaction but generally staying out of the kitchen.
There is one quality that every successful restaurant has that is paralleled in every successful software shop - an obsession with high standards of quality. Great food never comes out of a dirty kitchen.
At the bottom of the ladder are kitchen assistants. These are minimally skilled staff who perform much of the repetitive work of the kitchen such as cleaning dishes and prepping vegetables. In some cases they are ambitious cooks just looking for a foot in the door of a prestigious restaurant, but often they just provide unskilled labor and turnover is high. We might compare this role with traditional manual software QA workers or technical support positions. I'll call this level one. In today's world of automation, the need for this type of unskilled role seems to be vanishing quickly just as dish washing machines reduced the need for human dish washers.
If the person has had any formal training or experience, he/she would typically start out as a line cook. Initially, they would be trained to manage one station such as pantry - making salads and other cold items - that requires a minimal amount of skill. Depending on their skill and ambition, they may eventually learn other stations that require more cooking and time management skills such as the grill or saute station. This seems to parallel a typical programmer role. I'll call this level two. Frequently, many cooks are content to maintain themselves at level two for a career - maybe specializing in a particular role or supervising other cooks at a particular station. There is a parallel to some programmers who are content to do one or a few things well and don't desire the stress of anything beyond that.
After mastering all of the kitchen stations, the ambitious cook can move into the role of sous chef (under chef). This may be the toughest job in the restaurant. He answers to the head chef and is responsible for all the day to day management of the kitchen. He must supervise and train all the line cooks and kitchen assistants. He is responsible for the overall quality of the food and cleanliness of the kitchen. He not only must be able to step-in and do the job of any line cook who is absent, but he must also be able to fill-in for the head chef when he is absent. He often performs many administrative duties such as ordering ingredients. At this point, he is a head chef in-training. I'll call this level three and compare it to a senior developer.
Eventually, the sous chef may have the opportunity to become a head chef (sometimes called the executive chef). At this stage (I'll call this level four), his main focus is on the creative aspects of the kitchen - menu planning, presentation designs, ingredient selection. He is focused on the big picture and must now also consider many of the financial implications of his decisions. This level may be compared to a typical technical lead or architect in many software organizations. Depending on the size and number of projects there could be one or many individuals fulfilling this role for a particular organization.
What about other roles in the restaurant and analogies to software development? The "front of the house" folks are obviously the sales and marketing departments of the software organization, but much like a restaurant if the quality of the food is inferior there is little they can do to salvage things. Conversely, I've seen many restaurants where the service was abysmal, but they continued to survive because the food was so great. Ultimately, it's all about the quality of the product, but you need both sides of the house to be truly successful.
The owners or restaurant managers, seem to have a parallel with the development managers. They are responsible for hiring and evaluating the performance of key personnel such as the head chef. They are focused on the financial aspects of the business as well as the administrative and marketing aspects. As in a restaurant, their role is most effective when they focus on hiring talented chefs and holding them accountable to high standards of food quality and customer satisfaction but generally staying out of the kitchen.
There is one quality that every successful restaurant has that is paralleled in every successful software shop - an obsession with high standards of quality. Great food never comes out of a dirty kitchen.
Comments
Post a Comment