Format Documentation
SimML Reference
Complete XML schema reference for the .simml simulation model format. Reverse-engineered from the C# desktop engine's [SimMLElement] and [SimMLAttribute] contract decorators.
Document Structure
<simulation name="..." locale="...">
<?parameter name="@var" value="..." ?>
<execute type="kanban|scrum" limitIntervalsTo="..." ...>
<visual />
<monteCarlo cycles="..." />
<sensitivity cycles="..." estimateMultiplier="..." />
<addStaff cycles="..." />
<ballot type="borda|schulze" />
</execute>
<setup>
<backlog type="simple|custom" simpleCount="..." shuffle="true|false">
<deliverable name="..." order="..." preRequisiteDeliverables="...">
<custom name="..." count="..." estimateLowBound="..." estimateHighBound="...">
<column id="..." estimateLowBound="..." estimateHighBound="..." />
</custom>
</deliverable>
<custom name="..." count="..." ... />
</backlog>
<columns>
<column id="..." wipLimit="..." estimateLowBound="..." estimateHighBound="..." buffer="false" />
</columns>
<iteration storyPointsPerIterationLowBound="..." storyPointsPerIterationHighBound="..." />
<defects>
<defect columnId="..." occurrenceLowBound="..." occurrenceHighBound="..." count="...">
<column columnId="..." estimateLowBound="..." estimateHighBound="..." />
</defect>
</defects>
<blockingEvents>
<blockingEvent columnId="..." occurrenceLowBound="..." occurrenceHighBound="..."
estimateLowBound="..." estimateHighBound="..." />
</blockingEvents>
<addedScopes>
<addedScope occurrenceLowBound="..." occurrenceHighBound="..." count="..." />
</addedScopes>
<forecastDate startDate="..." costPerDay="..." targetDate="...">
<excludes><exclude date="..." /></excludes>
<actuals><actual date="..." count="..." annotation="..." /></actuals>
</forecastDate>
<distributions>
<distribution name="..." shape="..." parameters="..." />
</distributions>
<phases unit="percentage|interval|iteration">
<phase start="..." end="..." estimateMultiplier="..." costPerDay="...">
<column id="..." wipLimit="..." />
</phase>
</phases>
<classOfServices>
<classOfService order="..." default="false" violateWIP="false" skipPercentage="0">
<column id="..." estimateLowBound="..." estimateHighBound="..." />
</classOfService>
</classOfServices>
</setup>
</simulation>Element Explorer
<simulation><simulation>
simulationrequired
Root element of every SimML document. Defines a complete simulation model containing execution parameters and setup configuration.
Attributes(2)
| Attribute | Type | Description | Default | Values |
|---|---|---|---|---|
| name | string | A user-defined name for this simulation model. For reference only. | "" | — |
| locale | string | ISO locale culture string (e.g. "en-US"). If omitted, the culture of the environment running the simulation engine will be used. | System culture | — |
Child Elements (3)
<?parameter>Declares a reusable variable that can be referenced by @name throughout the SimML document. Values are substituted befor...
<execute>Defines how the simulation is run: simulation type, cycle limits, output formatting, and which analysis modes (visual, M...
<setup>Contains the complete simulation configuration: backlog, columns, events, iterations, forecast dates, distributions, pha...
Implementation
C# class: SimulationData
File: FocusedObjective.Contract/Data/SimulationData.cs
Attribute Quick Reference
Every attribute across all elements, searchable. Click an element name to jump to the explorer.
| Element | Attribute | Type | Req | Description | Default |
|---|---|---|---|---|---|
| name | string | A user-defined name for this simulation model. For reference only. | "" | ||
| locale | string | ISO locale culture string (e.g. "en-US"). If omitted, the culture of the environment running the sim... | System culture | ||
| name | string | Yes | Unique name to identify this parameter. Referenced by prefixing with "@". Must not contain @, <, >, ... | — | |
| value | string | Yes | The value assigned when the parameter is referenced by @[name] elsewhere. | — | |
| type | string | Includes this parameter for interactive experiments. | — | ||
| lowest | number | Lowest allowed numeric value for interactive experiments. Number types only. | — | ||
| highest | number | Highest allowed numeric value for interactive experiments. Number types only. | — | ||
| step | number | Increment step size for interactive experiments. Number types only. | — | ||
| type | enum | Simulation model type. | kanban | ||
| limitIntervalsTo | integer | Maximum number of simulation steps. The simulation returns even if not all work is completed by this... | 9000 | ||
| intervalUnit | string | Label describing what each simulation step represents (e.g. "days", "hours"). | "days" | ||
| decimalRounding | integer | Number of decimal places numbers are rounded to in output. | 3 | ||
| dateFormat | string | Date format string used to parse date values throughout the model (e.g. "dd-MMM-yyyy", "yyyyMMdd"). | "yyyyMMdd" | ||
| currencyFormat | string | Currency format string for cost output. | "C2" | ||
| percentageFormat | string | Percentage format string for output. | "P" | ||
| aggregationValue | enum | Statistical aggregation method used to summarize Monte Carlo results into a single forecast figure. | average | ||
| deliverables | string | Pipe-separated list of deliverable names to include in the simulation. When empty (default), all del... | "" | ||
| defaultDistribution | enum | Default distribution shape applied to estimate bounds when no distribution is explicitly specified. | "uniform" | ||
| completePercentage | number | Lowest percentage of completed work items before the simulation is recorded as complete. Allows earl... | 100.0 | ||
| activePositionsCompletePercentage | number | When active cards on the board fall below this percentage AND completePercentage is satisfied, the s... | 0.0 | ||
| pullOrder | enum | Controls how items are selected and processed when multiple items could move in the same interval. | afterOrdering | ||
| basePath | string | Base file path for resolving external references (distribution data files, includes). | "" | ||
| cycles | integer | Yes | Number of Monte Carlo simulation cycles to execute. | 1000 | |
| rawResults | boolean | "true" returns individual result data per cycle. "false" (default) returns only aggregate statistics... | false | ||
| cycles | integer | Number of Monte Carlo cycles per sensitivity test. | 1000 | ||
| estimateMultiplier | number | Factor applied to estimate bounds during sensitivity tests (e.g. 1.2 = +20%). | 1.2 | ||
| occurrenceMultiplier | number | Factor applied to occurrence rate bounds during sensitivity tests. | 1.2 | ||
| iterationMultiplier | number | Factor applied to iteration velocity bounds during sensitivity tests (Scrum only). | 1.0 | ||
| sensitivityType | string | Type of sensitivity analysis to run. | "oneFactor" | ||
| sortOrder | string | How sensitivity results are sorted in output. | "ascending" | ||
| cycles | integer | Number of Monte Carlo cycles per staffing test. | 1000 | ||
| count | integer | Number of staff increments to test per column. | 1 | ||
| optimizeForLowest | boolean | When true, finds the staffing allocation that minimizes time. When false, maximizes throughput. | true | ||
| type | enum | Voting algorithm to use. | "borda" | ||
| type | enum | Backlog specification type. "simple" creates identical items from a count. "custom" uses explicit de... | simple | ||
| simpleCount | integer | Number of backlog items when type="simple". | 100 | ||
| nameFormat | string | Format string for work item names. Placeholders: {0}=sequential index, {1}=custom name, {2}=custom o... | "Story {0}" | ||
| shuffle | boolean | Whether the backlog is initially randomized for entries sharing the same order value. Set "false" to... | true | ||
| name | string | Yes | Unique name for this deliverable. Used as a reference in prerequisites and deliverable filters, and ... | — | |
| dueDate | date | Due date used for ordering work start alongside other deliverables with the same priority order. For... | "" | ||
| skipPercentage | number | Percentage of simulation runs where this entire deliverable is omitted from the initial backlog (mod... | 0.0 | ||
| order | integer | Sort order determining when this deliverable is started relative to others. Lowest value is started ... | int.MaxValue | ||
| preRequisiteDeliverables | string | Pipe-separated list of deliverable names that must fully complete before any items in this deliverab... | "" | ||
| earliestStartDate | date | Earliest simulation date at which items from this deliverable may be pulled from the backlog. Format... | — | ||
| name | string | Name identifying this custom backlog type. Used as a reference in event targeting and displayed via ... | "" | ||
| count | integer | Number of items generated from this entry and added to the backlog. | 1 | ||
| completed | boolean | If true, these items are considered already completed at simulation start. Used for "forecast from c... | false | ||
| estimateLowBound | number | Lowest story point estimate for these items (Scrum only). | 0 | ||
| estimateHighBound | number | Highest story point estimate for these items (Scrum only). | 0 | ||
| estimateDistribution | string | Named distribution for story point estimates (Scrum only). Must reference a distribution defined in ... | "" | ||
| classOfService | string | Class of service name assigned to these items. Must reference a class of service defined in <classOf... | "" | ||
| dueDate | date | Due date for priority ordering alongside items with the same sort order. | "" | ||
| percentageLowBound | number | Lowest percentage of column cycle-time range used for these items (Kanban only). 0 = column low boun... | 0 | ||
| percentageHighBound | number | Highest percentage of column cycle-time range used for these items (Kanban only). | 100 | ||
| order | integer | Sort order determining when these items are started. Lowest value started first. Omitting defaults t... | int.MaxValue | ||
| valueLowBound | number | Lowest random business value amount assigned to these items. Used for cost-of-delay and ROI analysis... | 0 | ||
| valueHighBound | number | Highest random business value amount assigned to these items. | 0 | ||
| initialColumn | integer | Column id where these items start (Kanban only). Items skip all columns before this one. Default -1 ... | -1 | ||
| id | integer | Yes | Column id to override default estimate values for (Kanban only). | — | |
| estimateLowBound | number | Lowest cycle-time value for this column for these item types (Kanban only). | 0 | ||
| estimateHighBound | number | Highest cycle-time value for this column for these item types (Kanban only). | 0 | ||
| estimateDistribution | string | Named distribution for cycle-time estimates for this column (Kanban only). | "" | ||
| skipPercentage | number | How often items of this type skip this column (0–100). Default 0. (Kanban only) | 0 | ||
| id | integer | Yes | Unique column id number. Referenced by defects, blocking events, phase overrides, and custom item ov... | — | |
| displayWidth | integer | Width of this column in the visual simulation board. Default 1. | 1 | ||
| estimateLowBound | number | Lowest cycle-time value (number of intervals) for work in this column (Kanban only). | 0 | ||
| estimateHighBound | number | Highest cycle-time value (number of intervals) for work in this column (Kanban only). | 0 | ||
| estimateDistribution | string | Named distribution for cycle-time estimates in this column (Kanban only). Must reference a distribut... | "" | ||
| wipLimit | integer | Yes | Maximum number of items allowed in this column simultaneously (Kanban only). Set to 0 for unlimited. | 0 | |
| skipPercentage | number | Percentage of items that skip this column entirely (0–100). Default is 0. | 0 | ||
| buffer | boolean | If true, this is a buffer/queue column. Work entering is immediately flagged as complete for this co... | false | ||
| replenishInterval | integer | Number of simulation intervals that must pass before new work can enter this column. Default is 1 (e... | 1 | ||
| completeInterval | integer | Number of simulation intervals that must pass before completed work can exit this column. Default is... | 1 | ||
| storyPointsPerIterationLowBound | number | Lowest story points delivered per iteration (Scrum only). | 0 | ||
| storyPointsPerIterationHighBound | number | Highest story points delivered per iteration (Scrum only). | 0 | ||
| storyPointsPerIterationDistribution | string | Named distribution for iteration velocity (Scrum only). Must reference a distribution in <distributi... | "" | ||
| itemsPerIterationLowBound | number | Lowest number of items completed per iteration. Alternative to story points for throughput-based Scr... | 0 | ||
| itemsPerIterationHighBound | number | Highest number of items completed per iteration. Alternative to story points. | 0 | ||
| itemsPerIterationDistribution | string | Named distribution for throughput-based iteration velocity. Must reference a distribution in <distri... | "" | ||
| allowedToOverAllocate | boolean | Whether the sprint can allocate stories beyond the iteration target. When false, stories larger than... | true | ||
| columnId | integer | Column id where items are counted toward the occurrence rate and where defect items originate (Kanba... | -1 | ||
| occurrenceType | enum | Yes | Measurement unit for occurrence rates. "count"/"cards"/"stories" = absolute item count trigger. "siz... | count | |
| occurrenceLowBound | number | Yes | Lowest occurrence rate value in units specified by occurrenceType. | 5 | |
| occurrenceHighBound | number | Yes | Highest occurrence rate value in units specified by occurrenceType. | 10 | |
| occurrenceDistribution | string | Named distribution for occurrence rate (instead of low/high bounds). Must reference a distribution i... | "" | ||
| startsInColumnId | integer | Column id where defect items start their journey (Kanban only). -1 = backlog (default). | -1 | ||
| count | integer | Number of defect items added each time this event triggers. Default 1. | 1 | ||
| classOfService | string | Class of service assigned to newly created defect items. Blank = same class as the triggering card. | "" | ||
| estimateLowBound | number | Lowest story point estimate for defect items (Scrum only). | 0 | ||
| estimateHighBound | number | Highest story point estimate for defect items (Scrum only). | 0 | ||
| estimateDistribution | string | Named distribution for defect story point estimates (Scrum only). | "" | ||
| isCardMove | boolean | If true, the triggering card is moved back to the defect start column rather than creating a new def... | false | ||
| phases | string | Pipe-separated phase names where this defect event is active. Blank = active in all phases. | "" | ||
| targetCustomBacklog | string | Only items of this custom backlog type are counted toward the trigger. Blank = all item types. | "" | ||
| targetDeliverable | string | Only items in this deliverable are counted toward the trigger. Blank = all deliverables. | "" | ||
| columnId | integer | Yes | Column id to apply the defect estimate override (Kanban only). | — | |
| estimateLowBound | number | Lowest cycle-time for defects in this column. | 0 | ||
| estimateHighBound | number | Highest cycle-time for defects in this column. | 0 | ||
| estimateDistribution | string | Named distribution for defect cycle-time in this column. | "" | ||
| columnId | integer | Column id where items are counted toward occurrence and where blocking takes effect (Kanban only). -... | -1 | ||
| occurrenceType | enum | Yes | Measurement unit for occurrence rates. | count | |
| occurrenceLowBound | number | Yes | Lowest occurrence rate value. | 5 | |
| occurrenceHighBound | number | Yes | Highest occurrence rate value. | 10 | |
| occurrenceDistribution | string | Named distribution for occurrence rate. | "" | ||
| estimateLowBound | number | Yes | Lowest blocking duration estimate (intervals for Kanban, points for Scrum). | 0 | |
| estimateHighBound | number | Yes | Highest blocking duration estimate. | 0 | |
| estimateDistribution | string | Named distribution for blocking duration. | "" | ||
| phases | string | Pipe-separated phase names where this event is active. Blank = all phases. | "" | ||
| blockWork | boolean | Whether regular work items can be blocked by this event. | true | ||
| blockDefects | boolean | Whether defect items can be blocked by this event. | false | ||
| blockAddedScope | boolean | Whether added-scope items can be blocked by this event. | false | ||
| targetCustomBacklog | string | Only items of this custom backlog type can be blocked. Blank = all types. | "" | ||
| targetDeliverable | string | Only items in this deliverable can be blocked. Blank = all deliverables. | "" | ||
| occurrenceType | enum | Yes | Measurement unit for occurrence rates. | count | |
| occurrenceLowBound | number | Yes | Lowest occurrence rate value. | 5 | |
| occurrenceHighBound | number | Yes | Highest occurrence rate value. | 10 | |
| occurrenceDistribution | string | Named distribution for occurrence rate. | "" | ||
| estimateLowBound | number | Lowest story point estimate for added scope items (Scrum only). | 0 | ||
| estimateHighBound | number | Highest story point estimate for added scope items (Scrum only). | 0 | ||
| estimateDistribution | string | Named distribution for added scope story point estimates (Scrum only). | "" | ||
| count | integer | Number of items added to the backlog each time this event triggers. Default 1. | 1 | ||
| phases | string | Pipe-separated phase names where this event is active. Blank = all phases. | "" | ||
| classOfService | string | Class of service for newly created items. Blank = same as triggering card. | "" | ||
| customBacklog | string | Custom backlog type for newly created items. Blank = same as triggering card. | "" | ||
| deliverable | string | Deliverable for newly created items. Blank = same as triggering card. | "" | ||
| targetCustomBacklog | string | Only items of this custom backlog type count as triggers. Blank = all. | "" | ||
| targetDeliverable | string | Only items in this deliverable count as triggers. Blank = all. | "" | ||
| startDate | date | Yes | First calendar day the project starts. Format per <execute dateFormat=...>. | — | |
| intervalsToOneDay | integer | Number of simulation steps per calendar day. Use 8 for hourly intervals in an 8-hour workday. | 1 | ||
| workDays | string | Comma-separated working days of the week. Non-work days are skipped in date calculations. | "monday,tuesday,wednesday,thursday,friday" | ||
| costPerDay | currency | Monetary amount per working day used for total cost computation. | 0 | ||
| workDaysPerIteration | integer | Number of work days per iteration (Scrum only). Used to map iterations to calendar dates. | 10 | ||
| targetDate | date | Target completion date for cost-of-delay analysis. Format per <execute dateFormat=...>. | — | ||
| targetLikelihood | number | Desired probability (0–100) for the forecast date to meet the target. | 85 | ||
| revenue | currency | Expected revenue per revenueUnit once the target date is reached. Used for cost-of-delay calculation... | 0 | ||
| revenueUnit | enum | Time period for the revenue attribute. | month | ||
| date | date | Yes | Calendar date to exclude. Format per <execute dateFormat=...>. | — | |
| date | date | Yes | Calendar date of this actual measurement. Format per <execute dateFormat=...>. | — | |
| count | number | Yes | Cumulative number of completed items as of the specified date. | 0 | |
| annotation | string | Text annotation displayed on charts at this data point. | "" | ||
| name | string | Yes | Unique name for this distribution. Referenced by *Distribution attributes elsewhere. | — | |
| shape | string | Yes | Distribution shape. 25+ built-in types including: uniform, weibull, normal, lognormal, triangular, b... | — | |
| parameters | string | Comma-separated distribution parameters. Meaning depends on shape (e.g. alpha,beta for Weibull). | — | ||
| numberType | enum | Type of number returned by the distribution. | — | ||
| generator | enum | Underlying uniform random number generator algorithm. | alf | ||
| count | integer | Count of random numbers to pre-generate. Default 1000. | 1000 | ||
| lowBound | number | Lowest allowed value. Values below are clipped or stretched. | — | ||
| highBound | number | Highest allowed value. Values above are clipped or stretched. | — | ||
| boundProcessing | enum | How out-of-bound values are handled. "clip" truncates at bounds, "stretch" rescales. | clip | ||
| location | number | Starting point (offset) on the X-axis for the distribution. | — | ||
| multiplier | number | Multiplier applied to all generated values. Default 1.0. | 1.0 | ||
| separatorCharacter | string | Entry separator character for sample-data distributions. | — | ||
| zeroHandling | enum | How zero values in sample data are processed. | keep | ||
| zeroValue | number | Replacement value when zeroHandling="value". | — | ||
| path | string | File path for external distribution data. | — | ||
| decimalSeparator | string | Decimal separator character in sample data. | — | ||
| thousandsSeparator | string | Thousands separator character in sample data. | — | ||
| unit | enum | Unit system for phase start/end values. "percentage" = % of backlog items pulled, "interval" = simul... | percentage | ||
| start | number | Yes | Lowest trigger value to activate this phase (in units defined by parent <phases unit=...>). | 0 | |
| end | number | Yes | Highest trigger value — phase deactivates above this value. | 0 | |
| estimateMultiplier | number | Multiplier applied to all cycle-time estimates while this phase is active. >1 = slower, <1 = faster. | 1.0 | ||
| occurrenceMultiplier | number | Multiplier applied to defect and blocking event occurrence rates while active. | 1.0 | ||
| iterationMultiplier | number | Multiplier applied to iteration velocity (Scrum only). <1 = reduced velocity. | 1.0 | ||
| costPerDay | currency | Cost per day override while this phase is active. Overrides the global forecastDate costPerDay. | 0 | ||
| id | integer | Yes | Column id to override WIP limit for (Kanban only). | — | |
| wipLimit | integer | Yes | WIP limit override when this phase is active. | 0 | |
| order | integer | Work priority order. Lowest order = highest priority (pulled first). Used in the multi-key sort: del... | 1 | ||
| default | boolean | Whether this is the default class of service applied to items without an explicit assignment. | false | ||
| violateWIP | boolean | When true, items of this class can enter a column even when it is at WIP limit. The lowest-priority ... | false | ||
| skipPercentage | number | Percentage of items in this class that are automatically completed without entering the board (0–100... | 0 | ||
| maximumAllowedOnBoard | integer | Maximum number of active items of this class allowed on the board simultaneously. | int.MaxValue | ||
| id | integer | Yes | Column id to override (Kanban only). | — | |
| estimateLowBound | number | Lowest cycle-time for this COS in this column. | 0 | ||
| estimateHighBound | number | Highest cycle-time for this COS in this column. | 0 | ||
| estimateDistribution | string | Named distribution for COS cycle-time in this column. | "" | ||
| skipPercentage | number | How often items of this COS skip this column (0–100). | 0 |
Enumeration Reference
SimulationType
Determines whether the simulation uses Kanban flow or Scrum iteration mechanics.
kanbanscrumBacklogType
Simple creates N identical items. Custom uses deliverables and typed entries.
simplecustomOccurrenceType
Unit of measure for event occurrence rates. 'count'/'cards'/'stories' are equivalent count-based triggers. 'size'/'points' use story points (Scrum). 'percentage' is a per-interval probability.
countcardsstoriessizepointspercentagePullOrder
Controls how items are selected for processing. 'afterOrdering' randomizes items that share the same priority. 'fifoStrict' prevents out-of-order completion.
afterOrderingrandomindexfifofifoStrictAggregationValue
Statistical method for summarizing Monte Carlo results into a single forecast.
averagemedianfifthtwentyfifthseventyfifthninetyfifthPhaseUnit
Unit system for phase start/end trigger values.
percentageintervaliterationShufflePositions
Controls backlog randomization. 'afterOrdering' shuffles within same-priority groups.
afterOrderingtruefalseFIFOFIFOStrictBoundProcessing
How distribution values outside bounds are handled. 'clip' truncates, 'stretch' rescales.
clipstretchZeroHandling
How zero values in sample data are processed. 'value' replaces them with zeroValue.
keepremovevalueRevenueUnit
Time period for the revenue attribute in cost-of-delay calculations.
dayweekmonthyear