National Roofing Client

The importance of looking at the entirety of a workflow using service blueprints.

Candidate Table Fixed

Problem Statement

I was asked to conduct a UX audit for a national roofing company’s internal leed tracking application.

The company has a full-time developer and a junior content manager that built and managed the application for the last 3 years.


  1. Create/Document the customer’s journey from first contact to job completion utilizing a service blueprint.
  2. Identify and triage any issues identified
  3. Provide guidance/ Best practices for correcting any identified issues.
Identifying key user roles

Canvas Team

Responsible for:

  • Appointments Booked
  • Candidates to Sold

Roofing Advisors

Responsible for:

  • Closing Goal %
  • Appointments Ran
  • Candidates to Approval
  • Sales Amount

Field Manager

Responsible for:

  • Closed Jobs
  • Reviews

User Interviews

Active Leads Table: (recreation w/ randomly generated data)
6 Team Members Interviewed

Active Table with User Comments

Users tend to believe that software ‘works as intended’ when they are not properly given the lay of the land. Of the 6 Canvas team members, I interviewed each one assumed the behavior they were seeing in the Appt Date column was ‘working as intended and did not know to report, or follow up with it.

Candidate Leads Table: (recreation w/ randomly generated data)
3 Team Members Interviewed

Candidate Table with User Comments

It was clear of the few Roofing Advisors I interviewed each had a different priority when arriving at this table. It’s not a difficult task to accommodate, as a matter of fact, both of the tables in this process could benefit from some basic ‘order’. Most likely by Last Name, First and then allow users like Aaron to sort by Appointment date.

Initial Problem Discovery

Inconsistent Nomenclature

The Canvas Team members have access to the “Active” table. The table header row is seen here.

Active Table Header

The Roofing Advisors have access to the “Candidate” table. The table header row is seen here.

Candidate Table Header

While not a critical issue the inconsistent nomenclature can cause confusion and it certainly impacts the user’s overall cognitive load.

Initial Problem Discovery

Understanding The Existing Worklfow

Active Leads Table: (recreation w/ randomly generated data)

Active Leed Table- Original

Primary User: Canvas team members

Canvas team members utilize the Active leads table to contact and schedule appointments with the Roofing Advisor members.

Once a lead has an appointment on the calendar, they become a ‘Candidate’ and are moved to the Candidate table.

The key issues discovered highlighted the dangers of ‘banner blindness’ on tables when data columns are always left empty. Users learn to ‘skip’ or not read those data points.

Key Issues:

  • No discernable order.
  • Name is First, Last but in no order
  • Company Name – 12 users couldn’t identify this column and have never seen it filled.
  • Appt Date. CRITICAL ISSUE identified
  • Account Rep. – Is only assigned after the appointment is scheduled
  • Date Created – the red pill with ‘2days’ in it highlights that it’s been 2 days since this listing was created. This is NOT highlighted in ‘Last communication’.
  • ‘Add Appointment or ‘Close’ – Canvas members never close a lead.

Candidate Table: (recreation w/ randomly generated data)

Candidate Table

Primary User: Roofing Advisors

Roofing Advisor team members utilize the Candidate table to contact leads and close the deals for new roofing.

Active leads are moved here when they have an appointment scheduled on the calendar.

In this instance, the Roofing Advisors only see the Candidate table and had become accustomed to clicking the Job Name to get the Appointment details like time.

Key Issues:

  • Introduces Job #
  • Name is listed as Job Name
  • Job Name is displayed Last Name, First Name, and yet again, no discernable order.
  • No Candidate email address
  • Location – is missing state and zipcode
  • Status – ALL Candidates on this table are ‘open’ status.
  • Assigned To is Account Rep. on Active leads –
  • Assigned to Is only assigned after the appointment is scheduled
  • Appointment Date is missing the time
We have a problem

If Active leads become candidates; what’s going on here?

Active Lead Table: (recreation w/ randomly generated data)

Active Leads Table - Appointment Detail

Critical Issue: 

During the audit, I found a few of these. After some digging with the developer, we were able to find that almost 15% of ALL Leads were NOT moving to the Candidate table. 

The Canvas team member would click to make an appointment and just assume it was moved to the Candidate table. With no access to that table, there was no way for the Canvas team member to verify. 

Worse yet, these ‘strays’ were just falling off and lost as possible customers. 

Estimated Lost Revenue:

– $2.3 Million


Ensuring both user groups have a cohesive and consistent experience

Active Lead Table Solution (recreation w/ randomly generated data)

Active Leads Table Fixed

Primary User: Canvas Team

The Canvas team members and Roofing Advisors now have a nearly identical table. 

For Canvas team members there is no Job # or Account Rep. assigned but all the other information is identical to the Roofing Advisor.

Key Fixes

  • Standardized Nomenclature
  • Right-aligned numerical data for ease of use
  • Removed unnecessary data columns
  • Provide eMail shortcut (link)
  • Populated data columns that are not relevant to the Canvas team.
  • Combined the Appointment Time / Add Appointment columns for 1 place to look

Candidate Table Solution (recreation w/ randomly generated data)

Candidate Table Fixed

Primary User: Roof Advisors

The Roofing Advisors now have a clearer picture of each candidate including the time of their appointment. 


Key Fixes

  • Standardized Nomenclature
  • Right-aligned numerical data for ease of use
  • Provide full candidate address with state and zip code
  • Provide email
  • Provide eMail shortcut (link)
  • Provide Appointment date, time and ability to edit



loss between Active and Candidate (3 months out)



  • Make the columns sortable with a default to users’ preference:
    • last name, first name
    • last communication
    • Appointment date
  • Allow for a type-ahead filter of key columns