Despite being allergic to [almost] everything, I love food and I love cooking. Being the competitive person I am, I want to hone my culinary skills to that of a Michelin-starred chef. This is an extremely ambitious goal of course, especially because I have to juggle it with software engineering. However, I believe certain engineering principles can be applied to culinary education.

Understanding Your Customers

When you got a fine dining restaurant, you're not going for just the food. You're going for the service, ambiance, and novel ideas. The plates you're eating from were probably made from a local potter. The servers will notice every single action you make and appear at just the right times. Your food will come out at just the right time. These restaurants perform an immense number of activities to create exceptional customer experiences.

This is similar to how engineers must focus on creating great user experiences. It's not so much about what you build as it is what you contribute. If you're building a library to share with other engineers, you need documentation and tooling. If you're building a new messaging app, you need to create a user interface anyone can understand and use. In the first example, the target customer is other engineers, and in the second, the target customer is end users.


Although it's entirely possible to build something and hope customers will come, your chances will be a lot better if you think about the problem you're trying to solve before creating anything. You might see Michelin starred chefs simply cooking from their heart, but bear in mind all the chefs who did the same thing and didn't make it (I've met a lot of them). Maybe you're opening a new bubble tea shop because there's a certain part of the city with a high number of young Chinese people who are underserved in terms of bubble tea. Unlike software problems, food problems are generally not major pain points but are luxuries.

Let's look at another example. Near Niagara Falls, a popular tourist destination, a restaurant on a busy road went out of business. An enterprising couple had been keeping their eyes on the Niagara Falls restaurant market for two years. When they saw this particular restaurant close, they sensed their opportunity and purchased the place. They turned the restaurant into a family-oriented place. Their plan was a complete success and within another two years, they sold the restaurant for a healthy profit. This couple understood the market and knew there were lots of young families passing by to visit Niagara Falls. These families were looking for a quick kid-friendly bite after a long drive. I didn't go into detail here because the important part is that this couple spent two years understanding their customers and jumped on the opportunity they found.

Understanding your basic customer demographics (age, sex, income, race, location, etc.) goes a long way when starting any business. However, you're just hypothesizing your solution. Software engineers can use the agile methodology to test their hypotheses to minimize false positives. Applying this methodology to food can mean testing products at a farmer's market or searching for areas elsewhere in the world with similar demographics and looking at what restaurants exist there. If demand is limited, then perhaps you're not addressing a real problem or you need to work on your solution. You need your target market to love your product because acquiring new customers is a lot harder than keeping existing customers. This is especially important in the food world, which is a physical process, unlike most software. If people like your food, they're going to bring their friends and family.

Solving Your Customer's Needs

Once you've found your target market, you need to come up with a solution to address their [food-related] problems. This goes beyond just coming up with a dish. You need to create an entire experience (not necessarily a fine dining experience).

When someone first begins software development, they'll often solve a problem by patching together pieces of code other people wrote into something that works, but doesn't account for customer experience. It will probably be difficult for future developers to maintain and will be bug-ridden. As a software engineer refines their craft, they'll work with their customers to create an optimal experience that precisely solves the problem without wasted work and uses fundamental techniques.

When someone first begins cooking, they'll often follow a recipe they've chosen based off what they're craving at the moment. The recipe probably tastes great, but there's no way it can account for every type of person that will every cook it. In short, it's a suboptimal solution. As the cook refines their craft, they'll understand their customers and use fundamental techniques to create an optimal experience that precisely solves the problem.

Identifying a problem is a difficult task. Creating an [almost] optimal solution is even harder. How do you come up with any solution? The key is knowing fundamentals and being able to extract relevant patterns from them. This is what we call abstraction in the software world (maybe in other worlds too). In terms of cooking, the fundamentals are often basic techniques like knife skills, braising, boiling, steaming, grilling, etc. However, the definition of fundamentals changes based on your skill as a chef. The local food movement extends fundamentals to understanding where ingredients come from. The modernist movement extends fundamentals to understanding the chemistry behind core techniques.

Unless you're a creative genius, you'll need a starting point, perhaps an existing dish, that solves the problem to some extent. Then you break that starting point down and question whether each component meets your customers' needs. I'll make this more concrete with an example in a second.

Solving Fictional People's Needs

A little while back, a friend showed me an anime about food called Shokugeki. I'm not one for anime, but this particular one blew me away with its culinary insights amidst extravagant "foodgasms". Despite being fictional, I believe the scenarios it presents are accurate.

In one of these scenarios (season 1, episode 16), the main character and his father were having a themed cook-off. The theme was to present a dish for people who had just woken up and needed something to prepare them for their day. In this situation, the chefs were given a problem and had to find a solution. The main character used risotto (typically quite rich) as a starting point. He recognized the need for a dish that's light and nutritious.  He substituted stock for apple juice and topped the risotto with apples for lightness and bacon for nutrition.

