We refine project requirements together with a client during a business analysis stage. The goal is to prepare clear requirement specification. It can be accompanied by software architecture diagrams like System Components Diagram, Entity Relations Diagram, Class Model Diagram and other. During development we maintain and update all the diagrams together with other technical documentation artefacts like API specification, deployment instructions, etc. This allows clients to get predictable results and also properly maintain the project in the future.
We practice Scrum development process when big project is broken down into smaller chunks called sprints. Sprint usually lasts 1-2 weeks and at the end of the sprint we get new product version with new features implemented according to the sprint plan (backlog). We share and discuss results with a client and plan the next sprint, making requirement adjustments if needed. This allows clients to see constant progress on the project and make quick course adjustments if needed.
We use modern DevOps practices. Continuous integration and deployment allows clients to use new features instantly as they are developed. Automated code quality checks (linting) together with end-to-end tests increase product quality. We integrate automated checks directly into git system, so each code change is automatically tested. Backend apps are built as Docker containers, which allows flexible orchestration using Kubernetes. It allows to achieve highest system uptime and performance.