Formal vs. Informal Content: The Oh Sh*t Moment

We’ve been operating on a hypothesis for a long time now as a company - that people learn in their free time, outside of the traditional structure that L&D provides. This is something we say to our customers and prospects, and it’s a message our competitors share as well.

It wasn’t until a recent “Data & Dinner” session our product team hosted for the company that we were able to truly qualify this hypothesis... and the findings were pretty astounding.  

Because Pathgather aggregates formal learning content within organizations and informal learning from across the web into one place, we’re uniquely positioned to identify interesting corporate learning trends. These trends were previously invisible when all you could see was what was happening in your LMS, which is still the case at most organizations.

For context, the kinds of formal and informal content we’re talking about:

Formal Enterprise Content; Licensed or Produced Internally

  • Internal Platforms: LMS, CMS, Cloud Storage, etc. 
  • Third-Party Content:, Coursera, Pluralsight, Khan, Udacity, etc.

Informal Shared Content; Authored by Employees & Industry Through Leaders

  • TED Talks, YouTube, Industry Videos, etc.
  • Publication Articles, Blogs, Wikis, etc. 

When we pulled the data across our entire customer base, we discovered two thought-provoking observations. First, and not surprisingly, formal content vastly outnumbers informal content. However, what was surprising is just how large that discrepancy is.

On average, 97% of the content in the Pathgather library is formal, corporately controlled while just 3% can be classified as informal content and curated by employees.


Second, and get ready for this one, despite informal content making up just 3% of the content library, it accounts for over 50% of content completed in Pathgather. That means over half of the learning that happens on Pathgather costs your organization nothing to provide. Zero. Nada.  

This is a pretty astounding revelation given that companies spend untold sums of money on content that employees have no interest in using, and can actually be obtained for free on the web at a higher level of quality.

Now, we could’ve easily dropped some “oh sh*t” stats on you and walked away, but we decided to dive into some of the reasons why we think this trend is occurring along with a variety of  ways to drive engagement with your formal content below.

Why do we see such a drastic shift toward informal content?

It all boils down to relevancy. Your employees are bombarded with a mountain of information throughout their day. This makes them numb to messaging and fosters a culture of reactivity. Therefore, only hyper-relevant material will penetrate their blinders and cause them to engage.

This is exactly what informal content does. While engaging with peers, mentors and influencers, users are curating skill-specific content that piques their interest and satiates their learning appetites.

Most L&D teams are not equipped to meet the growing, daily demand of its employees’ learning needs because those needs vary widely between individuals. This makes it virtually impossible for L&D to keep up with changing processes, technologies and methodologies.

Learning organizations need to then rely on the experts within their communities to be the frontline curators and help guide the learning process for all employees. If this data tells us anything, it’s that the role of the modern L&D team should be consultants and facilitators of learning, not creators.  

Should you throw away formal content?  

Absolutely not! Formal content will always play a critical role in your organization and it’s particularly important for developing foundational skills within each employee. What should be a continuous practice is the evaluation of your internal and third-party content to ensure that usage remains high and outcomes are positive for the learners.

This is seamlessly done in Pathgather because you can easily compare content sources, see which courses are the most popular amongst your employees and identify alternative informal content that may be more impactful.  

How do you achieve a better ROI?  

This gets to the old adage, “If you build it, they will come.” Just because you have a content library that spans every topic imaginable, doesn’t mean your employees are going to proactively find it, consume it and retain it. You need to take a page out of the informal process and build in relevancy to all your content catalogs.

For example, if you have engineering content, identify the groups of individuals who would most benefit from each skill addressed and proactively market this material to them. By tagging content by skills and topics, and organizing this information in an easy to find and engaging platform, learners are able to achieve what every L&D team and employee hopes for - professional development.   

To learn more about these statistics or how Pathgather can reinvent learning at your organization, reach out to us at


Changelog #8

We've released a slew of improvements over the past month or so, so it's time for another changelog! We've added support for several new integrations, added the ability to more easily organize your content into topics, expanded our admin roles, and much more. As always, please reach out to us at with any feedback or questions.

New integrations

A bulk of our work over the past couple of months has focused on new integrations. To enable these, simply login to the admin interface, navigate to the Settings section, and click on Integrations.

In addition, we also now have integrations for some new LMSs. Configuring an LMS integration requires our support team to flip some switches for you, so if you are interested in these, simply email us at

Categorize external content using your internal topics

For those of you that leverage our content vendor integrations, this is a big one! We now support the ability to 'map' both a vendor's entire content catalog and/or a specific topic defined by a vendor to your own Pathgather-defined topics.

So, let's say you've enabled our integration to Coursera. You can now easily add all of Coursera's content to a specific topic you've defined, or you can 'map' a Coursera defined topic (e.g. Data Science) to a Pathgather topic you've defined (e.g. Computer Science).

To configure a mapping, head over to the Topics management section in the admin interface and click on the "Manage topic mappings" button in the top right. From there, click on "Define a mapping" (again) in the top right. The first option you'll be presented is to select an integrated provider (e.g. Coursera). Once you select a provider, you can choose the topic to add the provider's content to. If the provider has their own defined topics, an optional third option will be displayed that allows you to only consider a certain topic defined by the provider in the mapping. If you leave this blank, the provider's entire catalog will be added to the topic you select.

Add content to a topic in bulk

In another effort to make content organization easier, you can now also bulk add content to a specific topic. To do this, simply navigate over to the content management view of the admin interface. Select the content you'd like to add to a topic and click the "Add to topic" option above the results!

Additional admin scopes

Previously, we supported 2 user roles in Pathgather: a normal user and an admin. The admin role gave that user access to everything in the admin interface, which may be a bit much at times. So, we've separated our admin role into 3 new scopes:

  • Admin - This is the current role that gives the user access to everything in the admin interface.
  • Moderator - A 'moderator' admin can create, edit, and destroy any data, but doesn't have access to the Settings section, which includes branding, integrations, and API configuration abilities.
  • Read-only - A read-only admin can view analytics and data and run any reports they like, but they cannot modify any data or settings.

xAPI support (beta)

To clarify this one right off the bat, this does not introduce support for hosting xAPI content in Pathgather. Instead, this allows certain events that occur in Pathgather (user completes a path, user shares new content, user creates a new path, etc) to be sent as xAPI statements to an external LRS. This is in beta mode at the moment, so if you are interested in this one, please let us know at!

Custom support section

In the past, we've supported the ability to add an internal support email for users to contact at your organization. That's still supported, but we've also added support to enter any text/links you like to display in your support section. This is great to link to internal help resources, help desks, or to simply elaborate on how users can get additional support!

To configure this section, simply head over to the Settings section of the admin interface and configure the "Support Information" option.

Skills API

For the more technically inclined, our official API now supports adding skills to both the Pathgather skill collection and/or adding skills to specific users. This is quite useful if your HRIS or another internal tool already has some definition of the skills most important to or already acquired by users.

To learn more about this API support, peruse our API docs at

Webhooks (beta)

Another enhancement for the more technically inclined, we've added beta support for certain webhooks in Pathgather. Webhooks allow you to 'subscribe' to certain events that occur in Pathgather. Once an event occurs, we'll send an HTTP POST to a URL you define with a payload that details the event that occurred. For example, if you are interested in promoting Pathgather in your company's enterprise social network, you could subscribe to certain events (e.g. user created a path, user joined a gathering, etc) via these webhooks. The payload you'd receive would contain information on the user that triggered the action and the data that was affected. You could then use this payload to create a 'feed item' in your enterprise social network (e.g. Yammer, Chatter, etc) that details the activity that occurred in Pathgather. 

To read more about the webhooks currently supported, you can view our API docs.

That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

Crisis Averted: Fostering A Learning Culture During Hard Times

Companies fail; however, failure is often preventable or even reversible. In aviation, there is a saying, “It takes three mistakes to kill you.” Meaning that just one failure doesn’t usually cause a catastrophic incident. Rather, it’s the compounding effect of multiple independent failures that leads to a catastrophe.  

For example, if the automatic landing gear doesn’t work, the back up gear will help everyone get home safely. If the manual landing gear extension is also broken, you’re in for a rough landing, but you’ll probably still make it. However, if for some reason you also don’t have enough fuel to make it to a safer area for a crash landing, you’re in trouble...

Just like airplanes, companies are complex machines and it takes a lot to bring them down. Most are resilient enough to survive one or two big, strategic missteps. But compound that with an unexpected economic downturn and morale-deflating layoffs not too far behind, that’s when one enters dangerous territory. It’s the crucial decisions made, and not made, in the aftermath of those layoffs that will determine the future of your company.

The Unearthing Effects of Layoffs

Following heavy layoffs, the remaining employees will become overwhelmed and concerned for their own job security. Eventually, many will leave for more welcoming and nurturing work environments if their current ecosystem doesn’t improve.

The first ones to leave, logically, are those who have the easiest time finding another job. Unfortunately for struggling organizations, those happen to be the people they can least afford to lose. Those who stay will then be burdened with filling the gaps created, facing exhaustion and burnout risk. In time, depleting team morale and uncertain job security will begin to push these employees out.

Studies paint an unpleasant picture of the impact that a culture of lowered morale has on employees. As if trying to hire during a rough stretch wasn’t already tough enough, 87% of surviving workers say they are less likely to recommend their organization as a good place to work. Given the uncertainty and turmoil, 77% of surviving workers unsurprisingly report that more errors and mistakes are made and 64% say the productivity of their colleagues has declined.

Perhaps most important of all to the company’s present and future bottom line is that 81% of surviving workers say the service that customers receive has declined. This is a post-layoff nightmare; a downward spiral of diminishing engagement, yielding an atmosphere of greater detachment and lower productivity making it harder to recruit and retain top talent.

Lean Into the Challenge

Crisis management 101 – don’t run away from a crisis. Embrace it. Lean into it. Learn from it.

All right, we’ve made our point – layoffs negatively impact company culture. We’re writing this post because there’s absolutely something companies can do about this!

Research (see footnotes) shows that by investing in people, organizations can increase engagement, retention, productivity and revenue. Fostering an authentic learning culture remains critical to an organization’s recovery and growth plans.

As Marcus Aurelius eloquently said, “The impediment to action advances action. What stands in the way becomes the way.” Or, in the more modern words of Ryan Holiday, “Turn trials into triumphs,” from The Obstacle is the Way. Let’s visit some of the ways leadership can judo flip the crisis into a culture-boosting opportunity.

Invest in Growing Talent

After a layoff or business split, individuals are uncertain about their future and place at the company. Many are often fearful of making any noise out of fear of being cut. Unfortunately, this stifles productivity, innovation and other significant contributions. A company full of people “keeping their heads down” during a crisis is exactly the opposite of what the company truly needs to turnaround.

Telling the team to pick their heads up and “shake it off” isn’t enough. Instead, leverage this instinct by providing an avenue for personal and professional growth. When employees recognize that staying at the organization remains the best way to develop skills valued by the marketplace, fewer people will think about heading for the door.

Mitigate the Hard Costs of Layoffs

Leaders must remain aware and mindful during and after layoffs. If positive actions aren’t taken to shore up morale and reduce turnover, it can make the problem far worse.

