We operate using a service-oriented architecture (SOA). This enables us to have multiple ways for users to consume data and issue commands without fracturing data logic throughout all the apps.
We use a presentation layer for shaping data in the form of APIs for mobile applications/partners or rendering HTML for a customer's browser. This layer is mostly concerned with display logic.
The service layer is responsible for business logic and data persistence.
The data layer is the various database technologies we use to store and query information. The presentation layer never talks directly to our data layer to prevent all the applications from forming their own business rules.
We primarily use PHP 8 as our main server language and Javascript (Typescript) as our front-end language. Our presentation layer makes use of CakePHP, while our service layer makes use of a custom micro-framework.
For our component-driven designed applications, we use Vue 3 with scoped css for styling.
For non-component-driven applications, we use the css pre-processor Sass with a BEM style approach.
We use Github as our primary code repository storage. Engineers create feature branches and open pull requests to our main branch. An Azure Pipeline CI process lints, runs tests, and ensures the build works.
Once the pull request is reviewed by another engineer and all the tests pass, the engineer merges the pull request and then tests in their changes behind a feature flag in production.
Finally, when the engineer is satisfied, the feature flag is opened to allow customers.