Dan Quach Blog
Dan Quach Blog
Skip to content
  • Portfolio
  • Posts
  • Interests

April 2026

There were 3 posts published in April 2026 (this is page 1 of 1).

How Cooking Works

In 2006, I did my first start-up howcookingworks.com where the idea was a site to learn how to cook.   The first part of the site described the techniques of cooking, and the other was where cooks could connect to participants to learn from them.

At the time, I went to a lot of start-up mixers in Los Angeles, and most people said they loved the idea. But the site never got much traction.

During that time, I also did cooking demos at companies like Google and Boeing, but it didn’t really draw much attention to the site either (though maybe things might have been different if the site had launched during the pandemic).

The site and start-up failed, and to this day I still haven’t answered the question of how people should learn to cook. However, that failure was still one of the best things I’ve done in my career, as it helped me think more clearly about product-market fit.

Cooking is deceptively one of the most complex tasks you can do in the world.  It involves shopping, food preferences, ingredients, recipes, heat, techniques, etc.  It is harder than you think and our older family members have spent decades in the craft.

We were in Denver recently, and did one of these self-guided audio guide walks on the phone.  As we walked around state capital building, it had us stop by a used and rare book store, Capital Hill Books.  Upon entering you would see lots of books you wouldn’t easily be able to get online.  I saw a hard cover copy of the Hardy Boys books, which I remember reading as a kid.

Meandering around a bit, I found myself at the cookbook section, and one book caught my eye, “The Chinese Vegetarian Cookbook.”  Everything about the book was odd.  It had the format of a Garfield book where it was half the size of a book, and I noticed it had no ISBN number.  The book was written in 1972, almost 54 years ago.

The book starts off with:

“Cooking, especially the Chinese way, is just impossible to define in such a way, as it requires a lot of good sense, judgment, and experience.  In preparing the same dish a hundred times, he is a genius if he can manage eighty percent of them to be the same quality.

This is the main reason I have written this book.  It was not written just to give you recipes from the second page to the last as many cookbooks do.  I do not pretend that cooking is as easy as ABC as may claim.  This book is written to help you understand how to cook.  Unless you are willing to read and practice carefully, I don’t think you will find anything useful in this book-maybe a can-opener will do a better job.”

The first half of the book contained detailed descriptions of ingredients, and some recipes were written in paragraph form. It is quite different from cookbooks today, which present recipes in very precise formats but don’t really challenge you to think about them. This excerpt comes from the “How to Make Soy Bean Milk” section:

“… Normally overnight soaking is enough, but the actual surrounding temperature makes the difference.  The cooler the temperature the longer the time that will be needed.  However, by the next day you pick out one of the beans and break it apart with your thumb and first finger.  When the bean is separated into two halves, see if the central part shows a tiny dent (Normally they are smooth).  If the dent has appeared the beans are well soaked and it is time to start making the milk.”


Compare this to a recipe from Serious Eats on making soy milk, where that entire paragraph is reduced to this bullet point:

https://www.seriouseats.com/homemade-soy-milk-recipe

  • Rinse, drain, and soak beans in about 6 cups of water for 8 to 10 hours. Rinse and drain again

Reflecting on the book more, I think truly learning how to cook requires a certain amount of friction. What I mean is that blindly following a recipe doesn’t lead to much growth. It’s more the struggle of iteration, along with learning from others or from rare books like this, that helps us improve.

in Personal Newsletter | 735 Words | Comment

The recipe which took 6 years to develop (pescado sudado)

In the early pandemic, I decided to pick up the hobby of reading cookbooks. Fortunately, I had already gone through the phase of baking bread a couple of years earlier, so all of that was out of my system.

I was pretty obsessed back then, to the point where the sourdough starter reminded me of an electronic Tamagotchi. It was this strange little digital pet that you had to feed by pressing buttons every day, otherwise it would get upset. If you’re younger and don’t know what that is, it’s worth looking up online to have a laugh.

When you make bread, you have two options: you can use instant yeast in a package, or this living and breathing starter. You feed the starter a mixture of flour and water every day—or at least a couple of times a day—to keep it alive. One time when I took a trip to Washington DC, TSA took a look at the starter, and I was immediately flagged for secondary screening. Fortunately, it was an older lady who understood and let it go. It technically was less than 3 ounces, just saying.

