In Part 1 of Game Planning With Science, I covered the fundamentals of operations management: critical paths, bottlenecks, and Little’s Law. If you haven’t read Part 1 yet, I suggest you do. Unless you’re familiar with the equations behind those concepts, Part 2 will be a little tricky to follow. But if you’re up to speed, read on. In Part 2, I’m going to walk you through how to assemble a capacity chart. You can use capacity charts to optimize your character art pipelines and add resources where they will do the most good.
The article image for “Character Art Pipeline Capacity Charts” is from GraphicStock. Used under license.
Previously on “Game Planning With Science!”: Part 1
By Reading This Post, You Will Learn:
- A step-by-step guide for using common spreadsheet programs to make a capacity chart for art asset pipelines
- How to fill in chart with data
- How to interpret the output of the chart
- The optimal way to add additional resources to a pipeline
- Alternate formulas to use for special cases of staffing
Low Tech, High Effect: Managing Character Art Asset Creation With Simple Capacity Charts
With all the analytics and complex, data-driven decision-making in modern business, capacity charts are refreshingly simple to use. You don’t need gigs of data or complicated measurements. You just need Excel and a basic understanding of your art asset pipelines.
I’m going to apply the concept of capacity charts to a hypothetical character asset pipeline. But this can just as easily be applied to levels, items, UI, cinematic, or any other process that runs in discrete stages.
Step 1: Map Out Your Art Asset Pipeline
Break the art asset creation process into whatever number of activities makes the most sense. There’s no hard & fast rule here. Part of the art of operations management is determining the right level of granularity or abstraction. Too few steps and you lose information. Too many and your pipeline will be too complex and unwieldy to analyze.
Start with the groupings of activities that make intuitive sense. It make take some trial and error.
Map out these activities visually. Take care to accurately diagram any branching paths, both where they diverge and converge. This can be done in some dedicated project planning software (Hansoft has a great tool for this). Or you can also just use Microsoft Visio or a similar flow-chart visualizer. PowerPoint and its ilk will even work in a pinch. The above diagram was assembled in the iOS version of Keynote, of all things.
Now estimate the time each activity takes to process a single asset. If you have data to inform this estimate, great. Otherwise, just take your best informed guess or ask the relevant team members how long each process takes. The less data you have, the more you’ll need to benchmark performance over time to refine your per-activity estimates.
Step 2: Determine Units of Measurement
This step is short but critical. Decide the units you want to use, both in terms of assets and time. Is it character assets per day? Or character assets per hour? Again there’s no hard and fast rule, but picking the right units makes the math below much easier to wrangle.
For this example, I measured assets in terms of individual characters and time in terms of days. My guess is that those units of measurement will be the right ones for most art pipelines.
Step 3: List All of the Skills Necessary To Execute the Pipeline
Open a blank spreadsheet in Excel. Title Column A “Resource”. Under that column, list each of the skill sets necessary to perform all of the work you mapped out in your pipeline. It doesn’t need to be in any particular order (though keeping it in roughly the same order as your diagram will certainly help readability). You also don’t need to designate the branches in any particular order.
Just make sure you account for each and every skill set necessary to execute the pipeline, regardless of whether or not it falls on the critical path.
Why am I having you work in-terms of resources rather than activities? Because we’re making a capacity chart. Your resources ultimately determine your capacity, not the activities themselves. For instance, if your high-poly modeler is also your animator, his throughput is going to be a function of both of those activities (I’ll cover the math for those kind of special cases further down).
Step 4: List The Unit Load
Label the first row of Column B “Unit Load”. In each row, list the time each activity takes to process a single unit. So, if you decided to measure character assets per day, write down how many days it takes each resource to process a single character asset (i.e., that resource’s flow time).
If you have multiple team members with any skill set working on the same time, the unit load is the time it takes a single team member to process a unit. Again, special case calculations for this are described later in the post.
Step 5: Identify the Unit Capacity
Label the first row of Column C “Unit Capacity”. For each row, take the inverse of the value of its neighbor in Column B. The resulting quotient is the throughput of each resource per unit of time. If the high-poly modeler has a flow time of 5 days to create a high-poly model, then her throughput is 1/5 of a high-poly model per day.
Step 6: Quantify the Number of Team Members in Each Resource Pool
Label Column D “Resource Pool”. In each row, list the number of resources you have for each skill set. If you only have one low-poly character artist, enter “1”. If you have 5 animators, enter “5”.
Step 7: Calculate Your Total Throughput Per Skill Set
Label Column E “Total Characters/Day” (or whatever units you’re using). In each row, simply multiply the value of Column C by the value of Column D. The product is your combined throughput of each resource pool – the cumulative output of all of the team members with each skill set.
Resources That Influence This Post
Step 8: Identify the Pipeline’s Capacity
Label Column F “Process Capacity (Characters/Day)” (again, use change Characters/Day to the units you’re using). You only need one row/cell here, so you only need to use the top row. If you want to enhance readability, combine all of the rows below the label in this column into one cell. Either way, use Excel’s MIN function to display the lowest value in Column E.
In my chart, I have 7 rows of resources, so I would enter this formula in Cell F2: “=MIN(E3:E9)”. The value Excel displays in the cell is the lowest single capacity of any of your resource pools.
Step 9: Calculate Your Resource Utilization
Label Column G “Resource Utilization”. In each row, divide the process capacity (cell F2) by each resource pool capacity (Column E). For ease of use, format each cell of Column G to display percentages. The value in each cell is the utilization of each resource pool. In other words this is the amount of each resource pool’s bandwidth this pipeline will consume.
Any resource pool that has a resource utilization value of 100% is a bottleneck. It will be at maximum capacity and its throughput will ultimately determine the throughput of the entire pipeline. Any resource pool with less than 100% utilization has excess capacity – it has bandwidth to spare.
Step 10: Optimize
The capacity chart should make one thing abundantly clear: it’s impossible to eliminate bottlenecks in asset pipelines. Mathematically speaking, some process (or processes) will have the lowest capacity. If you add resources to increase the capacity of your bottleneck, you will eventually just make some other activity the new slow-poke.
Therefore, your goal is not to eliminate bottlenecks but to optimize around them. And the first step is to match the throughput of the bottleneck (and thus the entire pipeline) to your production needs.
Use the process capacity chart to forecast whether your estimated throughput will meet your production targets. Simply divide the number of assets you need this pipeline to produce by the value in Column F. Then add that number to the theoretical flow time of the entire pipeline (I covered theoretical flow time in Part 1).
In other words, take the lead time for the pipeline to produce a single asset and then add the number of throughput cycles necessary to produce all of the remaining assets. The result is your estimate for how long it will take to complete all of those assets. If the forecast doesn’t fit your schedule, you either need to cut scope, add resources, or figure out how to make the pipeline run faster.
If you want to add a person to the pipeline, make sure you’re adding that person where he/she will do the most good: the bottleneck.
When you’re using the capacity chart to project the impact of additional team members, add ONE resource into the bottleneck’s resource pool at a time. ONE. A single additional resource in Resource Pool A may very well make Resource Pool B the new bottleneck. At that point, adding additional resources to A will not improve the pipeline’s throughput and will only burn money.
I’ll reiterate that last point because it bears repeating: increasing the throughput of non-bottleneck activities will not increase the speed at which you deliver assets. You can only increase the pipeline’s overall throughput by increasing the throughput of the bottleneck.
Add one resource at a time to the capacity chart, re-forecast throughput over time, and then add another resource to the pool/s that will actually improve overall throughput. If multiple resource pools are all simultaneously bottlenecking the process, you will need to add a resource to each pool individually before the overall process throughput will improve.
Step 11: Determine How To Handle Excess Capacity
Just as there will always be a bottleneck, there will always be other resource pools with excess capacity. Once you’ve balanced your resources so as to achieve an optimum overall throughput (or as much as you can within your production budget), you will almost certainly have resource pools that will not be running at full capacity.
A mistake that many managers make (in games and in factories alike) is thinking that their job is to make sure everyone is 100% busy, 100% of the time. This is wasteful and counter-productive. Wasteful because you’re causing churn and cracking whips with people who can’t impact throughput. Counter-productive because, in your quest to keep non-bottleneck team members 100% busy, you may be tying them up in such a way that they can’t support the bottleneck team members.
Your job as a pipeline manager is to make sure the bottleneck is 100% busy, 100% of the time. If the bottleneck stops running at capacity, then your pipeline stops running at capacity, meaning you are behind the schedule you just calculated above.
The Risk Of Trying To Ratchet Every Activity To 100% Utilization
Remember what we learned in Part 1: your bottleneck is the maximum average rate of production your pipeline can sustain. If you crank the other activities up to 100% capacity, it does nothing to improve the pipeline’s throughput – all of that work still needs to go through the bottleneck.
Instead, focus on making sure the bottleneck is always supplied with work, and that any impediments to the bottleneck are resolved as quickly as possible.
That doesn’t mean you can’t use excess capacity productively.
Supporting the Bottleneck
The first application you should consider: can the team members with excess capacity pitch in on bottleneck activities? Even if the team members with excess capacity can only complete the bottleneck activities at half the speed of the folks dedicated to those activities, it will still improve throughput.
Again, make sure you estimate the impact of these additional activities on the current bottleneck’s throughput to see whether their presence makes a different activity the new bottleneck. Alternatively, can those team members with excess capacity pitch in with other asset pipelines?
Renting-Out Excess Capacity
Another option is one that factories use all the time: rent out your excess capacity to other studios. This approach is not without it’s caveats. There would certainly be sensitivities around intellectual property and non-compete clauses. You would have to carefully manage scheduling to avoid tying up your resources in someone else’s game when you need them working on yours. And your artists might push back if this contingency isn’t something that was part of their contract and they feel pimped out.
But, in an industry fraught with risk, and with so much of that risk tied to salary expenses, renting out excess capacity is a way to improve the ROI of your salary expenditures and diversify your income by putting your eggs in multiple baskets.
AAA publishers use this model with their internal studios: Bethesda brought Tango Gameworks in to help id Software with Doom and Ravensoft is a regular in the credits for Call of Duty games. It’s not inconceivable that this could work extramurally on a contract basis.
But, again, however you utilize excess capacity, always make sure your resource pools keep the bottleneck well fed. If, in your mission to maximize resource utilization, you tie up your under-utilized resources so that they can no longer keep the bottleneck stocked with work, you’ve just shot your schedule in the foot for the sake of keeping people busy.
Special Case Calculations
If you have a team member who wears many hats within the same pipeline
That person’s unit load is the sum of his/her activities. If your character concept artist is also your model rigger, and those activities take 3 and 1 days respectively, then his Unit Load is 3+1 = 4. This is true whether or not the team member’s various activities in the pipeline are sequential.
If you have multiple team members in the same resource pool with different unit loads
The overall unit load in the capacity chart should be the average of the individual unit loads.
If there are any differences in time on project between team members within a resource pool
For example, if one team member will be working on characters for 60% of the project, and then will transition to a different project or pipeline. Simply factor that difference into the unit load calculation. Divide that person’s unit load by 60% before calculating the average unit load across the resource pool.
The same rule applies if that person won’t jump on the pipeline until the last 60% of the schedule
CRITICAL NOTE: this calculation is subjective to when you calculate it. You need to update the percentage based on how much time is left on the schedule and what percent of that remaining schedule the person in question will be helping on the pipeline.
If you have a team member who’s time will be split between different pipelines
Similarly to the scheduling example above, determine what percentage of time he/she will spend on each pipeline, and weigh his participation accordingly. If a character modeler has a Unit Load of 5 days, but will only spend 40% of her time on the character pipeline, then her Unit Load, for the sake of the capacity chart, is 5/40% = 12.5.
Further Reading If You Enjoyed this Post
For the next post in the “Game Planning With Science”, I’ll take make a sojourn into the realm of statistics. We’ll need some background on the topic to facilitate future posts about long term planning. So click here to get your brain embiggened with video game statistics!
- Capacity charts are a simple way to understand your pipeline’s cumulative throughput and the impact of additional resources
- There will always be a bottleneck activity and there will always be excess capacity on non-bottleneck activities
- Your purpose of capacity forecasting is not to eliminate bottlenecks but to optimize them so that the overall throughput of the pipeline allows you to complete a given scope of work within a designated time frame
- Your goal is not to not to make sure every resource is 100% utilized, but to make sure the bottleneck is ALWAYS supplied with work
- When forecasting the impact of additional resources on the pipeline’s overall throughput, add just one resource at a time
- Use the capacity chart to forecast how much excess capacity you’ll have across which resource pools, and then look for ways to productively use that excess capacity
- Special care needs to be taken when calculating unit loads when there are disparities within any given resource pool