data quality · donor reporting · identifiers · logframe · traceability
Numbering schemes are not cosmetic
What a donor's numbering convention actually governs, and why the sector already solved this problem one level up.
The numbering in a logframe looks like formatting. Outcome 1, Output 1.1, Activity 1.1.1. It reads as an aid to navigation, the same way page numbers are: useful for pointing at things, carrying no meaning of its own, safe to change if the document is reorganised.
It is not formatting. Once a figure has been reported against Output 1.2, the code is the only thing connecting that figure to that result. The narrative statement may be rephrased between versions. The indicator may be revised. The team that wrote it may have left. What survives in the donor's records, in the annual review, in the spreadsheet a programme officer built to track variance across a portfolio, is the code. Renumber the row and every one of those references now points somewhere else, or nowhere.
Most logframe tools treat numbering as a display property derived from row position. Insert a new output between 1.1 and 1.2, and the old 1.2 silently becomes 1.3. Nothing warns anyone, because from the software's point of view nothing of substance changed. From the reporting record's point of view, every figure previously submitted against 1.2 now describes a different result.
Every donor has a different scheme, and the differences are load-bearing
If numbering were cosmetic, funders would not specify it. They do, and they disagree.
The Green Climate Fund enforces strict dotted decimal, where an outcome numbered 1 has outputs 1.1 and 1.2 and those outputs have activities 1.1.1 and 1.1.2. The hierarchy is legible from the code alone, which means a reviewer can tell from "1.2.3" exactly where in the structure a line sits without reading the statement.
Defra's Biodiversity Challenge Funds reserve the 0. prefix for outcome-level indicators, so outcome indicators are 0.1, 0.2 and output indicators carry their parent output's number. The guidance also requires means-of-verification numbering to mirror indicator numbering, so MoV 1.2 verifies indicator 1.2. That is a referential rule: the code creates the link between two columns, and breaking the numbering breaks the link.
WWF's conservation project standards use alphanumeric strategy codes, so a real framework contains SF1, SF2 rather than 1, 2. The scheme is not decimal at all, which means any tool assuming a numeric hierarchy cannot represent it without transformation.
The GEF's results measurement framework (2022) goes further and takes numbering out of the project's hands entirely. Every project maps onto core indicators numbered one through eleven with decimal sub-indicators, because the numbering is what allows results to aggregate across the whole GEF portfolio. Core indicator 3 means the same thing in every project, which is the entire point. A project that invents its own numbering has broken the aggregation the framework exists to perform.
The UK guidance from 2011 leaves numbering unspecified. That is also a decision, and it produces its own problem: without a stated convention, two programmes in the same office number differently, and a portfolio-level analyst comparing them has to build the mapping by hand.
Four schemes, four purposes. Legibility of hierarchy, referential integrity between columns, accommodation of non-numeric structures, and portfolio aggregation. None of these is decoration.
What breaks on insertion
The failure mode is specific and it happens in the second year of most programmes.
A programme has four outputs. In year two, a mid-term review recommends splitting Output 2 into two separate outputs, because the original statement covered two distinct delivery streams that turned out to need separate targets. This is good practice: the framework should reflect what the programme actually does.
The team inserts the new output. In a tool that derives codes from position, the outputs renumber: the old Output 3 becomes Output 4, the old Output 4 becomes Output 5. Nothing else in the framework changed. But:
The year one annual report submitted figures against Output 3. Those figures now sit against what the current framework calls Output 4. Anyone reading the year one report alongside the current logframe is comparing different things without any signal that they are.
The donor's own tracking spreadsheet, maintained by a programme officer who does not have the new version, still refers to Output 3. When the year two figures arrive against Output 4, the officer either notices the discrepancy and asks, which costs a week, or does not notice and files a figure against the wrong row.
The indicator codes under each output also shift, so indicator 3.2 becomes 4.2, and the means-of-verification numbering under the Defra convention shifts with it, and the budget line that referenced activity 3.1.4 now references nothing.
None of this is caught by the logframe's own validation, because every internal reference is still consistent. The framework is coherent with itself and incoherent with every document produced before the change.
The sector already solved this one level up
The identifier problem has a settled answer in humanitarian and development data, and it sits in the IATI standard.
IATI's rule is unambiguous: once an activity has been published, its identifier must not change. The standard ruleset states it as a requirement rather than a recommendation, and repeats it in the element definition: once reported, the identifier must not be changed in subsequent updates.
The reasoning is spelled out in IATI's traceability guidance. Because each activity has a unique identifier, partner organisations reference that identifier when publishing their own data. When every publisher includes it, users can identify related activities, find partners working on the same activity, and track fund flows up and down the delivery chain. The identifier is what makes the chain traceable, and a changed identifier severs it.
IATI even handles the awkward case. Organisation identifiers can legitimately change, when an organisation merges or re-registers. The standard's answer is not to renumber the activities but to record the previous organisation identifier alongside the new one, so that activity identifiers built from the old prefix continue to resolve. The old reference stays valid; the mapping is recorded rather than the record being rewritten.
That is the correct model, and the argument for it applies at the result level exactly as it does at the activity level. A logframe code is a reference that other documents point at. Once anything points at it, it is no longer free to change.
Why it is harder inside a logframe
Two things make the result-level version of this problem harder than the activity-level one.
The first is that a result belongs to more than one numbering scheme at once. A programme reporting to two donors has two codes for the same result: 1.2 under one frame, 2.1.3 under another, and possibly SF2 in its own internal framework. There is no canonical code, because each scheme is correct within its own frame. Any system that stores one code per result has already picked a winner, and the winner is whichever donor the framework was first built for.
The second is the cascade. A sub-grantee's outcome is a prime recipient's output, so the same result carries an outcome-level code in one framework and an output-level code in another. Under a strict dotted-decimal scheme, the code encodes the level, which means the codes cannot be reconciled by any rule that treats the code as a stable identifier. They are structurally different strings describing the same delivery.
Tim Davies, writing on IATI traceability in 2016, identified the coordination problem this creates: there are no consistency checks to ensure that providers and recipients agree on identifiers, many accounting systems have no field for an upstream or downstream project identifier at all, and the identifier of a downstream project may not exist at the time an upstream project assigns funds. Exchanging identifiers, he notes, can create a substantial administrative burden.
Every one of those objections applies to result codes in a funding chain, and none of them has been addressed at that level. IATI at least published the rule and the mechanism. At the results level there is neither.
What can be done without solving all of it
Three things are available to a programme team now, none of which require sector-wide coordination.
The first is to freeze a code once a figure has been reported against it. Before any value exists, the framework is free to reorganise and codes can be derived from position. After the first confirmed figure lands, the code is fixed for that result, and inserting a new row means the new row gets a new number rather than the existing rows shifting. Output 2 splits into Output 2 and Output 5, not Output 2 and Output 3. The numbering is uglier and the record is intact.
The second is to record the code alongside the reported figure, not just alongside the result. If the year one report is stored with the codes as they stood in year one, then a later renumbering does not corrupt the historical record, because the report carries its own reference. This is what IATI's other-identifier mechanism does at the organisation level.
The third is to write the convention down. A team that has decided outputs are numbered sequentially and never reused, that indicator codes inherit the parent output's number, and that the 0. prefix is reserved for outcome indicators, has a rule that survives the person who made it. A team that has an implicit convention held by one experienced staff member has a rule that expires when that person changes role.
None of that fixes the cross-frame problem, and none of it helps when a donor's own template renumbers between versions, which happens more often than the guidance documents admit. The honest position is that result-level identifier stability is an unsolved problem with known partial mitigations, and the reason it stays unsolved is that the cost of a broken reference is paid at annual review by someone who was not in the room when the framework was reorganised.
Whether any funder will publish a result-code rule with the clarity IATI applied to activity identifiers is the question this post cannot answer. The precedent exists, it works, and it is one level away from where it is needed.
Sources
Numbering conventions in donor frameworks
- Supplementary Logframe Guidance, Biodiversity Challenge Funds, Defra approved. Source for the
0.prefix reserved for outcome indicators and the requirement that means-of-verification numbering mirror indicator numbering - WWF Standards of Conservation Project and Programme Management, WWF (2012), hosted by the Conservation Measures Partnership. Source for alphanumeric strategy codes rather than a decimal hierarchy
- Guidelines on the GEF-8 Results Measurement Framework, GEF (2022). Source for the numbered core indicators one through eleven and the portfolio aggregation they enable
- Guidance on using the revised Logical Framework, DFID (January 2011). Source for the absence of a specified numbering convention
The identifier rule, one level up
- Creating IATI activity identifiers, IATI Standard. Source for the rule that a published activity identifier must not change, and for the mechanism recording a previous organisation identifier rather than renumbering activities
- IATI traceability guidance, IATI Standard. Source for the reasoning: identifiers are what allow partners to reference each other's activities and track flows up and down the delivery chain
- Standard Ruleset, Code for IATI. Source for the identifier stability rule stated as a machine-checkable requirement
- iati-identifier element definition, IATI Standard 2.03. Source for the prefix construction rule and the restatement of identifier immutability
Practitioner analysis
- Following the money: preliminary remarks on IATI Traceability, Tim Davies (January 2016). Source for the coordination problems: no consistency checks between providers and recipients, accounting systems with no field for upstream or downstream identifiers, and downstream identifiers that do not exist when upstream funds are assigned