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.
For our component-driven designed applications, we use Vue 3 with scoped css for styling.
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.