I'm a software person at Prodigy. My COVID projects are currently Pizza & Bread.

Lemur Dev Diary: Filtering Continued

 ·  Permalink

Lemur is a simple meal planning app in active development. I’m documenting some of the design, product, and development decisions as part of the Lemur Development Diary.

I’ve made some changes based on the discussion in the last post.

Current Design

I’m liking the distinction between main and sides. But, this introduces some new challenges:

  • I was having no problem categorizing things until I ran right into “Caesar Salad”. The salad can be a main or a side. And, of course, there are lots of dishes that operate that way. This isn’t boolean.
  • Restaurant is sort of weird here. Mains and sides have Difficulty, but restaurants don’t. It’s kind of like a difficulty of zero. Also, a restaurant isn’t a main or a side, it’s a place. The filtering might be fine to work as above (you pick a main, side, or an eatery) but the categorization is more complex.

I’m thinking of something like his when you make a dish:

Updated Design

I’ll need to mess around with the design here to make it not terrible, but I think the idea is sound. By default, most stuff is going to be a prepared meal with a main, so the defaults there are fine. For the most part, you probably just need to choose a difficulty and that’s it.

When it’s a restaurant, you hit that and you can opt out of all other options. When it’s prepared, something can be a main, a side, or both and it has difficulty.

Lemur Dev Diary: Filtering

 ·  Permalink

Lemur is a simple meal planning app in active development. I’m documenting some of the design, product, and development decisions as part of the Lemur Development Diary.

The basic structure of Lemur has two main areas.

This is the Plan:

And this is the List of Dishes:

Choosing a meal time displays a list where you can populate a meal with a dish that already exists or create a new one:

Lemur’s core mission is to make the flow of looking at your week (or a few days into the future) and populating the list with meals as quick and painless as possible. To make this efficient, I want to focus on the kind of thinking that happens when you’re trying to meal plan. I can present every dish in your database, but ideally, you’d have ways to look at things contextually. The current options on the screen to add a dish to a meal are:

  • Search
  • Sorting by Recent or Alphabetical
  • Filtering by Difficulty or Requirements

When you’re trying to decide what to have for dinner on a Tuesday, you’re trying to fill a specific slot:

When you do that, I have been thinking that you’d ask yourself two primary questions:

  1. What do I have the capacity to prepare? (Difficulty)
  2. Do I have the things I need to prepare this? (Requirements)

As a result, when you add a new dish, right now the options look like this:

After living with this for a few weeks, I think Difficulty is on the right track, but I think Requirements isn’t right.

For me, the difficulty does matter. On a Saturday night, I have more time and energy to prepare something that requires more work. But, my flow for meal planning generally involves making the plan and then grocery shopping for the things I need to execute on the plan. As a result, I rarely run into a case where I’m planning to not have the things I need. I don’t think the Groceries/Pantry distinction is useful.

That said, I think that Restaurant might be useful, but it’s useful in that it indicates that the overall difficulty is zero. You don’t need to prepare anything except to go out or order Uber Eats. I think this can be better represented by adding a difficulty level that is effectively zero effort, or, when you mark a dish as a restaurant it removes the difficulty measure entirely. It’s more of a binary thing: is this a restaurant/take-out option or are you making it? If you’re making it, how hard is it?

As a result, I’m going to get rid of Requirements entirely for right now. I might add something to categorize Restaurants.

But, with what I have right now, t’s still too difficult to get to what you need.

I could add Smart Sorting. I could take your past choices and use it to populate the list of dishes, prioritizing things you often have for dinner. But, this feels like a leaky abstraction to me, especially given how much I love having breakfast foods for dinner. I’m also a little concerned that this results in a list that’s hard to mentally process because the order is all over the place. Still, this might be worth trying.

There seems to be a main/sides distinction. There’s a case where you’re going through the planning flow multiple times for each mealtime. For dinner, you’re adding a main meal, and you’re adding a side. If you’re trying to find the main meal, it’s annoying to have “Green Beans” in the list of possible items. This also seems like it might be a leaky abstraction because some mains can be sides, and some sides can be mains. But, I won’t stop you from doing that — we’re just trying to help you whittle down to a sane list that you can process visually.

The current sorting on the meals page looks like this:

I’m thinking that from an importance perspective, sorting is less important than filtering in finding what you need. Right now sorting is prominent and filtering is hidden behind a tap. If we reverse that and we add some more categorization options, we’d end up with something like this:

This enables quick filtering between mains and sides, and it also supports finding restaurants if it’s the kind of night where you just can’t even.

For sorting, I think I want to support Alphabetical, Frequent, and Recent. But, I don’t think people will often change between those. There’s probably some upfront preferences that make sense. So, I think I’ll start by defaulting to Alphabetical and maybe providing this an option in settings, rather than on this screen.

I’ll try this out in the beta and see how it feels over the coming weeks.

Lemur Development Diary

 ·  Permalink

Some of my favourite programming writing is Brent Simmons’ Vesper Sync Diary. Brent does an amazing job of describing the challenges encountered while implementing sync: one of the hardest things in programming to do well. Sync is often talked about in the abstract, but Brent discusses the specific tradeoffs of various solutions in concrete examples for the late notes app Vesper. The sync diary made a huge difference to the way I think about programming and writing about programming. I’m going to experiment with doing something similar.

For the last four years, I’ve been working on a little app for doing meal planning. I call it Lemur. It has gone through several iterations as a stack of paper index cards, a web app, a React Native app, and finally a native iOS app.

I don’t really want to write an app to do meal planning. But, I’ve tried dozens of meal planning apps over many years and none of them are right for me. Meal planning is something I have struggled with for years, so I’m making this thing because I personally need it. As I go through my journey of discovering what works for me, I’ve changed the app to incorporate what I’ve learned. I think, however, that the app might help other people too, and so eventually I’d like to release it.

I’m doing this alone, so I’ve been treating my role like more of a movie director than a producer. I spend a lot of time thinking through the little details of what makes a simple app like this useful, delightful, and nice.

There’s a few basic principles I’m working with:

  • The core problem to solve is: how do you quickly, efficiently, and delightfully plan what a family is going to eat.
  • The app should be “nice”.
  • I’m not aiming to build an app that does everything related to meals. A lot of the existing apps do the whole kitchen sink or focus on integration between meal plans and grocery lists. I only care about acing the process of making a meal plan.
  • I’m not prescriptive. I’m not telling you what to eat. Everyone is on their own journey. Maybe one day suggestions might be a thing, but I doubt it.
  • It has to be a better experience than just writing things down on a paper sheet with a pen. If the app doesn’t have app-specific advantages, there’s no point.
  • Seamless sync is necessary. Meal planning for a single person is generally not that complex. If you add the requirements and preferences of a family, you need sync to make the app worth it over what you can do with a paper sheet.

As I get closer to putting this on the App Store for people to try, I’m going to be working though some design, development, and product challenges. The most interesting of these I’ll write about here. Here’s some examples of what’s coming:

  • I’m struggling with when and how to appropriately integrate images into the meal planning process. Adding images makes things look nice, but it impacts speed in a way that isn’t great. I’ll work through the pros/cons.
  • I’m also trying to figure out what kind of filtering or sorting is the most conducive to finding dish options for a given time. I’ve tried difficulty and capacity filtering, some of which is working and some of which is not. I’ll show you were I’m at for this and talk through some of the tradeoffs.

I’m looking forward to sharing this journey with you.