Reading cookbooks is quite different from browsing recipes online. Because they aren’t easily searchable, you often find deeper insights in niche books focused on a specific cuisine. We’re all familiar with Chinese food, but reading about something like Shanghainese cuisine highlights how diverse the food world is. What can seem monotone at first reveals a much richer tapestry when you look more closely.

To keep track of my cooking experiments, I started my own personal wiki.  My process would be:

1.      Find the recipe I want to cook

2.      Write it down on the personal wiki with ingredients, steps, and history

3.      Take a couple photos

4.      Upload the photos to the wiki recipe

This process is no different than the spiral bound journals of recipes our parents used to have, but one key aspect that I have found to be a game changer, is documenting the history of cooking the recipe (or for my techie peeps out there, keeping track of the diffs).

There is something to be said about iterating through a recipe and seeing how small tweaks make a difference here and there.

How do you improve a recipe?  One way is by trial and error.  But the easier shortcut way is to ask someone more experienced what their recipe is.

In Vancouver, one of our favorite Peruvian restaurants is a place called Silvestres. There is this one dish, pescado sudado, which is a stew of tomatoes, ají amarillo, and fish. Usually in North America, when you ask a restaurant for their recipe, you get a hard no, and you might try to reverse engineer it by looking at the ingredient list.  However there was one exception where I asked how they made a sauce at a restaurant, and they e-mailed me a powerpoint on how to make it.

We were recently in Costa Rica, and after many days of eating the local cuisine, we were craving something Asian. In La Fortuna, we found a Peruvian restaurant that served pescado sudado. The dish was quite good, with a tomato sauce, chunks of fish, and some fried strips of cassava on top.

I had previously messaged them on WhatsApp to confirm their opening times, and I decided to ask how they cooked their recipe. I was shocked when the lady gave me her recipe and let me ask questions to clarify some of the steps.

You know when you ask a good cook for a recipe, they give you some instructions. But when you delve deeper, you realize they usually leave out important details—not out of intent, but because they’ve done it so many times that it’s second nature to them.

I have spent a lot of time looking up recipes for pescado sudado on the internet. I found some on YouTube and Facebook, but unfortunately there aren’t many Peruvian homestyle cookbooks out there, so I didn’t have a good baseline for reference.

The recipe I found online, at a high level, was: sauté onions and garlic, add blitzed tomatoes, then add ají amarillo (yellow pepper). It is very difficult to source ají amarillo in North America, so the next best thing is to use it from a jar.

However, every time I cooked the dish, it was too spicy and the balance was off. When asking the Costa Rican chef for her recipe, she mentioned slicing the tomatoes into rounds, and when using yellow peppers, to deseed them (she didn’t tell me about deseeding the first time). The odd thing about chili peppers is that there is a difference between heat and spice. Spiciness, to me, refers to chilis with that intense kick—the kind you get when you ask for Thai food “spicy.” Heat is what remains when you devein a chili and remove the seeds. You get the flavor and back heat without it being overwhelmingly spicy.

I had a couple flaws in my recipe:

1.      I blitzed the tomatoes instead of sliced them into rounds.  That small change dramatically changed the texture of the dish making it more velvety.

2.      I had been using jarred ají Amarillo sauce which already had the seeds ground into it.  So no matter what, the dish would always be too spicy.

#1 was easy to fix, and for #2, what I did instead is use Mexican guajillo and Pasilla Oaxaca chilis to get the heat.

Looking at the history I was a little shocked that the first time I cooked the dish was November 26, 2020, and only now 6 years later do I feel this recipe has passed the taste test.

Good recipes aren’t just a list of ingredients, steps, and instructions.  At its core is the wisdom of the creator who iterated through the recipe many times to get it just right.


RECIPE
Ingredients

  • 350 grams of fish (rockfish or ling cod, doesn’t matter any fish)
  • half a sliced onion
  • 1 large garlic sliced
  • Sliced ginger
  • 1/4 yellow bell pepper
  • segment of guajillo, pasilla oaxaca, tiny peruvian spice
  • 1/2 cup chicken stock

SIDE

  • 60 grams quinoa per person (120g total) pot in pot steamed

Directions

