Mario Cardinal

"The real voyage of discovery consists, not in seeking new landscapes, but in having new eyes" – Marcel Proust


Leave a comment

Market Positioning Statement

As I stated in a previous post, the first challenge facing startups is to find their Product/Market Fit. Product/Market Fit means that the solution (the product) is well suited to its target problem (the market who experienced the problem). To find the right Product/Market fit, you must not only fulfill a job-to-be-done but also ensure you have an obvious competitive advantage.

competitive-advantage

Startups that have a competitive advantage create a sustainable future for their businesses, with products that can grow and generate profits long after the initial launch.

During my master’s degree in Innovation and Technological Entrepreneurship, I learned to capture and formalize a competitive advantage using a “Market Positioning Statement”. Positioning is a choice of attributes that provides a credible, different, attractive and sustainable position within a marketplace and in the minds of customers. The positioning communicates what makes a product unique and different.

This statement usually comes in a form that looks something like this:

For [Target Market] who [Statement of Need], the [Product Name] is a [Product Category] that [Key Benefit / Reason to Buy] unlike [Competitors] our product [Primary Differentiation]

Here is the rendition of the Market Positioning Statement for To-Do Studio:

[Target Market]
Modern leader

[Statement of Need]
Want to avoid the hassle of follow-ups and tough talks that occur when pushing and pulling others to take initiative

[Product Name]
To-Do Studio

[Product Category]
Team-based productivity app

[Key Benefit / Reason to Buy]
Empowers teammates to take initiative

[Competitors]
Other current solutions such as chats, emails, calendars, to-do lists, kanban boards, spreadsheets or project managers

[Primary Differentiation]
Get things done because each teammate works in tandem with an automated assistant (personalized coaching), that not only provides a daily schedule, but guides and directs the involvement (throughout the process)

Here is the positioning statement in sentence form:

For the modern leader who wants to avoid the hassle of follow-ups and tough talks that occur when pushing and pulling others to take initiative, To-Do Studio is a team-based productivity app that empowers teammates to take initiative. Unlike current solutions such as chats, emails, calendars, to-do lists, kanban boards, spreadsheets or project managers, To-Do Studio get things done because each teammate works in tandem with an automated assistant (personalized coaching), that not only provides a daily schedule, but guides and directs the involvement (throughout the process).

The key competitive advantage of To-Do Studio is its automated assistant (personalized coaching).


1 Comment

For five years we have been searching for the right Product/Market Fit

Often, I summarize the To-Do Studio journey saying that it took us five years of research and development (R&D) to find a simple and elegant solution to the following problem: How to allow teammates to complete a common to-do list? The reality is much more complex.

What I describe as R&D is rather a long quest to find the right Product/Market Fit. Of everything I discovered applying the Lean Startup practices, Product/Market Fit is the concept that remains the most inspiring for me. Compared to some other concepts such as MVP that I first discovered through reading The Lean Startup, Product/Market Fit is much less famous outside of the startup scene.

Product/Market Fit means that the solution (the product) is well suited to its target problem (the market who experienced the problem). Startups that achieve Product/Market Fit create a sustainable future for their businesses, with products that can grow and generate profits long after the initial launch. The life of any startup can be divided into two parts — ’before’ Product/Market Fit and ‘after’ Product/Market Fit. Obviously, to this day, To-Do Studio is in the ‘before’ part. Our goal in 2019 is to move into the ‘after’ part.

Over the last five years, using ongoing build-measure-learn cycles, we have progressed toward validated learning. Every day we had new assumptions for building the product, new measures to check results, and new learning opportunities that brought us closer to Product/Market Fit.

On the other hand, on three occasions, we abandoned perseverance and opted instead for a pivot. Pivoting is what you should consider when you conclude that you’re not making any progress (or not enough) toward Product/Market Fit. A pivot is a radical course correction, going in a new direction, with a new strategic hypothesis regarding the problem or solution space. In pivot mode, the unit of progress is creative destruction.

Here is a summary that presents the radical course correction of each pivot:

Problem Space Solution Space
Launch
April 2013
New market

For teammates who want to improve outcomes from shared accountability and aligns individual responsibility with team workflow

New product

Boards that guides collaboration between teammates using sticky notes to represent work items and columns to represent each stage of the workflow

Pivot 1
May 2014
New market

For individuals who want to schedule commitments and get a unified view of their “daily” commitments

New product

Daily planner that organize work by pairing a daily calendar with a list of to-do items. It keeps track which to-dos remain to be started, which are in progress and which are done.

Pivot 2
Sept 2016
New market

