.bmc18-nav–item {
display: block;
font-family: sans-serif;
line-height: 1em;
.bmc18-nav {
margin-bottom: 1em;
.bmc18-banner–main {
display: block;
width: 100%;
border-bottom: solid 0.25em #fff;
.bmc18-nav–item {
text-align: center;
padding: 0.5em;
font-weight: bold;
text-decoration: none;
background-color: #ec3b9a;
color: #fff;
border-bottom: solid 0.25em #fff;
transition-property: background-color;
transition-duration: 0.2s;
.bmc18-nav–item:hover {
background-color: #39b54a;
color: #fff;
@media screen and (min-width: 480px) {
.bmc18-nav {
display: table;
width: 100%;
table-layout: fixed;
.bmc18-banner–main {
/*border-bottom: solid 0.5em #fff;*/
.bmc18-nav–row {
display: table-row;
.bmc18-nav–item {
display: table-cell;
vertical-align: middle;
border: solid 0.5em #fff;
.bmc18-nav–row > .bmc18-nav–item:first-child {
border-left: 0;
.bmc18-nav–row > .bmc18-nav–item:last-child {
border-right: 0;

Optometrists usually follow one of two business models: they either work for themselves as a small, independent business; or, they work for a large corporate entity, often tucked into the corner of a big-box store. Dr. Alan Ulsifer thought there had to be a better way. He envisioned a middle ground—doctor-owned but also structured to leverage economies of scale. He was right. FYidoctors, founded in 2008 to unite 23 private practices, has since grown to become the largest doctor-owned eye care provider in Canada. “As optometrists, we can control our own destiny and make decisions about what is good for the patient,” says Ulsifer.

His approach was popular with patients, too, right from Ulsifer’s early days as an optometrist when he partnered with two other doctors to open Northern Vision Centre in Grande Prairie, Alta., in 1996. The centre was conceptualized as a grand space, which would use the best diagnostic technologies, bring lens manufacturing on-site and, most importantly, prioritize patient care. As the Grande Prairie business grew, Ulsifer started talking to a number of colleagues about creating a shareholder-based business. “It gave us the opportunity, the size and scale of some of the biggest competitors out there,” he says. “It was the concept of being much stronger, together, than we could ever be on our own.”

The company has used acquisition to grow in leaps and bounds since then. Today, it’s in every province, employing 2,900 staff across 262 locations, with another 40 practices in its buying group. And FYidoctors isn’t slowing. It has plans to expand south of the border, with the first U.S. locations opening in California later this year.

Part of the value proposition that has helped recruit independent optometrists is the FYidoctors ophthalmic lab in Delta, B.C., which opened in 2008. Today, the lab can make as many as 2,000 custom pairs of glasses per day. This bucks the trend in lens manufacturing, which is to save on labour and move offshore. “It was important for us to have something made in Canada,” Ulsifer says. “That’s given us the strategic advantage of delivery times, and helps us control the products we make.”

There were growing pains as the company scaled up. With its vast geographic footprint, one of the management challenges is getting staff on the same page, whether they’re in Campbell River, B.C., or Gander, Nfld. FYidoctors achieves this through consistent training. A dedicated training team travels the country; plus the company also has a custom online learning portal, FYiUniversity. It also cultivates a culture of career-long learning by paying for additional staff training, time off to complete schooling, and incentives for course completion—a combination of raises, bonuses and prizes. FYidoctors does all this using a coaching leadership philosophy. “We don’t really use the word ‘manager’—it’s ‘coaches,’ ” Ulsifer says. “Managers tell you what to do, but coaches bring out the best in you.”

FYidoctors is also turning to some of its top “coaches” within the company to dabble in influencer marketing. Venture capitalist and Dragons’ Den star Arlene Dickinson became a board member at FYidoctors in 2015. Last year, the company launched Sacori, a line of premium eyewear, curated by Dickinson. With frame names like “Director” and “Entrepreneur,” the line has become the number two selling brand for the company, behind Ray-Ban. “Arlene is also having a lot of fun with it,” Ulsifer says.

While FYidoctors has big plans for growth in the eye care sector, it’s moving into other health care businesses, too. In December, it announced the acquisition of ReNue, three Calgary-based clinics that offer aesthetic services, such as medical fillers and laser skin treatments. Ulsifer sees it as a huge opportunity. “It’s a very fragmented industry and there’s not any one national brand,” he says. “That’s the strategy, to create a quality, doctor-driven medical aesthetics organization that’s a trusted brand in Canada.” And, as the company continues to grow using its tried-and-tested doctor-owned model, it’s easy to envision a bright future for FYidoctors, in eye care and beyond.

a.bmc18-actionlink {
display: block;
text-align: center;
padding: .8em;
font-size: 1.2em;
font-family: sans-serif;
color: #fff;
background-color: #EC3B9A;
font-weight: 700;
text-decoration: none;
border-radius: 4px;
transition-property: background-color;
transition-duration: .2s

a.bmc18-actionlink:hover {
background-color: #39b54a

Even more of Canada’s Best Managed Companies »

// API calls for recent posts to the ‘best-managed-companies’ tag. Grabs five of the given posts at random. NOTE: Post IDs are hard-coded below in `eligiblePosts`
‘use strict’;
var bodyClass = document.getElementsByTagName(‘body’)[0].getAttribute(‘class’);
var container = document.querySelector(‘#dynamicPosts’);
// tag id for ‘best-managed-companies’
// var tagID = 351657;
var postCount = 5;
var exclude = parseInt(( bodyClass.indexOf(‘postid’) >= 0 ? isolateID(bodyClass)[1] : 0));
var eligiblePosts = [1079843,1079845,1079849,1079851,1079853,1079855,1079857,1079859,1079861,1079863,1079865,1079867,1079869,1079873,1079875,1079877,1079879,1079881,1079885,1079887,1079889,1079891,1079893,1079895,1079897,1079899,1079901,1079903,1079905,1079907,1079909,1079911,1079913,1079915,1079917,1079919,1079921,1079925,1079923,1079927,1079929,1079931,1079933,1079935];
var chosenPosts = arrayRandomSubset(eligiblePosts, postCount, exclude); // subset of eligiblePosts, see function below
var endpoint = ‘’;
endpoint += ‘include=’ + chosenPosts.join(‘,’);
endpoint += ‘&_embed’;

fetch ( endpoint )
return response.json();
.then( function(data){
.catch(function( err ){

function postsRender(data){

// Define Post Elements
// post container
var thePost = document.createElement(‘div’);
// visual holder
var theVisual = document.createElement(‘div’);
// visual link
var theImgLink = document.createElement(‘a’);
// text holder
var theText = document.createElement(‘div’);
// the image
var theImage = document.createElement(‘img’);
theImage.setAttribute(‘src’, post._embedded[‘wp:featuredmedia’][0].source_url);
theImage.setAttribute(‘alt’, post._embedded[‘wp:featuredmedia’][0].alt_text);
// the headline
var theHed = document.createElement(‘h1’);
theHed.innerHTML = ‘‘ + post.title.rendered + ‘‘;
// the dek
var theDek = document.createElement(‘div’);
theDek.innerHTML = post.excerpt.rendered;
// the spacer
var theDivider = document.createElement(‘hr’);
//tack it all together

// return the wordpress postID from the body class
function isolateID( string ){
var pattern = /postid-(d+)?/;
return string.match(pattern);

* From a given array, provide a subset
* @param arr — the array from which to read the values
* @param n — the number of results required
* @param excl — a value to exclude from the results

function arrayRandomSubset(arr, n, excl){
let out = [];
// for the specified count, loop over the given array, select values randomly, and add them to the output array, but only if they aren’t already included.
// NOTE: we temporarily increase the length of the loop to output an array of length n + 1. This is so that if there is an `excl` value provided
for ( var i = 0; i < n + 1; i++ ){
// select a random position in the array
let r = parseInt( Math.random() * arr.length );
// if the value at position `r` isn’t already in the output, add it
if ( out.indexOf(arr[r]) < 0 ) {
// if the value IS already in the output, decrement the loop to try again.
} else {
// if the excluded value is not in the output, just trim to `n` results
if ( out.indexOf(excl) < 0 ) {
return out.splice(0, n);
// if it IS in the output, remove it.
} else {
let e = out.splice(out.indexOf(excl), 1);
return out;

The post FYidoctors appeared first on Canadian Business – Your Source For Business News.


Please enter your comment!
Please enter your name here