STEM newsletter

What’s new in STEM 7.2a

28 January 2010

STEM development operates on an annual to biannual release cycle, but we always listen carefully to feedback and occasional bug reports from customers, and will take every opportunity to push out improved functionality mid-cycle when it can be done without confusing users or introducing potential incompatibilities between users who are nominally on the same version.

In the event of a critical failure, we always aim to have a patch with customers within days or even hours of a fault being reported, but more time is required for more extensive testing and documentation before making such a fix more generally available. The same logic applies to mid-term enhancements, where we may explore new functionality with one or more customers before finalising the specification and putting it on general release.

Recent maintenance releases have been timed to coincide with an announcement in the STEM quarterly newsletter, and the latest STEM 7.2a release is a good example, combining several minor bug fixes for the original STEM 7.2 with a new Expired Units result described in detail below.

Distinguishing between initial and replacement capital expenditure

Imagine a context where you are modelling the roll-out of a new, national network over a ten year period, the elapsed time between starting in the most populous urban areas and reaching the most remote rural locations, subject to constraints of labour or capital commitment. Whereas in a shorter project, you could most likely regard all expenditure as new build; on this longer timescale, it is likely that some equipment installed early on will already need to be replaced before the project is complete. Therefore the total cumulative capex may misrepresent and overstate the initial budget for the development.

In a STEM model, resources are installed to meet incremental demand. That is to say, for each calculation period, STEM compares the existing capacity allocated to a service with the current demand from that service, and installs new equipment (or takes up existing slack capacity) if there is a shortfall. So incremental units may arise either from new demand, or from replacement of old equipment, or both. Historically, STEM made no distinction between these cases, and so it was not possible to get any separation between initial and replacement capex, except by running a scenario where all lifetimes were artificially set in excess of the run period to avoid replacement altogether.

STEM 7.2a introduces a new Expired Units result, from which a Replacement Proportion is inferred for Incremental Units, and which is then used to split capital expenditure and associated depreciation between initial and replacement equipment. The following example provides a simple illustration.

Consider a project requiring the roll-out of 1000 multi-service access nodes over a ten-year period. STEM has always reported the Incremental Units each year, as well as the total Installed Units. Now we have added an Expired Units result which unambiguously shows the number of units which have reached the end of their physical life (and may need to be replaced) in a given period.

Expired Units result

New resource ‘Expired Units’ result

The slightly tenuous part is working out what proportion (if any) of those expired units is being replaced. If demand is flat or increasing, then an easy assumption is that all expired units are replaced; while if demand ceases altogether, then there are no incremental units and evidently none are replaced. But what if demand is reducing? Not all expired units may need to be replaced, but we make the assumption that, if there are any incremental units, then the lesser of incremental and expired units can be regarded as replacement.

So if there were three incremental units and two expired units, then we would regard two of the three new units as replacements. Conversely, if there were two incremental units and three expired units, then we would regard both new units as replacements.

We believe this is a reasonable assumption in all but the obscure case of a new service re-using existing equipment as a former service wanes, when you could question whether a new box installed by the new service is really a replacement for an old box used by the declining service. However, in the case of a new build, our definition provides an effective way to identify a Replacement Proportion of Incremental Units in any calculation period:

replProp = if (incrUnits = 0, 0, if (incrUnits <= expUnits, 1, expUnits / incrUnits))

Alternatively, if you accept that replUnits = min (incrUnits, expUnits), then it is easy to see that replProp = replUnits / incrUnits = min (1, expUnits / incrUnits) except when incrUnits = 0. In our specific example, demand is always increasing, so Incremental Units consistently exceeds Expired Units and we get the following results for the Replacement Proportion.

Replacement Proportion result 

Assumed ‘Replacement Proportion’ result

Based on this Replacement Proportion, STEM generates a Replacement Capital Expenditure result, and an Initial Capital Expenditure complement. And by remembering this proportion for each new installed age of a resource, STEM can also generate Initial and Replacement Depreciation results. (These financial outputs are also available for the network as a whole.)

Replacement capex Replacement depreciation

Initial and replacement capex/depreciation results

You can see from the symmetrical pattern of the initial capex above that this mechanism makes a faithful classification of the split between what may regarded as ‘growth’ and ‘replacement’.

Minor corrections

STEM 7.2a also includes three trivial fixes to what may be regarded as accidental flaws in the original STEM 7.2, as well as one tiny refinement to the StemGetResult() function for Excel. (These release notes can also be found in the Installation Files area of the STEM Support website.)

ID Description
Add-in flag to suppress StemGetResult() status info

Issue: A customer wished to populate a table of service allocated-cost results for service / resource pairs where not all pairs generate results (because they may be unrelated in the model). However, they preferred not to see the error message, ‘Element not found’, in this case.

Action: We have added a ‘Suppress Errors’ flag to the Stem Toolbar Definitions sheet. When this is set to FALSE (the default), the STEM add-in reports errors as usual. However, if it is set to TRUE, then the StemGetResult() function returns an array of empty variants (instead of an error message) from which Excel will set a zero value into each affected cell.

STEM 7.2 doesn't recognise my dongle

Issue: The original STEM 7.2 build did not correctly recognise a STEM 7.2 hardware dongle.

Action: Fixed in STEM 7.2a.

How to distinguish between replacement capex and new capex

Issue: A customer wished to differentiate between initial capex and replacement capex in a modelling context where some equipment installed early on was being replaced before the project was complete.

Action: STEM 7.2a introduces a new Expired Units result, from which a Replacement Proportion is inferred for Incremental Units, and which is then used to split capital expenditure and associated depreciation between initial and replacement equipment.

Error running a model from Excel

Issue: Attempting to run a model from Excel would result in the message, “Variable not defined – pcMsgTitle.”

Action: Fixed in STEM 7.2a.

2D Selection checkbox not moved when dialog resized

Issue: If you draw a graph for a service allocated-cost result, then the initial choose elements to draw dialog (for services) includes a 2D Selection checkbox which controls how the secondary selection of resources is presented. This checkbox was not being moved with the other controls if the dialog was resized.

Action: Fixed in STEM 7.2a.


The STEM 7.2a maintenance release was issued on 27 January 2010 and is now available for customers with a current subscription to download from our website. STEM 7.2a is fully compatible with models created in the original 7.2 release.

© Implied Logic Limited