# Customer development as an optimization problem

## Why am I doing customer development

At the last year of college my friends and I (all CS majors) had an idea for inovative product that did not yet exist on the market, and we decided to implement it! It was technically complicated solution, hard (and fun :D) to implement, so it took as a few months to build the first working version, and then another few months to improve it.

After all that work we started presenting our solution to various mentors and possible customers and the response that we most often received was not what we expected:

“cool idea, but I would not pay for it because I do not really need it”

We kind of hit the wall at that moment - it was obvious that we had to change something, but we had no idea what.

That is when we discovered **customer development**!

Or to be more precise, that is when we started caring about customer development - we heard about it before but we did not really understand it and we believed that creating inovative,
technically complex product will guarantee success.

Why was that not enough? Because we implemented what we thought our customers want, but that was wrong because we did not know our customers well.

The main idea behind customer development is that you should focus on your customers, get to understand them (their needs and problems) and adjust your product so it fits their needs or solves their problems. That way it will not happen that you create a product that they do not need/want, and that you can not sell!

Customer development is a set of methodologies for accomplishing that: learning about your customers and acting on it. Finally, the idea is that you should talk to your customers first and then implement solution, not the other way around.

## Motivation for this post

There are many resources to learn about customer development, however I found it pretty hard to combine all of them together, to apply what I learned to my current situation and afterwards to evaluate the results. Great help for me was Justin Wilcox’s blog which has tons of real world examples and best practices.

However, I was still often trying to find a way to define customer development methodology in more formal way,
and I realized that interesting way to look at customer development could be by shaping it as an **optimization problem**,
where I am looking for ideal combination of value proposition and customer segment.
That seemed like a really fun idea, so I decided to refine it and eventually ended up writing this post!

## Optimization problem

Customer development is a wide subject so I am going to focus only on finding the **solution-problem fit**, which is an important first step in customer development.
Finding the solution-problem fit means finding the best combination of value proposition and customer segment.

** Value proposition** - A set of benefits that your product offers to customer.
In other words, it is a functional description of your product: not how it works or looks, but what it does, how is it valuable to the customer.
Value proposition tells us

**what should our product do**when we build it.

** Customer segment** - A set of customers that share similar characteristics.
Customer segment tells us

**who are we building our product for**.

Example: customer segment are young people that run and value proposition is an app that helps them track their runs and burnt calories.

### Problem definition

We have a set of all possible value propositions \(V\) and another set of all possible customer segments \(C\). We also have a goodness function \(g : V \times C \rightarrow \mathbb{R}\) that scores how good is certain combination of value proposition and customer segment. We want to find combination of value proposition and customer segment that has maximum goodness, so we are solving \(\arg\max_{v, c} g(v, c)\).

Goodness function could be anything that we use to evaluate the solution-problem match. It could be estimated profit, number of expected active customers or maybe impact that our product could create.

This is a complicated problem that we do not know how to solve easily. However, there are some actions that we can do:

- for certain fixed \(v’\), we can find such \(c’\) that \(g(v’, c’)\) is max. That means we can calculate \(c’ = \arg\max_c g(v’, c)\). We do this by creating a landing page with value proposition \(v’\) and by examining the customers that will sign up.
- for certain fixed \(c’\), we can find such \(v’\) that \(g(v’, c’)\) is max. That means we can calculate \(v’ = \arg\max_v g(v, c’)\). We do this by conducting a problem interview with customers from customer segment \(c’\) -> that way we can discover their problems and design value proposition \(v’\) that fits them well.
- for certain \(v\) and \(c\), we can determine \(g(v, c)\). One way to do it is by conducting solution interviews.

What we are actually doing in customer development is using those actions to try to solve the initial problem, to find best combination of value proposition and customer segment (solution-problem fit).

One way of using this actions that I can think of (mostly inspired by my understanding of Justin Wilcox’s blog):

- pick some starting customer segment \(c_0\), that we think is general enough to be a superset of optimal customer segment, but also not too general.
- perform action 2 on \(c_0\) -> we get value proposition \(v_0\).
- perform action 1 on \(v_0\) -> we get customer segment \(c_1\).
- perform action 3 on \((v_0, c_1)\) to calculate goodness.
- repeat from step 2 (use \(c_1\) as starting customer segment \(c_0\)) until goodness stops to increase significantly or until we are satisfied with it..
- pick \((v_0, c_1)\) as our final (good-enough) solution, or, if not satisfied with final goodness, start from step 1 with different starting customer segment \((c_0)\).

## Conclusion

I am aware that this definition is loose and unprecise in many ways, but I see it as a first step toward an interesting, different way to think about customer development (solution-problem fit). Please write your (constructive) comments on how would you improve it and what would you change! Also, I would be glad to hear about more actions and ways to use the actions to solve the optimization problem.