EPA hints and tips


Back to the main EPA page

These are the top tips from a usability study carried out on the EPA toolbox:

  1. Start simple: Use only a few Component Types and Connection Types, then add detail later.
  2. Start concrete: Choose a few different architectures, model them, then build a schema that represents them, rather than aiming to represent all potentially realisable architectures from the start.
  3. Iterate: Once you’ve built or changed a schema, try synthesising. If any unrealisable architectures are produced, go back and modify it; if you get “No solutions”, build a model of an architecture that the schema should allow and check it against the constraints. Don’t expect to build it right first time.
  4. Components vs component types: Use component types, connection types and constraints in a schema, but components and connections in an architecture.
  5. Arrows should be coloured: When you draw an arrow between two elements in the schema or in an architecture, it should become coloured to show that EPA has recognised it as valid – if it stays black, something’s wrong.
  6. Direct Connection Constraints (DCCs) are needed to allow connections: They specify which component types can be connected by a given type of connection. If there is no DCC between two component types, they can’t be connected.
  7. Alternative components: If you want to specify that there are several subtypes of a component (e.g. multiple colours), you can use an abstract component type to represent the “supertype” (e.g. “Cover”), setting the embedded Component Number Constraint to the actual number (e.g. 1..1 for “exactly 1 cover”). Then make concrete Component Types for the different options (e.g. “Red cover”, “Blue cover”) and set all of their CNCs to between 0 and the actual number (e.g. 0..1).
  8. Components and connections on a path: If you’re using an Indirect Connection Constraint to define paths between components, you can specify that each path must contain specific numbers of components of a particular type and connections of a particular type. Link each type to the “Via” port on the right-hand edge of the ICC icon and specify the numbers in the constraint’s properties.
  9. Choosing search depths: As a rule of thumb, if you’re synthesising from scratch, use a maximum search depth for “Adding connections” of twice the number of components in the starting point with “Depth-first search”. For “Adding components”, remember that the maximum depth is in addition to the number of components in the starting point; also try using “Breadth-first search” to find architectures more quickly.
  10. Zero ranges in constraints: As well as specifying positive ranges in constraints, you can specify a range of 0..0 – meaning exactly zero! This is most useful in Indirect Connection Constraints, where it allows you to ensure components are isolated from each other.