Studies show that the cost of lost employees can be nearly two times their annual salary. According to Josh Bersin, Principal at Deloitte, turnover costs include:

  • Hiring costs associated with advertising, interviewing and screening a new employee.

  • Onboarding, training and management time of a new team member.

  • Lost productivity as new talent may take up to one to two years to reach the full productivity of an existing person.

  • Reduced engagement and efficiency from other employees who disengage following high turnover.

  • Low customer service and additional time to resolve errors as a new employee undergoes a learning curve.

  • Fruitless training costs as the average company invests 10-20% of an employee's salary on training within their first two to three years.

Developing a comprehensive and effective learning culture is key to future stability. Showing existing talent that management is devoting energy and resources during tough times to their growth potential has an immediate impact on their decision to remain at, or run from, their organization.

Realize the Value of Learning

Learning is something that almost every business book, guide, blog and management consultant recommends in and after a time of crisis. Why? Because the act of learning and the engagement it creates unlocks the power to change underlying motivators. By stimulating the talent’s perspectives and future opportunities, the company empowers positive change from within.

We should be clear about one very important thing here – we are talking about learning, not training. Training will help one handle the present situation if performed properly. Learning, on the other hand, will equip one not only for the present, but also better prepare for and mitigate future trials. This is the sweet spot for crisis mode companies who aren’t able to fix their way out of the problem with present-day knowledge.

To quote Dale Carnegie, “Life truly is a boomerang. What you give, you get.” Just think of the potential positive returns of investing in one’s workforce during the most unlikely times. By investing in talent, the company showcases its character and interest in realizing the full potential of its people. As an inherent reciprocal, the team garners greater trust in the business and its values.

Dare To Be Great

Crises demand personal and collaborative greatness. It calls on individuals to rise to the occasion and make bold decisions.

If other organizations have experienced great change by following examples of learning-culture companies, such as Google and Intuit, who continue to invest in their workforces’ happiness and development by providing learning tools and programs, why not do the same?

It’s a bold move to invest in your talent when everyone is retreating. However, it’s this foresight perseverance that truly makes the difference in the business surviving or crashing.



Changelog #7

It's been a little while since our last changelog, as we've been hard at work on some exciting enhancements! Read on below to learn about our new Browse page, the new Learning Streaks feature, our redesigned navigation, and our path enhancements. As always, please reach out to us at with any feedback or questions.

Welcome learners with our beautiful new Browse page

Allow users to browse featured resources, topics, and skills

Allow users to browse featured resources, topics, and skills

Allow your organization's learning efforts to truly stand out with our new Browse page! This addition brings with it a wealth of commonly requested enhancements: the ability to feature specific resources, full control over topics and skills displayed, currently trending resources, top content and learners for a skill, and much more!

This page is the eventual successor to the existing Topics page. Once you configure and publish it, it will replace your Topics page, but you'll have plenty of time to make that change. Read more here for details on how the configuration process works.

Stay on track with our new Learning Streaks

Learning Streaks are a great way to motivate learners to learn something every week!

Learning Streaks are a great way to motivate learners to learn something every week!

Continuous learning is critical to both our personal and professional development, but it can be easy to forget to give learning the effort it deserves. However, our new Learning Streaks feature is here to help! As you learn in Pathgather, we'll track how much you learn each week and showcase that activity in your profile. Learn something every week to keep your current learning streak going!

Path builder enhancements and image support

Adding content and images to your paths is now much easier!

Adding content and images to your paths is now much easier!

We've improved the path editor so that the process of building a path is more intuitive and streamlined. Adding content to your paths is now part of creating the actual section the content will reside in. In addition, adding images to your paths is now fully supported!

Redesigned navigation

As you can see from the screenshots above, our navigation also received an improvement. We redesigned our navigation to give it a more organized, standard look and feel. We've also reduced the number of navigation options so there's less to sort through.

That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

A Note About Customer Success at Pathgather

Over the past 3+ years of building and growing Pathgather, we’ve been incredibly humbled and honored to work with some of the largest and most innovative companies in the world.  When we started, our expertise was in the design and development of beautiful, engaging web and mobile applications, but we were relative newcomers to the enterprise learning & development space.  As such, we relied heavily upon the vast experience of our customers, and it was their opinions and insight that helped us build the product we have today.

It’s easy to throw around the word “partner” when it comes to vendor-buyer relationships without necessarily meaning it, but partnerships are unquestionably what we formed with our customers over these early, formative years.  This was as much by necessity as it was our natural inclination - in order to build the right product, we simply had to.

We’ve now come to understand that there’s just no other way to do it.  We’re endlessly dedicated to creating as valuable and impactful a learning platform as we can, and the only way to do that is to listen to our customers, to allow them to help guide and refine our offering, and to invest as much time and as many resources into high-touch service and support as we can.  Our customers’ success yields our success - it’s as simple as that.

Because of this, we’ve decided to double down on customer success in one of the most emphatic ways a young company can, by having one of our co-founders, Jamie Davidson, lead the charge in the newly formed role of Chief Customer Officer.

If you haven’t heard of a CCO before, you’re not alone - it’s not a particularly common role.  But we think maybe it should be.

Building a company is hard.  There are dozens of competing concerns and priorities at any given moment, and we’ve seen what happens when customer service gets reprioritized or brushed aside in the name of, for example, growth. We get how and why this happens at other companies, but it’s not going to happen at ours.  With Jamie at the helm, we’re ensuring that customer success is and will always be our foremost concern.

For the past 3+ years, Jamie has helped build and scale the technical side of Pathgather as our CTO, where he's had the pleasure of helping to build an amazing technical team. The first member of that team, Neville Samuell, has helped Jamie at every step of the way as our Lead Engineer and has been a critical part of our success to date. Thus, we're also excited to announce that Neville will be promoted into a new role as CTO here at Pathgather, where we know he’ll do an incredible job.

To all of our customers reading this, here’s the upshot: we hope we’ve been doing a pretty decent job so far, but we want to blow that performance out of the water.  Hold us to the highest standards possible, and and we’ll continue to do our part to rise to the occasion.

With all that said, it’s back to work,
Eric, Jamie, and Team PG

Smashgather: Automating A Smash Bros Leaderboard With Computer Vision

Three weeks ago, I was comparing startup stories with a friend of mine, and we realized our respective companies were missing quite possibly the most stereotypical icon of startup "culture": the ping pong table. At that point I felt obligated to point out that, at Pathgather, we'd moved beyond ping pong and had taken to playing Super Smash Bros (the N64 version) at the end of every week - after spending the afternoon learning whatever we feel like, of course. It occurred to me that we didn't have a good way to keep score of our brawls... that seems like something I could automate, right?

That day, I cobbled together the first version of Smashgather: "An OpenCV app that automatically records Super Smash Bros 64 games to The Internet™, using computer vision and magic."

How It Works

We play Smash Bros via my laptop, hooked up to a TV in our office. While we're playing, the Smashgather client application is running in the background and capturing a screenshot every second using OpenGL, then uses OpenCV to run a very rudimentary image processing algorithm on the screenshot that determines two things:

  1. Is the current screenshot a win screen?
  2. If so, who is the winning character?

Once we detect a winner, we can log the results to a web server, and then display the data on a web app. By the time the winner has stopped celebrating the final smash, their victory is immortalized forever at

Detecting Wins

Some example win screens from the original Super Smash Bros.

Some example win screens from the original Super Smash Bros.

I started by collecting an example screenshot for every character's win screen. You'll notice how similar these all are - in fact, the "WINS" text is identical in each one, except at slightly different locations on the screen, depending on the winning character name. We can definitely design an algorithm to take advantage of this! This is pretty basic image processing stuff, but it's still fun to dig in a bit to see how this works.

The Smashgather algorithm is a combination of template matching and image similarity. First, the screenshot is converted to grayscale (for simplicity and performance) and then matched to a template (cropped image) of the "WINS" text that accompanies every Super Smash Bros victory. This matching is done by "convolving" the template across the entire screenshot - without getting too into the weeds, that basically means we compare the template to the screenshot at every possible x/y location to find the point at which the template and the screenshot have the strongest overlap. For our screenshots, that's roughly 2 million different locations, but OpenCV is pretty good at doing that quickly so we don't have to worry about implementing all the math.

The "WINS" template is matched to every location in the screenshot, producing the strange image in the middle. The bright point in that image indicates the strongest match; when we overlay the template at that location, it produces the image on the right.

The "WINS" template is matched to every location in the screenshot, producing the strange image in the middle. The bright point in that image indicates the strongest match; when we overlay the template at that location, it produces the image on the right.

Now that we have the co-ordinate where the template overlaps the most, we can set about trying to determine if the "WINS" text is actually there. This is an easier problem to understand - we crop the screenshot and template to the same size, and then compute the SSIM (structural similarity) score between the two images to determine how similar they are. Remember, the two images won't be identical - the background will vary, the alignment might not be exact, etc. The SSIM algorithm is designed to be relatively good at handling those kinds of errors, and it certainly works well enough for our purposes. If the cropped screenshot and the "WINS" template are similar enough, we can safely say that we are, in fact, looking at a Super Smash Bros win screen!

Next up, we have to figure out who the winning character is. For this step, we run the exact same "match & compare" algorithm against templates for each of the character names. As soon as we find a matching character template, we've gotten everything we need (if you're curious, you can see the source for this simple algorithm here: WinDetector.cpp).

This whole process (capture screenshot, "WINS" template matching & comparison, character name template matching & comparison) is performed every second in order to track the current state of the game. We wrap up the process with a simple state machine, to avoid double counting wins, and we've got ourselves a program that can automatically keep track of Super Smash Bros games!

Keeping Score

The rest of Smashgather is less interesting - whenever a win is detected, we record that on a server and then make those records accessible via a basic web app. To make this part of the project more fun, I used a bunch of technologies that don't really make sense for this problem: PostgreSQL for data storage, a GraphQL Node backend to serve up the results, and a React + Relay app to render the data. Sure, a simple Ruby on Rails site would have taken a fraction of the time and require a lot less Javascript (the un-minified, un-compressed bundle is a hilarious 2.1 MB), but where's the fun in that? Besides, even with all that unnecessary work, we still had time Friday afternoon to put together a cringe-inducing 90s-style interface. You can, of course, check our leaderboards anytime by visiting


To be honest, we're busier than ever at Pathgather. Between launching new customers, coding new features, and hiring new employees, we don't exactly have a ton of free time - not exactly the ideal moment to spend a day or two hacking together an automated video game leaderboard, is it?

I'd argue that there will always be an excuse to compromise on your company values and culture, but you shouldn't compromise. We had a lot of fun building Smashgather on our "learning Friday", we learned new things about some interesting technologies, and I got to play around with my old love, C++. Also, let's be honest - keeping track of our wins is absolutely critical. Work can wait until Monday.

Of course, you can check out all the Smashgather code on Github.

Keep Learning!

The Real Recipe for Building a Culture of Learning

There is a theme in the HR industry that has received a lot of attention in recent years - building a “culture of learning.” Bersin by Deloitte defines this idea as the “set of values, conventions, processes, and practices that influence and encourage continuous learning.” Research from the same firm notes that organizations with strong learning cultures are 17% more likely than their peers to be market leaders because employees are continuously developing new skills. It seems self-evident that organizations would want to build cultures of learning, but what is more a mystery is another question - “how do you achieve this?”

