PMO-00.03 Phase 00: Program and Portfolio Management
Tier 1 general

Interdependency Register

سجل الاعتماديات المتبادلة
tasleemat asset PMO-00.03 template --lang en

Deliverable Summary & Governance Boundaries

Lifecycle Phase Alignment

Phase 00: Program and Portfolio Management

Sizing Tier Requirements

Tier 1

Validation Contract

This deliverable conforms to a strict companion Draft 2020-12 JSON Schema for automated structural and semantic validation.

tasleemat validate PMO-00.03 ./completed_data.json

Template Markdown (Bilingual)

<!--  
LLM INSTRUCTIONS: Fill in the [ Add details... ] placeholders based on project context.

The interdependency register records the relationships between the components
of a program, portfolio, or project, in the specific sense that one cannot
proceed, or cannot proceed on its own dates, until another delivers
something. It is a forward-looking record: it is what tells the reader what
will have to be true before the plan works.

The intent behind separating internal dependencies from external ones is that
they behave differently and are governed by different people. An internal
dependency can usually be renegotiated by asking; an external one often
cannot, and a register that mixes them invites the reader to treat an external
commitment as though it were a request to a colleague.

Alignment: the interdependency register should be aligned and consistent with
the following documents: Portfolio roadmap, Program charter, Project management
plan, Schedule management plan.

Writing guidance:

*   Name the specific deliverable or condition being waited on, not the other
    project. "Waiting for Project B" cannot be actioned when Project B is
    delayed, because nobody knows what to chase; "waiting for the signed data
    migration specification from Project B" can.

*   Record the date the dependency must be satisfied by, which is the
    successor's requirement, rather than the date the predecessor expects to
    deliver. Where the two differ, the gap between them is the risk, and it
    belongs in the register rather than in somebody's memory.

*   Record the dependency type. Finish to Start is the common case, and it is
    the only one that needs no explanation; the other types arise where two
    projects must move together, and without the type a reader cannot tell a
    hard sequencing constraint from a preference.

*   Record who agreed the dependency, and when. A dependency that was assumed
    rather than agreed is the one that will be disputed at the moment it
    becomes inconvenient.

*   Record the status as a value from a fixed set. A free-text status cannot be
    filtered, and a register of forty dependencies that cannot be filtered is
    a document nobody reads when they need to answer a question about one of
    them.

Tailoring Notes:

*   The register may be maintained at portfolio level, covering all
    interdependencies between initiatives, or at program level covering only
    those between components. The form should say which, because the two
    answer different questions.

*   Where the organisation runs a dependency log in a planning tool, the
    register may be an extract rather than the source of truth. If so, record
    that, so a reader does not treat the extract as authoritative.

*   Add or remove rows as needed. Where two projects have a reciprocal
    dependency, record both directions rather than one row with both names, so
    each direction can be tracked and agreed separately.

*   The external dependency section may be maintained separately by a
    procurement or vendor governance function, in which case cross-reference
    it rather than duplicating it.

Column guidance, by column:

Internal dependency rows:

*   **ID:** The identifier for the dependency, used in the change log and in
    reporting so a threatened dependency can be referred to unambiguously.

*   **Predecessor:** The project or component that must deliver first, named
    and identified so the row can be joined to the portfolio roadmap.

*   **Successor:** The project or component that is waiting. Where the same
    predecessor is needed by several successors, record a row for each, because
    the required dates and the impacts differ.

*   **Deliverable or Condition:** What specifically is being waited on, stated
    so that it can be confirmed as delivered or not. A dependency stated as a
    general state of readiness cannot be closed, because no one can say when
    it has been reached.

*   **Dependency Type:** Whether the relationship is Finish to Start, Start to
    Start, Finish to Finish, or Start to Finish.

*   **Required By:** The date by which the successor needs the deliverable.
    This is the successor's requirement, and recording the predecessor's
    forecast here instead hides the gap between the two.

*   **Agreed Date:** The date the predecessor has committed to, so the gap
    against the required date is visible in the register itself.

*   **Status:** Where the dependency currently stands against the fixed set
    used in this register.

*   **Impact if Late:** What happens to the successor if the predecessor misses
    the required date, in schedule, cost, or scope terms. A dependency with no
    stated impact cannot be escalated, because nobody can say what is at risk.

External dependency rows:

*   **ID:** The identifier for the external dependency.

*   **External Party:** The organisation outside the program the dependency
    runs through, named with the role it plays rather than the individual, so
    the row survives a change of contact.

*   **Dependency Description:** What the external party is expected to provide
    or approve, and by when.

*   **Contractual Basis:** Whether the dependency is covered by a contract, a
    memorandum of understanding, or nothing in writing. This is the column
    that decides whether the dependency can be enforced, and a register that
    omits it cannot tell a reader which rows are at risk.

*   **Required By:** The date the program needs it.

*   **Status:** Where the dependency stands against the fixed set.

*   **Owner:** Who is accountable for the relationship with the external party,
    which is normally not the person who needs the deliverable.

Escalation rows:

*   **Dependency ID:** The dependency the escalation concerns, so it can be
    joined back to the register.

*   **Trigger:** What caused the escalation, whether a missed date, a stated
    refusal, or a change on the predecessor's side.

*   **Escalated To:** Who it was escalated to, named rather than described.

*   **Action Agreed:** What was decided, which is what stops the same question
    being escalated again next cycle with no progress.

*   **Date:** When the escalation happened, and when it will next be reviewed.
-->

<h3 dir="ltr" align="right">{{Company_Name}}</h3>
<h2 dir="ltr" align="right">{{Portfolio_or_Program_Name}} - {{Governance_ID}}</h2>
<h1 dir="ltr" align="center">INTERDEPENDENCY REGISTER</h1>

| **Date Prepared:** {{Current_Date}} | **Program Manager:** {{Program_Manager_Name}} | **Prepared By:** {{Prepared_By}} |
| :--- | :--- | :--- |  

---

