Maximizing Trade Efficiency by Reviewing Trade Stacking (Evaluate Number of Concurrent Activities by Trade)
Challenge:
In order to compress a schedule in the preconstruction or execution phase, it is common practice to look for areas where concurrent activities can be completed at the same time. However, this can result in unrealistic trade stacking where:
- Too many trades are working at the same time
- There are too many activities by the same trade working at the same time
Solution:
In this article, you will learn how to evaluate the number of concurrent activities by trade for your schedule. Begin by tagging each activity in your schedule with a specific Trade Code. If a Trade Code is not readily available, consider using the lowest-level Work Breakdown Structure (WBS) name as a proxy. This step ensures that every task is associated with its relevant trade or close counterpart.
The end result is a labor resource histogram (labor utilization graph) that depicts the number of trades working concurrently over time for your schedule.
How to Impact the Bottom Line:
- Reduce Indirect Costs: Identify opportunities to accelerate your schedule and reduce indirect costs. Look for areas where additional trade stacking can shorten the overall project duration
- Protect Your Margins: Conversely, catch areas of overaggressive scheduling caused by excessive trade stacking. Balance is key. This will help reduce the risk of unforeseen delays and its associated costs.
Example:
Here is a simple example schedule with 8 tasks tagged with 3 unique Trade Codes. At the peak, there are 5 resources utilized (3 Trade Concretes, 1 Trade MEP, and 1 Trade Metals). Assuming there are 4 people per activity, we can assume the workforce peaks at 20 people in this schedule.
How ALICE is Different from Other Tools:
ALICE is a dynamic and constraint-driven optimization engine. ALICE excels at adhering to all constraints while optimizing for overall duration and resource leveling by default. In other legacy tools, resource overallocation is a known limitation, which means more resources are used than are available, and users have to manually adjust the schedule when this occurs. In ALICE, once labor resources are assigned in your schedule (following the steps below), you can set a maximum resource count, and ALICE will automatically respect this constraint along with all other variables and constraints.
Example Use Case:
As a Commercial Contractor, I create schedules without any resources assigned or loaded 99% of the time. However, understanding the onsite resource requirements throughout the project is crucial because it allows me to:
- Estimate Workforce Needs: Gauge the approximate number of personnel required onsite.
- Identify Concurrent Trades: Determine the number of trades operating simultaneously.
- Optimize Work Stacking: Identify opportunities to efficiently stack tasks for specific trades.
- Assess Schedule Feasibility: Evaluate if the schedule is overly ambitious in terms of trade stacking.
Note: It is often said that General Contractors (GCs) do not care about labor resources because it is not their responsibility. It is the responsibility of the Subcontractors (Trade Partners) to manage them. Here are a few reasons why this is not true:
- Risk Management: Labor shortages or mismanagement can lead to delays and increased risks, which is the GC’s responsibility to mitigate.
- Quality Control: GCs need to ensure that Subcontractors have enough skilled workers to maintain high quality standards.
- Project Scheduling: Understanding labor resources is crucial for creating realistic schedules and ensuring timely project completion.
How to Create a Labor Resource Histogram in ALICE (for Schedules without Resources Assigned and Loaded):
It is not necessary to start with a schedule that is resource loaded. We recommend resource tagging to level 3. Read more here about the different levels of resource assignments. Here are the steps to create a labor resource histogram for your schedule in ALICE if there are no resources assigned.
Note: The terms “resource assign” and “resource tag” will be used interchangeably.
Step 0: Existing schedule:
Check your existing schedule to see if there are any resources assigned to activities. A quick way to check is to group your schedule by “Crews”.
If your schedule already has resources assigned, skip to Step 2.
If your schedule does not have resources assigned, continue to Step 1.
Step 1: Tag labor resources to all activities in your schedule.
Check to see if your schedule has a custom property, or user defined fields (UDFs), in your schedule with Trade Codes. If yes, go to Step 1A. If not, go to Step 1B.
Step 1A: Resource tag by Trade Code custom property
Follow step 1A.1 to make edits in bulk using Excel export/import or follow step 1A.2 to make edits directly in-app on the Plan page.
Step 1A.1: Mass Edit Using Excel Export/Import:
- Export your schedule to .csv from the Plan page. Make the following edits in the .csv file.
- In the “Tasks” tab, highlight column A (Id*).
- In the “Tasks” tab, highlight the column with the custom property with the Trade Codes information.
- Copy these two highlighted columns. Paste them in the first two columns of the “Task Crews” tab (Task Id* and Alice Crew Name*).
- In the “Task Crews” tab, fill out the rest of the columns as follows:
- Is Primary*: FALSE
- Required Amount: keep blank (to indicate unlimited amounts available)
- Required Min.: 1
- Required Max.: 1
- In the “Crews” tab, fill in the list of all unique Trade Codes from the “Task Crews” tab in Column A (Name*).
- Recommend to generate this list of unique Trade Codes by creating a pivot table from the “Task Crews” tab (column B).
- In the “Crews” tab, fill out the rest of the columns as follows:
- Name Snake Case - read only: keep blank
- Available quantity: keep blank (to indicate unlimited amounts available)
- Default quantity: 1
- Persons per crew: 1
- Cost per person per hr - read only: keep blank
- Cost per crew per hr*: 0
- Calendar*: Recommend putting in the standard default calendar name here
- Idle Cost Enabled*: Recommend defaulting to TRUE to start
- External id - read only: keep blank
- Save the .csv file. Import this .csv file back to the Plan page.
Step 1A.2: Editing in-app (directly on the Plan page):
- Create each Trade Code as a labor resource:
- Go to the blue “Resources” icon on the top right hand side.
- Select “Create Crew”.
- For each new crew, fill out the information requested as follows:
- Max. Units/ Time: keep blank (to indicate unlimited amounts available)
- Default Units/ Time: 1
- # Prs./Crew: 1
- $/Crew/Hr: 0
- Calendar: Recommend putting in the standard default calendar name here
- Idle Cost: toggle to keep ON
- Repeat for all Trade Codes.
- Go to Filter by Custom Properties.
- Look for the custom property where the Trade Codes are located.
- Filter by one of the Trade Codes.
- In the Gantt view, select the highest level WBS.
- Select the “Assign crew, material, or equipment” icon to bulk assign the selected activities to the Trade Code labor resource that was created in #1.
- Repeat #2 to 6 for all other Trade Codes.
Step 1B: Resource tag by Work Breakdown Structure (WBS)
Follow step 1B.1 to make edits in bulk using Excel export/import or follow step 1B.2 to make edits directly in-app on the Plan page.
Step 1B.1: Mass Edit Using Excel Export/Import:
- Export your schedule to .csv from the Plan page. Make the following edits in the .csv file.
- In the “Tasks” tab, look for column with header called “Alice WBS Id*”
- Create a new column to the right of “Alice WBS Id*” column. Highlight this column. Add the column header “WBS Names” to this column.
- Pull in the WBS name descriptions into this new column.
- Recommend to use Excel vlookup function to get this information from the “WBS” tab.
- Copy the “WBS Names” column and paste in the same column (use the “paste as values” function to remove all formulas in the cells)
- This is effectively the name of the labor resource for each activity.
- In the “Tasks” tab, highlight column A (Id*).
- Copy these two highlighted columns. Paste them in the first two columns of the “Task Crews” tab (Task Id* and Alice Crew Name*).
- In the “Task Crews” tab, fill out the rest of the columns as follows:
- Is Primary*: FALSE
- Required Amount: keep blank (to indicate unlimited amounts available)
- Required Min.: 1
- Required Max.: 1
- In the “Crews” tab, fill in the list of all unique “WBS Names” from the “Task Crews” tab in Column A (Name*).
- Recommend to generate this list of unique “WBS Names” by creating a pivot table from the “Task Crews” tab (column B).
- In the “Crews” tab, fill out the rest of the columns as follows:
- Name Snake Case - read only: keep blank
- Available quantity: keep blank (to indicate unlimited amounts available)
- Default quantity: 1
- Persons per crew: 1
- Cost per person per hr - read only: keep blank
- Cost per crew per hr*: 0
- Calendar*: Recommend putting in the standard default calendar name here
- Idle Cost Enabled*: Recommend defaulting to TRUE to start
- External id - read only: keep blank
- In the “Tasks” tab, delete the highlighted column called “WBS Names”. This column is no longer needed.
- Save the .csv file. Import this .csv file back to the Plan page.
Step 1B.2: Editing in-app (directly on the Plan page):
- Create each lowest level WBS Name as a labor resource:
- Go to the blue “Resources” icon on the top right hand side.
- Select “Create Crew”.
- For each new crew, fill out the information requested as follows:
- Max. Units/ Time: keep blank (to indicate unlimited amounts available)
- Default Units/ Time: 1
- # Prs./Crew: 1
- $/Crew/Hr: 0
- Calendar: Recommend putting in the standard default calendar name here
- Idle Cost: toggle to keep ON
- Repeat for all lowest level WBS Names.
- In the Gantt view, group by WBS view. From the top of the schedule, go to the lowest level WBS section. Select all activities within that WBS section.
- Select “Assign crew, material, or equipment” icon to bulk assign the selected activities to the WBS Name labor resource that was created in #1.
- Repeat #2 and #3 for all other WBS sections.
Step 2:
Hit the “Re-Schedule” button on the Plan page to capture all the changes made in Step 1.
Step 3:
Go to the Explore page and run a new scenario called “Resource Histogram by Trade” (if you followed Step 1A) or “Resource Histogram by WBS” (if you followed Step 1B). Ensure “maximum resource availability” is selected on the “Crews” tab.
Step 4:
A new solution/dot is created on the Explore page for this scenario run. Select the dot to open the new schedule. In the Analytics page, the resource histogram is now available. Use the filter functionality to further review the resource histogram by Trade Codes or by WBS Names.
How to Create a Labor Resource Histogram in ALICE (for Schedules with Resources Assigned and Loaded):
Since the schedule that you are working with already has resources assigned and loaded to all activities, any new solutions created in ALICE will automatically have this labor resource information. In the Analyze page, under the Analytics section, each schedule solution will have its own unique labor resource histogram. Read more about crew utilization graphs here.
How to Create a Workforce Utilization Graph:
Leverage the same workflow as above to craft a rough workforce utilization graph based on informed estimates for the number of people per activity. Instead of defaulting to Persons per Crew = 1, assign a unique number for each Trade Code or WBS Name.
Tip: A practical assumption is to set Persons per Crew = 4 for all Trade Codes or WBS Names.