Automating My Job as a Service, pt. 1

Creating a Lean UX Canvas Generator

All glory goes to Jeff Gothelf. Image source: https://www.jeffgothelf.com/blog/leanuxcanvas/

I really like product management, but there’s so much tedium. The tedium steals my time and attention away from the parts that give me joy. So, from now until the end of the year, I’m going to try to automate as much of it as possible. This series of posts will illustrate just how I do that.

First, the things I like about product management and don’t want to automate:

  • Collaborating with brilliant designers, content strategists, and developers
  • Imagining and then actually building the future we desperately need
  • Competing against other companies and organizations (though I’d much rather simply “escape the competition”)

Busywork sucks. By busywork, I mean solitary activities that are my responsibility, need to be done over and over again, and don’t contribute to my mental or emotional growth.

I don’t know what is and what isn’t busywork until I suddenly find my soul getting crushed. It’s always a surprise. The first time I need to do something, it’s novel. And I typically say to myself, “OK, that’s new. Reflect on it. Now, automate it… Nahh, you’re too lazy. Let’s just pretend it’ll never happen again.”

Then it happens again, and I say, “You really should’ve automated that. Let’s just be super careful and make sure that it never happens agai… shit.” It just happened a third time, and I realize it will continue happening until I do something about it.

Again, I’d much rather spend my time in conversation / daydreaming / sketching with customers or colleagues. So, let’s automate everything else, starting with the Lean UX Canvas. Not because I hate it, but because I actually love it. And I don’t want its tedium to crush my soul.

Lean UX Canvas

Jeff Gothelf, a designer / product guru, created the Lean UX Canvas to help product teams organize their product and service hypotheses. It’s a great tool to use as an individual or group. Here’s his explanation of it:

In most of my work these days I don’t often use an official canvas. I prefer to pick and choose the assumptions that can be found on the Business Model Canvas, Lean Canvas and others as appropriate for the client, project or initiative I’m working on and weave them together to form testable hypotheses and experimentation plans. Recently, I was asked by a client to codify some of the product discovery training we had worked on together. As our engagement was winding down I wanted to leave them with a clear, step-by-step guide to product discovery. To that end, I created The Lean UX Canvas.
This canvas codifies the process we first introduced in the Lean UX book. Today, I use this process to help teams frame their work as a business problem to solve (rather than a solution to implement) and then dissect that business problem into its core assumptions. We then weave those assumptions into hypotheses. Finally, we design experiments to test our riskiest hypotheses.

Taken from: https://www.jeffgothelf.com/blog/leanuxcanvas/

I use it all the time. It helps organize my thoughts, as well as those of my coworkers. But there’s one part that takes up too much of my time, box #6: Hypotheses. That’s because it’s a cartesian product (type of combination set) of all the inputs within boxes 2–5. If we have 3 users types, 4 business outcomes, 6 user benefits, and 17 solution ideas, that equals… 1224 hypotheses. Yowzers, that’s a lot, but at least it’s all of them. So often we miss important things because we don’t write them down. I’d rather have a robust list of hypotheses, from which we can quickly sort and trim.

Project Outcomes

Let me be a good PM and discuss projected outcomes of this project. Through utilizing this Lean UX Canvas generator, I hope to:

  • Decrease the time I spend assembling hypotheses for us to test
  • Increase the robustness of our hypothesis sets

Generator Outputs

The generator spits out the Lean UX Canvas formatted version of a hypothesis: We believe that [business outcome] will be achieved if [user/customer] attain [benefit] with [solution].

It actually spits out all possible combinations. That way, the only thing I’ll have to do later is prioritize the list, and remove the ones that don’t make sense. (Optimization opportunities for a v2.)

To get outputs, you need inputs. So let’s look at those.

Generator Inputs

This tool is very functional. It consumes a Excel file and spits out a CSV. All local, not an web application (yet).

Ideally, the team collaborates and adds all of its inputs. Just throws everything in our heads out onto the spreadsheet. Business outcomes, users and customers, user benefits and solution ideas (entire products, services, or features).

In this specific instance, Excel is helpful. What’s more reliable or easier than Excel in terms of simply filling in columns?

You might recognize one thing that’s missing. And it’s perhaps the most important thing: business problem. I left it out, because it’s not included in the hypothesis box (box 6). Also, if you’re using one canvas for more than one business problem, you’re doing it wrong. Need to stay focused.

The Code

It’s in R, ry me a river. When I get better at Python, I’ll switch it over to that. Until then, this will more than do. And to be crystal clear, I’m not a coder. I use code to simplify my work. That way, I have more mental energy to do the following:

  • Plan small expressions of love to my girlfriend
  • Bet on NBA games
library(dplyr) # for the paste() function
library(data.table) # to convert from Values to Data
lean_ux_canvas_inputs <- readxl::read_xlsx('../lean_ux_canvas_inputs.xlsx')
# cartesian product
canvas <- expand.grid(lean_ux_canvas_inputs)
# remove rows with NAs
canvas <- canvas[complete.cases(canvas), ]
# concatenate columns into usable Lean UX hypotheses
hypotheses <- paste('We believe that',
canvas$business_outcome,
'will be achieved if',
canvas$users_and_customers,
'attain',
canvas$user_benefits,
'with',
canvas$solution_ideas, sep = " ")
# convert into table
hypotheses_DT <- data.table(hypotheses)
# generate csv to share with team
write.csv(hypotheses_DT, "lean_ux_canvas_hypotheses.csv")

Here’s the output:

I think I removed “fluffy pony” from the final input.

Again, I value having a robust list of all hypotheses over missing out on a few that might be key later on.

But I think making it easier to sort the hypotheses will make this more usable, and thus more valuable. Will work on it more this week.