## 1. Register Basis
<!-- What this register covers and how current it is meant to be. Record the
 level at which it is maintained, because a portfolio-level register and a
 program-level one answer different questions and are compared against
 different plans. Record the review cycle, because a register nobody refreshes
 is a register that describes a portfolio as it once was. And record whether
 this is the source of truth or an extract from a planning tool, so a reader
 does not treat an extract as authoritative and act on a stale date. -->

**Register Scope and Level:** [ Add details... ]

**Programs or Projects Covered:** [ Add details... ]

**Source of Truth or Extract:** [ Add details... ]

**Review Cycle:** [ Add details... ]

**Register Owner:** [ Add details... ]

**Last Updated:** [ Add details... ]

---

## 2. Internal Interdependencies
<!-- Between projects and components the program controls. Name the specific
 deliverable or condition being waited on, not the other project: "waiting for
 Project B" cannot be chased when Project B slips, because nobody knows what to
 ask for, whereas "waiting for the signed data migration specification from
 Project B" can. Record the required date, which is the successor's
 requirement, alongside the agreed date, so the gap between what is needed and
 what has been promised is visible in the register rather than discovered
 later. Where the same predecessor serves several successors, record a row for
 each, because the required dates and the impacts differ. Add or remove rows as
 needed. -->

| ID | Predecessor | Successor | Deliverable or Condition | Dependency Type | Required By | Agreed Date | Status | Impact if Late |
| :---: | :--- | :--- | :--- | :--- | :--- | :---: | :---: | :--- |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |

---

## 3. External Interdependencies
<!-- On organisations outside the program, which behave differently and are
 governed by different people. The column that matters most here is
 Contractual Basis, because it decides whether the dependency can be enforced:
 a commitment taken in correspondence and a commitment written into a contract
 look identical in every other column and are not remotely the same. Name the
 external party by role rather than by individual, so the row survives a change
 of contact, and record who is accountable for the relationship separately from
 the person who needs the deliverable. Add or remove rows as needed. -->

| ID | External Party | Dependency Description | Contractual Basis | Required By | Status | Owner |
| :---: | :--- | :--- | :--- | :--- | :---: | :--- |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |

---

## 4. Escalations and Agreements
<!-- What has been done about the dependencies that are not holding. Record the
 trigger, so a reader can tell an escalation caused by a missed date from one
 caused by a refusal, because the remedy differs. Record what was agreed,
 since an escalation that concludes nothing is repeated the following cycle
 with the same result. Add or remove rows as needed. -->

| Dependency ID | Trigger | Escalated To | Action Agreed | Date |
| :---: | :--- | :--- | :--- | :---: |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |
| [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] | [ Add details... ] |

---

## 5. Sign-off and Approvals

| Role | Name | Signature | Date |
| :--- | :--- | :---: | :---: |
| **Program / Portfolio Manager** | {{Program_Manager_Name}} | _______________________ | [ .... - .... - .... ] |
| **Delivery / Component Lead** | {{Delivery_Lead_Name}} | _______________________ | [ .... - .... - .... ] |
| **PMO Lead** | {{PMO_Lead_Name}} | _______________________ | [ .... - .... - .... ] |
---

<div dir="ltr" align="right" style="margin-top: 20px; font-size: 12px; color: #7f8c8d;">
  <span>Electronic Audit Trail: Hash SHA256: {{Audit_Trail_SHA256_Hash}}</span> <br>
  <strong>Template:</strong> Interdependency Register | <strong>Ref:</strong> PMO-00.03 <br>
  <i>Generated on: {{Current_Timestamp}}, by <a href="https://github.com/fakhruldeen/Tasleemat/" style="color: #7f8c8d;">Tasleemat</a></i>
</div>

User Guide & Practitioner Instructions

Tasleemat Forms Guide

Project Artifact: Interdependency Register

Document Reference: PMO-00.03

This document provides a comprehensive, professional reference to understand the purpose and effective usage of the Interdependency Register in alignment with the Tasleemat framework.


1. What?

A formal Tasleemat-aligned project document known as the Interdependency Register, recording the relationships between the components of a program, portfolio, or project, in the specific sense that one cannot proceed, or cannot proceed on its own dates, until another delivers something.

It records the basis on which the register is maintained, the internal dependencies with their required and agreed dates side by side, the external dependencies with the contractual basis on which each rests, and what has been escalated about the dependencies that are not holding.


2. Why?

Because a dependency recorded as a project name rather than a deliverable cannot be chased when that project slips: nobody knows what to ask for. And because a register that mixes internal and external dependencies invites the reader to treat an external commitment as though it were a request to a colleague. The contractual basis column is what tells the two apart.


3. When?

This artifact is prepared at the PROGRAM AND PORTFOLIO MANAGEMENT Process Group, and maintained on the review cycle recorded in its basis section. It is a living record rather than a document produced once, because a dependency register describes a plan that is still being made.


4. Who?

Responsibilities: Owned by the Program Manager or Portfolio Manager, with each row's content supplied by the owner of the successor, since that is the person who knows what they are waiting for. External dependency rows are owned by whoever holds the relationship with the external party, which is usually not the person who needs the deliverable.


Tailoring Tips

  • The register may be maintained at portfolio level, covering all interdependencies between initiatives, or at program level covering only those between components. The form should say which, because the two answer different questions.
  • Where the organisation runs a dependency log in a planning tool, the register may be an extract rather than the source of truth. If so, record that, so a reader does not treat the extract as authoritative.
  • Add or remove rows as needed. Where two projects have a reciprocal dependency, record both directions rather than one row with both names, so each direction can be tracked and agreed separately.
  • The external dependency section may be maintained separately by a procurement or vendor governance function, in which case cross-reference it rather than duplicating it.
  • A register with many rows benefits from a status filter, which is the reason for insisting on a fixed status set rather than free text.

Alignment & Dependencies

1. Pre-requisites & Inputs (Upstream Dependencies)

  • Mandatory:
    • Program Charter (PMO-00.02) or Portfolio Roadmap (PMO-00.01)
    • Project Schedules (PMO-04.03.08)
  • Optional / Contextual:
    • Milestone Lists (PMO-04.03.04)
    • Procurement Plans (PMO-04.09.01)

