We build products that connect over 2 million people a day
The last couple of years were all about re-designing and re-developing the ROMEO Web experience. We migrated our tools and frameworks to modern standards, creating and maintaining component libraries for a consistent user experience. We created clean, tested, and reliable UI’s to deliver simple, highly performative, and maintainable state-management for millions of users to make online dating even easier and fun.
We’ve just finished catching up with the features of the already existing website, transforming the experience from web to app.
There is a big refresh of the user experience throughout the app coming up and with that in mind we have tentative plans to phase in SwiftUI and Combine. Like many companies we have a fair bit of Objective-C code that we maintain but we use Swift 5 for all new code.
In our team we have worked hard to keep our tech stack up-to-date and in line with industry standards.
Most of our code is now written in Kotlin, using MVP/MVVM/RxJava/Retrofit + dagger for DI and plenty of tests. We use Gitlab pipelines for our CI and to automate our release process (e.g. fastlane for connecting to playstore).
We are constantly optimising and refactoring our code and have massively improved our app start time and maintained a crash-free rate above 99.9%. Our team is focused on writing clean code, discusses and plans architecture carefully together and we also have days allocated to work on personal projects to innovate and try new ideas.
752455 Lines of Code
249000 Concurrent Users
PHP has been the core of our code since we started in 2002. We have developed our own PHP framework, which uses well-defined and easy to refactor modules, and we are constantly improving it to adapt to our evolving needs. We also use the latest PHP version to benefit the most from the language features.
Additionally, Node.js is the technology that powers up an increasing number of microservices on our backend. We love it for being fast and lightweight.
Using the right patterns to communicate between microservices can help scale our applications and solve most distributed systems problems. We started with direct HTTP calls for all communication, but decided to move to an event-driven system. This system changed the way we thought about interactions between services, forced scalable patterns, and increased our resilience!
Still the foundation of it all, we have tuned our MySQL cluster to serve us reliably and fast. However, we wanted to move beyond the limitations of SQL and have complemented it with services like Redis, Elasticsearch and RabbitMQ.
For the smooth and reliable operation of our server infrastructure, automation is key. To get the most out of automation, we are using the best practice technologies like Forman/Puppet, Ansible, Docker and orchestration solutions. Most of our servers are in the meantime under Foreman/Puppet control.
For the fast and reliable deployment of our code we are using GitLab CI pipelines and an orchestration solution based on Mesos/Marathon. Currently we are exploring Kubernetes as a replacement for our Mesos/Marathon solution.