To ensure the best result and quality of the developed software components like extensions or customizations it is strongly recommended to split the process into stages and perform specific actions by those involved in each stage on the dedicated environments:
- Development: the extension or customization is initially developed on a development system. A development environment is also where all changes to software code are made. The main benefit of such an approach is that this environment allows developers to work freely on the extension, and make any changes to the component in a controlled setting as it has no impact on end-users. In this way, various functions of the software component are designed to work as intended before they are released to users. The development environment serves as a workspace for developers to perform programming and other processes around the component or extension development.
- Testing: once the software developer thinks it is ready, the product is copied to a test environment, to verify it works as expected. This test environment is in close alignment with the target production environment. A test environment is where the quality assurance teams analyze the quality of the software component. This also allows identifying and fixing any issues that may impact the functioning of the application or impair user experience before the final product reaches or affects the end-users. A test environment allows checking how the developed product will behave in a live environment with no impact on end-users.
- Production: when the customer accepts the product, it is ready to be deployed to a production environment, making it available to all users of the system. The production environment is where the finalized and latest versions of the extensions are pushed live to the intended users. This is the final phase of production and the environment where the end-users can see, experience, and interact with the new product. At this stage, no development is possible in the production environment as it should have been completed before this point.
When necessary, all related software component changes must be applied to the corresponding environments and pass through the mentioned above stages.
This type of infrastructure allows fully controlling the quality of the developed components and is helpful for effectively tracking the progress through development, testing, and deployment while ensuring the end-user is provided with the best possible experience.