In my experience working closely with top L&D departments from around the country and across industries, I’ve observed three key drivers of this culture - true, honest buy-in at all levels of the organization, the right resources, and the ability to share your expertise. Indeed, the marriage of these three things can dramatically shift the paradigm for organizational learning cultures. You might be tempted to ask, “So if it’s this simple, why doesn’t everyone have a culture of learning already?” Well, it’s because achieving this takes thoughtful consideration and the right strategy to support. Let’s dive in.

True, honest buy-in

First and foremost, to build a culture of learning, you need sincere buy-in at every level of the organization. It’s wonderful that your CEO made a mention of learning on the last quarterly call, but unless this philosophy trickles down and is supported by managers across all functions, you’re not really there yet.

So what does this mean in practice? It means that if one of your engineering managers sees a direct report taking a Pluralsight course on the latest programming language during normal business hours, that behavior is supported and not discouraged. In fact, that behavior is considered just as valuable as, say, meeting the next project sprint deadline. It means that the head of your sales department requires all salespeople to take one afternoon a month to drop everything and learn, and leads by example. 

I often hear that companies try to push learning but are unsuccessful. In my opinion, unless learning is seen as a truly valuable and legitimate business activity by senior leaders and managers of people - one that stands to make teams and entire organizations more productive and effective - you simply can’t build a true culture of learning.

The right resources

So once you’ve got the buy-in, now what? It seems obvious, but it’s critically important to focus on providing and curating the best and most relevant learning content. Unfortunately, there isn’t a one-size-fits-all approach to take here. 

For example, let’s say your retail company is mostly made up of marketing professionals. Most of the marketing personnel have years of experience in print advertising. However, your retail company plans to move 90% of the business to e-commerce by 2018. In this case, it’s hugely important for the longevity of the business that your marketing professionals have access to a wealth of resources on digital marketing.

Consider another scenario in which providing content actually has a negative impact on the learning culture. Let’s say the sales department just made a big push to acquire licenses to a content vendor for every single salesperson, but feedback from the ground level quickly reveals that the content is outdated and the UI is too frustrating to bear. In just a short amount of time, you’ve actually discouraged your workforce from voluntarily pursuing learning by connecting them with the wrong materials.

The ability to share your expertise

Of course, it’s important to consider the world in which we live today. Digital drives everything and real-time relevance is important. That’s why once you have the right resources and the culture to support taking advantage of them, it’s vital to give your employees a mechanism to share their expertise via learning resources. This can help ensure your culture of learning actually scales across the organization, which is particularly important at large multinational enterprises. Your culture of learning can go viral.

Continue the conversation

The three ingredients above are crucial to building a culture of learning - you can’t have one without these things. If you think you’ve done this successfully, or if you have other ideas, I’d love to hear from you - reach out to!



Changelog #6

This month's changelog brings a new and improved onboarding experience, the ability to clone paths, and a new integration to Harvard ManageMentor. As always, please reach out to us at with any feedback or questions.

A More Delightful Onboarding Experience

We've launched a new (and brand-able) onboarding experience that allows you to immediately engage learners with custom copy and vivid images. This new experience guides users through the learning journey of finding great learning content, sharing knowledge and resources with others, and tracking progress as they learn.

And, as mentioned, it's brand-able! Just head over to your organization's settings in the admin interface to adjust the skills communicated to users and the images displayed. You can even create your own custom step in the onboarding experience to promote your brand and the value offered by your Pathgather implementation!

Path Cloning

We've also added the ability to clone paths, allowing you to use any path as a starting path for your own! You can clone your own paths as many times as you wish, allowing you to easily create a 'base' path that is used as a template for many others. If you decide to clone someone else's path, we'll track and promote that so you can always navigate your way back to the original.

Harvard ManageMentor (HMM) Support

We also recently shipped a new integration for Harvard ManageMentor (HMM), allowing all HMM content to be easily added to your Pathgather content catalog. To enable HMM in your instance, please reach out to our support team at to configure SSO access to your HMM library. In the next changelog, you'll be able to actually configure these SSO details yourself, so keep an eye out for that ;)

That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

Learning in the Enterprise: Udacity

This is the latest installment of our series delving into some of the coolest ways to learn online. You can view earlier installments here:

This time around, we’re going to take a quick look quick at Udacity, the learning website that did as much as any to kick off the MOOC revolution that first gained steam in 2012.  Because they helped champion the MOOC cause, Udacity has received a lot of media scrutiny ever since its founding in 2011, with news outlets alternately proclaiming it the bearer of the university system’s doom as well as a flop that can’t get students to finish its courses.

A MOOC, of course, is a Massive Open Online Course.  One of the first offered was a class on artificial intelligence that Udacity’s founder, Sebastian Thrun, taught at Stanford and subsequently made available to anyone online, for free.  More than 150,000 people signed up for the course, or, more than 10x the total number of enrolled students at Stanford.  Not bad!  Soon thereafter Thrun launched Udacity, with a vision of making high quality education available to anyone in the world.

About two years later however, Thrun was quoted as saying that Udacity had a “lousy product” and that they were pivoting to a model more focused on technical vocational training.  I’m not sure how many founders would admit in such a public way that the approach they had been championing for years was not working. However, this willingness to look objectively at the data and pivot to a new model is exactly what has helped Udacity get to where they are today - a product that, though I have no data on whether it is actually working or not, seems to be serving a real, existing market need, and doing so successfully.

So without further ado, let’s have a look at just what Udacity offers.


What can I learn there?

Everything about Udacity, from their marketing to their course offerings, is centered around the idea of skilling you up to the point where you’re definitively ready to be employed as a software engineer - their messaging is unequivocal about this.

Their learning content is packaged into something they call Nanodegrees, a cool term that encapsulates the idea that their courses are both detailed and serious enough to be worthy of being called a degree, but narrowly focused enough that you’re not going to be wasting your time on learning extraneous subject matter.

Some Nanodegrees that Udacity offers include:

  • Front-End Web Developer

  • Android Developer

  • iOS Developer

  • Data Analyst

  • Full-Stack Developer

  • Intro to Programming

  • Tech Entrepreneur

Why Should I use Udacity at my organization?

The answer to this question is naturally going to be highly dependent upon what your workforce is asking you for.  Udacity’s months-long courses represent a different way of learning than the one many experienced developers in your org would likely prefer.  However, the long-form structure and cohort-based pedagogy of nanodegrees will have strong appeal to many employees who have very little familiarity with coding and want to develop their knowledge into an actual asset - both for themselves, and your company.

Further Udacity Nanodegrees should be particularly compelling to companies because the learner earns a certificate upon completion that has some decent cachet to it, having been developed in partnership with companies like Google. That means employees are more likely to learn because they believe others will recognize the time and effort they put into the course material to be a valuable achievement, allowing them to ultimately apply their new skills on the job.

If you’re not convinced, why not pilot it with some of your more motivated and promising software engineers?  There’s no doubt that for many organizations the skills Udacity promises to help you acquire are or will be essential to your business, so it’s well worth looking into.


Changelog #5

Our first Changelog of 2016 sees a ton of enhancements around analytics. We know several of you have been waiting for these, so we hope you enjoy! As always, please reach out to us at with any feedback or questions.

A New Analytics Interface, With New Insights!

Understanding how and where learning occurs in your organization is critical to ensuring your efforts are recognized and relevant to your users. Our new analytics interfaces aim to give you complete insight into the learning that occurs within your organization.

We've redesigned the analytics administrative interface to be more intuitive and flexible, and we've also added new metrics for content views, launches, new gathering members, and new conversations. It's now easier than ever to dig into the content and paths most piquing your users' interest!

Track engagement with individual paths and courses

Each course and path in Pathgather is now accompanied with a dashboard showing engagement with that resource over time. Views, launches, completions, and much more can now be viewed across any date range and, if you have administrative access, for any resource in your catalog! For those without administrative access, you'll still have access to this dashboard for content you share or create. 

Oh, and one last bonus - paths now display each learner's progress with each individual path item, allowing you to easily discover which path resource is most or least popular!

Share from Drive and Box

When sharing content, users can now upload from cloud storage services like Drive and Box alongside normal support for sharing a URL. We've had administrative support for this for awhile when creating content, and we're happy to finally support this when sharing content too! Don't forget that we also automatically embed Drive and Box content, making it a great choice to store your PDFs, Powerpoints, and other learning files.

A Redesigned Path Page

Consistency is typically good, which is why we've made some slight tweaks to the path design so that paths provide a similar, consistent experience as all other content.

That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

Why We're A Bit Uncomfortable Being Named a Top LMS

In his most recent rankings of the top Learning Management Systems (LMSs) for 2016, Craig Weiss ranked Pathgather at the #5 spot. And honestly, we're honored…we really are. However, we're a little uncomfortable winning the award. Why? Well, because we aren't an LMS.

What is an LMS?

Traditionally, an LMS is a system that stores and serves learning content for an organization. As users consume content, progress is automatically tracked and reported back to administrators. It's been around for decades and is commonly at the forefront of a company's compliance requirements.

In theory, the LMS is certainly a worthwhile idea and a necessary system. From a compliance perspective, an LMS is practically a requirement. If you're obligated to report minimum training hours performed by your workforce, having a dedicated system that automatically tracks those hours is absolutely valuable. And to build a successful company that attracts and retains top talent, you absolutely must provide learning opportunities to your workforce. Refusing to do so is a recipe for disaster, as you're essentially stating that the collective knowledge of your workforce is good as-is.

We all know that's a ridiculous notion, so why are we so leery of the 'LMS' label?

We set out to make the anti-LMS

When we started this company, we had a single goal in mind - to build a learning platform that employees truly valued. The idea was to build a product that anyone from the summer intern to the new VP of Sales found value in because it helped develop knowledge critical to their career progression. Yet, after researching the LMS market in our early days, we quickly found out that system didn't quite exist yet.

LMS dissatisfaction has steadily been on the rise over the past several years, with dissatisfaction rates commonly reported to be in the 60-70% range. But here's the thing - that dissatisfaction was at the buyer level, not at the employee level. The normal, everyday employee often didn't even realize their company had an LMS, and when they did, a common opinion was "it's a bit tough to use". 

Thus, to achieve our goal, we came up with a solution that, in some ways, flips the traditional LMS model upside-down. We knew that to build a system that revolutionized the way employees learned, we had to rethink the ideal solution from the ground up. Here are just a few of the stark contrasts between Pathgather and the traditional LMS.

Top-down vs. bottom-up approach

The LMS is typically very 'top-down' - owners of the system define the content available and facilitate delivery to the employees. We flip this around, allowing any employee to share and curate content, resources, and their expertise with others. The end result is an extremely transparent system where anyone can influence the learning that occurs at their organization.

Content storage vs. content aggregation

The traditional LMS often stores content in either SCORM form or its successor, xAPI. We won't get into these formats in this post, but we at Pathgather currently have no support, and don't intend to, for hosting either of these content ‘standards’. Why's that? Well, beyond the fact that we've yet to see an engaging SCORM course, we leave that job, and content hosting in general, to the LMS or other systems.

Our reasoning is quite simple. The average enterprise has content scattered about in dozens of places - LMSs, CMSs, internal file stores, cloud storage solutions like Box, video platforms, etc. So instead of providing yet another place for content to live, we focused our efforts on aggregating all that content into one single, searchable place. Pair this strategy with our ability to also index modern content libraries like Pluralsight and Lynda (something LMSs have historically struggled with), and what's left is a single 'metadata' store for all the learning content available to the organization.