2. Downstream Dependents

  • Mandatory:
    • Project Schedules (PMO-04.03.08)
    • Program Status Reports (PMO-06.01)
    • Risk Registers (PMO-04.08.02)
  • Optional / Contextual:
    • Lookahead Planning Log (PMO-04.03.10)
    • Change Requests (PMO-05.03)

5. How?

To accurately and professionally complete the INTERDEPENDENCY REGISTER, the responsible party must populate the following sections based on the project context (ensure parameters.md is referenced for global project variables):

  • Register Scope and Level: What this register covers and at what level it is maintained, whether portfolio-wide, program-level, or project-level. The level decides which plan the register is compared against, and a portfolio register read against a project schedule produces conclusions that are true of neither.
  • Programs or Projects Covered: The programs, projects, or components whose mutual dependencies are recorded, by name and identifier so the list can be joined to the portfolio roadmap. A register that names no components cannot be checked for completeness, and an incomplete register reads as a complete one.
  • Source of Truth or Extract: Whether this register is the authoritative record or an extract from a planning tool. Record which, because a reader who treats an extract as authoritative will act on a date that has since moved, and the error is invisible until the dependency is missed.
  • Review Cycle: How often the register is reviewed and by which forum. The cycle is what makes two versions comparable, and a register refreshed on no cycle describes the portfolio as it once was rather than as it is.
  • Register Owner: The single role accountable for the register as a whole, which is normally not the owner of any one dependency in it. Where this is left blank, the register has contributors but no one who notices that a row has gone stale.
  • Last Updated: The date the register was last reviewed, and against which version of the portfolio roadmap. Without it, a reader has no way to tell a current register from an abandoned one, and the two look identical on the page.
  • ID: The identifier for the dependency, used in the escalation section and in reporting so a threatened dependency can be referred to without ambiguity.
  • Predecessor: The project or component that must deliver first, named and identified so the row can be joined to the portfolio roadmap. "Project B" is not a predecessor; the component's own identifier is, because that is what survives it being renamed.
  • Successor: The project or component that is waiting. Where the same predecessor is needed by several successors, record a row for each rather than listing them together, because the required dates and the impacts differ and one date cannot serve all of them.
  • Deliverable or Condition: What specifically is being waited on, stated so that it can be confirmed as delivered or not. "Waiting for Project B" cannot be chased when Project B slips, because nobody knows what to ask for; "waiting for the signed data migration specification from Project B" can be chased, and can be closed.
  • Dependency Type: Whether the relationship is Finish to Start, Start to Start, Finish to Finish, or Start to Finish. The type determines how much float the successor has, and Finish to Start is the only one needing no explanation; the others arise where two projects must move together and cannot be read from the names alone.
  • Required By: The date by which the successor needs the deliverable. This is the successor's requirement, and recording the predecessor's forecast here instead hides the gap between what is needed and what has been promised, which is the only figure worth watching.
  • Agreed Date: The date the predecessor has committed to. Kept beside the required date so the gap between the two is visible in the register itself; where the agreed date is later than the required date, that gap is the dependency's risk, and it is usually found out by being overrun rather than by being read.
  • Status: Where the dependency currently stands against the fixed set agreed for this register, such as On Track, At Risk, Breached, or Agreed. A free-text status cannot be filtered, and a register of forty dependencies that cannot be filtered is a document nobody consults when they need to answer a question about one of them.
  • Impact if Late: What happens to the successor if the predecessor misses the required date, in schedule, cost, or scope terms. A dependency with no stated impact cannot be escalated, because nobody can say what is at stake, and an escalation that cannot state the stake is usually declined.
  • ID: The identifier for the external dependency, so it can be referred to in reporting and joined to any contract or correspondence that covers it.
  • External Party: The organisation outside the program through which the dependency runs, named by the role it plays rather than by the individual, so the row survives a change of contact and remains readable to someone who has not met them.
  • Dependency Description: What the external party is expected to provide, approve, or decide, and by when. State it as something that can be confirmed as done, since a dependency described as ongoing support cannot be closed and will therefore never show as satisfied.
  • Contractual Basis: Whether the dependency is covered by a contract, a memorandum of understanding, a formal letter, or nothing in writing. This column decides whether the dependency can be enforced, and a commitment taken in correspondence and one written into a contract look identical in every other column while being entirely different in practice.
  • Required By: The date the program needs this, which for an external dependency is usually a hard commercial or regulatory date rather than a date the program chose. Record where the date comes from, because an external date the program did not set is a date it cannot move.
  • Status: Where the dependency stands against the fixed set. For external dependencies record separately whether the external party has confirmed it, since the program can know its own position accurately and the other party's only by asking.
  • Owner: Who is accountable for the relationship with the external party, which is normally not the person who needs the deliverable. Separating the two is what stops the urgency of a need being communicated through whoever happens to have the contact.
  • Dependency ID: The dependency the escalation concerns, so the row can be joined back to the register. An escalation recorded without this reference cannot be traced to the thing it was about, and the next cycle repeats it.
  • Trigger: What caused the escalation: a missed agreed date, an explicit refusal, a change on the predecessor's side, or a commercial dispute. The remedy differs in each case, and an escalation that does not distinguish them tends to produce a general escalation that resolves nothing.
  • Escalated To: Who it was escalated to, named rather than described, so the reader knows whether the person holds the authority to decide. An escalation to somebody who cannot decide records the disagreement without recording a resolution.
  • Action Agreed: What was decided or agreed, which is what stops the same question being escalated again next cycle with the same outcome. Where nothing was agreed, record that explicitly, because a blank action and an unresolved escalation look identical once the register has been read a few times.
  • Date: When the escalation happened, and where relevant when it will next be reviewed. An escalation without a date has no position in the sequence, and the register becomes a list of grievances rather than a record of decisions.

📥 Associated Templates


6. Reference Example