CHILI PREP

  • Soak de seeded chilis in boiling water
  • Blitz with water

FISH

  • Cut fish into cubes
  • Marinate with a little salt

SAUCE

  • Add lemon as needed
  • Stir fry onion, garlic, ginger, and bell pepper for a couple minutes, add salt
  • Remove, then add tomatoes, let it sautee for a couple minutes until the thick sauce comes out
  • Add chili mixture
  • Add salt and sugar to balance
  • Add fish
  • Put on low heat
in Personal Newsletter | 1,139 Words | Comment

Half Vibe Coding

[note – there is some detailed computer science jargon – feel free to skip that if you’d like]

Vibe coding is one of these new trends where people who know nothing about computer programming are able to code up websites and applications.  It is really quite an impressive thing to do for people who don’t have any training.  

Can you imagine this happening in other fields?  What if I went to a dental office for the first time to clean teeth and had a magic tool in my hand that could do it without any knowledge of the field, but was still able to adequately clean teeth?

For a long time, computer science was a boring field.  You would have these new software architecture patterns and paradigms every 5-10 years, but now it is like someone mega dosed computer science with an IV drip of coffee and an infusion of chocolate.

Now with AI, things are absolutely insane.  Every 3-4 weeks there is some new breakthrough or pattern that makes software development easier.  To give you an idea how life used to be, coders use Integrated Development Environments (IDEs), to code.  You would have to type code by hand, and it is not so different than learning a foreign language.

In fact, computer languages are like spoken languages but with a much more constrained and detailed set of grammar and rules.   We write code to do something, and then compile and execute to test it.  The code you write must fit the rules defined, or else it will not run.

When we were stuck with a problem we didn’t know how to solve, we would usually Google, “how do I do x… stack overflow”, or read documentation.  However now in IDEs, there is a chatbot window on the right hand side similar to ChatGPT.

This magical window is like a genie that can grant any of your wishes such as explaining the codebase, or generating new code.

These tools have existed for the past 2 years, but only recently have they gotten really good.  I would even say the tooling can make an engineer 20x more productive.  So the amount of work that used to take 1.5 years, could now take about a month.

At work, there is this weird illustration that comes to mind.  Fredrick P Brooks wrote this book called the “Mythical Man Month”, which was about his experience and why software projects fail.  Here is a quote from the book:


“When a task cannot be partitioned because of sequential constraints, the application of more effort has no effort on the schedule.  The bearing of a child takes nine months, so no matter how many women are assigned.  Many software tasks have this characteristic because of the sequential nature of debugging.”

When doing project estimation exercises with staff, they might tell me this feature would take 2 months, and I would agree with their assessments based on the premise Brooks wrote. It takes time to write software, just like a woman takes nine months to have a child—you can’t have 9 women produce a baby in 1 month. My staff would mostly laugh about this whenever I mentioned it.

But with AI, all the rules are broken, and in this world, women can have a child in 1 month—or even 1 week. Basically, the premise Brooks wrote no longer feels valid.

I say I half vibe code, because I do understand computer science and programming, so I mostly understand what is going on. But with this half vibe coding, I have been creating my own projects. Here are some examples of things I have done on my own time.

Personal Finance Ledger

I used to use You Need a Budget (YNAB—which is still around). The site lets you add transactions as line items so you can keep track of your finances. I found it kind of a pain to manually enter everything, but automatic syncs didn’t exist back then.

I’ve asked a lot of friends how they manage their financial records, and I’ve heard a wide range of approaches—from doing something similar to what I have done, to just casually browsing their credit card statements, to paying the bills at end of the month without auditing anything.

Even though it is annoying and time-consuming, I have found that reviewing every transaction is helpful. I’ve caught fraud quite a few times (for some reason, it always happens when going to Mexico), and it also helps me spot trends in my spending.


These finance applications like Mint and YNAB now have automatic syncs with your credit card companies to pull in transactions so you don’t have to enter them. However, me being cheap—and a bit paranoid about having any software company connect to my bank account—I downloaded an open-source version called Financier which was a clone of YNAB  and ran it in a Docker image.

It kind of worked, but was still annoying to use since the docker image was very old. With AI, I completely rewrote it in Ruby on Rails (a programming framework) and added some features where I could upload my credit card statements to automatically create all of the transactions. This would have taken me 6 months to do previously, but I did it in about 2 weeks with AI.

