We can develop small-scale monolithic client-server applications as well as complex distributed systems capable of working in 24/7 mode under high load.
When developing business application backends, we prefer using a Java-based technology stack.
We usually use Spring/Spring Boot as the main framework. For projects with special requirements, we may choose another framework, for example, Google Guice.
When working with classical DB storages (like PostgreSQL, MySQL, Oracle, etc), we prefer to use JPA (Hibernate or EclipseLink) or JOOQ for accessing data. JOOQ is more suitable for large-scale projects as it allows more control over complex queries. We use Liquibase or Flyway to manage the database schema.
Some projects require NoSQL solutions, out of which we have experience with Elastic Stack, ClickHouse, Mongo, and Apache Cassandra.
The frontend can be either native or based on web technologies.
To develop the web frontend, we use Typescript or ES6. Our preferred web framework is currently React.js (however, we will be glad to start a project with Vue.js or Angular). When developing products, we follow the mobile-first approach. Of course, they work fine in all modern desktop browsers too.
We also develop native Android applications using Java and Kotlin as well as cross-platform (Android and iOS) mobile applications using React Native and Flutter.
We actively use Docker, Kubernetes, and related tools to pack and deploy our systems. When building distributed applications, we prefer to use AWS cloud solutions.
Besides the standard tools for unit testing, we intensively use Puppeteer for integration testing of web applications, TestRail for test case management, and special tools for load and penetration testing.
We use a Golang-based stack to develop backends of the products with a high level of concurrency (such as communication software or multiplayer real-time games). It appears to be more cost-effective than using Java since Golang provides a lot of special tools for optimizing such kinds of software.
We can create a web-based or native UI as we do for business applications. Creating a web UI project involves using some kind of real-time communication technologies, such as WebSockets.
We can develop a native UI for Android, iOS, or even for Windows, Mac, and Linux. A special kind of high-level concurrency software is massively multiplayer online games. We typically use Unity3D for developing native UI for those.
We pack the result as Docker images which we can install either on a dedicated server or in the cloud.
When building special products like deep learning and data science ones, we choose a Python-based technology stack with industry-standard libraries, such as PyTorch, TensorFlow, and Keras.
Such projects may include image and object recognition technologies, natural language processing, data extractions, data cleansing, or different kinds of predicting systems.
These products are typically packed as RESTful services to become a part of large-scale distributed products.
For game development, we use
Your project may not fit the categories described above. That is why we will carefully investigate its specifics and select technologies that help to meet its needs. In most cases, it will be a combination of the technologies described above. Some projects may require developing new components and involving more technologies.