A fully completed, gold-standard reference example illustrating this artifact in practice is available:

📖 Completed Example: 00_03_Interdependency_Register_Example.md

LLM Generation Prompt & Agent Instructions

INTERDEPENDENCY REGISTER - LLM GENERATION GUIDE

System Prompt / Instructions: This document serves as the detailed instruction set for generating the INTERDEPENDENCY REGISTER. When asked to populate this form, use the guidance provided for each section below to accurately generate the required content. Reference parameters.md for global project variables.

Context & Definition: The interdependency register records the relationships between the components of a program, portfolio, or project, in the specific sense that one cannot proceed, or cannot proceed on its own dates, until another delivers something. It is a forward-looking record: it is what tells the reader what will have to be true before the plan works.

Alignment: This interdependency register must be consistent with: Portfolio roadmap, Program charter, Project management plan, Schedule management plan.

Register Scope and Level

Instruction: What this register covers and at what level it is maintained, whether portfolio-wide, program-level, or project-level. The level decides which plan the register is compared against, and a portfolio register read against a project schedule produces conclusions that are true of neither.

Generated value: [ Add details... ]

Programs or Projects Covered

Instruction: The programs, projects, or components whose mutual dependencies are recorded, by name and identifier so the list can be joined to the portfolio roadmap. A register that names no components cannot be checked for completeness, and an incomplete register reads as a complete one.

Generated value: [ Add details... ]

Source of Truth or Extract

Instruction: Whether this register is the authoritative record or an extract from a planning tool. Record which, because a reader who treats an extract as authoritative will act on a date that has since moved, and the error is invisible until the dependency is missed.

Generated value: [ Add details... ]

Review Cycle

Instruction: How often the register is reviewed and by which forum. The cycle is what makes two versions comparable, and a register refreshed on no cycle describes the portfolio as it once was rather than as it is.

Generated value: [ Add details... ]

Register Owner

Instruction: The single role accountable for the register as a whole, which is normally not the owner of any one dependency in it. Where this is left blank, the register has contributors but no one who notices that a row has gone stale.

Generated value: [ Add details... ]

Last Updated

Instruction: The date the register was last reviewed, and against which version of the portfolio roadmap. Without it, a reader has no way to tell a current register from an abandoned one, and the two look identical on the page.

Generated value: [ Add details... ]

ID

Instruction: The identifier for the dependency, used in the escalation section and in reporting so a threatened dependency can be referred to without ambiguity.

Generated value: [ Add details... ]

Predecessor

Instruction: The project or component that must deliver first, named and identified so the row can be joined to the portfolio roadmap. "Project B" is not a predecessor; the component's own identifier is, because that is what survives it being renamed.

Generated value: [ Add details... ]

Successor

Instruction: The project or component that is waiting. Where the same predecessor is needed by several successors, record a row for each rather than listing them together, because the required dates and the impacts differ and one date cannot serve all of them.

Generated value: [ Add details... ]

Deliverable or Condition

Instruction: What specifically is being waited on, stated so that it can be confirmed as delivered or not. "Waiting for Project B" cannot be chased when Project B slips, because nobody knows what to ask for; "waiting for the signed data migration specification from Project B" can be chased, and can be closed.

Generated value: [ Add details... ]

Dependency Type

Instruction: Whether the relationship is Finish to Start, Start to Start, Finish to Finish, or Start to Finish. The type determines how much float the successor has, and Finish to Start is the only one needing no explanation; the others arise where two projects must move together and cannot be read from the names alone.

Generated value: [ Add details... ]

Required By

Instruction: The date by which the successor needs the deliverable. This is the successor's requirement, and recording the predecessor's forecast here instead hides the gap between what is needed and what has been promised, which is the only figure worth watching.

Generated value: [ Add details... ]

Agreed Date

Instruction: The date the predecessor has committed to. Kept beside the required date so the gap between the two is visible in the register itself; where the agreed date is later than the required date, that gap is the dependency's risk, and it is usually found out by being overrun rather than by being read.

Generated value: [ Add details... ]

Status

Instruction: Where the dependency currently stands against the fixed set agreed for this register, such as On Track, At Risk, Breached, or Agreed. A free-text status cannot be filtered, and a register of forty dependencies that cannot be filtered is a document nobody consults when they need to answer a question about one of them.

Generated value: [ Add details... ]

Impact if Late

Instruction: What happens to the successor if the predecessor misses the required date, in schedule, cost, or scope terms. A dependency with no stated impact cannot be escalated, because nobody can say what is at stake, and an escalation that cannot state the stake is usually declined.

Generated value: [ Add details... ]

ID

Instruction: The identifier for the external dependency, so it can be referred to in reporting and joined to any contract or correspondence that covers it.

Generated value: [ Add details... ]

External Party

Instruction: The organisation outside the program through which the dependency runs, named by the role it plays rather than by the individual, so the row survives a change of contact and remains readable to someone who has not met them.

Generated value: [ Add details... ]

Dependency Description

Instruction: What the external party is expected to provide, approve, or decide, and by when. State it as something that can be confirmed as done, since a dependency described as ongoing support cannot be closed and will therefore never show as satisfied.

Generated value: [ Add details... ]

Contractual Basis

Instruction: Whether the dependency is covered by a contract, a memorandum of understanding, a formal letter, or nothing in writing. This column decides whether the dependency can be enforced, and a commitment taken in correspondence and one written into a contract look identical in every other column while being entirely different in practice.

Generated value: [ Add details... ]

Required By

Instruction: The date the program needs this, which for an external dependency is usually a hard commercial or regulatory date rather than a date the program chose. Record where the date comes from, because an external date the program did not set is a date it cannot move.

Generated value: [ Add details... ]

Status

Instruction: Where the dependency stands against the fixed set. For external dependencies record separately whether the external party has confirmed it, since the program can know its own position accurately and the other party's only by asking.

Generated value: [ Add details... ]

Owner

Instruction: Who is accountable for the relationship with the external party, which is normally not the person who needs the deliverable. Separating the two is what stops the urgency of a need being communicated through whoever happens to have the contact.

