Activity Codes, Filters, and Layouts That People Use
A schedule with 800 activities is unreadable as one long list. Activity codes, filters, and saved layouts are what turn it into a dozen different schedules, each one the right size for the person looking at it. Most schedules either have no codes at all or have thirty code types that nobody maintains. This post covers which codes are worth setting up, how to define them so they stay clean, and which layouts actually get used.
What activity codes are
An activity code is a tag you attach to activities. Each code type has a defined list of values. For example, a code type called Responsibility might have values like "GC Self-Perform," "Steel Sub," "Electrical Sub," "Owner," and "Architect." Every activity gets exactly one value.
Codes let you group, filter, sort, and color activities by something other than the WBS. The WBS gives you one hierarchy. Codes give you as many cross-cutting views as you need.
| WBS (one hierarchy) | Codes (many cross-cuts) |
|---|---|
| Structure > Level 3 > Steel Erection, L3 | Responsibility: Steel Sub |
| Area: Level 3 | |
| Phase: Structure | |
| Bid Package: BP-05 Structural Steel |
If your WBS is organized by phase and location, which is usually best for building work, codes are how you also get a view by trade. See How to Build a WBS for a Construction Schedule for the reasoning.
The codes worth having
On most building jobs, four or five code types cover nearly every view anyone asks for.
- Responsibility. Who does the work. The single most useful code. Every sub wants to see their activities, and every meeting eventually becomes "what's the electrician doing next week."
- Area or location. Floor, zone, building, or room range. Even if the WBS is by area, a separate area code lets you filter across phases: all Level 3 work, structure through finishes.
- Phase. Preconstruction, sitework, structure, envelope, interiors, systems, closeout. Useful for summary layouts when the WBS is organized some other way.
- Activity type. Construction, procurement, submittal, inspection, milestone, owner activity. Lets you pull every submittal, or every inspection, in one view.
- Bid package or cost code. Optional, but useful for tying the schedule to the estimate and the schedule of values. See Resource Loading and Cost Loading: Do You Need Them?.
Codes some jobs need, and many do not:
- Critical or key handoff flag, for activities the team has agreed to watch weekly.
- Owner-required reporting categories, if the contract specifies them.
- Change order or fragnet ID, to tag activities added for a change. Useful in delay analysis, when you need to show exactly which activities a change added.
Resist the urge to add more. Every code type is something someone has to assign on every new activity. Code types with half their activities blank are worse than no code, because filters on them silently drop work.
Defining code values so they stay clean
A few rules prevent most of the mess:
- Use a fixed list, not free text. "Electrical," "Elec," and "Electrical Sub" are three different values to a filter. Define the list once.
- Use the company name or the trade, not both. "Smith Electric" is helpful until Smith gets replaced by another electrical sub halfway through the job. Many schedulers use the trade as the value and keep the company name in the description, or maintain the code as trade and update its description when the sub changes.
- Every activity gets a value for every core code. Make "Unassigned" a valid value if you must, and filter for it during every update to clean it up.
- Keep values short. They show up in column headers and group bands. "L3" beats "Third Floor, North and South Wings."
- Sort order matters. Give area values a sort order that matches how the building is read (Site, L1, L2, L3, Roof), not alphabetical (L1, L2, L3, Roof, Site).
If your organization runs many projects, maintain the standard code types at the company level and reuse them. That way every schedule has the same Responsibility and Activity Type codes, and reports across projects line up. In schedule.construction this is what the EPS/OBS and activity code libraries are for.
Filters
A filter is a saved rule that shows only matching activities. The useful ones are short, and they combine a code with a date window or a status.
Filters that get used on almost every job:
| Filter | Rule | Who uses it |
|---|---|---|
| My work, next 3 weeks | Responsibility = [sub] AND start within 21 days of data date | Each sub, weekly |
| Critical path | Total float <= 0 | PM, scheduler, owner |
| Near critical | Total float between 1 and 10 days | Scheduler |
| In progress | Started AND not finished | Update meetings |
| Starting this month | Not started AND early start within this month | Superintendent |
| Submittals and procurement open | Activity type = Submittal or Procurement AND not finished | Project engineer |
| Inspections, next 30 days | Activity type = Inspection AND start within 30 days | Superintendent |
| Unassigned codes | Responsibility = Unassigned | Scheduler, before every update |
The near-critical threshold depends on the job and the update cycle. Ten working days is a common starting point on a monthly-updated schedule, but pick a number that makes sense for you and use it consistently. Near-Critical Paths and Why They Deserve Attention covers why that band is worth watching.
Date-based filters should be relative to the data date, not fixed dates. "Start within 21 days of data date" keeps working every week. "Start before November 15" breaks next month.
Layouts
A layout is a saved combination of filter, grouping, sorting, columns, and Gantt settings. Filters decide which activities. Layouts decide how they look.
Five layouts cover most needs:
- Scheduler working layout. All activities, grouped by WBS, with columns for ID, name, original and remaining duration, start, finish, total float, predecessors, successors, and calendar. Dense. Not for printing.
- Superintendent lookahead. Filter for the next three to six weeks, grouped by area, columns for ID, name, responsibility, start, finish, remaining duration. Big enough font to read on a trailer wall.
- Sub view. Filter by responsibility, grouped by area, with predecessor columns so the sub can see what has to happen before they start. This is the one that gets the most use if subs can actually open it.
- Owner summary. Milestones plus WBS summary bars, collapsed to level 2, with baseline bars shown under current bars. One or two pages.
- Critical path. Total float at or below zero, sorted by early start, with the driving predecessor visible. For explaining the schedule in a meeting.
A few column choices make layouts more useful:
- Show total float on every working layout. It is the first thing to look at when anything moves.
- Show the baseline finish and a variance column on owner and management layouts.
- Show predecessors on sub and superintendent layouts. "Why can't I start?" is the most common question, and the answer is right there.
- Hide what nobody uses. Activity percent complete, cost, and resource columns clutter field layouts.
Getting people to use them
The best set of codes and layouts in the world does nothing if the only person who can open them is the scheduler. Distribution matters as much as design.
- Name layouts for the person, not the setting. "Superintendent 3-Week" beats "Filter_v2_grouped_area."
- Send the view people need, on a schedule. A PDF of the sub view, sent weekly, gets read more than a link to the full schedule.
- Let people open the schedule themselves where possible. Read-only access for owners and subs, filtered to their part, removes the scheduler as a bottleneck. Sharing Schedules with Owners and Subcontractors covers options.
- Walk through a layout once in a meeting. Five minutes showing the superintendent how to find their week saves dozens of "can you print me" requests.
Key takeaways
- Four or five code types (responsibility, area, phase, activity type, maybe cost) cover most views on a building job.
- Use fixed value lists, assign every core code on every activity, and check for blanks at every update.
- Build filters relative to the data date so they keep working.
- Make a small set of layouts named for the people who use them: scheduler, superintendent, sub, owner, critical path.
- Distribute views on a regular schedule. A layout nobody sees does not exist.