Engineering
How we build and run software
We don't hand over a zip file and wish you luck. We build your software, and we run it ourselves: on our own platform, with the same pipeline, checks and monitoring for every customer.
In short
What that means for you
Your data stays in Europe
Our own Kubernetes and virtualisation clusters run at Hetzner in Falkenstein, Germany and Helsinki, Finland. Everything falls under the GDPR.
Every change is checked
Every change goes through a merge request, code review by a developer and automatic tests and security scans, before it reaches production.
Updates without downtime
New versions roll out next to the old ones. Traffic only moves over once the new version is healthy.
We notice problems first
Grafana, New Relic and Sentry watch the platform and the applications, so we usually know about an error before you do.
The platform
We run our own Kubernetes and virtualisation clusters, with nodes in two locations: Falkenstein in Germany and Helsinki in Finland. On top of that we run the services most applications need, set up to keep working when a server fails: MySQL clusters, Ceph and S3 storage, load balancers and automatic incremental backups and snapshots.
Application data is backed up every day. Backups are encrypted, kept for at least two weeks and stored in a separate location, at DigitalOcean Spaces in Amsterdam or Frankfurt.
From idea to production
How a change reaches production
Merge request
Every change starts as a merge request in our own GitLab. Nothing goes straight to production.
Code review
Another developer reviews the change. AI can help write code, but a person decides whether it gets merged.
Automatic checks
The pipeline builds the application, runs the tests, scans the code and the container image for known vulnerabilities, and stops if anything fails.
Acceptance
The change goes to an acceptance environment with test data, where you can try it before it goes live.
Production
A rolling update without downtime, with HTTPS certificates that renew themselves. Then we keep an eye on errors and performance.
Separate environments, separate data
Most applications have a development, test, acceptance and production environment. Only production contains real data; the other environments use test data. All code lives in our own GitLab server, so we always know who changed what, and why.
Read the full walkthrough of our pipeline, or our information security policy.
Technologies
What we work with
Taken from our projects: every technology here is used in at least one of them. Open one to see where.
Laravel9 cases
- Alliander Making grid data visible for engineers
- Nationale Zorgreserve Ready for the next healthcare crisis
- Circuit Zandvoort Keeping track of every decibel
- Just Eat Takeaway Onboarding restaurants without the paperwork
- Just Eat Takeaway.com Driver recruitment website and application flow
- Minimax Created a custom CRM-platform integrated with an iPad app
- Victron Energy In complete control of your energy, anywhere
- Just Eat Takeaway Matchmaking scoober recruitment platform
- ZorgSelect The largest online healthcare vacancy platform in Eastern Netherlands
Vue9 cases
- Alliander Making grid data visible for engineers
- Nationale Zorgreserve Ready for the next healthcare crisis
- Circuit Zandvoort Keeping track of every decibel
- Victron Energy An AI assistant for energy systems you can trust
- Just Eat Takeaway Onboarding restaurants without the paperwork
- Just Eat Takeaway.com Driver recruitment website and application flow
- Victron Energy In complete control of your energy, anywhere
- Just Eat Takeaway Matchmaking scoober recruitment platform
- ZorgSelect The largest online healthcare vacancy platform in Eastern Netherlands
Kubernetes5 cases
Adyen1 case
Highcharts1 case
Hypernode1 case
InfluxDB1 case
Laravel Nova1 case
OpenShift1 case
OR_Tools1 case
Salesforce API1 case
Want to see how this would work for your application?
We're happy to walk your team through the platform and the pipeline. Usually that's a good start for the conversation about hosting and SLAs.