Generated value: [ Add details... ]

Dependency ID

Instruction: The dependency the escalation concerns, so the row can be joined back to the register. An escalation recorded without this reference cannot be traced to the thing it was about, and the next cycle repeats it.

Generated value: [ Add details... ]

Trigger

Instruction: What caused the escalation: a missed agreed date, an explicit refusal, a change on the predecessor's side, or a commercial dispute. The remedy differs in each case, and an escalation that does not distinguish them tends to produce a general escalation that resolves nothing.

Generated value: [ Add details... ]

Escalated To

Instruction: Who it was escalated to, named rather than described, so the reader knows whether the person holds the authority to decide. An escalation to somebody who cannot decide records the disagreement without recording a resolution.

Generated value: [ Add details... ]

Action Agreed

Instruction: What was decided or agreed, which is what stops the same question being escalated again next cycle with the same outcome. Where nothing was agreed, record that explicitly, because a blank action and an unresolved escalation look identical once the register has been read a few times.

Generated value: [ Add details... ]

Date

Instruction: When the escalation happened, and where relevant when it will next be reviewed. An escalation without a date has no position in the sequence, and the register becomes a list of grievances rather than a record of decisions.

Generated value: [ Add details... ]

PMO-00.03 Phase 00: Program and Portfolio Management Realistic Case Study Benchmark
Date Prepared
2026-03-15
Program Manager
Khalid Al-Otaibi, PgMP
Prepared By
Faisal Al-Harbi, PMP (Senior Project Manager)

Interdependency Register (Reference Example)

🏆 Gold Standard Reference Example: This document illustrates a fully completed, production-grade artifact adhering to the Tasleemat PMO Framework (PMO-00.03). All company names, project references, and figures are realistic fictional simulations.


Apex Global Solutions

Enterprise Digital Transformation & Cloud Operations Portfolio - GOV-2026-ERP

INTERDEPENDENCY REGISTER


1. Register Basis

Register Scope and Level: Deliver operational excellence, process automation, and unified cloud integration adhering to enterprise standards.

Programs or Projects Covered: Fully defined and aligned with Apex Global Solutions operational baseline and project objectives.

Source of Truth or Extract: Fully defined and aligned with Apex Global Solutions operational baseline and project objectives.

Review Cycle: 2026-Q1 through 2027-Q4 (Annual cycle with quarterly governance refresh)

Register Owner: Elena Vance, PfMP (Portfolio Transformation Director)

Last Updated: 2026-Q1 through 2027-Q4 (Annual cycle with quarterly governance refresh)


2. Internal Interdependencies

ID Predecessor Successor Deliverable or Condition Dependency Type Required By Agreed Date Status Impact if Late
INIT-01 INIT-01 (Cloud ERP Core) Smart Supply Chain Engine Approved and aligned with Apex Global Solutions governance baseline Finish-to-Start (FS) 2026-06-30 2026-06-30 In Progress 2-week schedule slippage on integration testing window
REQ-02 INIT-02 (Supply Chain) Executive BI Platform Approved and aligned with Apex Global Solutions governance baseline Start-to-Start (SS) 2026-09-30 2026-09-30 Completed Rescheduling of operational pilot rollout date
ACT-03 INIT-01 (Cloud Architecture) Employee Self-Service Portal Approved and aligned with Apex Global Solutions governance baseline Finish-to-Finish (FF) 2026-11-30 2026-11-30 Planned Minor reallocation of cloud professional services
BEN-04 INIT-03 (Data Layer) Enterprise API Gateway Approved and aligned with Apex Global Solutions governance baseline Finish-to-Start (FS) 2027-01-31 2027-01-31 Approved Postponement of cohort 2 training wave
WBS-05 INIT-01 (Cloud ERP Core) Smart Supply Chain Engine Approved and aligned with Apex Global Solutions governance baseline Finish-to-Start (FS) 2027-03-31 2027-03-31 In Progress 2-week schedule slippage on integration testing window

3. External Interdependencies

ID External Party Dependency Description Contractual Basis Required By Status Owner
INIT-01 Approved and aligned with Apex Global Solutions governance baseline 2026-06-30 Approved and aligned with Apex Global Solutions governance baseline 2026-06-30 In Progress Elena Vance, PfMP
REQ-02 Approved and aligned with Apex Global Solutions governance baseline 2026-09-30 Approved and aligned with Apex Global Solutions governance baseline 2026-09-30 Completed Faisal Al-Harbi, PMP
ACT-03 Approved and aligned with Apex Global Solutions governance baseline 2026-11-30 Approved and aligned with Apex Global Solutions governance baseline 2026-11-30 Planned Tariq Al-Mansoor, PfMP
BEN-04 Approved and aligned with Apex Global Solutions governance baseline 2027-01-31 Approved and aligned with Apex Global Solutions governance baseline 2027-01-31 Approved Sultan Al-Dossary

4. Escalations and Agreements

Dependency ID Trigger Escalated To Action Agreed Date
INIT-01 Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline 2026-06-30
REQ-02 Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline 2026-09-30
ACT-03 Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline 2026-11-30
BEN-04 Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline Approved and aligned with Apex Global Solutions governance baseline 2027-01-31

5. Sign-off and Approvals

Role Name Signature Date
Program / Portfolio Manager Khalid Al-Otaibi, PgMP [Electronically Signed] 2026-03-18
Delivery / Component Lead Faisal Al-Harbi, PMP [Electronically Signed] 2026-03-18
PMO Lead Tariq Al-Mansoor, PfMP [Electronically Signed] 2026-03-18
---
Template: Interdependency Register | Ref: PMO-00.03
Generated on: 2026-03-15 10:00 UTC, by Tasleemat

Draft 2020-12 JSON Schema

