# Going from Idea to Product in a Week


One week ago I decided I wanted to smoke some chicken wings.

The first recipe I found was virtually unreadable.

I had to read the entire person's backstory, multiple paragraphs saying the same thing about adding rub and, of course, countless ads before I was able to get to the actual recipe. Frustrated, I complained to my wife about it and she kindly listened then asked "Isn't there something you can do about it?"

I do have a degree that alleges I can do some computer-y things. As I thought about it more, her question caused a few things to click in my mind:

  1. Recipes are somehow structured enough to allow voice assistants to provide step by step instructions
  2. Apple recently shipped extensions in Safari for iOS
  3. Extension can be pretty simple and fast
  4. iOS App Development is fresh on my mind with my recent release of HULOG (opens new window)

# Validating the Idea

Before jumping too far into this, I texted a few people and asked them how they felt about reading recipes online. My 100% perfectly scientific survey of 5 people showed that 100% of people hated reading recipe websites. They cited having to scroll past the wall of text before being able to actually see any ingredients or anything. Given the visceral response everyone had to this, I figured I might be on to something but still needed to validate assumption #1 above.

I browsed to a few websites and fired up an elite hacking tool by pressing F12. With the source visible, I was able to quickly see if there was any structured format for a recipe on each page, and as it turns out there was! The recipe was formatted in LD-JSON on virtually every recipe page. This was incredibly exciting because it meant I didn't need to do any manual HTML DOM parsing to attempt to discover recipes, instead it was provided for me by the webpage.

# Building the App

Given that it was already formatted for me, most of the work was already done for me! I was able to start a new Extension App that injected a script(1) onto pages that checked to see if a recipe was rendered on the page. If there was a recipe, the script simply swaps to a custom built Recipe Reader mode for the user. They can swap back whenever they want by just tapping on the Extension's logo.

(1) I want to note that injected scripts aren't my first choice for this - They present a moderate increase in security risk for a given application, however in this case, it was necessary to implement the extension.

# Getting Early Feedback

The TestFlight platform has its UX challenges, but at the end of the day is great for getting apps into the hand of users relatively quickly. Within 3 days of starting development, I was able to start shipping the app to friends who had agreed to be beta testers. They provided a ton of valuable feedback. Before the feedback, I had a very "developer-friendly" UI but now have one that works a bit better for users. I also added images of the food to the reader mode since many people wanted to see the picture to decide if they wanted to cook the recipe.

# Submitting The App

Preparing the screenshots was the most time consuming part of this project. After I was able to track down a screenshot of the UX that worked for all of the sizes required by Apple, everything was ready to submit. On Sunday afternoon, exactly one week after coming up with the idea I was shipping the product to the App Store across the globe. Below I've attached a a screenshot of the Extension:

Rapid Recipe Screenshot

# Reflection

Being able to iterate this quickly was incredible - It felt truly empowering to have an idea and be able to have it live, in a potential customers' hands within a few days. Though I won't be able to ship this quickly every time, I was enabled by my recent work building an iOS / macOS app, previous work in extensions and the simplicity of the preformatted data. All of these enabled me to work quickly and ship a product within a week.


If you're interested in checking out Rapid Recipe, you can download it for your iOS or macOS device here (opens new window)!