Thursday, May 19, 2011

Software development is like cooking


One of the things that I enjoy other than spend time with my family and programing, is cooking, and I was thinking that I may enjoy it just because it's very similar to programing, seriously!.

I have always think about software development as Art, Craft and Science, cooking is the same, the result of you developing or cooking can be considered Art if you are a good craftsman, if you applying science properly and of course if you add creativity and imagination to the process, lets talk about other similarities between software development and cooking.

Software development and cooking process have some similarities:
First you want to fill a need or you want to create something new.

For software development:
- You need to define your goal, your scope, your budget.
- You define high level requirements:
     - You have platforms.
- You make some estimates.
- You develop something:
     - You have pre built solutions, that you can customize.
     - You have tools and frameworks.
     - The Actual development.
     - You test and debug your work.
- You validate your work.
- You publish your work.
- You receive feedback.
- You adjust.

Sample for cooking:
- Dinner/ 6 persons / 100dls
- Appetizer, Soup, main dish, desert:
     - Vegetarian, Meat lover:
          - Mexican
          - Italian
          - Etc.
- Preparation in two hours, 1lb meat, 5 tomatoes, 1 onion. etc.
- The actual cooking:
     - Frozen food.
     - Pans, knife, recipes, frozen vegetables, anything ready to use.
     - The actual cooking.
     - Taste, add salt, add water, etc.
- Ask a family member to taste your dish.
- Serve.
- Receive complements or complains.
- Take note and adjust for next time.

The actual development and cooking process is where a lot of things can make a significant difference, even if you are following a recipe, it's in that part where you can be creative, add or remove  ingredients to the recipe, cook for more or less time, etc. its also the most risky part, you made a mistake and it will be very difficult to fix it without having to start again, also the more you cook, the better you are.

There are also specialties, some developers are better working on the front end and others in the back end, as some chefs are better cooking deserts, salads, etc.

Software development and cooking are not precise, but you can make very good guesses applying some science to your process.

Presentation, consistence, smell, or UI and UX, presentation is one of the most important things for chefs, if the dish is very tasty but lacks of a good presentation, many people will not even would like to try it, the same applies for software development, your product may be a super cool idea, you may be using the latest technology and probably you designed some super fast algorithms but if your product don't have an interesting UI and a very good UX, nobody will use it.

I am pretty sure that there are many other things that make software development and cooking a similar process, but thats all that I can think for now.