We distribute packages internally (thanks to NuGet and npm) with pieces of software, which are ready to use. We design packages to simply maintain and extend shared code. We also provide reverse compatibility. This allows us to upgrade older solutions with new versions of packages and provide new functionalities, better security and optimized performance. All of this just by updating a package.
We have a lot of code that we share between projects, extended framework, as well as our own algorithms, solution patterns, multi-layer design and deployment paths. We share everything that can be re-used internally. During developing we keep high internal standards, documenting the whole process and teaching the team how to use it.
Components provide a complete functionality with full interface and user experience. We can build an application from both sides - backend and frontend. We have our own default template, which allows us to deliver business solutions within days. This can be achieved by using generic forms (automated generation of forms, based on model metadata) and grids with full support for sorting, filtering, ordering, paging and more. Thanks to this we can focus on business logic & business flow.
We created unique path of code from developer to production server. We transformed GIT into powerfull code tool with two-step pull requests with different environments for development and production purposes.
For each project we create fully automated deployments and continoues integrations (thanks to Azure Pipelines and Azure Artifacts). From 2019 we deploy every single one of our solutions in container model - ready for Docker and Kubernetes.