Skip to main content

Search OfficeIMO

Enter a topic, API type, or PowerShell command.

An editable decision record

Preserve why a team chose an approach, not just the final choice. The record puts the alternatives beside their strengths and costs, then states the condition that should trigger another review.

Start with
Decision context and evaluated options
Generate
DOCX + PDF
Generated Word example: An editable decision record
Page 1 · Generated by the example below

How it works

  1. Identify the decision

    Start with an identifier, owner, status, and date so the record can be referenced from other documents.

  2. Compare alternatives explicitly

    Build a three-column table for the option, its strength, and its trade-off.

  3. Record the consequence

    State the selected approach and the conditions for revisiting it in separate sections.

The C# source

This is the complete example file used to generate the download. The walkthrough runner creates the output directory and produces the additional previews.

using System.IO;
using OfficeIMO.Word;

namespace OfficeIMO.Examples.Showcase.Workflows;

/// <summary>Captures a decision, the alternatives considered, and the conditions for revisiting it.</summary>
internal static class WordDecisionRecord {
    internal static void Create(string folder) {
        using WordDocument document = WordDocument.Create(Path.Combine(folder, "example.docx"));
        document.Settings.FontFamily = "Carlito";
        document.Settings.FontSize = 11;
        document.AddParagraph("Decision record / DR-014").Style = WordParagraphStyles.Heading1;
        document.AddParagraph("Standardize the weekly service report");
        document.AddParagraph("Status: Accepted | Decision owner: Operations | Date: 14 September 2026");
        document.AddParagraph("Context").Style = WordParagraphStyles.Heading2;
        document.AddParagraph("Teams currently prepare separate reports. Reviewers need consistent measures and a clear place to find the supporting data.");

        document.AddParagraph("Options considered").Style = WordParagraphStyles.Heading2;
        string[,] options = {
            { "Option", "Strength", "Trade-off" },
            { "Free-form documents", "Flexible for each team", "Hard to compare" },
            { "Shared document template", "Consistent review structure", "Requires an owner" },
            { "Dashboard only", "Always available", "Harder to annotate offline" }
        };
        WordTable table = document.AddTable(4, 3, WordTableStyle.TableGrid);
        for (int row = 0; row < 4; row++) {
            for (int column = 0; column < 3; column++) {
                table.Rows[row].Cells[column].Paragraphs[0].Text = options[row, column];
                table.Rows[row].Cells[column].Paragraphs[0].Bold = row == 0;
                if (row == 0) table.Rows[row].Cells[column].ShadingFillColorHex = "E8EEF8";
            }
        }
        document.AddParagraph("Decision").Style = WordParagraphStyles.Heading2;
        document.AddParagraph("Use a shared document template, with links to the source dashboard for detailed investigation.");
        document.AddParagraph("Revisit when").Style = WordParagraphStyles.Heading2;
        document.AddParagraph("The review audience changes, the reporting measures change, or the preparation cost exceeds one hour per team.");
        foreach (WordParagraph paragraph in document.Paragraphs) {
            paragraph.FontFamily = "Carlito";
            paragraph.FontSize = 11;
            paragraph.LineSpacingAfterPoints = 7;
            if (paragraph.Style == WordParagraphStyles.Heading1) {
                paragraph.FontSize = 26;
                paragraph.Bold = true;
                paragraph.LineSpacingAfterPoints = 12;
            } else if (paragraph.Style == WordParagraphStyles.Heading2) {
                paragraph.FontSize = 15;
                paragraph.Bold = true;
                paragraph.LineSpacingBeforePoints = 12;
                paragraph.LineSpacingAfterPoints = 6;
            }
        }
        foreach (WordTable styledTable in document.Tables) {
            styledTable.SetWidthPercentage(100);
            styledTable.SetColumnWidthsPercentage(30, 30, 40);
            foreach (var row in styledTable.Rows) {
                foreach (var cell in row.Cells) {
                    cell.MarginTopCentimeters = 0.10;
                    cell.MarginBottomCentimeters = 0.10;
                    foreach (var paragraph in cell.Paragraphs) {
                        paragraph.FontFamily = "Carlito";
                        paragraph.FontSize = 11;
                        paragraph.LineSpacingAfterPoints = 3;
                    }
                }
            }
        }
        document.Save();
    }
}
Open the C# source file

Run it from the source checkout

Clone the OfficeIMO repository and run this command from its root with the .NET 10 SDK. The first run restores the example project's dependencies.

dotnet run --project OfficeIMO.Examples -f net10.0 -- --showcase-workflows --showcase-example word-decision-record

The files are written to OfficeIMO.Examples/bin/Debug/net10.0/Documents/Workflows/word-decision-record/. To use the example in your application, start with the Word guide and its package setup.

Downloads and scope

What the preview shows

The linked C# example generates this file. The runner reopens and validates the DOCX, exports a PDF, and the preview renders that PDF.

What to keep in mind

The example records a decision in a document. It does not calculate option scores or collect electronic approvals.

Word API reference · Artifact hashes and provenance

Continue with another example

Example source

Download source