The Sprend tech stack
Welcome to the Sprend.com development team! This document outlines our current technology stack and future aspirations to help you get up to speed quickly.
Backend
Sprend.com is built as a monolithic Java-based web application. We prioritize simplicity and maintainability, opting for a unified codebase over a distributed microservices architecture.
Language: Primarily Java, with new development and ongoing refactoring transitioning to Kotlin. This move is driven by Kotlin's modern features and enhanced developer experience.
Framework: We use Spring for our backend development, providing a robust and comprehensive framework for building enterprise-grade applications. However, we are not overusing it, particularly not when Spring pushes the architecture away from object-orientation.
Server: The application runs on Tomcat instances, with an Apache server handling traffic forwarding. This setup allows for deployments of WAR files with minimal downtime, ensuring continuous service even during updates.
Database: Our primary data store is MariaDB, which runs on the same physical server. We maintain a thin data access layer in our code, aiming to keep it close to standard SQL for clarity and direct control over data access. We are also incorporating NoSQL patterns where they demonstrably reduce development costs and complexity.
Frontend
Our frontend is designed for directness and performance.
Language: The entire frontend is written in vanilla JavaScript. We appreciate its simplicity and direct control over the browser environment.
UI Framework: We currently do not use any dedicated UI frameworks. However, I think Svelte looks promising.
Relax, enjoy the views and have some ice cream. Your files are safe with Sprend.
Infrastructure and operations
Understanding our infrastructure will help you navigate the development environment.
Operating System: Our web application runs on a Debian Linux server.
Server Location: The physical server is located in Stockholm, Sweden.
Deployment: We deploy WAR files directly to our Tomcat instances. Our current setup allows for seamless deployments without interrupting ongoing file transfers.
Hardware: Production runs directly on physical hardware with no virtualisation or containerization.
Load Balancing/Failover: Currently, we do not utilise any dedicated load balancer or failover mechanisms.
Development workflow and tools
We believe in efficient and enjoyable development.
Version Control: We use Git for all our source code management.
IDE: Our preferred Integrated Development Environment is IntelliJ IDEA, offering excellent support for Java and Kotlin development. We rely on IntelliJ's built-in quality tools for code analysis rather than external platforms.
Build Tool: We use Gradle for managing our project builds and dependencies.
CI/CD: TeamCity is our Continuous Integration server.
Testing: We place strong emphasis on testing to ensure code quality and confidence in our changes.
UI & API Testing: We use Cypress for both user interface (UI) and API testing, providing robust end-to-end coverage. Green tests give us the confidence to make changes and refactor the codebase.
Team Communication: We use Trello for task management and Slack for real-time team communication.
Our philosophy
We are committed to a minimalistic approach to our tech stack. We only introduce new tools or technologies when they solve a concrete problem we are facing. Our goal is to ensure that enhancing the codebase is always a pleasant and straightforward experience.
Plans for the future
We are always looking to improve and scale Sprend.com, while staying true to our minimalistic philosophy. Here are some potential directions for our technology stack:
Frontend UI Framework: We are considering adopting a frontend UI framework, such as Svelete, to enhance the developer experience and streamline UI development.
Scalability: We aim to scale across multiple physical servers to enhance performance and reliability as our user base expands.
Native Applications: We plan to expand our reach by developing native iOS and Android mobile applications, as well as potentially native macOS and Windows desktop applications.
Also, take a look at the Sprend way of teamwork and Joining the team.