Tennis Court Availability Checker

In the winter in Vancouver, it is hard to play tennis outdoors because of the rain. There are indoor courts you can book at the University of British Columbia, with two options.

You can pay $400 a quarter for a special pass that lets you book ahead of other people, or you can book 24 hours in advance. So if you wanted to play at 8am on Sunday, you would book right at 8am on Saturday.

The problem is that to check availability, you would have to look at each court one by one, and it would take 5–10 minutes just to see all the 8am availabilities.

Instead, I wrote a website where when you click the button “check availability,” it scans all 13 courts and aggregates the availability.

Technically, it is a static website hosted on Amazon S3 with website hosting enabled. When the button is clicked, it launches a Lambda which calls an API I found on the site with AI. Because Lambdas have a 30-second timeout, I asked Claude to refactor the code to run everything in parallel, and I got it working in roughly 7 seconds. Now for future checks, I can see availability in one shot.

.

Newsletter image


Gmail Sync

Like many of you, I find myself bombarded with emails and find it nearly impossible to get to inbox zero. What I did was write a website that runs locally on my computer where I download all of my unread Gmail, grouping it by category and sender. From there, I use keyboard shortcuts to quickly mark groups of emails as “read” or “trash,” and I am able to get through about 1,000 emails in roughly 15 minutes.

What I realized is that a lot of the emails I get are from the same businesses, so when grouped, I can go through them quickly.

Technically, I created Google service credentials and had it download everything into a local DuckDB database. I created models for emails and threads and used DuckDB WASM so Chrome could access it natively. A bit overkill, I know—but I originally had 30,000 unread emails, and I actually got through them in about 3 hours after writing this program.

Personal Newspaper Website

As part of the Vancouver Public Library, you get access to free newspapers via PressReader. This is a newspaper app, and I usually read the Wall Street Journal and Vancouver Sun daily.

One thing I don’t love about the app is that there is often a comment count next to articles, and there is always a temptation to click and read the comments. When I lose that battle of willpower, I click—and feel a little part of me dies inside reading the inane arguments people are making.

The other problem is that it visually mimics a newspaper, so you have to scroll up and down constantly, which makes browsing a bit clunky.

What I did was write a script that downloaded the newspaper as an EPUB, then converted it to a JSON file. From there, I rendered my own personal static website in React so I could read the newspaper more easily without distractions, and turn pages using the left and right arrow keys.

Technically, I used an MCP with Playwright to remotely control a Chrome browser to understand the PressReader login, then wrote a headless script to log in and download the EPUB to Amazon S3. From there, I triggered a process to convert the EPUB to JSON and exposed it via a Lambda API.

Next, I wrote a React frontend that calls the API, returns the JSON, and renders the HTML. Later, PressReader removed the “download EPUB” button, but I found that the API still existed. I parsed my old logs to figure out how it worked and asked the AI to work around it. It did some complex things like inspecting cookies and local storage to extract UIDs—but somehow it all worked.

Newsletter image

The interesting thing about this exercise is I don’t know anything about React, and Python isn’t my primary language so I was surprised to get most things working. I also was reviewing the code in the beginning, but eventually gave up because of the volume it was creating and just trusted that it worked.

Computer science is approaching a scary point where we might be creating systems without any human audit in the future.

in Personal Newsletter | 1,631 Words | 1 Webmention | Comment
Recent Posts
  • How Cooking Works
  • The recipe which took 6 years to develop (pescado sudado)
  • Half Vibe Coding
  • Reflections at 44, Tofu, Ancient Robots, Fanny Crosby
  • Digital Ghosts, Wisdom, and Tennis Matchmaking
Archives
  • April 2026 (3)
  • October 2025 (1)
  • June 2025 (1)
  • April 2025 (1)
  • February 2025 (2)
  • October 2024 (1)
  • June 2024 (1)
  • April 2024 (2)
  • February 2024 (1)
  • January 2024 (2)
  • September 2023 (1)
  • June 2023 (1)
  • May 2023 (2)
  • April 2023 (3)
  • August 2021 (1)
Categories
  • Data Engineering
  • Personal Newsletter
  • Travel
Independent Publisher empowered by WordPress