A Look Inside Stayforlong with Carlos, Engineering Manager

In the dynamic world of technology, companies are constantly seeking talent that not only possesses hard skills but also seamlessly integrates into the organization’s culture and philosophy. To gain deeper insight into this process, we had the privilege of speaking with Carlos, Engineering Manager at Stayforlong, a leading company in the travel sector. Carlos shared his unique approach to hiring, team development, and technological architecture at Stayforlong.

When hiring, how do you validate technical knowledge (technical interview, technical test, pair programming, etc.)?

What are you most interested in validating? In our selection process, we conduct both soft skills and hard skills tests. After passing an initial filter with our People team, candidates undergo a technical test. If they pass, they move on to a final interview where we ask more theoretical questions about programming and algorithms, and they complete a live coding test in about 45 minutes. Our main interest is in finding the ideal candidate who balances knowledge and problem-solving ability and who also fits with our open and approachable company culture.

What technology stack do you work with, and why did you choose these technologies over others? (Frontend, backend, DB, infra…)

We work with a wide range of technologies: for the frontend, we use React and Next.js. On the backend, we primarily use Golang and PHP, although we plan to migrate everything to Golang because it is a robust language with great performance and is very programmer-friendly. Regarding database tools, we mainly use MySQL, Redis for temporary caches, and Elasticsearch for searches, although our Data department uses other types of databases for processing large volumes.

Do you think it yields better results to have an expert for each technology/scope or transversal people who can work on a bit of everything?

Ideally, I prefer people who are open to working with any technology or scope, although this is not always possible, and some specialization is valuable. In the team I manage, we follow a Feature Owning philosophy, where different scopes of the team are divided among its members. For example, if our team handles price calculation and provider integration, one member will be the reference person for all price calculation-related matters, and another for provider integration. They are responsible for ensuring the smooth functioning of their scopes and participating in decision-making for improvements. However, any team member is capable of working on any of the team’s applications, which helps avoid knowledge silos.

How do you work in terms of architecture? Monoliths, microservices, queue systems… and why?

We try to follow a microservices philosophy, although we are not extremely strict, as a microservice with a monolithic complex can have several advantages: ease of maintenance and deployment, no need to maintain similar code in multiple applications, etc. Different services communicate either directly or through queue systems. The interfaces we use for direct communication are usually HTTP or GRPC, as they have excellent performance. For asynchronous events, we use Kafka queues, although we have previously used others like RabbitMQ or Redis.

How does your infrastructure work? Where do you host your code, databases, etc.?

We have decided to entrust much of this management to a service provider, in this case, AWS, instead of having our own infrastructure, which would require a lot of effort on our part. We currently use Github for code, although we have had previous experiences with Bitbucket.

How and how often do you deploy? Do you use CI/CD? Do you deploy on Fridays?

Our deployment system is continuous. Every feature that is ready and reviewed in a development branch is merged with the master branch and begins deployment. This surprises some of our newer members, who are used to having a staging version before going into production. But in our case, we go directly to production because our development system is quite rigorous, and we trust that if the steps are followed correctly, the code reaching production will be reliable. If something doesn’t go as expected, we have no problem doing a rollback (temporarily reverting to a previous version) or a revert (restoring the master branch code to its previous state).

We indeed have a CI (continuous integration) system where every change uploaded to a development branch undergoes a series of tests to ensure everything works as expected.

Do you work with any type of testing? How important are they in your development process? (Do you use them only manually, rely on TDD, integrate them into CI/CD…)

Yes, we apply the three most common levels of testing: unit tests, integration tests, and end-to-end (e2e) tests, following the classic testing pyramid. We aim to have many unit tests, fewer integration tests, and even fewer e2e tests to keep CI flow execution times from being excessively long and hindering the development process. For us, they are essential. In fact, we have been eliminating the usual practice of manually testing features being developed in our local environments: if you want to test something you’ve done, create a test and run it.

What is the biggest technological challenge you’ve encountered recently, and how have you addressed it? (Performance issues, scalability, database integrity, security…) We had a bottleneck using PHP for certain tasks. Although it is a widespread language with a familiar syntax, its performance is negatively affected when the operation load is very high. Hence, we migrated much of the content to Go. Since then, performance issues have significantly decreased, and by improving the algorithms implemented in each service, we have been able to address the problems we have encountered.

Do you use any tools and/or methodologies to measure the performance of the technical team?

We follow an Agile methodology, planning our sprints and evaluating what went wrong and what went well. Annually, we conduct performance reviews of team members, which help us identify areas for improvement and what each person can do to enhance their performance and impact on the company.

Conclusion: An Attractive Environment for Talented Engineers

In summary, Stayforlong stands out not only for its innovative technological approach but also for its commitment to excellence in hiring, team development, and delivering high-quality products. With a culture of collaboration and an agile approach, the company continues to overcome challenges and advance in a competitive and ever-evolving market.

Related posts

Leave a Reply

Comments (

0

)

Discover more from Tech to be Happy

Subscribe now to keep reading and get access to the full archive.

Continue reading