His father used ramen (also typically quite rich) as a starting point but made a few modifications. He infused the noodles with yuzu citrus to make them more refreshing. The stock was rich, but light since it was made from kombu, shiitake mushrooms, and grated taro instead of the classic pork, kombu, and bonito stock. He recognized that soups do a great job of warming the body (great if you're just waking up) and further emphasized this effect by adding chili, ginger, and garlic. To finish the dish off, he prepared toppings like onion, carrot, and tempeh (similar to tofu) with techniques suited to each topping.

The father won by a landslide because he better addressed the problem. The combination of all the different components of his dish created something that doesn't overwhelm someone who's just woken up but instead provides them with the energy needed to start their day. Although the main character's dish addressed the problem, it didn't provide the same satisfying energy. The father was able to draw on a far richer set of fundamentals and create a much different dish than ramen while the main character only tweaked a couple aspects of risotto.

When you're coming up with a dish, you're drawing on all of the techniques and knowledge you've acquired in the past, and composing it together.

Solving My Parent's [Food] Needs

Let's go through another example to make things more concrete. This one comes from my own cooking. I've had the opportunity of traveling to a lot of different places and experiencing different cuisines in my life. If you were to ask me what my favorite cuisine was, I wouldn't be able to tell you. Anyways, I was home for the holidays and had the chance to share my cooking with my family. This is going to be a little long so brace yourself.

One particular day, I was cooking dinner for just my parents. I accounted for a number of factors when formulating the dish:

  • My parents are open to any cuisine just like I am
  • It's winter and my parents were spending the day out in the cold so the dish should warm the body
  • It had been a couple weeks since my dad last had rice and he was beginning to crave it
  • In previous meals, I had been using "restaurant levels" of salt, but this was too much for my family, which preferred milder seasoning
  • My mom prefers dishes low in fat

These factors are great to keep in mind when working on the dish, but I needed a starting point. I scoured the freezer and found beef cheeks, a tough cut with little fat and a lot of tendons that become "melt in your mouth" tender when slow cooked. I decided to use a classic French recipe for the beef cheeks where you slow cook it with stock, red wine, mirepoix (carrots, onion, and celery), and bouquet garni (thyme, parsley, peppercorn, bay leaf).

Braised beef cheeks are definitely hearty enough to warm the body, but aren't enough to be satisfying. After a bit more scouring, I found sweet potatoes and persimmons. I didn't really know what direction to take this dish in so I did a quick search online. I found a recipe for an Indian sweet potato paratha, a type of flakey flatbread.

A lightbulb went off in my head. This dish was beginning to resemble Mexican barbacoa (slow-cooked meat) tacos. However, I still needed to incorporate rice. American burritos seemed better suited to the task than tacos. Refried beans could be substituted for a sweet potato dhal (lentil stew). Rice could be spiced with garam masala (spice blend) and turmeric. I laced each element of these elements with a bit of ginger to intensify the warmth without overpowering the other flavors.

The dish was becoming quite heavy with the beef cheeks, sweet potato, and rice components. A sweet salsa would provide a refreshing lightness to the dish. I'd seen mango salsas in the past and thought persimmon could be substituted instead of mango. Sour cream could be used to mellow the pungent spices and provide a thermal contrast (since it's cold).

By this point, I'd met all my requirements and come up with a unique dish that my parents loved. This kind of recipe analysis is just the tip of the iceberg. A professional chef would spend far longer analyzing their customers' needs and determining the composition of their dish.

Don't Forget About the "Gram"

Gram means Instagram for the uninformed.

Like we've discussed, there's a lot more to cooking in the real world than being given a problem and coming up with a dish to address it. Don't forget about the rest of the customer experience. For example, if you're opening that bubble tea shop for young Chinese people, make sure the drinks are photogenic and the lighting is good.

In a restaurant, your target customers are not only the diners but also your waiters and line cooks. If you create a dish that's too complicated, the line cooks will be in for a bad day. In software, I see engineers forgetting their customers are also the other engineers working with them. Don't forget this.

Putting it Together

Let's recap what we learned today. I know you want to just dive into cooking, but you need to spend time understanding your customers' needs. From there, you can begin formulating an experience to meet those needs. That involves composing dishes, ensuring your support staff can operate properly, and creating a suitable atmosphere. There's a lot of moving parts and I'm still figuring out how to account for all of them. It might just come with experience.

There's so much more I want to talk about, but that will have to wait for another time. You may not agree with everything I've said here, but this is where I'm at with cooking and software engineering at this point in time. I'm certain I'll refine my approaches in the future, but hopefully, it gives you a good starting point to hone your own culinary skills.