# Core Concepts
Projects are the highest level at which you can organize your work. Each project has its own dedicated dashboard and access control.
We recommend organizing your testing activity using Projects, e.g., one project per domain tested, or per independent application under test.
A goal is a testing scope within a project (i.e., a testing goal/objective). This can be a module, component, or version of an application to test. Goals help you organize your tests logically.
A goal consists of a descriptive name, a starting URL and a set of optional testing configurations (e.g., screen resolution).
# Goal versions
Each goal's data is independently version-controlled. Each version contains information such as tests and insights, for each individual goal.
# Goal version control lifecycles
Versions provide functionality similar to version control systems such as Git. Like git, once a version has been committed, it cannot be changed (i.e., it is saved permanently in the history).
You can roll back a goal to an older version at any time, or fork the goal from a specific version (e.g., to continue working from that version). Forking a version makes a full copy of the existing version but allows modifications in isolation, preserving the original version.
Tests in Virtuoso take the form of journeys, representing an end-to-end journey that can be executed by a user on the application. They are created using natural language, offering an incredibly intuitive test creation experience.
For each goal and at each version in its history, the tests are structured as follows:
- Steps (or Test Steps): a single action a user can take to interact with the application (e.g., navigating to a page, clicking on a link/button, filling an input) or to make a validation (e.g., checking if a certain element exists, or a certain condition holds).
- Checkpoint: a sequence of instructions for navigation from one state to another in the application.
- Journey: a collection of checkpoints that can be executed on the application under test leading to some application state.
Execution in Virtuoso represents exactly what you would expect: executing an existing set of regression tests against the target application.
During this process, one or more journeys are executed. You can trigger executions individually per journey or plan the execution of a set of journeys using multiple criteria.
Tests are executed in parallel
We know getting test results fast is essential for any testing team, so Virtuoso executes all journeys in parallel. This means that there should be no state dependency between the tests.
You can however configure the maximum level of parallelism (e.g., setting it to 1 would cause them to execute one at a time).