Sprend.com Tech Stack Overview

Welcome to the Sprend.com development team! This document outlines our current technology stack, development practices, 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 leverage Spring for our backend development, providing a robust and comprehensive framework for building enterprise-grade applications.

  • 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're open to 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, such as React or Angular. This keeps our dependency footprint small, allowing for fine-grained control over the user interface.

The Sprend server and the Stockholm City Hall

Relax, enjoy the views and have some ice cream. Your files are safe with Sprend.

Infrastructure & 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 virtualization or containerization (e.g., Docker, Kubernetes).

  • Load Balancing/Failover: Currently, we do not utilize any dedicated load balancer or failover mechanisms.

Development Workflow & 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, such as SonarQube.

  • Build Tool: We use Gradle for managing our project builds and dependencies.

  • CI/CD: TeamCity is our Continuous Integration server. Upon pushing code to the repository, TeamCity automatically triggers builds and runs all tests, including our end-to-end tests.

  • Testing: We have a strong focus 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 React, 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.

Next
Next

Beyond the Code: Thriving as a Developer at Sprend