Required learning vs. inspired, or encouraged, learning

At the core of a lot of LMS experiences is the notion that learning is required. Company mandates, compliance requirements, required classroom training - the LMS has historically focused on providing administrators with tools to push learning onto their workforce. In Pathgather, we stray away from this notion, instead focusing on a personalized experience for each learner that encourages learning and provides context to the importance of it. The word 'required' isn't found anywhere in our UI. Of course, we provide tools that allows content to be recommended to others, but at no point do we inform learners that 20 hours of safety training is due next week, for example.

Back to the 'Top LMS' award

At this point, it's probably obvious why we're a bit uncomfortable being labeled a top LMS. At both the functional and surface level, we look nothing like an LMS. And frankly, we have little desire to change that.

But the core reason is more philosophical - we don't want to be thought of as an LMS because that label 'boxes' us into what is traditionally expected from the system. And frankly, we think the LMS, at least in its traditional state, is simply the wrong system to scalably and effectively solve the critical learning needs of the modern workforce. It's too top down, relying too heavily on a small group of owners (the learning team) to provide engaging, modern, and continuous educational content for a workforce with diverse skill sets and needs. With technology and practices often becoming outdated just as soon as they get adopted, more power must be given to the experts scattered about throughout the organization. Thus, that's where our focus lies.

Times have simply changed since the LMS was first developed. The workforce of today is dramatically different than the one that existed during the LMS's glory days (we have the internet to largely thank for that). Of course, companies still have compliance needs, and we're happy leaving that responsibility up to the LMS. But to solve the more critical learning issues peering down on today's organization, a new solution is required. We at Pathgather want to provide that solution outside the shadow of the LMS.

There are something like 500+ LMSs out there, and we've yet to see one attempting to solve the problems we're focused on. So while we're working on bringing our entire vision to fruition with the right product, we'd prefer it if you didn't call us an LMS :)

Reach out

If you have any questions about our 'anti LMS' strategy, comment below, tweet at us (@Pathgather), or reach out to us at

Happy learning!

When Gamification Goes Wrong (And It Often Does)

Gamification - for better or worse, it's a common subject when talking about almost all products these days, especially learning products. I know we get asked about it quite a bit, but what commonly surprises me is the range of questions we get on the matter. These can range from the high level ("What is your gamification strategy?") to the extremely detailed ("Do you have a leaderboard in your product?").

What's surprising about that range? Unsurprisingly, it's questions like the latter that seem to imply an already developed opinion on what gamification aspects work best for the learning product the buyer is looking for. Let's look at why that approach may not be the best choice.

Strategy vs Implementation Details

When assessing the gamification capabilities of products, it seems many buyers like to focus on the details, or features, employed by the product. However, common gamification features like leaderboards, badges, and levels are simply implementation details of the larger gamification strategy baked into the product. And what's most important to the potential success of the product is that strategy. Without the right strategy, the features are largely useless - they're tools with no real purpose.

Not all products employ the same gamification strategy. At a high level, most strategies can be united under a single purpose - to encourage engagement with and use of the product - but there's a slew of critical details underneath this initial layer that define the whole strategy. And it's these details that will make or break a product's take on gamification.

Collaboration vs Competition

Collaboration and competition are typically the two major themes at the heart of any gamification strategy, but the two are dramatically different. Thus, when assessing products, it's best to, at least, have an idea on which theme you'd prefer.

Some products want as much competition amongst its users as possible. This is commonly seen in products that prefer quantity over quality - the more the user performs and/or the more the user interacts with the product, the higher their rank becomes. This is a common theme in video games, for example, where the creators want as many users playing the game as possible. The more you play, the more your talent develops, and the higher you'll climb in the rankings.

A more common enterprise example might be a product employed by the sales team to rank team members on the amount of sales made that quarter. Again, for a mature enterprise product, quantity is key here - more sales, and thus more revenue, is usually seen as a good thing - so at any time, a salesperson can login and see how they compare with their peers. Near the bottom? Uh-oh, better work overtime!

Would a leaderboard like this make sense if it were ranking learners on time spent learning this quarter?

Would a leaderboard like this make sense if it were ranking learners on time spent learning this quarter?

Encouraging collaboration, however, usually requires different means. In products where collaboration is key, quality trumps quantity - use the product as much as you like, but be sure what you're contributing is for the greater good. Products like this commonly employ a similar strategy where the product's user base provide the input that determines the quality of a single user's contributions and thus, their 'rank' in the site. Contrast this with the examples above where input from the user base wasn't even a factor, and you'll start to see the drastic difference between these two themes.

You don't have to look far for examples where collaboration is of critical importance - Quora, Hacker News, Reddit, and even Facebook. All of these sites employ a similar gamification strategy - users contribute something, and other users 'upvote' or 'like' those contributions, which awards the user points. In many sites, it's as simple as that. Often, you won't even find a ranking of the site's users based on these points, which may lead you to then ask "what's the significance of those points then?". Well, it's largely relative to the user. Most users simply feel good when others provide positive feedback on their contributions and don't really care if it's their first few points or if they're the top contributor in the entire site. Positive peer feedback is simply justification for the effort you gave to the site. We all like to get likes on our Facebook posts, right?

Quora doesn't even tell you how you compare to other users. They simply focus on how engaging and effective your contributions are. What you do with that info is up to you!

Quora doesn't even tell you how you compare to other users. They simply focus on how engaging and effective your contributions are. What you do with that info is up to you!

Now, back to those implementation details

I say all this to hopefully encourage you to reflect on your current gamification opinions and ensure you have the strategy in mind and not so much the details. Why? Well, there are a lot of products out there that have a poor gamification strategy but encompass almost identical implementation details. Leaderboards, levels, badges, certifications - they're implemented in a ton of products, but only a small handful get them right due to the right strategy. And if your focus is on whether a product has a leaderboard or not, you may miss the fact that the product simply implemented the wrong strategy to begin with. In this case, no tool or feature will right their wrong. 

I'm not sure where this came from, but this about sums up the "strategy" meetings where many bad gamification strategies were created...

I'm not sure where this came from, but this about sums up the "strategy" meetings where many bad gamification strategies were created...

And what of these products that perhaps have implemented the wrong strategy? What impact could that have on the product's users? Well, when a product employs a poor gamification strategy, it often has the opposite effect desired - instead of motivating use of the product, it demotivates use. Typically, the competition-based strategies are the easier ones to get wrong since a) only certain users are motivated by competition and b) they tend to use more features to power their strategy, and more is certainly not always better (points + leaderboards + badges + levels...let's do it all!). Thus, if the competition angle is either poorly done or simply over-executed on with feature after feature, the majority of users - except that small subset motivated by any and all competition - feel alienated instead of inspired. 

So in short, focus more on the underlying strategy, not so much on the features. In today's product landscape where almost every product touts some 'gamification' angle with almost identical feature sets, the devil is most certainly in the details. And being sure to assess those details could be the difference between a product that sends users away with rolled eyes vs one that has a lasting impact on your organization's users.

Reach out

If you have any questions about our expanded opinions on gamification in learning, comment below, tweet at us (@Pathgather), or reach out to us at

Happy learning!

A Beginner's Guide To Relay Mutations

This is another technical post written by our Engineering team about what we're learning at Pathgather. If you're not a developer who is familiar with React & Relay, you'll probably be a bit confused!


When I first got started using Relay a month or two ago, everything seemed easy. I was writing GraphQL fragments in my components, composing queries together using containers, and, since everything was being cached in the Relay store, I was browsing around the application crazy fast. It seemed like magic.

Then, I started experimenting with mutations and hit a brick wall. They just didn’t seem to make sense. I read all the guides, watched all the videos, but I still couldn’t seem to internalize everything well enough to actually make it work.

This guide is written for people like me who hit that “mutation brick wall”. It’s for developers who have played with Relay a bit, written some components, are pretty comfortable rendering data fetched from the server using GraphQL queries, but can’t quite figure out mutations. If that sounds like you, then read on! If instead you are brand new to Relay, you’ve got some homework to do first - the official Relay docs are a great place to start.

A Real Example: EndorseCatalogItemMutation

If you're like me, you hate reading about Todo apps. By now, you've probably looked at the TodoMVC code for Relay and still find yourself scratching your head at things like "fat queries", "mutation configs", and "optimistic responses"...

For this post, we're going to use a "real-world" example by talking about using Relay at Pathgather. I should preface this by saying that we haven’t shipped any of this code to production yet, so there’s still lots of learning for us to do, but at least this isn’t a toy example!

Some background on Pathgather first, so this all makes a bit more sense: we’re a enterprise learning platform that makes it easy for employees to find great learning content, share their favorite resources from around the web, and track their progress, all in one place. That means we spend a lot of time and energy showing users learning content: courses from online providers like Lynda, videos from sites like YouTube, blog posts shared by other users, etc. In our GraphQL schema, we call each of those things “CatalogItems”.

For this post, we’ll focus on a relatively simple example: a user has found a CatalogItem pretty valuable, so they want to "endorse" it so their peers can discover it too. This is a pretty simple interaction, of course, but we’ll layer on a bit more complexity at the end. Let’s see how we can model this specific action as a Relay mutation.

Five-Step Guide To Writing A Relay Mutation

I’ll walk you through how I think you should approach writing mutations in five easy steps. For now, let’s assume we’ve already written a React component that is happily rendering our CatalogItem on the client, which means our local graph is already storing some data in the form of a CatalogItem node (if you want some more info on how the Relay Store actually records that data, I highly recommend this great post that dives into all the details). The remote graph on the GraphQL server is much more complicated than that, of course. Here's what that might look like:

#1: Define Input Variables - i.e. "What portion of the graph are we targeting?"

For this mutation, the user is endorsing a specific CatalogItem. We need to think with graphs, not database rows, though - in a graph, you can only ever really target a node or an edge. In this case, we're definitely targeting a specific CatalogItem node, and the easiest way to find that node is to use the node's global ID (Relay makes this a requirement), so that’s what we’ll do. In other cases, you’ll end up targeting edges, or multiple nodes, or some combination of both - no matter what, though, remember you’ll be targeting a portion of the graph.

We can provide the ID of our CatalogItem node to the server via the input variables to the mutation. Relay collects these via the getVariables() method, which expects us to return an object with keys for each variable name:

getVariables() {
  return {
    id: // === "123"

With our input variables defined, that means our server should have enough information to locate the node we want to mutate in the remote graph (although someone will have to code that!). Here's where we're at:

#2: Define Name - i.e. "What should we call this operation to make it clear?"

Naming stuff is hard. You might chuckle that I even included this step, but I'm the kind of engineer that thinks naming stuff is super important, so I wanted to share some advice here. For me, the name comes second because I believe mutations should follow this basic format: <Action Name><Target Name>Mutation. Now that we've decided we're targeting an individual CatalogItem and endorsing it, the name is pretty obvious: EndorseCatalogItemMutation.

For our schema, we use snake case for everything (don't ask), so that corresponds to a mutation name of endorse_catalog_item.  We tell Relay this using the getMutation() method, which expects a GraphQL query:

getMutation() {
  return Relay.QL `mutation { endorse_catalog_item }`

Now that we've told the GraphQL server which mutation to run, it can actually make the change to the remote graph. Progress!

#3: Define Fat Query - i.e. "What portions of the graph does this mutation affect?"

Traditionally speaking, your old endpoints (things like "POST /comments") probably didn't specify all the possible things that could change as a result - how could they? Realistically, they probably return a custom document that contains the result of the operation, along with whatever else your client ended up needing at the time: the new comment, an error message, etc.

GraphQL takes a very different approach to this. Instead of the server specifying what is returned, the client needs to ask for what it wants. You can think of mutations as a write followed immediately by a read - we've already specified the write part (the name and input variables), so now we have to figure out what data needs to be read by the client. That's done via the mutation query.

However, we don't write the mutation query directly... and this is where people start to get confused. Since you're familiar with Relay already, you'll know that your components declare the data they want using GraphQL fragments. Mutation queries don't work like that. Instead of declaring exactly what data you want via a fragment, Relay tries to figure out the minimal amount of data you need in order to update your local graph. Relay then constructs the mutation query automatically by combining three sources of information together:

  1. Mutation Fat Query
  2. Mutation Configs
  3. Local Graph (Relay Store)

The first piece of information Relay needs from us is a "fat query". The fat query specifies what portion of the overall graph was affected by the mutation. You do this by writing a special kind of GraphQL query that specifies which fields may have changed, using some special syntax that Relay understands. Normally in GraphQL if you have a non-scalar field you have to specify which sub-fields you want to fetch (i.e. a field that has sub-fields, like a User field might have name, id, etc.). The fat query doesn't actually execute though, so you don't have to be that specific - if you just know that something on that field has changed in some way, you can just say "user". So the query ends up being less specific than a real query... which I guess makes it "fat"?

For example, in our EndorseCatalogItemMutation we know that we're affecting a very specific part of the graph - the CatalogItem node that was targeted by the mutation. We can specify a fat query that declares that anything about the catalog_item can change like so:

getFatQuery() {
  return Relay.QL`
    fragment on EndorseCatalogItemMutationPayload {

...or, if we want to be more specific about what could have changed, we can specify the sub-fields that will be affected (fields like endorsement_count). This limits the possible mutation queries to ensure we don't overfetch something that can't have changed:

getFatQuery() {
  return Relay.QL`
    fragment on EndorseCatalogItemMutationPayload {
      catalog_item {

We might not actually be rendering the endorsement_count anywhere, though, so fetching it would be unnecessary. This is where Relay starts showing off. Rather than construct a mutation query that fetches all the fields defined in the fat query, Relay intersects the fat query with the data your application has in the local graph to construct a query that only queries data you have fetched previously!

For example, let's say you have this catalog_item in the local graph:

catalog_item: {
  id: "123",
  is_endorsed_by_current_user: false

If we intersect the fat query with the fields defined on that catalog_item node, we get the following mutation query:

fragment on EndorseCatalogItemMutationPayload {
  catalog_item {

Notice that we don't ask for the endorsement_count here because we haven't fetched it previously. If we play around on the site some more and a component fetches the endorsement_count at some point, the local graph will be updated to:

catalog_item: {
  id: "123",
  endorsement_count: 100,
  is_endorsed_by_current_user: false

We then reapply the intersection to form a new mutation query:

fragment on EndorseCatalogItemMutationPayload {
  catalog_item {

Cool, right? Relay takes the guesswork out of constructing the mutation query since it knows you aren't currently showing the endorsement_count anywhere.

So, we've written a nice big fat query that specifies the portion of the remote graph that might have been affected by the mutation. Visually that looks something like this:

There's one thing missing here though - you might have 100 different catalog_item nodes in your local graph. How does Relay know which one to intersect the fat query against? That's where the mutation configs come in.

#4: Define Configs using FIELDS_CHANGE - i.e. "How should Relay intersect the fat query against your local graph to construct the mutation query?"

For our example mutation, the only thing missing is how to find the right node in the local graph to intersect the fat query against. Since all nodes are identifiable by their id, this is actually pretty simple to do - just configure the mutation to lookup the catalog_item node with id "123", and update the fields that may have changed. In Relay mutation terms, this is done by providing a FIELDS_CHANGE config object to the getConfigs() method:

getConfigs() {
  return [{
    type: "FIELDS_CHANGE",
    fieldIDs: {
      catalog_item: // === "123"

This is the missing piece of information that lets Relay lookup the appropriate parent node in the local graph to intersect the fat query against. It looks something like this:

If we combine the fat query, the mutation config, and the state of our local graph, Relay can now construct the mutation query that gets sent to the server:

Aside: On Mutation Configs

There are currently four* different valid mutation config types: FIELDS_CHANGE, NODE_DELETE, RANGE_ADD, and RANGE_DELETE.  Each config type takes a different set of supporting data to configure the intersection and the subsequent update of the local graph. Pretty much everyone I talk to gets totally confused by these config objects! In fact, you probably read about the different configs in the Mutations Guide, got confused, and found this blog post. Don't worry, we'll sort it out. Here's my advice for anyone getting started with Relay:




All of the other configs are simply performance improvements over FIELDS_CHANGE that construct more efficient mutation queries (i.e. request less data). You don't need to optimize for that right now! The mere fact that you are using Relay and maintaining a local graph on the client means you are already wildly more efficient than any client application that doesn't use caching (which includes your most recent project, be honest). Focus on using FIELDS_CHANGE for now - it's easy to reason about and understand, because all you need to do is provide a map between the field names on the fat query (e.g. catalog_item) and the IDs for those items in your local graph (e.g. "123").

Once I decided that the non-FIELDS_CHANGE mutation configs were just performance improvements, I found mutations made a lot more sense, and hopefully that helps you, too. Here are a couple examples to prove my point.

Adding a new comment to a post? Instead of using RANGE_ADD to only request the new comment, just refetch the entire comments collection:

getFatQuery() {
  return Relay.QL`
    fragment on AddCommentToPostPayload {
      post {
getConfigs() {
  return [{
    type: "FIELDS_CHANGE",
    fieldIDs: {

Change your mind and want to delete that comment? Don't sweat the NODE_DELETE for now, just refetch all the comments again!

getFatQuery() {
  return Relay.QL`
    fragment on DeleteCommentPayload {
      post {
getConfigs() {
  return [{
    type: "FIELDS_CHANGE",
    fieldIDs: {

Get the idea? I believe that every mutation can accurately described as a FIELDS_CHANGE mutation because, in the absolute worst case, you can just refetch the entire local graph and be guaranteed to be up to date. Of course that's a bit extreme and I don't actually recommend you do that! Although to be fair, remember that your Relay components only ask for the minimum set of data they need to render, so even in the extreme example of refetching the entire local graph, the resulting GraphQL response might be smaller than some of the REST documents your current app is downloading and only using a handful of fields from...

We don't need to go to the extreme, though. If it feels like you are requesting too much data with FIELDS_CHANGE, or if you can't reasonably express what's changing by naming the parent nodes that are affected, it's time to iterate a bit. Let's briefly touch on that.

#4.5: Define more optimal Configs - i.e. "How can Relay guess about how the actual graph changed and apply that change to the local graph?"

For certain types of mutations, we can use NODE_DELETE, RANGE_ADD, and RANGE_DELETE to "guess" what the server changed in the remote graph. By guessing, we avoid having to refetch as much data - Relay can construct a more minimal mutation query and rely on us, the developer, doing the right thing.

To decide if we can use these more optimal mutation configs, we can follow this handy flow chart:

If you understand mutations well enough to confidently answer those questions, you probably don't need my help understanding how to configure those more advanced types. I'll leave it there for now, and maybe revisit those in a future post.

#5: Define Optimistic Response, if you can - i.e. "Can I fake a server response to make Relay update the local graph immediately?"

Now that you understand what mutations are truly doing - causing a change to a portion of the server graph, then querying the server in order to update the local graph accordingly - we can finish up our mutation definition. You'll note that the client knows a lot about what's happening. It precisely defines what portion of the graph to target (via the input variables), it understands what area of the graph is affected (via the fat query), and it constructs a query to refetch that affected portion (via the configs and the local graph). Since the client knows so much about what the mutation is going to do, it stands to reason that it could simply simulate the mutation on the client and not rely on the server at all, except to permanently record the change! If we don't rely on the server at all, we can make the change instantly, right? That's what optimistic responses give us.

I find it useful to think of optimistic responses as "simulating the mutation" on the client, but it's actually not quite true. Instead of performing the mutation and transforming the local graph manually, all we actually need to do is fake a server response, and Relay will pretend that was the real response. We don't have to obsess about making a perfect response, either - Relay will only use the optimistic response temporarily until the real server response arrives, which makes a permanent change to the local graph. Very cool.

For our example mutation, it's fairly easy to write a server response like so:

getOptimisticResponse() {
  return {
    catalog_item: {
      id:, // == "123"
      endorsed_count: this.props.catalogItem.endorsed_count + 1, // === "101"
      is_endorsed_by_current_user: true

You might find it helpful to imagine optimistic responses as being the output of a "transform" on an existing fragment. It's often easy to create the response directly like in the example, but I could also have done it like this:

getOptimisticResponse() {
  let simulateEndorseCatalogItemMutation = (catalogItem) => {
    let mutatedCatalogItem = Object.assign({}, catalogItem)
    mutatedCatalogItem.endorsed_count += 1
    mutatedCatalogItem.is_endorsed_by_current_user = true
  return { 
    catalog_item: simulateEndorseCatalogItemMutation(this.props.catalogItem)

With our optimistic response defined, we can place some temporary data in the local graph while we wait for the true mutation response to arrive. Since we're updating the local graph, this also triggers a re-render of any components that were using that data, so our UI instantly updates. Here's what that looks like:

Bringing It All Together

At this point, our mutation is usable. We've defined the input variables, given our operation a name, added the fat query, specified a config, and wrote an optimistic response. We can package it all up into a class that extends Relay.Mutation and call it a day.

class EndorseCatalogItemMutation extends Relay.Mutation {
  getMutation() {
    return Relay.QL `mutation { endorse_catalog_item }`

  getVariables() {
    return {

  getFatQuery() {
    return Relay.QL `
      fragment on EndorseCatalogItemMutationPayload {
        catalog_item {

  getConfigs() {
    return [{
      type: "FIELDS_CHANGE",
      fieldIDs: {

  getOptimisticResponse() {
    return {
      catalog_item: {
        endorsed_count: this.props.catalogItem.endorsed_count + 1,
        is_endorsed_by_current_user: true

We can now use this mutation in any of our React components by invoking it's constructor with the right input variables and pass that off to Relay.Store.update(), which will send the mutation to the server, apply the optimistic update, and then wait for the mutation response before making the permanent change to the store. Success!

Refining Our Example

The example provided here is a mutation that affects a single node, so everything ends up being relatively simple. In reality, even small mutations like this one tend to affect a larger portion of the graph than I've shown here. For example, this action (endorsing a CatalogItem) definitely affects the catalog_item node, but it could also affect a total_endorsement_count field on the user who originally shared that catalog_item, or add a new edge to the current user's endorsed_catalog_items connection. In both cases, we'd need to update the fat query (to specify the other nodes that are affected) and provide additional fieldIDs to our FIELDS_CHANGE config. Hopefully by now you can imagine how that might work, but here's a theoretical example to help illustrate that:

getFatQuery() {
  return Relay.QL `
    fragment on EndorseCatalogItemMutationPayload {
      catalog_item {
      sharer {
      current_user {

getConfigs() {
  return [{
    type: "FIELDS_CHANGE",
    fieldIDs: {

As your mutations get more complex, they will start to have data dependencies of their own, so you'll also want to define fragments on your mutation to fetch that data before the mutation is even constructed (via the beauty of Relay container composition, of course!).


The key to understanding Relay mutations is to start "thinking with graphs". This was my biggest stumbling block when getting started, since I came from a REST world where mutations were always custom endpoints with custom input data and custom responses. The "Relay way" involves expressing your mutations as graph operations; if you do that, everything else starts to fall in place.

To get started, you can follow this five (and a half) step guide to design all your mutations:

#1: Define Input Variables - i.e. "What portion of the graph are we targeting?"
#2: Define Name - i.e. "What should we call this operation to make it clear?"
#3: Define Fat Query - i.e. "What portions of the graph does this mutation affect?"
#4: Define Configs using FIELDS_CHANGE - i.e. "How should Relay intersect the fat query against your local graph to construct the mutation query?"
#4.5: Define more optimal Configs - i.e. "How can Relay guess about how the actual graph changed and apply that change to the local graph?"
#5: Define Optimistic Response, if you can - i.e. "Can I fake a server response to make Relay update the local graph immediately?"

Once you become more familiar with Relay, you'll get more confident about moving outside the boundaries. You'll also start to notice some of the idiosyncrasies that don't quite make sense yet. For example, why are fat queries a client-side concern? How can you accurately describe a graph operation from the client when you don't actually know what exactly which nodes in the graph will be affected ahead of time? Not all these questions have great answers... yet. Do you think you have one? Submit a PR:

Reach Out

If you have any questions about this stuff, feel free to comment here, tweet at me (@nsamuell), drop me a question on the #relay channel on Reactiflux, or just send me a good ol' fashioned email: Special thanks to the Reactiflux folks who helped me learn this stuff and edit this post, too: @eyston, @ryancole, and @KyleAMathews!

Keep learning!




* there's also the secret "REQUIRED_CHILDREN" config you can use to add whatever fields you want to the mutation query. To find out more about this mysterious type, hunt it down in the Relay source :)

Learning Content in the Enterprise: Codecademy

This is the latest installment of our series delving into some of the coolest ways to learn online. You can view earlier installments here:


This time around we’re going to be looking at a site called Codecademy. Codecademy (not to be confused with, or pronounced like, Code Academy) is one of the most popular ways for beginners to jump into programming. Millions of people have used Codecademy to learn web development (I’m one among their number), and it gets great reviews. Let’s dig in to see why!

What can I learn there

Codecademy is, as the name suggests, all about learning to code, mainly web development. The content is definitely designed for beginners, and it is great at what it does. Head over to Codecademy to get your start on anything from HTML/CSS/Javascript and jQuery, to Ruby, Python and PHP. Curious what these things called APIs are all about? Codecademy’s got you covered.

What makes it different?

Codecademy is incredibly interactive, totally free, and it gets you started writing your first lines of code almost immediately, giving you a sense of accomplishment and possibility right off the bat.

The approach that Codecademy takes is particularly interesting in contrast to the last learning website we profiled, Treehouse. There are no videos to be had at Codecademy - instead it uses text-based instructions to guide the learner progressively through each new concept. The only way to move on is to demonstrate that you understood these new concepts by coding your answers. It’s all coding, all the time, and it’s excellent.

Unlike Treehouse, you’ll find no Mike the Frog here, no action-adventure video series to reward you for completing the latest exercise. While there is a badge-based reward system, the UI is otherwise very clean and minimalist. All distractions are removed so you can get down to business.

Despite how different the branding and learning experiences are between these two sites, one is not necessarily better than the other. They both execute very well on their respective approaches, and may appeal more or less to a given learner based on her preferred learning style.

What’s the learning experience like?

The best part about Codecademy is they get you coding immediately. But you’re rarely faced with an entirely new or confounding challenge, because their “bite-sized learning” approach makes it feel like you’ve already encountered the latest concept. Instead of 5-10 minute videos, Codecademy delivers their learning delights in 15-second nanotasks that progressively skill you up.

Take one of their newer courses called “Learn the Command Line”. One of the first tasks here is to simply type “ls” into the terminal (which is conveniently provided to you right in your web browser). Hit enter, and you’re done. Your results appear on the screen, and you’ve learned a new concept! It's incredibly easy, and that’s how they want everything to feel. Regardless of how complex a given coding task may be in the abstract, Codecademy endeavors to walk you progressively through each and every prerequisite concept so that each new task feels no more difficult or foreign than the one that came before it.

Contrast this with Treehouse, which - though I tend to enjoy it immensely - can sometimes feel like it skips certain critical concepts that make the learning process more challenging than I would prefer, such that I have to go somewhere else to fill in the missing pieces before I can return to my lesson.


Did I mention it’s free? That might be why one of their HTML courses, for example, has 4.5 million learners at the time of this writing. How do they plan to make money? I don’t know, but I’m sure it’s something that’s crossed their minds, and with so many users, they probably have options. In the meantime, let's just reap the fruits of their labor.

What is Codecademy similar to?

Later on in this series we’ll be profiling a couple other sites that have strong similarities to Codecademy, including Datacamp (a fellow Techstars alum), Codeschool, and aspects of Udacity. But Codecademy has, from what I’ve seen, the greatest breadth and depth when it comes to interactive coding. If you’re looking for a way to get started with programming but aren’t sure where to start, you will not go wrong by starting with Codecademy.

What I dug

I wrote my first lines of code on Codecademy - I dug it then and have dug it ever since.  To summarize, there are a couple main reasons for this:

  • It does a good job of stripping away as many barriers between me and my progress as possible, including the need to switch back and forth between the source of my learning (the text-based tutorial) and the place where I practice my newly-acquired knowledge (my code editor), which is placed right alongside the text tutorial.

  • The learning is delivered in such small bits that concepts which might otherwise be overwhelming or intimidating are rendered more comprehensible and manageable.

  • It makes effective use of tried and true game mechanics, including badges and progress indicators. I remember feeling quite accomplished in my early days due to accumulating my three dozen digital badges. 

What I could dig more

As a slight counterpoint to my praise of the excellent minimalist UX they’ve created, it can at times get a bit dry, and that’s where sites with a bit more flash like Treehouse or Code School shine. This, however, is typically remedied by setting it aside and coming back with fresh eyes. My only other qualm is that the content seems aimed fairly exclusively at a beginner to early-intermediate audience. One could argue, however, that this focus is why they have been able to execute well, and there are still many languages that they’ve yet to broach, even at a beginner level.

Usage in the enterprise

Since it's totally free, enterprises must be all over Codecademy, right?  Well, data is limited on this, but based on conversations we’ve had with L&D professionals, Codecademy rarely comes up. As with Treehouse, this could be due to its focus on beginners. Also, it’s unlikely that a learner who has completed every Codecademy course would be ready to contribute in a terribly meaningful way based solely upon what they’ve learned.

That said, it’s no secret that there’s a giant shortage of technical know-how in the labor force, so one could argue that companies can’t afford to overlook resources like Codecademy in the library of content they provide their workforce. Learning is a long-term investment, and I suspect it’s the forward-thinking companies willing to invest in long-term skill development that are going to be best positioned to succeed in the future.  And in the case of Codecademy, that investment happens to be $0. Seems like a pretty low-risk bet to me.

However, because Codecademy cannot be accessed through an LMS, companies lack an easy way of getting employees to specific courses within Codecademy, tracking what they’ve learned once there, and facilitating conversations between employees about the content. This is a challenge companies tend to face across all informal content, though there are solutions to be had.

Final thoughts

Have you used Codecademy before? What did you think of it? Is it in use at your organization on a company-wide level, or do any of your colleagues make use of it? Let us know in the comments!

Changelog #4

First off, Happy Holidays and a soon-to-be Happy New Year! We made a wealth of changes to round out 2015 and cannot wait to hear what you think about them! As always, please reach out to us at with any feedback or questions.

Introducing the New Learning Queue

The Learning Queue just got a lot more powerful with the ability to schedule and prioritize your learning. When queuing content to learn later, set a goal date to learn at some point in the future, and we'll include reminders as your goal date approaches in your daily Pathgather email.

A redesigned, more engaging landing page

Given the enhancements to the Learning Queue, we thought it appropriate to ensure it was front and center immediately when visiting Pathgather. So, we redesigned the landing page to clearly communicate content approaching its due date in your queue. We also converted the layout to a cleaner, more engaging two column layout (from the previous three column version).

Enhanced recommendations: suggested goal dates + analytics

We've also merged recommendations generated by peers with the new Learning Queue. Now, if you've been recommended content by another learner (e.g. a manager, coworker, etc), those recommendations show at the top of your queue with "Accept" and "Decline" options. Accepting a recommendation simply adds that content to your queue.

In addition, recommendations can also now be sent with a suggested goal date (which will be maintained if accepted and added to the learner's queue). And finally, we've implemented the ability to view metrics like which learners have accepted and completed your recommendations!

Search improvements: preview matched keywords in results

Ever wonder why certain results were being returned in your searches? Well, wonder no more! Now, when you perform a keyword search, we'll highlight the matched terms in each result so it's clear why that result was returned. We also tweaked our search algorithms to improve the accuracy of returned results.

Conversation Titles + Search

Screen Shot 2015-12-28 at 9.38.45 PM.png

When starting a conversation, we added support for a title as well as a body (just like an email). In addition, you can now search conversations in a gathering.

Github Gist Embed Support

Screen Shot 2015-12-28 at 9.43.05 PM.png

We added Github Gists to the list of content we'll automatically embed in Pathgather! Simply use a normal Github Gist URL when creating content, and your users will now be able to view the Gist directly within Pathgather.

That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

The "So What?" of Enterprise Learning

by Mansi Shah

As the Senior Manager of Customer Success here at Pathgather, I spend a lot of time working with our customers and their organizations. One topic that comes up very often is measuring the ROI of learning. There seems to be two main schools of thought in this arena - some organizations seek to understand the bottom line impact, while others take a “learning for the sake of learning” approach. At Pathgather, we believe that enterprise learning does indeed have a very real bottom line impact, but perhaps not in the way it’s traditionally understood.

Employee engagement, satisfaction, and retention

According to a 2011 PwC report titled “Millennials at work: Reshaping the workplace,” over 1 in 4 millennials expect to have six or more employers over their career and, by 2020, millennials will make up 50% of the global workforce. When asked to rank the three benefits millennials would value most from their employer, training and development came out on top (KPCB Internet Trends 2015 - see below).

Further, the cost to U.S. companies for each new hire is $4,000 (Bersin by Deloitte, Talent Acquisition Factbook 2015). The combination of these four insights is worth paying attention to.

If we know that millennials are highly mobile and an increasing plurality in the workforce, and that training and development is the #1 thing they value from employers, and that recruiting is expensive and time-consuming, shouldn’t this dictate every company’s retention strategy? Providing your employees with valuable learning opportunities could save your company thousands - perhaps millions - of dollars annually, build an attractive culture of continuous learning, and improve employee retention.

Skill development

Modern enterprise learning is sometimes viewed as hard to understand in aggregate. That’s understandable, especially in environments where learning is encouraged to be largely self-directed. But consider this example - you have an internal sales team full of relatively capable but not exceptional sales representatives and the leader of that team is scheduled to retire next summer. This challenge is probably not uncommon. Deloitte’s 2015 Human Capital Trends reports that organizations worldwide are struggling to develop an adequate leadership pipeline. Suppose Melissa, a sales representative on that team, recognizes this leadership gap and decides to pursue this opportunity to ensure she is fulfilling her greatest professional potential. Using her company’s learning platform, she discovers two TED talks on leadership, takes a month-long Coursera course on customer-centric selling, and reads three articles on negotiation over the course of six weeks. In addition, she is able to connect with mentors in other parts of her organization. Fast forward a few months, and Melissa has revealed herself as a potential candidate for the head of the department position. To us, that’s the connection between learning and development opportunities and your business’s bottom line.

Spreading the wealth

Another benefit of providing your employees with the right learning tools and resources is that you can begin to create a network effect with the increased knowledge and skills in your organization. According to the 70-20-10 model of learning and development, about 70% of workforce learning happens via on-the-job interactions with peers, teammates, and managers. This means that if some subset of your employees are taking advantage of tools to learn and track their growth in the enterprise, there’s a good chance their peers are benefiting from this second-hand. For the same reasons listed in the previous section, the more your employees are keeping their skills relevant and up-to-date, the more likely you are to be maximizing the return you get out of employing them in the first place.


So what does this all mean? It means that the latest research about the L&D industry seems to support the idea that robust learning programs actually support your organization’s bottom line - and therefore your organization’s health and future growth. We applaud those companies who take a “learning for the sake of learning” approach, but we believe it’s time to acknowledge that the bottom line is important too. To those who have always considered the bottom line, we encourage you to view your enterprise learning environment through the lens described above - the true impact of quality enterprise learning is that it keeps your employees engaged, develops critical skills within the organization, and creates a network of informal, on-the-job learning. 


Subject Matter Experts and The ‘Hit By a Bus’ Phenomenon

In my last job, there was a guy named James...and James was our go-to guy. Being in the healthcare software space, our clients loved data. Supply chain is all about ‘squeezing more juice out of the lemon’ and with the rising costs of healthcare, our hospital customers relied on our platform for some pretty significant decisions.  

That’s where James came in. James started his career at our company and because of his abilities to work with data, he quickly grew from an entry-level business analyst into a key role working with our database and record store. At least, that was his job description on paper. In reality, James was more likely responsible for keeping a multi-million dollar business afloat single-handedly. His knowledge of the information our platform collected was second to none and soon more and more groups relied on him to pull custom reports, assist with client services, or identify critical business opportunities. The phrase “I don’t know, why don’t you go ask James” was probably uttered a dozen times a day.   

This brings me to what I call the ‘hit by a bus’ phenomenon. During critical times, such as the launch of a new initiative, we used to joke, somewhat morbidly, that we hoped James wouldn’t get hit by a bus on his way home from work (of course, we always hoped he wouldn’t get hit by a bus, but during critical times, it seemed to be on our mind more often). It was a crass way of acknowledging that this one individual was so crucial to our company that if he ever decided to leave, there would be a significant impact on our ability to run our business. Sound familiar? I wouldn’t be surprised if you’re reading this right now and thinking something like ‘huh, just like Jessica in IT’.  

Unfortunately, what started out as a genuine willingness to help his company succeed had turned into a commitment that was way out of scope for James’ role, and it began affecting his engagement at work. While not a new phenomenon, it seems to be an increasing one in many organizations. Due to the continued specialization of technologies and processes, the need for domain or subject matter expertise continues to rise. And once companies get ahold of these experts, they often take them for granted, squeezing them for all they’re worth while failing to show proper gratitude. And in a growing economy where your SMEs don’t have to look too hard for other opportunities, you may end up in a situation where you need a new expert to fill the opening left by the outgoing one. Thus, the cycle restarts.

Clearly, managing your SME population has significant implications. So what are some strategies for improving this aspect of your business? As with many business challenges, I look at how a company can enhance its learning program to not only help solve the problem now, but also implement a cultural change to prevent the problem from showing up in the future.

The Influencer Culture

Social networks like LinkedIn came up with the idea of the ‘influencer’ several years back as a way to distribute an individual’s expertise on a mass scale. As opposed to managing hundreds or thousands of requests to connect, share, and network, LinkedIn provided this status as a way for these individuals to share their knowledge in a much more impactful way. This concept is one that is starting to appear in the corporate world as well. If your company is using social technology, what are the ways that you can identify SMEs and allow them to share their knowledge to the masses in a much more scalable way?  

Learner-Led Learning  

The whole reason that SMEs field so many questions is because they have credibility across the organization. In that case, is there an opportunity for the L&D team to use the SMEs knowledge to promote new learning? Your learners will be more likely to check out a video or article that’s been authored by a respected SME rather than the nameless L&D organization. Identifying SMEs and building a content message around them is a great way to capture their knowledge and increase engagement in learning.  


Employees value recognition and SMEs are no different. However, most often that recognition takes the form of increased leeway and freedom in order to keep the expert happy. While that’s a nice demonstration of trust and appreciation, recognizing your SMEs formally for the work they do can go a long way to establishing loyalty and employee satisfaction.

Unfortunately, recognition can be the hardest aspect to get right at a repeatable, scalable level. You can only so often resort to pay raises or bonuses before you’ve “played that card” or, well, run out of money. Forbes recently ran an article on creative ways to recognize your employees, and while not each way will resonate with every employee, I applaud the creative approach.

As an L&D professional, a good start to showing appreciation for your SMEs is to integrate their knowledge into your normal workflow and curriculum. Ask the SME for course recommendations in their areas of expertise, request they answer questions from newer hires in your company’s social learning platform (if you have one), or encourage them to start internal ‘meetups’ around their most valued skills. Of course, there’s no “one size fits all” approach here, so a great first step is simply getting to know your SMEs and their preferences and motivations.


When trying to help manage and grow your company’s SME population, L&D has a unique chance to not only contribute, but to also help solve a critical business need in a scalable way. SMEs, after all, are employees with valued and sought after knowledge, so it certainly makes sense for L&D to setup a learning environment that helps create new ones. However, integrating existing SMEs more closely into the culture of learning at your organization is an oft-overlooked catalyst to helping grow that population, and doing so also has the nice side effect of keeping the existing SME motivated through peer recognition and appreciation. If we had only set up such an environment for James instead of bombarding him with timely questions or calling him into urgent meetings, he might still be with us today. *

* Note: “with us” as with the company. I’m happy to say James did not get hit by a bus. He’s happy and healthy, just at a different company :(


5 Use Cases for Auto Recommendations

Informal learning and ‘user centric’ learning is all the rage these days, and it’s something we’ve certainly put a lot of focus and care in addressing here at Pathgather. However, that doesn’t mean we’ve totally abandoned the needs of the business, or ‘business centric’ learning. We understand a truly effective learning system, one that both users and companies value (our mission!), must address the needs of both the individual learner and the business. A great tool to use In Pathgather to help with the latter is auto recommendations.

Auto recommendations are an extremely flexible way to ‘push’ content to your learners at a massive scale. But that flexibility leaves a lot to the imagination, and sometimes, you just need some help to inspire your imagination. Thus, let’s go over some of the more unique ways you can use auto recommendations to help automate addressing business learning goals.

A brief auto recommendation overview

An auto recommendation is the ability to combine learning resources into a larger package to send out to targeted learners. With an auto recommendation, you can configure your learning package to go out to all current and future learners that match certain properties (e.g. "job title"), or simply recommend content to specific learners in bulk. At the moment, it’s an admin-only feature and can be found by clicking on the ‘star’ icon in the admin navigation bar.

Meet Jane

Jane, a Graphic Designer and your newest hire, has just started her first week at your wonderful company, Synergly. Let's follow Jane's career at Synergly and see how we can target her learning needs over time via five different types of auto recommendations.

Use Case #1: New Hire Onboarding

Let’s start simple. Synergly is of course a responsible, mature company, and being that, they have company-wide policies, values, and goals every hire should get familiar with. In addition, Synergly has a new initiative this year: a 3 point competency framework with a mission for every team member to become an effective leader, communicator, and time manager.

Auto recommendations allow you to package all these materials up into a single bundle that can be automatically recommended to Jane on her first day.

Step 1: Select content

Once you give your recommendation a sensible title (e.g. “Synergly’s 3 Point Competency Framework”), search for and locate your content in the content picker. When you find what you’re looking for, simply drag and drop the content into your recommendation.

Step 2: Select filters

The main power of auto recommendations lies in these user filters, thus this will be what we focus on moving forward.

Since this recommendation is focused on new hires and is recommending this year’s new “3 Point Competency Framework”, you likely only want to recommend it to your learners that are hired this year. That’s easy! Simply enter these filters:

  • User->Date Hired is greater than [start of year]
  • User->Date Hired is less than [end of year]
  • User->Deactivated is false

Pro Tip

If you aren’t setting “Date Hired” on your users via the hire_date property, change the property to Date Created, which means the recommendation will go to Pathgather user accounts created within the timeframe.

Also, feel free to select any additional filters that might make sense. For example, perhaps you want to ignore interns with a “User->Job Title does not contain intern” filter.

Finally, you can repeat this process with a Department or Gathering filter too, allowing you to setup a unique onboarding package when a user joins a specific department or gathering.

Use Case #2: Jane gets a promotion!

It’s been a year and Jane is absolutely killing it, so much so that it’s already time for a promotion. Jane’s ready to be the new Art Director of the entire New York office. Congrats Jane!

Of course, with great power comes great responsibility, and Jane needs to become intimately familiar with the responsibilities of the New York Art Director. Thankfully, Synergly is prepared and has the materials she needs to get effectively onboarded in her new role already in Pathgather.

Filters Needed

  • User->Job title equals Art Director
  • User->Location equals New York, NY
  • User->Deactivated is false

Once Pathgather detects the change in Jane’s job title, she’ll be automatically recommended the content necessary for her to be the best Art Director New York’s ever seen!

Use Case #3: Jane decides to start learning a new skill

Jane, being the awesome Art Director she now is, takes all her new hires out to lunch in their first week. One day at lunch, Mary, the newly hired Junior Designer out of NYU, tells Jane about this new software from Adobe called GraphicShop. Mary tells Jane that GraphicShop is all the rage these days, a tool that any respectable designer would know. Mary reminds Jane of herself when she started out at Synergly... a little too much in fact. Jane starts to worry that one day soon, Mary will be her boss. Well, thankfully Jane has Pathgather!

After lunch, Jane immediately logs into her Pathgather profile and adds “GraphicShop” as a skill she wants to learn. Thankfully, Synergly has a partnership with Adobe and already has access to the world’s best crash course on GraphicShop. Now, you just need to ensure anyone with an initial interest in GraphicShop is aware that this course is available.

Filters Needed

  • User Skills->Name equals GraphicShop
  • User Skills->Level equals Beginner
  • User->Deactivated is false

Once Jane adds GraphicShop to her profile, she’ll immediately be notified of this awesome crash course and she can start her new life’s mission to become better at GraphicShop than Mary. Watch out Mary!

Use Case #4: Jane gets a little too comfortable

After successfully thwarting off Mary’s attempts to take her job, Jane gets a little too complacent in her learning ambitions. After all, there’s little competition around since Mary was fired after the egg nog incident at this year’s Christmas party. Jane has stopped learning and forgets Pathgather exists. That’s ok though, Pathgather can forgive and forget, but only after one last attempt to pull Jane back in.

You, being Synergly’s learning administrator, are ready for this kind of ennui. Managers commonly get comfortable and forget they need to continuously expand their skill set. You’ve got just the right TED video to inspire these complacent managers.

Filters Needed

  • User->Date Last Seen is less than [a year ago]
  • User->Deactivated is false
  • User->Custom fields->has_reports equals true

‘Custom fields’ are a recent addition to Pathgather and allow you to add your own properties to your users. This example assumes a custom field exists titled ‘has_reports’, which is set to true when the learner is a manager.

With the above filters, managers who haven’t logged into Pathgather in the past year will be sent this inspiring TED talk. They’ll get an email informing them on this new recommendation, which will hopefully inspire Jane to remember the ambitious learner she once was. We believe in you Jane!

Use Case #5: Custom gamification + rewards

Now that your managers have found their second wind, you’d like to keep the ball rolling on their newfound attention. Come next Friday, you intend to have the managers out for dinner and refreshments at Shenanigan’s... that is, if the manager is fortunate enough to receive an invite to the hidden event page. You only want ultra-focused managers at this event, as Shenanigan’s only deserves the best you have to offer. Thus, you decide to start a friendly competition. All managers that complete at least 10 courses and accumulate 200 points in Pathgather will be invited to this extravagant affair.

Filters Needed

  • User->Score is greater than 199
  • User->Courses Completed is greater than 9
  • User->Deactivated is false
  • User->Custom fields->has_reports equals true

With this daunting challenge awaiting your managers, it’s time to see who has the hunger to earn this Shenanigan-filled outing. One person we fully expect to see there: Jane. It won’t be easy for her, but damn it, Shenanigan’s has a killer margarita she will get her hands on! (Note to Jane: Don’t go the way of Mary)

Serious Note: Don’t forget to log in to Pathgather the next Monday and pause the recommendation. You don’t want to tease your managers with more trips to Shenanigan’s if they’re just going to have to foot the bill themselves.


Hopefully this sparks some inspiration in your mind to put auto recommendations to some creative use. Your employees, whether they be the earlier, ambitious version of Jane or the more complacent later-staged one, are always hungry to learn (and hungry for some Shenanigan’s). Sometimes though, they just need a push in the right direction, and auto recommendations can be a great tool to kickstart their learning journey.

Happy learning,

The Pathgather Team

Changelog #3

Today's changelog brings some exciting changes, especially to gatherings and notifications! Test them out today and let us know what you think at

New Gathering Dashboard

We gave the gathering page a facelift, giving more significance to the overview of the gathering, its most popular resources, and the admins running it. In addition, we added support for HTML formatting to the gathering description, allowing you to add lists, links, and much more to it. Now that the description is front and center, feel free to add as much context to your gathering as you need!



New Notifications

Now that your gathering looks better, wouldn't it be nice if you could receive notifications as activity occurs within it? Well, now you can! As learners converse and share content to your gatherings, you'll receive notifications about their activity in your normal notification feed. 

Additionally, we separated your unread notifications from your read ones, allowing you to focus on only those that haven't received your attention yet. 



Requesting Access to Closed Gatherings

We've seen an uptick in closed gatherings recently and thus wanted to make it easier for your learners to join them. Any learner can now request access to your closed gathering from the new gathering dashboard. Once they do, all gathering admins will receive one of our new fancy notifications alerting them to the request and how they can accept it....or decline it, if you've got some shady folks trying to gain access to your precious gathering :)

New Daily Notification Email

With all these enhancements, we wanted to make sure any increased activity didn't start to spam your inbox with multiple notifications. Thus, we've consolidated all notification email alerts into a single email sent at most once a day. We also now include gathering notifications in this email and lastly paired that with an updated design.


That's it for this Changelog! Again, if you have any questions or feedback, we're just a short email away at

Happy learning,

The Pathgather Team

Learning Content in the Enterprise: Treehouse


Today we’ll be continuing a blog series in which we do deep dives into popular learning content vendors that organizations use, or could benefit from using more of to train and up-skill their workforce.  To catch up on the series, check out the earlier posts we did on content libraries and MOOCs.

This time around I’d like to do some deeper dives into specific learning tools that we on the team have used, and to kick things off we’re going to start with one of my personal favorites - Treehouse!  There’s a whole lot to love about Treehouse, so let’s dive right in.

What can I learn there?

Treehouse teaches you how to code.  It’s targeted primarily at taking people who know just a little bit or absolutely nothing about programming, and takes you straight through to building your own projects.  Keep at it long enough and you might even land a job somewhere as a software engineer!

Treehouse is always adding new content, which is important because web development standards and best practices are always evolving.  Topics include:

  • HTML, CSS, and Javascript

  • Ruby

  • Python

  • iOS

  • Android

  • Java

  • …and a whole lot more

What makes it different?

There are a lot of sites out there aimed at helping you learn how to code.  After all, programming is hot, it’s very in-demand skill, and the demand doesn’t show any signs of slowing down.

But not all of these sites are created equal.  What really makes Treehouse shine is the how much time and effort they’ve clearly put into making the learning experience engaging, rewarding -- even delightful.

Treehouse has a very strong brand, reflected right off the bat in their name.  Treehouses are friendly, playful, even nostalgic places.  They draw you in, they spark your imagination, they’re intimate and personal.  Their mascot Mike the Frog, their friendly UI, and their action-adventure video series (it gets progressively revealed to you as you develop your skills) all play into the brand.  This kind of vibe is a far cry from, say, the one you might get trying to learn how to code by combining through the Mozilla Developer Network.  Nothing against MDN - it’s a great and important resource - but it’s not designed to give you any warm and fuzzy feelings.

Treehouse is also heavily gamified - as most of the most successful web development training websites aimed at beginners are.  Whenever you complete a quiz, a course, or a track, they make sure that you’re congratulated and get just enough of a dopamine rush to keep you going onto the next task.  Treehouse also features a site-wide leaderboard so you can see how your progress compares to the other learners on the site, something that can be very motivating.  For example, when after finishing one of your tracks you’re able to see that you’ve learned more about CSS than 50% of users on the site, you know that you’re getting somewhere!

What’s the learning experience like?

Treehouse does a great job of segmenting what you need to learn into bite-sized chunks (videos are rarely longer than 10 minutes) without losing site of the bigger picture - it’s always clear what larger skill you’re working towards, which is important to keeping the learner motivated.

At the highest level, content is organized into  tracks, such as Front End Web Development.  The track is divided into stages (ex/ Javascript Basics), which are further divided into “achievements,” each of which is comprised of 15-30 steps, which range from videos to multiple choice quizzes to coding challenges.

That’s a lot of organizational hierarchy!  The good part about it, though, is that it enables them to take a concept as broad and complex as “Front End Web Development” and make it feel to the earner that they’re making progress every step of the way and never get overwhelmed.

As for the videos themselves, each is led by an expert instructor, and delivery (as in, their speaking speed) is nice and slow so that when you’re having trouble with a topic you won’t fall behind, or if you’re reviewing something you can just speed up the video and breeze right through it.

One of the most important qualities of the learning experience is that immediately after a bite-sized topic has been described by the instructor, you’re asked to code it up yourself.  This feature separates Treehouse from many other web development learning sites out there, and I fully expect that if Treehouse did not have coding challenges integrated into the learning experience it would not be nearly as effective as it is.

Other sites that we may cover later in this series, such as Lynda, Pluralsight, or, do not have coding challenges built into their platforms, and while that doesn’t prevent the learner from doing the work on their own, it’s not required that they do so either, which means that many will not.  Treehouse, on the other hand, actively discourages you from moving on unless you have proven you understand the topic and hand by coding it up.


Treehouse goes for $29/month at the individual level.  While this isn’t a ton of money, it’s notable that they feel they can charge given that there are a so many free options out there (such as the subject of our next installment in this series, Codecademy).  However, Treehouse is clearly offering a product that learners are lapping up - as of this writing, there were more than 300,000 learners signed up for the site.

Treehouse doesn’t indicate what their enterprise pricing is, but it is clear that their product is used at the organizational level.  According to their Treehouse for Organizations page, “hundreds of businesses, schools, and community organizations” use Treehouse.

What I dig

This whole post has kind of been about what I dig, making this section somewhat redundant, but I’ll summarize:

  • Well-organized curricula

  • Friendly and engaging UI

  • Very successful use of gamification

  • Great

What I could dig more

For all that’s great about Treehouse, there are a few things that I could quibble with:

  • Sometimes the videos can get a bit tedious and repetitive. This is more an issue with the medium than their execution of it; the issue mainly arises when you already understand whatever they’re talking about, but suspect that there may be something else in that video which you don’t yet know.  One of my next posts will be about another popular learn-how-to-code website (Codecademy) that does not use video at all, it’s just straight interactive learning, and which can be really convenient when covering through topics you’re already mostly familiar with.

  • This next point is related to things I’ve already said - Treehouse does not elicit as much coding out of you as I think they could.  Because their learning pedagogy is so heavily video-driven, this seems to leave comparatively little opportunity for actual coding, which is a shame.  One of the best things about learning to code online is that you can see the fruits of your labor and skill acquisition immediately.  It’s also the case that in order to really understand something it’s not enough to just parrot what you watched in a video, but to really put it into practice.  While Treehouse certainly gives you an opportunity to practice (again, unlike other purely video-based sites), there’s not as much as I think there could be.

Usage in the enterprise

So given this relatively rave review, Treehouse must be pretty popular with enterprises, right?  Well, I don’t have any official numbers on this, but in all the conversations I’ve had with learning professionals I don’t recall ever hearing Treehouse come up as a tool that learning organizations are taking advantage of.

There are likely a couple of reasons for this.  One is that it’s clearly not targeted at enterprises.  This is very much a consumer-focused product.  And yet, that is, of course, the main reason that it is so good, and should therefore not be a disqualifying factor for learning professionals looking content to add to their learning arsenal.

Another reason may be that it is mainly aimed at beginners.  Later on in this series I’ll touch on sites that are much more geared towards individuals who are already experienced developers.  That said, I think this is a rather poor argument for not making Treehouse available for your workforce, on two fronts.

First, there is little doubt that many of your employees, whether coding is explicitly required for their job or not, are eager to learn more about web development, but have found it to be too unapproachable.  Having a workforce that is more techno-literate can only benefit you.

Second, just because someone is an experienced developer in one language, such as Python, does not mean that they are ready to hop into a language like Ruby at an expert level.  They might pick it up much faster than a complete beginner, but they too still need to understand the basics before becoming proficient in the new language, and a beginner-focused website like Treehouse is perfectly equipped to help them do that.  Given the incredible pace at which web development continues to evolve, this will always be a need, even for the most experienced developers in your organization.

Final Thoughts

In case this isn’t already obvious, I would encourage more learning professionals to explore making use of Treehouse.  Are you using Treehouse in your organization already?  I’d love to hear about your experience - drop me a line in the comments and let me know!  Even if you aren’t explicitly using it as a learning organization, I’m willing to bet many in your workforce already are :)

But Treehouse isn’t the only great learning provider out there!  Codecademy is another excellent learning tool that takes quite a different, definitely delivers the goods.  We’ll take a look, coming up next.

Mobile Analytics