Mario Cardinal

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


Leave a comment

Subscribe to my Newsletter

Since a few months I publish a newsletter for my family and friends. One of the objectives of this newsletter is to share my entrepreneurial journey. It contains the latest news about To-Do Studio, the startup I founded with Erik Renaud. Our company designs and markets a software service that allows leaders to empower others to take initiative. The newsletter is intended to offer a privileged look at the path of a startup company.

newsletterEncouraged by the positive comments I receive, I decided to give access to the newsletter to readers of this blog. That’s why I invite you to subscribe to my newsletter.

Here is the link to subscribe: Destination To-Do Studio

The newsletter is free. It is published every 2 months, 6 times a year. The subscription does not require any obligation on your part. The only information you must provide to register is your email address (it will never be shared with third parties). You can unsubscribe at any time. If you wish to preview the content of the newsletter, I invite you to read the first issue here.

PS. Following registration, if you do not receive quickly a confirmation email, check your Junk Email inbox.


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


Leave a comment

Virtual Studio: the Workplace of the 21st Century

The name of our software service To-Do Studio is a combination of two words: To-Do and Studio. We firmly believe that this name association correctly explains our product’s mission. We chose the word To-Do because the team work is performed via a common list of To-Do items, synchronized among teammates. We added the word Studio to indicate the creative and collective aspect of our service. A studio is a place of creativity, a collective workspace where teammates take initiative and assume responsibilities.

Just as Seth Godin, author and successful speaker on marketing issues, recently wrote on his blog, the studio is the modern workplace. Here’s how we paraphrase his words:

The success of leaders in a factory is based on compliance. More compliance leads to more profits. Do what you are told, faster and cheaper, and repeat.

The factory is a legacy of the twentieth century.

The studio, on the other hand, is a place of initiative and creativity. The initiative to create new things and better things. In short, a process that leads to better things.

It’s a peer to peer relationship. The hierarchy has virtually disappeared. All that remains is leadership.

This is the initiative coupled with responsibility. Authority is much less important, as are traditional measures of productivity.

You can distinguish a studio from a factory in minutes. Where do you work?

You can read the original post on Seth Godin’s blog here.

We are convinced that the studio is the future of work and that it will evolve toward a marriage between the physical and virtual world thanks to software such as our. We envision that each team will want to work with the help of a virtual studio. And we are determined to ensure that, for most companies, this virtual studio is To-Do Studio.

The virtual studio is the workplace of the 21st century.


Leave a comment

How to clean up the wwwroot folder on the Azure Web App using PowerShell

I’m writing this post to make sure that a PowerShell recipe to remove all the files in the wwwroot directory on the Azure Web App is documented somewhere on the web. Thus, with the help of Google search, those who will have the same goal in the future will find the right answer easily.

Recently, when deploying the To-Do Studio website with Azure DevOps, I needed to clean the wwwroot directory before deploying. It is usually a simple configuration setting when running the release on a hosted VS2017 agent. When using the Azure App Service Deploy task with the Publish using Web Deploy option, there is an additional option to Remove Additional Files at Destination. Unfortunately, in order to roll the automated E2E tests with Cypress, we must run the release script on a Linux agent. This Remove Additional Files at Destination option is not available anymore on Linux. So I had to automate the cleanup  with an Azure Pipeline task.

At first, to fill this gap, I thought about using the “Azure WebApp Virtual File System Tasks” available in the Azure DevOps marketplace. Unfortunately, this task did not work. So I had to automate the cleanup with a Powershell script.

The non-automated (manual) way to delete files / folders in Azure Web App is to use the Kudu console. For those who like me want to automate this operation with PowerShell, there is KUDU Virtual File System (VFS) Rest API.

Without further ado, here is the script.  You can download it from my Personal GitHub repos or you can copy and paste without restraint from the script below.

$WebAppName = “insert Web App name”
$slotName = “insert Slot Name”
$username = ‘insert the username from the publish profile’ #From the publish profile
$password = “insert the password from the publish profile” #From the publish profile
# Initialize parameters for Invoke-RestMethod
if ($slotName -ne “”){
    $apiUrl = https://$webAppName`-$slotName.scm.azurewebsites.net/api/vfs/site/wwwroot/”
}
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((“$($username):$($password)”)))
$headers = @{
    Authorization=“Basic $($base64AuthInfo)”
    ‘If-Match’ = ‘*’
}
$userAgent = “powershell/2.0”
# Define a reursive function to delete files
function DeleteKuduDir ($content, $dir)
{
    foreach($c in $content)
    {      
        if($c.mime -eq “inode/directory”)
        {
            # Get listing of directory as an array
            $childContent = Invoke-RestMethod Uri $c.href Headers $headers UserAgent $userAgent Method GET ContentType “application/json”
           
            # Delete directory
            $newDir = $dir + (Split-Path $c.href leaf) + “\”
            DeleteKuduDir content $childContent dir $newDir
        }
        # Delete file
        $file = Split-Path $c.href leaf
        Write-Host “Deleting” $dir$file    
        $result = Invoke-RestMethod Uri $c.href Headers $headers UserAgent $userAgent Method DELETE ContentType “application/json”
    }
}
# Get listing of wwwroot as an array
$rootContent = Invoke-RestMethod Uri $apiUrl Headers $headers UserAgent $userAgent Method GET ContentType “application/json”
# Delete files and directory in wwwroot
DeleteKuduDir content $rootContent dir “\”
Write-Host “Done!”


Leave a comment

I wish emotional Intelligence and mental balance for my children

For almost two years, Yuval Noah Harari’s bestseller “Sapiens” has been on my reading list. Last summer, I started reading the book during a vacation with my youngest son. Since then, I have not only finished Sapiens but I have also devoured his second book, “Homo Deus”. These masterpieces really helped me to understand the world we live in a little bit better.

I love the mix of facts, simplicity and philosophical questions that makes you think a lot and reflect. It helped me put things in perspective and, in a way, extract myself from the current realty and think about meaning and purpose of life. These readings have fueled my thinking so much that I keep recommending their readings to everyone around me. Harari’s work should be taught in schools. I am currently reading his latest book “21 lessons for the 21st century“.

For those who are less familiar with the writings of Yuval Harari, here is an interview where he discusses his latest book. Unfortunately, the facilitator does not seem to understand the nuances of Harari’s work and he is completely unable to follow with significant questions, and especially to question his thinking intelligently. The result could be disappointing. But as there is something positive in everything, one of the advantages of this interview is that it is a very good introduction to Harari’s books.

Yuval Noah Harari: “21 Lessons for the 21st Century” | Talks at Google

Recently, thanks to the random algorithms of Youtube, I came across an interview of Harari with an intriguing title: The 2 Most Important Skills For the Rest Of Your Life. Harari is not only a macro-historian and professor but one of the world’s most innovative and exciting thinkers. I quickly made the decision to listen to the interview and I was not disappointed. There is a lot to learn from this video, especially for the youngest who start their adult life. In this regard, I will recommend it to my four children.

I like to believe that the main reason we are on earth is to create happiness. I have always wished that my children become initiators of happiness, that they flood their entourage with those little things that make life more pleasant. Obviously, we must begin by finding happiness deep within ourselves. Like Harari, I am convinced that in the 21st century, only those who have enough emotional intelligence and mental balance will be sources of happiness.

And in the end
The love you take
Is equal to the love you make

Beatles
The End (Abbey Road)

Here is the link to listen to the full interview: https://www.youtube.com/watch?v=x6tMLAjPVyo