Technology
Web
For more complex web applications we use the web framework Ruby on Rails. Additionally, we use modern frameworks like Bulma, Bootstrap and React when building frontends depending on the project scope. High accessibility on all kind of devices is important for us. At the beginning of each project we weigh up exactly how the application should be conceptualized. Is classic templating with a monolithic app enough? Do we need smaller services with REST APIs? Or does it even make sense to use React and headless Rails? For small services that don’t need the full list of features Rails is offering, we use Sinatra. No matter which solution it will be in the end, coverage through automated testing by Rspec is a clear priority for us.
We use PostgreSQL for storing complex data and SQLite for simple cases. For job queuing, Sidekiq is our first choice.
Jamstack
When creating more simple presentation websites with or without CMS we follow the jamstack idea. We use jekyll together with Netlify CMS JS and webpacker. The page is hosted via the Gitlab Pages and CMS records get commit as markdown files via Netlify. Through the Gitlab pipeline new content is rendered and commited. There is no backend needed which makes this small projects easy to maintain and to hand over.
Deployment
Our self-hosted services are running on Ubuntu Linux VPS servers. We use Ansible to deploy custom configs, services helping our work process and our builded web applications. This applications are containerized in Docker style and running with Podman and Systemd. Via Gitlab pipelines we are building new Docker images and using the Gitlab Registry to organize them.
For our productive applications errors are monitored via Sentry and uptime via Cabot.
Beyond web development
We are also have experience and fun of building Android Apps, Java and Python applications and making GIS analysis.
Development process
When beginning a new project we first go through a concentrated conception phase. With user stories we isolate the most important features the minimal version of the app needs and collect ideas for optional and comfort features. Taking enough time to develop a suitable concept and architecture without over-engineering is important to us. Entity–relationship, component and architecture diagrams help us documenting our ideas before we start with the project.
Our working cycles are influences by agile concepts like Scrum. Since code quality and security are most important for us, we use tools like pair programming and code reviews.