Our team finds the best technology stack depending on the needs of the project. Here you can find our preferable technologies, technologies we plan to use in the near future, and those we have used before.
Java platform remains our favorite choice for business projects.
The core of the application is Spring Framework, that serves as a Dependency Injection Container and allows us to use other Spring modules. We also used Google Guice a few times for small projects and prototypes.
We used JPA providers (both Hibernate and EclipseLink) to access RDB for several years. It is a mainstream solution with its own advantages and disadvantages. As an alternative, Jooq library implements SQL DSL in Java and generates models based on DB schema. It allows us to make safe and powerful queries without the need for any magic on our part. This is our preferred approach these days.
We use Liquibase to manage the database structure. Our favorite database is PostgreSQL.
Some projects require NoSQL solutions. We have experience with Mongo, Cassandra and Elastic Stack.
We use Spring Security for authorization, authentication, and integration with third-party auth sources like OAuth, OpenID, etc.
Spring MVC is our choice for REST API. Together with Jackson, it provides a simple and effective tool for JSON-based REST API implementation. However, we are currently looking at GraphQL and planning to try it as an alternative to REST.
As a web framework, we like Wicket and Thymeleaf. A lot of frameworks we have experience with are now obsolete – Struts and JSP are among them.
In addition to the Java platform, we develop servers on GoLang when a high level of concurrency is required.
In the past, the majority of our projects were executed with ES5. Current projects are developed using ES6 or TypeScript. TypeScript provides a static type system and allows us to write safer applications.
Auto-tests of the client code allow us to test applications in different environments. We do this after every commit. Our QA engineers prefer WebdriverIO and Selenium.
Game development technology stack
We develop games using Unity3d and C#.
However, most of our games have a client part as well as a server. For real-time multi-user games, we use Golang to implement servers, as it allows us to implement high concurrency software in a simple and natural way.
For single player games, servers are developed using the same technology stack as for business applications (see above).
As there is no technical difference between games and business systems, we can use Unity3d to develop any cross-platform clients. In particular, we can use it to develop a mobile application that works on Android, IOS and Windows platforms.
We use GitLab to store our sources and as the CI server. GitLab pipelines based on Docker containers are used to build, test and deploy applications. Our favorite application server is Tomcat. Mostly we use dedicated services and Amazon AWS for deployment. We like clouds and have experience with Amazon cloud services, Digital Ocean, City Cloud, OpenStack, Microsoft Azure and others. Monitoring of the applications and servers is performed by Zabbix.
Other available technologies
Technologies we HAVE NOT YET USED but would be glad to start.
These are some technologies we’d be happy to try:
- GraphQL (looks like a good alternative to REST)
- Elixir (human-friendly way to achieve the same goals as Erlang)
- Kotlin (looks like a better Java, allows having the client and server in the same language)
- Kubernetes (looks like a good addition to Docker/compose for better DevOps)
- Rust (interesting language for built-in or high-loaded systems)
- Tarantool (very fast in-memory data store that allows transactions)
Technologies we HAVE used before.
These are technologies we have used in previous projects:
- Eclipse RCP
- C# and Windows Forms
- Share Points
- Lotus Notes
- Google App Engine
- Microsoft Azure
- Android Studio