For people adopting work-life fusion who want to split their workload with their close ones

Product Evolution

Collective workspace that expands on our previous product by allowing to team up with others through a common list of to-do items, synchronized among teammates

Pivot 3
Jan 2018
New market

For leaders who need to empower others to get things done and want to avoid the hassle of follow-ups and tough talks that occur when pushing and pulling others to take initiative

Product Evolution

Collective workspace that expands on our previous product by providing each teammate with an automated assistant (personal coach)

A first interesting observation is the elapse of several years between each pivot. This can be explained by the following reasons:

  • The discovery process requires time. Making the right assumptions and finding out why they are not working is hard and time consuming;
  • For entrepreneurs, deciding to persevere against pitfalls is always the first choice. It takes a long period of thinking and many failures to agree to pivot;
  • In bootstrapping mode, since entrepreneurs divide their efforts on two fronts, the discovery process is much longer. They must complete the contracts that finance the business while continuing to pursuit the Product/Market Fit.

A second interesting observation is that each pivot involves a creative destruction of the target market. It seems that entrepreneurs are poorly equipped to define the problem space. As a convergent thinker, an entrepreneur is much more likely to focus on the solution than the problem.

The good news is that correctly identifying a problem space is a knowledge that can be learned. In our case, it was in December 2017 when I discovered the “Job to be Done” innovation approach. This acquisition of new know-how led us to our most recent pivot.

“Job to be Done” innovation approach presents a product not as a set of functionality but rather as a solution that a customer hires to get a job done.

Here are two blog posts I wrote following my discovery of the approach. It describes the positive impact it has on our quest to discover a better Product/Market Fit:


Leave a comment

Configuring Cypress in CI with Azure DevOps Pipelines

Cypress is a front-end test automation framework built for the modern web. It is open source and written entirely in JavaScript. It addresses the key pain points developers and QA engineers face when testing modern applications:

  • A rich yet simple API for interactions with automatic waiting
  • Mocha, Chai, and Sinon bundled in
  • A sleek dashboard with automatic reloads for Test-Driven Development
  • Easy debugging
  • Network traffic control for validation and mocking
  • Automatic screenshots and videos

It is a very powerful tool that enables developers to write End-to-End tests entirely in JavaScript, directly accessing everything within the browser. It is also a versatile tool that can be used to test REST APIs.

At To-Do Studio, we use Cypress to test End-to-End scenarios, as well as REST APIs.

On developers’ computers, we install the Cypress Test Runner and write tests locally. Everything works perfectly. However, for CI/CD testing, we must configure Cypress with Azure DevOps Pipelines. The recipe for configuring Cypress is not as simple as it may seem at first. I’m writing this post to make sure that a configuration recipe is documented somewhere on the web to explain how to configure Cypress in Continuous Integration (CI) with Azure DevOps Pipelines. Thus, with the help of Google search, those who will have the same goal in the future will find the right answer easily.

Here is diagram presenting an overview of the major elements of the solution:

Deployment_overview

First, ensure during the build phase that the cypress tests files are zipped and published to the artifacts drop.

build

Second, during the release phase hosted on an Ubuntu agent, extract the zipped test files,run the tests using Cypress and publish the tests results. Here are the detailed steps:

1. Extract the zip file containing the tests

Extract the zip file that was published to the artifacts drop by the build pipeline.

extract

2. Run the tests

Start by creating the Cypress config file. Define the location of your tests with the integrationFolder configuration value. Do not use the testFiles configuration value or –spec command line option.

{
  "integrationFolder": "tests/e2e/specs",
  "baseUrl": "https://info-staging.to-do.studio",
  "projectId": "<insert your project Id>",
  "reporter": "junit",
  "reporterOptions": {
    "mochaFile": "tests/test-output-[hash].xml",
    "toConsole": true,
    "attachments": true
    },
  "video": false,
  "pluginsFile": "tests/e2e/plugins/index.js",
  "supportFile": "tests/e2e/support/index.js",
  "env": {
    "urlEnv": "staging"
  }
}

cypress_config

Follow by running the tests with Cypress using the command: npx cypress run –record –key <insert your record key>. npx install and run Cypress in a single step. npx is a npm package runner (x stands for eXecute). The typical use is to download and run a package temporarily. Please note that if you intent to record screenshots and videos with Cypresss Dashboard Service, you need to add the unique projectId into your cypress.json and pass the record key into the command. If you do not need visual results, simply omit the recording option and projectId.

run_tests

3. Publish the tests results

Here you will publish the junit mocha files created during the tests run. Make sure that your merge test results and that it fails if there are test failures.

publish_tests