At SFL we collaborate with many different companies which include both big enterprises with hundreds of employees and small startups with only a small team of 2-3 founders. As such the projects themselves also vary greatly in size and technical requirements. Based on the type of the project we’re working on, the choice of Backend technology may vary greatly.
For small startups or idea validation projects that have to be iterated quickly we mainly lean towards flexibility and speed of development, while in mid to large scale projects we stick to solutions which have proven themselves and provide better maintainability in the long run. The main technology stack for mid to large scale projects at SFL is Java. We encourage the use of modern frameworks and libraries in our projects and always allocate time for the maintenance of legacy code to bring it in line with the current requirements. We are also always searching for ways to improve by evaluating new technology stacks, frameworks and more. We’ve adopted the microservice architecture which enables us to pick the best technology for each of the microservices, we do use NodeJs and Python alongside Java, Kotlin and Scala.
We highly emphasize the role of automation in the company. All routine tasks and processes are considered for automation via CI or similar approaches. This both speeds up delivery and minimizes the human factor. In all our projects we have CI/CD setup, automated code analysis for bugs and vulnerabilities integrated with code repositories and the product management toolset.
Ultimately, the most important link of the whole software engineering process are the engineers themselves. We strive to enable our engineers to learn as much as possible via on-site presentations of different technologies by people who have expertise in the field, participation in both local and international conferences, trainings and many other activities. Another vital factor in our day-to-day work is communication between team members, including but not limited to peer code review and discussions that take place during it and the fact that critical technical decisions are taken in meetings with the participation of the whole development team of the project.