Financial Modelling Code
Financial Modelling Code
Financial Modelling Code
IT FACULT Y
Contents
FOREWORD 1
INTRODUCTION 2
MODEL DEFINITION AND PURPOSE 3
Understand the scope of a financial model 3
Determine the goals of your model 3
LAYOUT AND STRUCTURE 4
Plan and assess the workbook layout 4
Make navigation simple 5
Make inputs easy to find 5
USER INTERFACE AND TRANSPARENCY 6
Include user guidance 6
Avoid duplication 6
Identify and separate forecast or dummy data 7
Don’t hide things 7
CONSISTENCY 8
Use consistent formulas 8
Use consistent placement 9
CLARITY 10
Use clear formatting 10
ACKNOWLEDGEMENTS
Stephen Aldridge – Numeritas
Use clear and meaningful labels 11
Levi Bailey – White Box Financial
Use clear units 11 Rob Bayliss – Grant Thornton
Use a clear sign convention 12 Tom Brichieri-Colombi – Mazars
David Colver – Operis
Use easily understandable worksheet names 12
Roland Brook – Smith & Williamson
Use clear range names where appropriate 13 Alexander Carse – John Laing
Document VBA code clearly 13 Mike Copeman – Wolters Kluwer
Daniel Emkes – Harrow School
ERROR REDUCTION 14
Glen Feechan – needaspreadsheet.com
Review and test your models 14 Joanna Hayes – Amberside Advisors
© ICAEW 2018.
All rights reserved. If you want to reproduce or redistribute any of the material in this publication, you should first get ICAEW’s permission in
writing. ICAEW will not be liable for any reliance you place on the information in this publication. You should seek independent advice.
2
FINANCIAL MODELLING CODE
Foreword
Michael Izza
Chief Executive Officer, ICAEW
1
FINANCIAL MODELLING CODE
Introduction
Spreadsheet financial models are ubiquitous in the business world, and decisions of all sizes
are made on the basis of their results. However, many spreadsheet users are self-taught or
have picked up bad habits along the way. Improper practice, such as a lack of review and
oversight, impacts the world economy; thus, we have created this guidance to support
best practice in the sector. Following good practice should result in a model that is robust,
understandable and less likely to contain errors.
Building on our earlier guide, the Twenty principles for good spreadsheet practice, this
Financial modelling code sets out our guidance on what we see as the universal tenets of best
practice in the field.
In preparing this Code, we compared and analysed seven organisations’ modelling standards
or methodologies, and took input from over a dozen modelling and professional services
organisations. This document describes the principles that underpin successful financial
modelling and which were agreed upon after much discussion and debate.
A list of contributors to the Code can be found at icaew.com/financialmodelling.
The Code is not intended to be a tick-box compliance tool; rather it is a framework for anyone
looking to set an organisational standard for how modelling is done. It can be used to inform
a conversation about financial modelling and the decisions made in designing a model. Any
finance professional looking to do their own modelling or any business looking to procure
financial modelling support can use the Code to steer their efforts.
This Code should be read in concert with the IT Faculty’s Twenty principles for good
spreadsheet practice a summary of which is included inside the back cover. Specific
cross-references to the Principles are identified where appropriate.
Each section of the Code addresses a particular element of constructing a model and
explains its goals. First, we consider the function of the model as a whole, and the
importance of designing its layout to optimise the user experience. Next, we highlight the
critical nature of consistency and clarity, before discussing some more specific elements of
model construction.
No one way of building a model is right for every situation. Thus, a variety of techniques are
presented in each section. Approaches that differ from those listed may be preferable in
different contexts. This is deliberate and the reader should be aware that these alternatives
may not always be mutually compatible.
In each section we present specific recommendations ( ), which include several options,
representing generally suitable and widely adopted approaches. We also provide some
examples of discouraged approaches ( ), which should be avoided unless a strong case can
be made for a specific circumstance.
With these principles, as with anything else, a degree of common sense should be applied. If
a recommended approach is followed to the extreme, it can create a negative outcome.
ICAEW’s Corporate Finance Faculty has also produced a longer and more detailed
publication, entitled Best Practice Guideline: Financial Modelling, which conforms to this Code
and explains how to carry out financial modelling in a corporate finance transaction context.
2
FINANCIAL MODELLING CODE
In this section we define the model as referred to in this Code, and outline the essential aims
and key features of a good model.
Before starting,
Definition Financial model
satisfy yourself that
A time-based set of financial calculations within a spreadsheet workbook which aims to a spreadsheet is the
create a financial forecast based on one or more input set of variables. appropriate tool for
the job.
To ensure that the model will meet the user’s needs, it is imperative that the user first
understands the nature of a financial model. Although this guidance applies to financial
models built in spreadsheet packages such as Microsoft Excel, many of its lessons are
appropriate for other kinds of spreadsheets, or models built in other software.
All models should have a clear purpose and defined output. It should be evident to all users Design for longevity.
what can and cannot be derived from its use. The model should also remain serviceable
indefinitely as it may need to be updated by multiple users over an extended period of time.
Gaining insight into the range of possible outcomes also makes it possible to ascertain the
risk and potential of the financial forecast. The aim of the builder should be to provide ‘an
engine’ through which alternative scenarios and sensitivities can be passed.
Design the model carefully before constructing it, taking into consideration the
various possible outcomes.
3
FINANCIAL MODELLING CODE
The way a model is laid out directly affects how easy it is to comprehend, and how likely the
user is to use it correctly and efficiently. Good structure can save users time in understanding
the model, freeing them to spend more time on the decisions the model is built to support.
Models should be laid out in such a way that users can understand the flow of logic, and Separate and clearly
modify it as appropriate. Specifically, models should consist of clear and logical sections identify inputs, workings
arranged in an orderly fashion, and should be structured so users can easily find the and outputs.
components that are relevant to them. Logic should also flow consistently from inputs to
calculations to outputs. This consistency will help users understand the logic flows of
similar items.
Use caution when mixing inputs with outputs, as this can inhibit understanding of
the model’s conclusions.
Include one or more dashboards summarising important outputs that answer the
questions the model was built for.
Dashboards, if used, may include key inputs; although this contradicts the
generally advocated practice of keeping inputs together, it is acceptable if the
input is very clearly identified.
Use identically structured worksheets for each business unit, and highlight any
required differences for the user.
Set up your model to read like a book: with logic flowing from top to bottom
within each worksheet, and from left to right both within each worksheet and
across sheets within a workbook.
If a model must be spread across multiple workbooks, make it clear and obvious
which values are linked to and from other workbooks.
For example, host all such links in a ‘landing page’ contained in the model.
Avoid referencing cells in one workbook from another (this includes any
reference, including formulas, defined names and charts).
4
FINANCIAL MODELLING CODE
Users should be able to navigate easily around a model. Good workbook layout can
support navigation.
Use frozen panes to help orient the user and keep key labelling in view.
Users should be able to find and manipulate inputs in the model with minimal effort. The
model should also prevent incompatible assumptions from being entered inadvertently
where inputs are related to one another. For example, if an allocation table should sum
to 100%, the final number in the allocation should be computed from the sum of other
allocations. While many of the following recommendations suggest segregated input
worksheets or sections, these are not necessarily composed exclusively of inputs – a
common example is a dashboard worksheet, which may both contain inputs and present
results.
Distinguish input cells from other cell types using a defined cell fill colour and/
or a cell border, not just a defined font colour.
5
FINANCIAL MODELLING CODE
A model is not a static object, but one which the end user will interact with and manipulate.
Creating a model that is easy to use and understand is not simple, but can be done with
appropriate care and attention.
Although models should be built to require minimal external explanation, appropriate Include an ‘About’ or
guidance to help facilitate understanding and proper use should be included. This should ‘Welcome’ worksheet
also include any key assumptions made in calculations (eg, ‘all cash flows occur at the end of to document the
the appropriate period’). spreadsheet.
Don’t store documentation in a separate file or email that may become separated
from the model itself.
Creating multiple input locations can lead to a user mistakenly not updating the input Perform a calculation
everywhere it is required. Likewise, if a calculation has been performed once already, then once and then refer back
referring to the original calculation cell instead of recalculating reduces complexity and the to that calculation.
possibility of error.
Create a unique location for each input value, and structure all calculations that
need the value to refer to that single input location, either directly or through an
appropriate sequence of references.
6
FINANCIAL MODELLING CODE
Models are frequently built to operate on a ‘rolling basis’, with forecast or budget numbers
steadily replaced by actuals. If this is done haphazardly, forecast numbers can easily be left in
place by accident. Similarly, models are sometimes built with made-up dummy data to help
test calculations before the actual data is available. Accidentally leaving fictitious data in the
final model can cause serious errors.
Create separate entry areas for forecast and actual numbers, with formulas that
select which data is currently in use.
All aspects of a model should be visible and easily accessible. Hidden rows are easily missed,
can be confusing and are easy to change or delete inadvertently. An exception to this rule is
the hiding of empty columns to the right and below the used range, which can be done to aid
workbook navigation.
Group and collapse rows and columns that the user may wish to exclude to
aid readability.
Don’t hide items using white text colour or a non-displaying text format.
7
FINANCIAL MODELLING CODE
Consistency
Financial models are frequently complicated. Ensuring consistency can reduce complexity
by tying sections of the model together into chunks, which makes the end user experience
smoother. Components that perform similar tasks should be as similar as possible. This
applies at all levels, including but not limited to formula selection, sets of calculations, and
input and output sections.
Be consistent in the
Definition Cell anchoring use of formulas.
Creating formulas with references that do not move when copied and pasted to other cells.
Accomplished with $ markers and/or named ranges in most spreadsheet packages.
Keeping adjacent formulas identical makes it easier to review a model, and reduces the
chance that an error will occur through copy-pasting over an inconsistent formula. This
simplifies the review process as each block of formulas only needs to be inspected once.
Make formulas strictly consistent across formula blocks, so the formula can be
copied and pasted across the block.
Make any inconsistent formulas, if used for a good reason, immediately apparent
to anyone looking at the area (eg, by using prominent formatting or notes).
8
FINANCIAL MODELLING CODE
If multiple timelines exist in a model it must be clear which timeline relates to each value Be consistent in structure.
in a model. A single column should only contain values relating to a given time period
and be used consistently to represent that time period across any relevant worksheets sharing
that timeline.
Display the primary timeline in a frozen pane, and place any secondary or tertiary
timelines near each of the values to which they relate so they can be viewed
together without scrolling.
Present any distinction clearly when multiple timelines are included in one axis
(eg, a change of periodicity from monthly periods to semi-annual periods), and
keep formulas consistent along that axis.
Don’t create timelines at different levels of detail on each worksheet, or ones that
do not line up across worksheets.
Don’t use ‘variegated’ timelines in the calculation worksheets, where the timeline
series calculations are interrupted by periodic subtotals.
9
FINANCIAL MODELLING CODE
Clarity
Financial models must communicate complex financial information to its user. Prioritising
clarity can help avoid confusion and keep the model as unambiguous as possible.
Formatting should be clear and consistent. It should be easy to understand the purpose of
each value in a model. Appropriate number formats help the user separate different kinds of
data from one another.
Similarly, rounding values in the model for presentation keeps the data neat and easy to read.
The most common mistake in this area is to show too many decimal places, which can both
distract users from more important information and overstate the level of precision achieved.
It is sometimes reasonable to compromise on formatting for technical reasons. For instance,
significant amounts of conditional formatting can cause performance issues, and so should
generally be used sparingly.
Formatting for formatting’s sake is unnecessary and formats do not automatically
communicate their meanings to the user. When formatting carries a meaning that a user must
understand to use the model safely, this meaning must be explained clearly in an obvious
location within the model.
Include a formatting key in the model to explain the meaning of styles and/
or formats.
10
FINANCIAL MODELLING CODE
Labels are essential to ensure the end user’s understanding of what is presented, and should
be applied to all data, calculations and outputs.
Ensure that all data, calculations and outputs are labelled visibly, with the labels
placed nearby.
Label each row to the left in a frozen pane that remains visible as the user scrolls
around the workbook.
Use a ‘tree’ to structure multiple label layers, with subsequent columns used for
each layer.
For every value in a model, it should be clear what units of measurement are employed so
the user can easily comprehend the information presented. This includes but is not limited to
currency (including whether in real or nominal terms), factors (tens, hundreds, thousands and
millions), percentage rates (including whether they are annual or matching model periods),
and other units such as tonnes, litres, etc.
Units should be precise enough to mitigate the risk of mixing scales, such as inadvertently
multiplying a price per tonne by a value measured in thousands of tonnes.
Label each value or set of values with the unit that applies to them.
For example, include units for each item in suitable places as determined by
context, such as part of the data label or in a dedicated units range.
Use a specified base unit, and label all values that use alternative units.
11
FINANCIAL MODELLING CODE
The meaning of a positive or negative value sign for each value in a model must be made clear.
Specify and use a simple and comprehensive sign convention, and label any
inconsistencies.
For example, a model can identify assets, revenues and cash inflows as positive,
and liabilities, expenses and cash outflows as negative; or it could apply a
‘normally positive’ rule, where all inputs are positive by default.
Use the same conventions throughout the model, even in different parts.
Don’t use pure accounting convention (ie, positive for debits and negative
for credits).
Many models extend over a large number of worksheets. Using simple and understandable
worksheet names will help users navigate between worksheets and understand formulas that
contain cross-sheet references.
Use clear and concise names for each worksheet, as opposed to non-descriptive
names like Sheet1, Sheet2, etc.
Use abbreviated names for each worksheet with a clear explanation in an obvious
location within the model.
Don’t use mathematical operators in worksheet names, as these can cause issues
with formula comprehension.
12
FINANCIAL MODELLING CODE
Range names can be useful to define areas of data for use in calculations; however, some
model developers look to minimise the use of range names in formulas. Either approach
can be effective; however, if range names are used they should be meaningful and easy
to differentiate.
Use range names with care, and make them clear and meaningful.
For example, call a senior debt interest rate input cell SnrIntRate1, not SNR1.
Use defined names for Visual Basic for Applications (VBA) cell and range
references to avoid damaging the integrity of the code when adding or removing
cells later on.
Elsewhere in this document, we advocate using VBA and similar program code sparingly. VBA
code, when used, requires a higher level of technical knowledge to follow and understand
than general spreadsheet content. It is easy for coding to become a black box, leaving users
unable to verify or modify how the code works. Hence, it is important for all VBA code to be
well documented, and such documentation kept up-to-date.
Name VBA elements such as cell ranges, variables and functions clearly and
meaningfully to aid a reviewer’s comprehension.
For example, use ‘LoanRepayPeriod’ instead of ‘LRP’ or ‘Var1’.
Use in-line comments to explain and label the code directly alongside the
code itself.
13
FINANCIAL MODELLING CODE
Error reduction
Errors are clearly undesirable in any financial model. Yet, mistakes are natural and
unavoidable. In this section we look at key ways to prevent errors or reduce their likelihood,
and to detect them when they occur.
Models are often large and complex. Even an expert builder can make errors of logic, typos Rigorously test the
and so on. Hence, it is important that a model be subjected to an appropriate level of testing workbook.
and review.
Consider carefully the possibility and impact of model errors and design, and
implement a review and testing regime consistent with the risk presented.
Checks are intended to make it clear and obvious to the user when there is a failure in the
tested logic. Models can also include other checks that indicate business issues with the
model’s outputs – such as breach of covenants or making losses – but which aren’t indicative
of an error in the model’s function. Sometimes called alerts, these kinds of checks are also
beneficial and the approaches below can be applied equally to them.
Include an equality check for each set of values that are calculated separately but
ought to be equal, such as a balance worksheet check or an alert that a required
input has been left blank.
Include a tolerance in checks to allow for very small acceptable variations, such as
Excel rounding errors.
14
FINANCIAL MODELLING CODE
A master check tests whether any checks in the model are in breach and alerts the user if
any are.
Display the result of the master check in the frozen pane on all worksheets so that
it is clearly visible in all areas of the model.
Allowing inputs to be varied without limit might increase model flexibility, but it also increases
the potential for incorrect, internally inconsistent or unreasonable inputs to be chosen by
accident or through a misunderstanding. Placing controls on possible inputs can help a user
use the model appropriately.
Use data validation to reduce the chance of invalid data being entered, either as a
control or with dropdown menus.
Create additional checks and alert messages that warn the user if inappropriate
data has been entered.
Include contextual guidance that instructs the user about appropriate input data
alongside the location of the input.
Don’t use data validation excessively as this makes the model harder to use.
Don’t use data validation with a generic error message and no guidance as to
what data is permitted.
15
FINANCIAL MODELLING CODE
Calculation techniques
Financial models necessarily include many formulas and other calculations. Those calculations
should, like the model itself, be error-resistant and comprehensible. This section outlines the
key principles to keep in mind when building calculations.
Models are often large files and can be slow to calculate. Similarly, cells with dense Keep formulas short
computations are difficult to review and more likely to contain errors. Where possible, and simple.
formulas should be built to optimise file size and calculation speed, and should be simple
to read, comprehend and review.
Complexity should be minimised appropriately to the circumstances. While hard rules are
sometimes used by modellers, (eg, ‘no more than five operands in any cell’, ‘no line breaks’ or
‘no formulas longer than your thumb’), some computations are easier to follow when these
rules are broken.
Carry out timing and logic calculations separately from the data that they relate to,
usually using the following ‘flags’: ‘1’ / ‘0’ or ‘TRUE’/’FALSE’.
Carry out calculations that scale a value (eg, scaling a monthly figure to match a
quarterly timeline) separately from the calculation of the base value.
Don’t leave calculations set to manual as users may not realise that outputs are
not live.
Reference nearby cells (ie, cells close to those containing the formulas) so that it
is possible to see the formula, the result and the referenced cells on one screen at
the same time.
Use single-step references that create local references (‘call ups’ or ‘imports’)
within a given worksheet for other formulas that perform calculations on that
worksheet.
This makes references in the calculating formulas easier to read, and makes it
unnecessary to provide worksheet qualifiers (such as ‘Sheet1’).
16
FINANCIAL MODELLING CODE
Don’t create unnecessary chains of references, such as those that flow through
multiple locations without any calculations performed.
Never embed in a
Definition Hardcoding formula anything that
Fixed values embedded into a formula, such as a tax rate entered as 20% within a formula. might change or need to
be changed.
The use of hardcoding in formulas depends on context and requires judgement. It can be
acceptable in low-risk cases such as the number of months in a year or hours in a day (eg,
using a hardcoded 24 to convert between hours and days). However, hardcoding should
never be used for values that could foreseeably change during the life of the model (eg, using
24 to increment a staff count). It should also be avoided for values whose meaning would not
be completely clear to the most basic user of the model without a label. For example, while
the conversion factor between feet and metres will always be 3.28084, if this value is not
separated and labelled, its purpose would not be immediately obvious to a model user.
Include as inputs all values that could possibly change in the lifetime of the
model.
17
FINANCIAL MODELLING CODE
Unintentional circular references are usually a sign of an incorrectly made formula, and
spreadsheet packages will warn the user if one is made. Making use of intentional circularity
turns off these warnings, and can lead to errors going unnoticed. Circular calculations are also
opaque to review and often unnecessary.
Manage any cases requiring self-reference with Goal Seek or a copy-paste macro,
and include clear signposting that current values may not be live, such as with a
check or alert message.
Don’t make ‘balancing’ calculations to ensure that lists of unrounded figures reach
a desired target.
18
FINANCIAL MODELLING CODE
Use native Excel functionality, not VBA, to perform all calculations that
affect results.
19
ICAEW THOUGHT
FINANCIAL LEADERSHIP
MODELLING CODE
icaew.com/thoughtleadership
20
FINANCIAL MODELLING CODE
The guidance in this document is based on ICAEW’s Twenty principles for good spreadsheet
practice (see below). The Principles are a high-level set of guidance for achieving good practice
in any spreadsheet environment.
Determine what role spreadsheets play in your business, and plan your
PRINCIPLE #1
spreadsheet standards and processes accordingly.
PRINCIPLE #10 Separate and clearly identify inputs, workings and outputs.
PRINCIPLE #14 Never embed in a formula anything that might change or need to be changed.
PRINCIPLE #15 Perform a calculation once and then refer back to that calculation.
Avoid using advanced features where simpler features could achieve the
PRINCIPLE #16
same result.
Build in checks, controls and alerts from the outset and during the course
PRINCIPLE #19
of spreadsheet design.
PRINCIPLE #20 Protect parts of the workbook that are not supposed to be changed by users.
www.charteredaccountantsworldwide.com
www.globalaccountingalliance.com
ICAEW
Chartered Accountants’ Hall
Moorgate Place
London
EC2R 6EA
UK
facebook.com/icaew
twitter.com/icaew_excel