Canonical machine-readable data contract for automated payload validation with tasleemat CLI.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tasleemat.pmo/schemas/completed/PMO-00.03.schema.json",
  "title": "Completed Interdependency Register Data Contract",
  "description": "Additive structural schema validating completed Interdependency Register artifact data payloads (PMO-00.03).",
  "type": "object",
  "properties": {
    "artifact_id": {
      "type": "string",
      "const": "PMO-00.03"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "project_name": {
          "type": "string",
          "minLength": 1
        },
        "project_code": {
          "type": "string"
        },
        "date_prepared": {
          "type": "string",
          "format": "date"
        },
        "project_manager": {
          "type": "string",
          "minLength": 1
        },
        "prepared_by": {
          "type": "string",
          "minLength": 1
        },
        "version": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "baselined",
            "in_review",
            "approved"
          ]
        }
      },
      "required": [
        "project_name",
        "date_prepared",
        "project_manager",
        "prepared_by"
      ]
    },
    "register_basis": {
      "type": "object",
      "properties": {
        "register_scope_and_level": {
          "type": "string",
          "minLength": 1,
          "description": "What this register covers and at what level it is maintained, whether portfolio-wide, program-level, or project-level. The level decides which plan the register is compared against, and a portfolio register read against a project schedule produces conclusions that are true of neither."
        },
        "programs_or_projects_covered": {
          "type": "string",
          "minLength": 1,
          "description": "The programs, projects, or components whose mutual dependencies are recorded, by name and identifier so the list can be joined to the portfolio roadmap. A register that names no components cannot be checked for completeness, and an incomplete register reads as a complete one."
        },
        "source_of_truth_or_extract": {
          "type": "string",
          "minLength": 1,
          "description": "Whether this register is the authoritative record or an extract from a planning tool. Record which, because a reader who treats an extract as authoritative will act on a date that has since moved, and the error is invisible until the dependency is missed."
        },
        "review_cycle": {
          "type": "string",
          "minLength": 1,
          "description": "How often the register is reviewed and by which forum. The cycle is what makes two versions comparable, and a register refreshed on no cycle describes the portfolio as it once was rather than as it is."
        },
        "register_owner": {
          "type": "string",
          "minLength": 1,
          "description": "The single role accountable for the register as a whole, which is normally not the owner of any one dependency in it. Where this is left blank, the register has contributors but no one who notices that a row has gone stale."
        },
        "last_updated": {
          "type": "string",
          "minLength": 1,
          "description": "The date the register was last reviewed, and against which version of the portfolio roadmap. Without it, a reader has no way to tell a current register from an abandoned one, and the two look identical on the page."
        }
      },
      "required": [
        "register_scope_and_level",
        "programs_or_projects_covered",
        "source_of_truth_or_extract",
        "review_cycle",
        "register_owner",
        "last_updated"
      ]
    },
    "internal_interdependencies": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "The identifier for the dependency, used in the escalation section and in reporting so a threatened dependency can be referred to without ambiguity."
        },
        "predecessor": {
          "type": "string",
          "minLength": 1,
          "description": "The project or component that must deliver first, named and identified so the row can be joined to the portfolio roadmap. \"Project B\" is not a predecessor; the component's own identifier is, because that is what survives it being renamed."
        },
        "successor": {
          "type": "string",
          "minLength": 1,
          "description": "The project or component that is waiting. Where the same predecessor is needed by several successors, record a row for each rather than listing them together, because the required dates and the impacts differ and one date cannot serve all of them."
        },
        "deliverable_or_condition": {
          "type": "string",
          "minLength": 1,
          "description": "What specifically is being waited on, stated so that it can be confirmed as delivered or not. \"Waiting for Project B\" cannot be chased when Project B slips, because nobody knows what to ask for; \"waiting for the signed data migration specification from Project B\" can be chased, and can be closed."
        },
        "dependency_type": {
          "type": "string",
          "minLength": 1,
          "description": "Whether the relationship is Finish to Start, Start to Start, Finish to Finish, or Start to Finish. The type determines how much float the successor has, and Finish to Start is the only one needing no explanation; the others arise where two projects must move together and cannot be read from the names alone."
        },
        "required_by": {
          "type": "string",
          "minLength": 1,
          "description": "The date by which the successor needs the deliverable. This is the successor's requirement, and recording the predecessor's forecast here instead hides the gap between what is needed and what has been promised, which is the only figure worth watching."
        },
        "agreed_date": {
          "type": "string",
          "minLength": 1,
          "description": "The date the predecessor has committed to. Kept beside the required date so the gap between the two is visible in the register itself; where the agreed date is later than the required date, that gap is the dependency's risk, and it is usually found out by being overrun rather than by being read."
        },
        "status": {
          "type": "string",
          "minLength": 1,
          "description": "Where the dependency currently stands against the fixed set agreed for this register, such as On Track, At Risk, Breached, or Agreed. A free-text status cannot be filtered, and a register of forty dependencies that cannot be filtered is a document nobody consults when they need to answer a question about one of them."
        },
        "impact_if_late": {
          "type": "string",
          "minLength": 1,
          "description": "What happens to the successor if the predecessor misses the required date, in schedule, cost, or scope terms. A dependency with no stated impact cannot be escalated, because nobody can say what is at stake, and an escalation that cannot state the stake is usually declined."
        }
      },
      "required": [
        "id",
        "predecessor",
        "successor",
        "deliverable_or_condition",
        "dependency_type",
        "required_by",
        "agreed_date",
        "status",
        "impact_if_late"
      ]
    },
    "external_interdependencies": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "The identifier for the external dependency, so it can be referred to in reporting and joined to any contract or correspondence that covers it."
        },
        "external_party": {
          "type": "string",
          "minLength": 1,
          "description": "The organisation outside the program through which the dependency runs, named by the role it plays rather than by the individual, so the row survives a change of contact and remains readable to someone who has not met them."
        },
        "dependency_description": {
          "type": "string",
          "minLength": 1,
          "description": "What the external party is expected to provide, approve, or decide, and by when. State it as something that can be confirmed as done, since a dependency described as ongoing support cannot be closed and will therefore never show as satisfied."
        },
        "contractual_basis": {
          "type": "string",
          "minLength": 1,
          "description": "Whether the dependency is covered by a contract, a memorandum of understanding, a formal letter, or nothing in writing. This column decides whether the dependency can be enforced, and a commitment taken in correspondence and one written into a contract look identical in every other column while being entirely different in practice."
        },
        "required_by": {
          "type": "string",
          "minLength": 1,
          "description": "The date the program needs this, which for an external dependency is usually a hard commercial or regulatory date rather than a date the program chose. Record where the date comes from, because an external date the program did not set is a date it cannot move."
        },
        "status": {
          "type": "string",
          "minLength": 1,
          "description": "Where the dependency stands against the fixed set. For external dependencies record separately whether the external party has confirmed it, since the program can know its own position accurately and the other party's only by asking."
        },
        "owner": {
          "type": "string",
          "minLength": 1,
          "description": "Who is accountable for the relationship with the external party, which is normally not the person who needs the deliverable. Separating the two is what stops the urgency of a need being communicated through whoever happens to have the contact."
        }
      },
      "required": [
        "id",
        "external_party",
        "dependency_description",
        "contractual_basis",
        "required_by",
        "status",
        "owner"
      ]
    },
    "escalations_and_agreements": {
      "type": "object",
      "properties": {
        "dependency_id": {
          "type": "string",
          "minLength": 1,
          "description": "The dependency the escalation concerns, so the row can be joined back to the register. An escalation recorded without this reference cannot be traced to the thing it was about, and the next cycle repeats it."
        },
        "trigger": {
          "type": "string",
          "minLength": 1,
          "description": "What caused the escalation: a missed agreed date, an explicit refusal, a change on the predecessor's side, or a commercial dispute. The remedy differs in each case, and an escalation that does not distinguish them tends to produce a general escalation that resolves nothing."
        },
        "escalated_to": {
          "type": "string",
          "minLength": 1,
          "description": "Who it was escalated to, named rather than described, so the reader knows whether the person holds the authority to decide. An escalation to somebody who cannot decide records the disagreement without recording a resolution."
        },
        "action_agreed": {
          "type": "string",
          "minLength": 1,
          "description": "What was decided or agreed, which is what stops the same question being escalated again next cycle with the same outcome. Where nothing was agreed, record that explicitly, because a blank action and an unresolved escalation look identical once the register has been read a few times."
        },
        "date": {
          "type": "string",
          "minLength": 1,
          "description": "When the escalation happened, and where relevant when it will next be reviewed. An escalation without a date has no position in the sequence, and the register becomes a list of grievances rather than a record of decisions."
        }
      },
      "required": [
        "dependency_id",
        "trigger",
        "escalated_to",
        "action_agreed",
        "date"
      ]
    }
  },
  "required": [
    "artifact_id",
    "metadata",
    "register_basis",
    "internal_interdependencies",
    "external_interdependencies",
    "escalations_and_agreements"
  ]
}
📋 Form Field Definitions Dictionary (Legacy Specification)
{
  "_llm_instructions": "Fill in the 'project_title' and 'date_prepared' properties, and the 'value' property of each field, based on the provided project context. Reference parameters.md for global project variables.",
  "form_name": "Interdependency Register",
  "document_reference": "PMO-00.03",
  "project_title": "",
  "date_prepared": "",
  "fields": {
    "f01_Register_Scope_and_Level": {
      "section": "Register Basis",
      "label": "Register Scope and Level",
      "guidance": "What this register covers and at what level it is maintained, whether portfolio-wide, program-level, or project-level. The level decides which plan the register is compared against, and a portfolio register read against a project schedule produces conclusions that are true of neither.",
      "value": ""
    },
    "f02_Programs_or_Projects_Covered": {
      "section": "Register Basis",
      "label": "Programs or Projects Covered",
      "guidance": "The programs, projects, or components whose mutual dependencies are recorded, by name and identifier so the list can be joined to the portfolio roadmap. A register that names no components cannot be checked for completeness, and an incomplete register reads as a complete one.",
      "value": ""
    },
    "f03_Source_of_Truth_or_Extract": {
      "section": "Register Basis",
      "label": "Source of Truth or Extract",
      "guidance": "Whether this register is the authoritative record or an extract from a planning tool. Record which, because a reader who treats an extract as authoritative will act on a date that has since moved, and the error is invisible until the dependency is missed.",
      "value": ""
    },
    "f04_Review_Cycle": {
      "section": "Register Basis",
      "label": "Review Cycle",
      "guidance": "How often the register is reviewed and by which forum. The cycle is what makes two versions comparable, and a register refreshed on no cycle describes the portfolio as it once was rather than as it is.",
      "value": ""
    },
    "f05_Register_Owner": {
      "section": "Register Basis",
      "label": "Register Owner",
      "guidance": "The single role accountable for the register as a whole, which is normally not the owner of any one dependency in it. Where this is left blank, the register has contributors but no one who notices that a row has gone stale.",
      "value": ""
    },
    "f06_Last_Updated": {
      "section": "Register Basis",
      "label": "Last Updated",
      "guidance": "The date the register was last reviewed, and against which version of the portfolio roadmap. Without it, a reader has no way to tell a current register from an abandoned one, and the two look identical on the page.",
      "value": ""
    },
    "f07_ID": {
      "section": "Internal Interdependencies",
      "label": "ID",
      "guidance": "The identifier for the dependency, used in the escalation section and in reporting so a threatened dependency can be referred to without ambiguity.",
      "value": ""
    },
    "f08_Predecessor": {
      "section": "Internal Interdependencies",
      "label": "Predecessor",
      "guidance": "The project or component that must deliver first, named and identified so the row can be joined to the portfolio roadmap. \"Project B\" is not a predecessor; the component's own identifier is, because that is what survives it being renamed.",
      "value": ""
    },
    "f09_Successor": {
      "section": "Internal Interdependencies",
      "label": "Successor",
      "guidance": "The project or component that is waiting. Where the same predecessor is needed by several successors, record a row for each rather than listing them together, because the required dates and the impacts differ and one date cannot serve all of them.",
      "value": ""
    },
    "f10_Deliverable_or_Condition": {
      "section": "Internal Interdependencies",
      "label": "Deliverable or Condition",
      "guidance": "What specifically is being waited on, stated so that it can be confirmed as delivered or not. \"Waiting for Project B\" cannot be chased when Project B slips, because nobody knows what to ask for; \"waiting for the signed data migration specification from Project B\" can be chased, and can be closed.",
      "value": ""
    },
    "f11_Dependency_Type": {
      "section": "Internal Interdependencies",
      "label": "Dependency Type",
      "guidance": "Whether the relationship is Finish to Start, Start to Start, Finish to Finish, or Start to Finish. The type determines how much float the successor has, and Finish to Start is the only one needing no explanation; the others arise where two projects must move together and cannot be read from the names alone.",
      "value": ""
    },
    "f12_Required_By": {
      "section": "Internal Interdependencies",
      "label": "Required By",
      "guidance": "The date by which the successor needs the deliverable. This is the successor's requirement, and recording the predecessor's forecast here instead hides the gap between what is needed and what has been promised, which is the only figure worth watching.",
      "value": ""
    },
    "f13_Agreed_Date": {
      "section": "Internal Interdependencies",
      "label": "Agreed Date",
      "guidance": "The date the predecessor has committed to. Kept beside the required date so the gap between the two is visible in the register itself; where the agreed date is later than the required date, that gap is the dependency's risk, and it is usually found out by being overrun rather than by being read.",
      "value": ""
    },
    "f14_Status": {
      "section": "Internal Interdependencies",
      "label": "Status",
      "guidance": "Where the dependency currently stands against the fixed set agreed for this register, such as On Track, At Risk, Breached, or Agreed. A free-text status cannot be filtered, and a register of forty dependencies that cannot be filtered is a document nobody consults when they need to answer a question about one of them.",
      "value": ""
    },
    "f15_Impact_if_Late": {
      "section": "Internal Interdependencies",
      "label": "Impact if Late",
      "guidance": "What happens to the successor if the predecessor misses the required date, in schedule, cost, or scope terms. A dependency with no stated impact cannot be escalated, because nobody can say what is at stake, and an escalation that cannot state the stake is usually declined.",
      "value": ""
    },
    "f16_ID": {
      "section": "External Interdependencies",
      "label": "ID",
      "guidance": "The identifier for the external dependency, so it can be referred to in reporting and joined to any contract or correspondence that covers it.",
      "value": ""
    },
    "f17_External_Party": {
      "section": "External Interdependencies",
      "label": "External Party",
      "guidance": "The organisation outside the program through which the dependency runs, named by the role it plays rather than by the individual, so the row survives a change of contact and remains readable to someone who has not met them.",
      "value": ""
    },
    "f18_Dependency_Description": {
      "section": "External Interdependencies",
      "label": "Dependency Description",
      "guidance": "What the external party is expected to provide, approve, or decide, and by when. State it as something that can be confirmed as done, since a dependency described as ongoing support cannot be closed and will therefore never show as satisfied.",
      "value": ""
    },
    "f19_Contractual_Basis": {
      "section": "External Interdependencies",
      "label": "Contractual Basis",
      "guidance": "Whether the dependency is covered by a contract, a memorandum of understanding, a formal letter, or nothing in writing. This column decides whether the dependency can be enforced, and a commitment taken in correspondence and one written into a contract look identical in every other column while being entirely different in practice.",
      "value": ""
    },
    "f20_Required_By": {
      "section": "External Interdependencies",
      "label": "Required By",
      "guidance": "The date the program needs this, which for an external dependency is usually a hard commercial or regulatory date rather than a date the program chose. Record where the date comes from, because an external date the program did not set is a date it cannot move.",
      "value": ""
    },
    "f21_Status": {
      "section": "External Interdependencies",
      "label": "Status",
      "guidance": "Where the dependency stands against the fixed set. For external dependencies record separately whether the external party has confirmed it, since the program can know its own position accurately and the other party's only by asking.",
      "value": ""
    },
    "f22_Owner": {
      "section": "External Interdependencies",
      "label": "Owner",
      "guidance": "Who is accountable for the relationship with the external party, which is normally not the person who needs the deliverable. Separating the two is what stops the urgency of a need being communicated through whoever happens to have the contact.",
      "value": ""
    },
    "f23_Dependency_ID": {
      "section": "Escalations and Agreements",
      "label": "Dependency ID",
      "guidance": "The dependency the escalation concerns, so the row can be joined back to the register. An escalation recorded without this reference cannot be traced to the thing it was about, and the next cycle repeats it.",
      "value": ""
    },
    "f24_Trigger": {
      "section": "Escalations and Agreements",
      "label": "Trigger",
      "guidance": "What caused the escalation: a missed agreed date, an explicit refusal, a change on the predecessor's side, or a commercial dispute. The remedy differs in each case, and an escalation that does not distinguish them tends to produce a general escalation that resolves nothing.",
      "value": ""
    },
    "f25_Escalated_To": {
      "section": "Escalations and Agreements",
      "label": "Escalated To",
      "guidance": "Who it was escalated to, named rather than described, so the reader knows whether the person holds the authority to decide. An escalation to somebody who cannot decide records the disagreement without recording a resolution.",
      "value": ""
    },
    "f26_Action_Agreed": {
      "section": "Escalations and Agreements",
      "label": "Action Agreed",
      "guidance": "What was decided or agreed, which is what stops the same question being escalated again next cycle with the same outcome. Where nothing was agreed, record that explicitly, because a blank action and an unresolved escalation look identical once the register has been read a few times.",
      "value": ""
    },
    "f27_Date": {
      "section": "Escalations and Agreements",
      "label": "Date",
      "guidance": "When the escalation happened, and where relevant when it will next be reviewed. An escalation without a date has no position in the sequence, and the register becomes a list of grievances rather than a record of decisions.",
      "value": ""
    }
  }
}