Project Finance & Financial ModellingFinancial modelling structure and best practice · Lesson 7 of 20

Model structure and best practice

Article · 15 min · 8 min lecture

Video lecture

Model structure and best practice

9 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 9

A model only its author understands is a liability

  • Inputs, calculations, outputs
  • Timing sheets and flags
  • Circularity, checks and version control

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

Why structure matters

A project finance model may drive investment decisions worth hundreds of millions, be read by lenders, auditors and advisers, and evolve for years. A model that only its author understands is a liability. Good structure makes models transparent, flexible, accurate and auditable.

The standard flow

INPUTS  ──►  CALCULATIONS  ──►  OUTPUTS
(assumptions,   (timing, construction,     (summary, ratios,
 scenarios)      revenue, opex, tax,        returns, charts,
                 debt, waterfall)            checks)

Keep these separate:

  • Inputs: every hard-coded assumption in one place (or a small set of input sheets), clearly formatted, sourced and dated.
  • Calculations: formulas only; no hard-coded numbers.
  • Outputs: summaries that reference calculations; nothing calculated here that is not traceable.

Widely used modelling principles

Several published standards and conventions exist (for example, the FAST Standard and other industry best-practice guides). Common principles include:

PrinciplePractice
ConsistencySame timeline columns across all calculation sheets
One formula per rowA row uses the same formula across the timeline
No hard-codes in formulasNumbers like 0.05 or 365 live in inputs, labelled
Short, simple formulasBreak complex logic into steps
Flow directionCalculations flow top-to-bottom and left-to-right where possible
Clear formattingDistinguish inputs, calculations, links and checks by style
FlagsUse 1/0 flags for periods (construction, operations, debt repayment)
UnitsLabel every row with units (USD 000, MWh, %)
ChecksBalance sheet balances, sources = uses, cash never negative unless intended

Timing and flags

Projects move through phases: development, construction, operations, decommissioning. Build a timing sheet with period start and end dates and flags:

Period end date        31-Mar  30-Jun  30-Sep  31-Dec ...
Construction flag         1       1       1       0
Operations flag           0       0       0       1
Debt repayment flag       0       0       0       0   (starts after grace period)
Days in period           90      91      92      92

Multiply calculations by flags so that, for example, revenue only appears when the operations flag = 1. Changing the construction length input then shifts everything automatically.

Periodicity

Construction is often modelled monthly or quarterly; operations semi-annually (aligned with debt repayment dates) or quarterly. Mixed periodicity adds complexity; keep it only if it adds real value.

Circularity

Project finance models contain natural circularities: interest during construction depends on debt drawn, which depends on total uses, which include interest. Other examples: fees based on debt size, DSRA funding based on future debt service. Approaches include copy-paste macros that iterate to convergence, algebraic solutions, or careful ordering of calculations. Avoid relying on the spreadsheet's iterative-calculation setting without controls, because errors can become hidden and self-reinforcing.

Checks

A robust model has a checks sheet summarising all checks with a master check on the output page:

  • Balance sheet balances every period.
  • Sources equal uses at the end of construction.
  • Cash balance never negative.
  • Debt fully repaid by final maturity.
  • Ratios meet covenants in the base case.
  • Sum of periodic values equals annual totals.

Version control and documentation

  • Name versions consistently and log changes (what changed, why, by whom).
  • Keep a model book or databook listing every input with its source.
  • Commission an independent model audit before financial close; lenders usually require it.

Worked example: a structure review

Illustrative. A fictional developer in Abu Dhabi inherited a model with 40 sheets, inputs scattered across calculation pages, and formulas like =B121.035^(C4-2026)0.92. The modelling team restructured it: all inputs moved to two input sheets with sources; formulas broken into escalation, availability and revenue steps; a timing sheet with flags; and 18 automated checks. A lender's model audit that previously produced 60 findings produced 9 on the restructured version.

Common mistakes

  • Hard-coded numbers inside formulas.
  • Inconsistent timelines between sheets.
  • Hidden rows, sheets or links to external files.
  • No checks, or checks nobody looks at.
  • Unlabelled units and signs (is cost positive or negative?).

Quick self-check

Ask a colleague who did not build your model to change one input, such as construction length, and tell you what happens to equity IRR. If they can do it in minutes, find the input easily and trust the checks, your structure works. If they need you to explain where things are, invest in restructuring before the model grows further; the cost of poor structure rises with every new sheet.

Hands-on: a timing sheet with flags in Excel

Inputs: Start_date, Constr_months, Ops_years, Grace_months, Period_months (e.g. 6)
Row 5  Period number        1, 2, 3 …
Row 6  Period start         F6 =Start_date ; G6 =F7+1
Row 7  Period end           F7 =EOMONTH(F6, Period_months-1)
Row 8  COD                  =EOMONTH(Start_date, Constr_months-1)
Row 9  Construction flag    =--(F7<=COD)
Row 10 Operations flag      =--AND(F6>COD, F6<=EDATE(COD, Ops_years*12))
Row 11 Repayment flag       =--AND(F10=1, F6>EDATE(COD, Grace_months))
Row 12 Days in period       =F7-F6+1

Every operating row then multiplies by row 10, for example Revenue =Output*Tariff*Ops_flag. Change Constr_months and the whole model moves consistently.

Hands-on: a checks sheet

Tolerance (named) = 0.001
Balance sheet     =IF(MAX(ABS(BS_Assets-BS_LiabEquity))>Tolerance,1,0)      (enter as a dynamic-array or with SUMPRODUCT)
Sources = uses    =IF(ABS(Total_sources-Total_uses)>Tolerance,1,0)
Cash ≥ 0          =IF(MIN(Cash_balance_row)<-Tolerance,1,0)
Debt repaid       =IF(ABS(INDEX(Debt_balance_row, Final_maturity_col))>Tolerance,1,0)
MASTER CHECK      =SUM(Check_range)            show on every output page; 0 = all pass

In older Excel versions without dynamic arrays, use =SUMPRODUCT(--(ABS(BS_Assets-BS_LiabEquity)>Tolerance))>0 for the balance check.

How to measure success

  • Zero hard-coded numbers in calculation sheets (a model review add-in or a simple formula search will find them).
  • The master check is zero in every scenario.
  • A new reviewer can trace any output back to its inputs in minutes.

Key takeaways

  • Separate inputs, calculations and outputs; keep all assumptions sourced in inputs.
  • Use consistent timelines, one formula per row, flags for phases and labelled units.
  • Handle circularities deliberately and keep a checks sheet with a master check.
  • Document versions, keep a databook and obtain an independent model audit before close.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. Where should a 3.5% escalation assumption be stored?
  2. What is the main purpose of timing flags?
  3. Which check is standard in a project finance model?

Put it into practice

Open a spreadsheet model you use and score it against the principles table. List the three changes that would most improve transparency.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.