Customer-Centric Product Planning
All product changes are initially discussed at a high level based on customer feedback, product usage statistics, and product roadmap. Larger changes are handled with additional caution, often undergoing a soft launch where the code is isolated and only exposed to a small fraction of customers.
After a high level assessment, the product change is formed as a user-centric “story”. After a user story is created, the story is broken down to implementation tasks. The story is the domain of a single engineer, however tasks requiring domain knowledge may be assigned to other team members. The story is estimated and then assigned a priority.
Rapid Product Development
The story then enters development. Internal code standards ensure consistency and readability so that the code, configuration, or system changes are easily switched off between team members. A suite of unit tests are run after every change to the product, making sure that any negative change to the system is flagged immediately.
Enterprise Grade Quality Assurance
Once it is code complete, the story enters quality assurance. It is judged against the acceptance criteria developed during planning and additional criteria added over the development cycle. It is tested in a separate, yet functionally duplicate environment, ensuring that issues with system design and configuration are exposed. All changes related to the database are performed in this testing environment. Database changes are completed using a migration system, tracking each modification to data and schema.
After the QA process is complete, the product changes associated with the story undergo review by the rest of the engineering team. Topics of the review include adherence to standards, architectural review, logical review, security review, and ensuring automated tests have been written for the product changes. Testing is a requirement for any change, unit and/or functional, depending on the scope of the product change.
Once it has completed review, the change is merged into the trunk code branch. Near the end of a release cycle, a release branch is created. This undergoes additional testing, including manual QA and a suite of automated functional tests, as well as testing database changes in an aggregate form. After this final round of testing, the release is ready to deploy to customers.
Once product changes have made their way from planning, development, and QA, they are automatically deployed to your users without any work required from you! When deploying product changes, a full database backup is made, the migrations are performed, and the updated software is deployed – adding an additional layer of security to the automatic upgrade process. Major new product changes always include user-facing feature training so your users will instantly be trained on any new product features!