Dependencies and Constraints
What Are Dependencies?
Dependencies ensure items in your timeline are placed in a logical and consistent order, by specifying items that rely on other items to be completed. This is most commonly associated with Project Management, where such prerequisites are commonplace (e.g. the electrical wiring cannot commence until the house is made watertight), but they can be applied to many different scenarios across project management, fiction, and legal industries. Dependencies can also be shown in item cards.
We use the terms Blocks and Blocked by to designate the relationship between two dependent events: when “Event B” is blocked by “Event A”, this means that Event B cannot start until Event A has finished (see dependency types below for slight variations on this). In this scenario, we also say that “Event A” blocks “Event B”, and when you look at the Item Inspector, you will see lists for both Blocks and Blocked by dependencies.
Importantly, dependencies specify an order of events, but they do not specify an exact timing: when Event B is blocked by Event A, we know that B should follow A, but that does not mean that B should immediately follow A. For more advanced scenarios, including those that specify an exact timing, you should use Constraints instead.
What are Constraints?
Constraints are a more advanced option that provides more flexibility in specifying time-based constraints for items. These include constraints that directly affect the allowed timing of items by tying them to a specific date or offset from another event.
With constraints, the user is able to specify combinations of options, including whether:
- the start or end date of the item is affected;
- the comparison is against a fixed date (e.g. A > 2012), relative to another item (e.g. A > B), or matches only part of a date (e.g. A occurs on a Monday);
- an exact or relational comparison is used (e.g. A=B, A>B, A>=B, A<B, A<=B, etc.);
- an offset should be applied to the calculation (e.g. A = B + 9 months)
Note that this offers more flexibility than Aeon Timeline version 2.x, where this differentiation between simple dependencies and flexible constraints didn’t exist, and all dependencies implied an exact date (i.e. an equals comparison).
To configure dependencies for an item, switch to the Dependencies and Constraints tab in the Inspector, and modify the Blocks and Blocked by lists under the Timeline Dependencies heading.
To make the selected item dependent on another, click on the add icon ( ) alongside the Blocked by list and choose the second item from the ensuing dropdown. Likewise, to make another item depend on the currently selected item, click on the + icon alongside the Blocks list instead.
Make Dependent Shortcut
You can quickly add dependencies between multiple selected events by choosing Make Dependent underneath the Timeline menu.This menu will only be enabled when multiple events are selected.
With two events selected, a new dependency will be created so that the later event is Blocked by the earlier event. If more than two events are selected, a chain of dependencies will be created such that the second event is dependent on the first, the third is dependent on the second, and so on.
Editing Dependency Type
Newly created dependencies will default to the Finish to Start dependency type as this will be appropriate in most circumstances.
To select a different dependency type, click on the down arrow ( ) next to the dependency. This allows you to choose between the following four dependency types:
- Finish to Start: Event B’s start date must be later than or equal to Event A’s end date.
- Finish to Finish: Event B’s end date must be later than or equal to Event A’s end date.
- Start to Start: Event B’s start date must be later than or equal to Event A’s start date.
- Start to Finish: Event B’s end date must be later than or equal to Event A’s start date.
To delete an existing dependency, click on the delete icon ( ) alongside the item in the inspector. Alternatively, you can choose Remove Dependencies from the Item menu to remove all dependencies associated with the selected items.
You can also create constraints in the Dependencies and Constraints tab in the inspector. Under the heading ‘Date Constraints’, click the add icon ( ) to create a new constraint.
There are a number of different configuration options to choose from when creating a constraint for a particular item in your timeline. These are as follows:
You can specify additional offsets for item-based constraints to add additional time between the affected items. This can be used when two events must occur with a fixed interval between them (e.g. a contract expires 12 months after it is initially signed).
Violated Constraints and Dependencies
A dependency or a constraint is violated when the dates of the relevant items do not match the specified criteria. These violations can occur when you first configure a constraint or dependency (if the conditions are not already met when first created), or any time you make a change that affects an item’s dates. How violations are handled depends on whether you choose for constraints to be resolved manually or automatically (see below).
If violations are not resolved automatically, they are collated into the dependency panel that is accessible via the Sidebar. This panel shows all of the items with violated dependencies in a single location. The number of violated dependencies and constraints are shown in a badge on the sidebar icon ( ).
Violated items are also visible on both the Timeline View and Spreadsheet View. The inspector will also highlight any violated dependencies or constraints for the selected item.
You can choose whether Aeon Timeline attempts to automatically resolve violated dependencies and constraints by changing the Automatic Date Adjustment setting in the Settings Modal (see Settings Modal link).
With this value set to Resolve constraints and adjust children, any time a constraint has been violated, Aeon Timeline will attempt to move the affected items until all dependencies and constraints are satisfied once more. Alternatively, any other setting will allow you to manually control how and when violated constraints are resolved.
Constraints will always be resolved by moving dates, never by adjusting durations.
Manual resolution provides you with the most control over how a violation will be resolved. When you notice a violated dependency or constraint, you can resolve it manually by modifying the dates of affected items, or alternatively, modifying or removing the constraint if it should no longer apply. There may be certain violations where it is impossible to satisfy all criteria, such as when dependency loops have been formed (e.g. A < B and B < A).
When there is a violation, a red status icon ( ) will appear next to the constraint. Clicking on the ‘Resolve’ button below the constraint will provide available options to resolve the constraint, including moving an affected item or removing the constraint altogether.
As violations grow in number and complexity, it may become difficult to resolve them all manually, as each item you move may in turn violate another dependency.
The Resolve All button at the top of the Constraints Panel is useful when there are a lot of violations in your timeline, as this will attempt to resolve all constraints at once. This is a semi-manual process as you are able to choose exactly when you want to perform an action, and can immediately undo the action if you do not like the result.
Depending on the volume of constraints and their complexity, this may lead to significant changes to items throughout your timeline. It is better to resolve constraints frequently, as this will lead to fewer changes and make it easier to see which items have been moved.
As described in more detail below under Automatic Live Resolution, a further setting called Dependency and Constraint Adjustment Limits can be used to set any limits on when items can be moved backwards in time. This setting applies to both automatic and manual resolution.
Note: as constraint resolution is a complicated process, there may be certain constraint combinations that the system is unable to resolve, and which you will need to resolve manually.
Automatic Live Resolution
With Automatic Date Adjustment set to include Resolve constraints, the system will attempt to automatically resolve violations created by your actions as soon as they occur. This option is turned on by default in certain templates such as Project Management, but it can be adjusted in the Settings at any time.
Where possible, automatic resolution will always try to retain the most recent change you have made, and instead move other items to satisfy the constraints.
Using the example of A blocks B:
- If A takes than expected and you add another 6 months to A’s duration, B will have its start date adjusted to occur after the new end date for Item A.
- Conversely, if you instead moved B forward to start before A ends, the system would compensate by moving the start date for A backwards in time to allow this change to occur.
In real-world project management situations, it will not be suitable to automatically move items back in time to historic or near-term dates (no matter how much you may sometimes wish you could!) To guard against this, an additional setting is provided in the Settings modal that allows you to determine when items are allowed to be moved backwards in time.
This setting is Dependency and Constraint Adjustment Limits, and can be set to have either no limit (the default value for fiction templates, where anything goes), or to prevent shifting items earlier than today, tomorrow, next week, or next month.
With these values set, you will still be able to manually move items to earlier dates, but the built-in Resolve options will not move an item backwards if its final start date will occur before the limit you have selected.